2012-04-18 29 views
5

Gần đây, chúng tôi đã chạy thử "git reset --hard" và vô tình hoàn tác rất nhiều công việc trên repo GIT chính của chúng tôi. Chúng tôi đang trong quá trình phục hồi công việc, nhưng tôi muốn chắc chắn rằng không có điều gì như thế này xảy ra lần nữa.Trong GIT, làm cách nào để ngăn người khác thay đổi hoặc xóa các cam kết đã được đẩy?

Tôi biết có rất nhiều câu hỏi về vấn đề này, nhưng tất cả dường như là về việc phục hồi chứ không phải là phòng ngừa. Có cách nào tôi có thể ngăn chặn việc đẩy đến repo chính của chúng tôi mà thay đổi hoặc loại bỏ các cam kết đã được đẩy? Có một thiết lập cấu hình hoặc có thể là một cái móc đẩy sẽ thực hiện công việc?

+0

chmod --recursive 700/path/to/git/rep và chỉ cho phép quản trị viên kéo vào repo chính. –

+0

Lệnh đẩy sẽ không bao giờ xóa các cam kết khỏi repo từ xa. Nó có thể di chuyển các nhánh xung quanh, nhưng các cam kết vẫn còn đó. –

+0

@WilliamPursell: một 'push -f' có thể xóa các cam kết. –

Trả lời

7

Có 2 configuration options bạn có thể đặt vào trung tâm (trần) repo của bạn để giúp ngăn chặn vấn đề này:

receive.denyNonFastForwards 
receive.denyDeletes 

Tùy chọn đầu tiên yêu cầu tất cả đẩy chỉ làm tăng thêm lịch sử. A git reset theo sau là git push sẽ bị từ chối.

Lần thứ hai đóng lỗ vòng nơi người nào đó có thể xóa chi nhánh từ xa với git push <origin> :<branch-to-delete> và sau đó đẩy lại với một thông thường git push và bất kỳ thay đổi nào họ muốn.

+0

Điều này nghe có vẻ chính xác những gì tôi đang tìm kiếm. Tôi sẽ thử. Cảm ơn! – Sean

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