2012-07-18 37 views
6

Tôi có một kho lưu trữ git trung tâm mà bản thân tôi và một số cộng tác viên thường xuyên đẩy và kéo. Trong quá khứ tôi đã cam kết một đốm màu nhị phân lớn do tai nạn, đòi hỏi phải rebasing để xóa hoàn toàn và là một nỗi đau cho tất cả mọi người, vì vậy tôi muốn bảo vệ chống lại điều này xảy ra trong tương lai. Có thể thiết lập một hook trong kho từ xa để kiểm tra kích thước tập tin của các tập tin được đẩy hay không (cho dù chúng đang được bổ sung mới hay một tập tin hiện có được cập nhật) và từ chối các tập tin trên kích thước ngưỡng, nói 2MB?Làm thế nào để bảo vệ chống lại việc đẩy các đốm màu nhị phân lớn trong git?

Quan trọng là tôi muốn các tệp hiện có lớn hơn 2MB không bị ảnh hưởng (do đó, không nên từ chối nếu tệp 2MB đã có trong kho lưu trữ, chỉ khi nhấn thêm tệp 2MB hoặc phát triển tệp hiện có tập tin là 2MB). Ngoài ra, tôi muốn móc để thực thi ở phía xa vì vậy tôi không phải lo lắng rằng các máy khách không cần thiết lập hook.

Chỉnh sửa: Vì một lần đẩy có thể chứa nhiều cam kết và thậm chí một cam kết với một tệp lớn bị kẹt trong repo, tôi muốn bảo vệ chống lại các lần đẩy có chứa/bất kỳ commit nào phát sinh hoặc thêm>> 2MB tập tin.

Trả lời

5

Có vẻ như số pre-receive hook sẽ là địa điểm chính xác cho séc này. Hook này thực hiện ở phía máy chủ của một push và có quyền truy cập vào đủ thông tin để bạn thực hiện kiểm tra kích thước tệp.

móc này được gọi bởi git-nhận-pack trên kho lưu trữ từ xa, mà sẽ xảy ra khi một git push được thực hiện trên một kho lưu trữ địa phương. Ngay trước khi bắt đầu cập nhật ref trên kho từ xa, hook nhận trước được gọi. Trạng thái thoát của nó xác định sự thành công hay thất bại của bản cập nhật.

+0

Xin lỗi, có vẻ như tôi muốn nhập trước khi nhận. Tôi sẽ cập nhật. –

+0

Móc nhận trước xảy ra trước khi "cập nhật refs", điều đó có nghĩa là nó được thực hiện đủ sớm nếu tôi có một lối ra nonzero kích thước của repo không phát triển, hoặc chỉ là nó không áp dụng cam kết, để lại blob vẫn còn đó để được nhân bản? Tôi nghĩ rằng tôi đọc sau này nhưng tôi không thể tìm thấy các liên kết nữa:/ –

+0

Nếu bạn thất bại trước khi cam kết móc, các blob vẫn sẽ có mặt trên máy chủ nhưng điều đó không tự động có nghĩa là nó sẽ được nhân bản. Nó sẽ không thể truy cập được từ bất kỳ thông tin nào của máy chủ, vì vậy Git sẽ bỏ qua nó rất nhiều. Cuối cùng, bộ sưu tập rác của Git sẽ loại bỏ các đốm màu không được chấp nhận. –

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