2010-07-29 10 views
9

Tôi có một kho lưu trữ trung tâm với một tập hợp con các tệp mà tôi muốn bảo vệ khỏi bị thay đổi (bằng cách đẩy) từ những người dùng khác. Nếu tôi thêm các tệp này vào .gitignore, chúng sẽ không được nhân bản.Bảo vệ tệp trong kho git

Có thể cung cấp khả năng sao chép tất cả các tệp, nhưng sau khi sao chép thêm một số tệp vào .gitignore ở phía máy khách?

+0

Có phải .gitignore đã cam kết lưu trữ không? Tại sao bạn muốn bảo vệ các tệp đó? Có .gitignore thêm bất kỳ loại quyền truy cập nào cho mỗi người dùng hay thay đổi của bạn có nghĩa là * không ai * có thể thay đổi các tệp đó? Bạn đang cố gắng để thực hiện? –

+0

Nó sẽ là một lựa chọn để đơn giản từ chối push mà sửa đổi những tập tin? Bạn cũng có thể cung cấp một móc nối phía máy khách để từ chối các cam kết xấu. – Cascabel

Trả lời

0

Tôi ban đầu nghĩ về một filter driver (xem Pro Book), mà sẽ:

  • trên bước smudge lưu các tập tin của bạn nội dung
  • trên bước sạch sẽ khôi phục lại nội dung tập tin của bạn.

alt text

Nhưng đó không phải là một giải pháp tốt vì những kịch bản khoảng stateless tập tin nội dung chuyển đổi (xem this SO answer).

Bạn có thể thử thực thi cơ chế lưu/khôi phục trong móc (xem cùng câu trả lời SO), nhưng lưu ý rằng nó sẽ là cục bộ cho repo của bạn (nó sẽ bảo vệ tệp của bạn chỉ trong repo, móc không được đẩy)

Bạn cũng có thể sử dụng:

git update-index --assume-unchanged file 

Xem "With git, temporary exclude a changed tracked file from commit in command line", một lần nữa một bảo vệ địa phương mà thôi. Điều đó sẽ bảo vệ chúng chống lại đẩy bên ngoài để repo của bạn ("nhập khẩu"), nhưng nếu bạn xuất bản chúng ("xuất khẩu"), hơn có thể được sửa đổi ở phía khách hàng.

+0

Cảm ơn. Tôi biết về git update-index --assume-không thay đổi, nhưng nó chỉ được áp dụng ở phía máy khách. Tôi cũng biết về móc, nhưng chúng không được nhân bản từ repo trung tâm. – andrexus

+0

@andrexus: Tôi biết: trình điều khiển bộ lọc là giải pháp có thể đẩy được, nhưng nó sẽ yêu cầu uốn tập lệnh smudge để buộc nó biết về đường dẫn của các tệp có liên quan (để lưu/khôi phục), trong khi nó chỉ biết về nội dung của các tệp ... – VonC

1

Có lý do cụ thể nào khiến Git phải là câu trả lời cho điều này không?

Làm cách nào để đặt tệp chỉ đọc và đọc chính sách chính sách rằng các tệp này không nên được đẩy?

Đôi khi giải pháp công nghệ không phải là cách đơn giản nhất.

Nếu ai đó thực hiện đẩy các thay đổi đối với những tệp này, những thay đổi này luôn có thể được hoàn nguyên.

1

Bạn có thể có các tệp trong kho, cam kết chúng, sau đó thêm chúng vào .gitignore và sau đó loại bỏ chúng khỏi cam kết tiếp theo.

Bạn vẫn có thể tìm nạp tệp trực tiếp trước cam kết (có thể gắn thẻ nó bằng thứ gì đó để có thể tìm nạp theo tên dễ dàng hơn) và điều này sẽ giữ trạng thái của tệp, trong khi không làm cho nó dễ dàng chỉnh sửa trong kho Tai nạn.

Để truy cập các tệp đó sau khi kéo bản sao, chỉ cần viết tác vụ cào lấy chúng cho người dùng kho lưu trữ của bạn.

1

Có vẻ như vấn đề nằm ở nơi khác nếu bạn cần mức giới hạn truy cập này.

Tuy nhiên, nếu bạn thực sự muốn thực hiện việc này, hãy xem xét Gitolite. Nó cho phép bạn xác định các quy tắc truy cập khá chi tiết và có thể đủ cho nhu cầu của bạn.

Gitolite tài liệu: http://gitolite.com/gitolite/master-toc.html

Bạn có thể xác định 'refs ảo' để kiểm soát truy cập vào trình độ tập tin. Thêm thông tin về điều đó: http://gitolite.com/gitolite/vref.html