2009-07-28 10 views
15

Làm cách nào để bạn thiết lập kho lưu trữ git nơi một số người dùng có thể thấy một số phần nhất định của mã nguồn và những người dùng khác có thể thấy tất cả? Tôi đã nhìn thấy rất nhiều hướng dẫn chỉ cho một số người dùng nhất định truy cập, nhưng những người này cho rằng mọi người nên có quyền truy cập đọc. Tôi cũng đã nghe nói về bệnh gitosis, nhưng tôi không chắc nó có hỗ trợ điều này và nó không có bất kỳ cam kết nào trong hơn một năm nên tôi nghĩ nó đã chết.Làm cách nào để thiết lập kho lưu trữ git nơi người dùng khác nhau chỉ có thể thấy một số phần nhất định?

Trả lời

1

Giao thức git gốc không hỗ trợ tính năng này; git giả định ở nhiều nơi mọi người đều có hoàn thành bản sao của tất cả của lịch sử.

Điều đó nói rằng, một tùy chọn có thể là sử dụng git-subtree để tách một phần của kho lưu trữ thành kho lưu trữ tập con của riêng nó và định kỳ hợp nhất lại.

2

Git không hỗ trợ kiểm soát truy cập trên kho lưu trữ. Tuy nhiên, bạn có thể, hãy thực hiện kiểm soát truy cập trên kho lưu trữ chính mình, bằng cách sử dụng hooks, cụ thể hơn là móc update.

11

Tóm tắt: bạn không thể. Git là hệ thống điều khiển phiên bản dựa trên ảnh chụp nhanh (ở mức khái niệm ít nhất), chứ không phải dựa trên hệ thống điều khiển thay đổi. Nó xử lý dự án (kho) với toàn bộ. Lịch sử là một lịch sử của một dự án, không phải là một liên minh của lịch sử một tập tin (nó là nhiều hơn tham gia của lịch sử mỗi tập tin).

Sử dụng móc như update-paranoid móc trong contrib hoặc VREFs cơ chế gitolite, bạn có thể cho phép hoặc cấm truy cập vào kho lưu trữ, bạn có thể cho phép hoặc cấm truy cập vào từng nhánh. Bạn thậm chí có thể cấm bất kỳ cam kết nào thay đổi mọi thứ trong thư mục con được chỉ định. Nhưng dự án luôn được coi là toàn bộ.

Vâng, có một điều bạn có thể làm: tạo ra một thư mục bạn muốn hạn chế quyền truy cập vào vào submodule, và hạn chế quyền truy cập vào kho submodule này.

+0

Git không thay đổi dựa trên ?? – orbfish

+3

Không, không phải. Cam kết đối tượng trỏ đến đối tượng cây đại diện cho ảnh chụp nhanh của trạng thái lưu trữ. Các changeset là sự khác biệt giữa hai cây, hiện tại và cha mẹ cam kết. –

2

Jörg đã chỉ ra rằng bạn có thể sử dụng móc để thực hiện việc này. Chính xác mà móc (s) bạn cần phụ thuộc vào thiết lập của bạn. Nếu bạn muốn các điều khoản trên một repo được đẩy đến, bạn sẽ cần móc update như ông nói. Tuy nhiên, nếu trên repo bạn đang thực sự làm việc (cam kết và hợp nhất), bạn cũng sẽ cần các móc pre-commitpost-merge. Các githooks manpage (Jörg liên quan đến điều này quá) ghi chú rằng có trong thực tế, một kịch bản trong phần contrib chứng minh một cách để làm điều này. Bạn có thể nhận được điều này bằng cách lấy một git tarball, hoặc kéo nó ra khỏi git của gitweb repo: setgitperms.perl. Ngay cả khi bạn chỉ sử dụng móc cập nhật, đó có thể là một mô hình hữu ích.