2010-07-02 37 views
7

Tôi đang làm việc trên một dự án Linux được nhúng. Quá trình xây dựng của chúng tôi tạo ra một hình ảnh được chiếu vào một thiết bị. Nhiều tệp của chúng tôi yêu cầu quyền sở hữu gốc để hệ thống hoạt động chính xác. Tôi gặp phải vấn đề khi tôi cố gắng kéo và một số tệp đó đã được sửa đổi - git không thể ghi các tệp đó, vì vậy đã đặt lại cứng và đã thực hiện sudo pull. Sau đó, khi tôi chuyển nhánh, nó nói "không thể hủy liên kết ..." cho tất cả các tệp đó, nhưng nó vẫn chuyển nhánh, sau đó khi tôi cố gắng chuyển về nhánh, nó sẽ không cho tôi vì tôi đã thay đổi cục bộ.Làm thế nào để bạn đối phó với quyền sở hữu tệp trong git?

Vì vậy, tôi không làm điều gì đúng; cách chính xác để đối phó với điều này là gì?

+3

Vì vậy, tôi tò mò - tại sao bạn cần quyền sở hữu gốc trên tệp? Điều gì sẽ phá vỡ mà không có nó? – Amadan

Trả lời

7

Tôi sẽ cấu trúc hệ thống của bạn để các tệp nguồn không quan tâm họ là chủ sở hữu nào. Bạn có thể kiểm tra chúng trong và ngoài git mà không phải lo lắng về những quyền mà họ có hoặc chủ sở hữu là ai (đặc biệt vì "chủ sở hữu" không có ý nghĩa trên tất cả các hệ thống triển khai git có khả năng phân phát).

Khi bạn muốn tạo hình ảnh được nhúng, sao chép mọi thứ vào thư mục mới và thì đặt quyền khi bạn cần.

+1

Điều này thực sự hóa ra là khá dễ thực hiện. Tôi đã tìm root-root rootlist.txt và tạo một kịch bản lệnh chowns các tập tin trong rootlist.txt thành root sau đó gọi script xây dựng sau đó chowns các tập tin trở lại cho người dùng hiện tại. –

+0

Giải pháp trong nhận xét trước của tôi sẽ thất bại nếu tên tệp có ký tự dòng mới; tốt hơn là tạo các tên tập tin được phân tách bằng null. Kể từ khi câu hỏi này, tôi đã chuyển sang sử dụng Buildroot thay vào đó, đó là đẹp hơn nhiều so với thiết lập từ đầu của tôi. –

3

Cách dễ nhất (nếu có thể) sẽ không thực hiện bất kỳ thao tác nào (nhân bản vv) làm gốc, vì điều đó dẫn đến người dùng khác không thể làm việc với tệp.

Phương án thay thế sẽ sử dụng git init --shared để thiết lập quyền chia sẻ (nhóm hoặc tất cả) cho kho lưu trữ, theo sau là git remote add origin http://host/repo.gitgit pull origin master. Mà về cơ bản là một bản sao với các điều khoản ít nghiêm ngặt hơn.

1

Tôi không chắc mình hiểu lý do một số tệp phải là chowne 'd gốc. Trực giác tôi đoán vấn đề của bạn là sự phụ thuộc vào chủ sở hữu, không phải là Git không lưu trữ quyền sở hữu. Những gì bạn có thể làm là chown trong bản dựng của bạn.

5

Để xây dựng dựa trên câu trả lời của Karmastan, các từ kỳ diệu ở đây là "xây dựng tập lệnh".

Tệp trong git không phải giống như phiên bản triển khai. Bạn không triển khai tệp .c - trước tiên bạn biên dịch chúng. Tương tự như vậy một số tập tin cấu hình có thể đi qua một quá trình xây dựng trước khi được triển khai/cài đặt, cũng có.

Các vấn đề liên quan