2010-07-08 42 views
6

Cách định cấu hình git và gitolite để cho phép người dùng cụ thể chỉ thay đổi các tệp nằm trong thư mục cụ thể?gitolite: chỉ cho phép thay đổi các tệp đã chọn

ví dụ: file có nguồn gốc chủ chi nhánh:

/dir1/ 
/dir2/file1 
/dir2/file2 
/dir3/file1 

tài kathrine, cho phép thay đổi chỉ /dir2/file1/dir2/file2

$kathrine: git clone [email protected]:test.git 

kết quả trong:

/dir2/file1 
/dir2/file2 

Có bất kỳ chỉ thị mỗi dir trong gitolite.conf hoặc thế nào tôi sẽ cấu hình git với chi nhánh mới cho người dùng này?

Tôi chỉ không muốn trình thiết kế đồ họa có quyền truy cập vào tệp mã nguồn.

Trả lời

4

2010: Đối với Gitolite 2 (có thể thay đổi cho gitolite 3)

Không (nghĩa là một chi nhánh chuyên dụng với đúng nội dung cần phải được tạo).

Khi author of gitolite himself put it:

Tôi là tác giả của một dự án có tên gitolite mà không một công việc tuyệt vời của kiểm soát truy cập chi nhánh cấp cho nhiều kho git trên một máy chủ trung tâm. Mục tiêu "thị trường" của tôi chính xác là người dùng doanh nghiệp của git.

Cho đến giờ, tôi chưa từng thấy tình huống mà quyền truy cập đọc cần được hạn chế đối với ortions của repo (git không thể thực hiện việc đó).

[cũng sparse checkout có thể giúp đỡ, nhưng nó không phải là dễ dàng nào)

Viết truy cập không thường cần phải được hạn chế, và gitolite thể cho phép bạn hạn chế:

  • cả bởi tên chi nhánh (ví dụ: chỉ dẫn QA có thể đẩy một chuỗi cam kết vào nhánh "QA-done")
  • hoặc theo tên tệp (ví dụ: chỉ nhóm trưởng mới có thể thay đổi Makefile và tệp trong src/very-important-and-critical-module).

Xem phần "security, access control, and auditing", và đây là một ví dụ về ghi truy cập:

Các conf/example.conf file có tất cả các cú pháp chi tiết:

repo foo 
     RW+ = lead_dev # rule 1 
     RW = dev1 dev2 dev3 dev4 # rule 2 

     RW NAME/ = lead_dev # rule 3 
     RW NAME/doc/ = dev1 dev2 # rule 4 
     RW NAME/src/ = dev1 dev2 dev3 dev4 # rule 5 

mỗi tệp tou ched bởi các cam kết được đẩy được kiểm tra đối với những quy tắc.

  • lead_dev có thể đẩy những thay đổi bất kỳ tập tin,
  • dev1/2 có thể đẩy những thay đổi tập tin trong "doc/" và "src/" (nhưng không phải là cấp cao nhất README),
  • và dev3/4 có thể chỉ đẩy các thay đổi vào tệp trong "src/".

đó đang được nói, câu hỏi khó khăn vẫn còn, như OP đặt nó:

làm thế nào để tôi có thể tạo phù thủy chi nhánh mới một số lựa chọn duy nhất tập tin, và xóa các cam kết trước đó, do đó, các nhà thiết kế đồ họa không thể truy cập chúng, và chỉ xem những người được chọn sau khi sao chép?

Nguyên tắc chung:

tạo nhánh 'graph_designer' tại một điểm nào đó trong lịch sử nơi các tập tin không có mặt.

Từ đó, hai sự lựa chọn:

  • hoặc tổ chức lại các cam kết hiện tại của bạn (git rebase --interactive) để có lần đầu tiên một với chỉ dir2 file (và sau đó cam kết ảnh hưởng đến bất kỳ thư mục khác)
  • hoặc, nếu lựa chọn đầu tiên thể hiện quá nhiều công việc (hoặc không thể thực hiện được vì các cam kết đó đã được đẩy và kéo vào các bản repos khác), chỉ cần sao chép và thêm các tệp có liên quan vào nhánh mới đó.
    Điều đó có nghĩa là không có lịch sử quá khứ cho các tệp đó, nhưng chúng có thể không cần lịch sử đó ngay từ đầu.

'graph_designer' sẽ là nhánh duy nhất được phép sao chép và sẽ không chứa bất kỳ lịch sử nào có tệp không được ủy quyền.

+0

Cảm ơn bạn đã trả lời chi tiết này. Vì vậy, làm thế nào để tạo mới phù thủy chi nhánh một số tập tin được lựa chọn duy nhất, và xóa các cam kết trước đó, do đó, các nhà thiết kế đồ họa không thể truy cập chúng, và chỉ xem những người được chọn sau khi sao chép? – takeshin

+0

@takeshin: tạo chi nhánh 'graph_designer'' tại một điểm trong lịch sử nơi không có tệp, ví dụ: bạn có thể sao chép trực tiếp các tệp bên phải và cam kết chúng (nghĩa là: không có lịch sử quá khứ cho các tệp đó , nhưng họ có thể không cần lịch sử đó ngay từ đầu). 'Graph_designer'' sẽ là nhánh duy nhất được phép nhân bản và sẽ không chứa bất kỳ lịch sử nào với các tệp không được ủy quyền. – VonC

+0

Lưu ý rằng điều này không còn hiệu lực đối với gitolite v3 – jan

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