2013-03-09 38 views
8

Tôi đang cố thực thi một số quy tắc mã hóa trong nhóm của mình. Để kết thúc, tôi đã viết một số hook phía máy khách, hoạt động tốt, nhưng bây giờ tôi muốn các kiểm tra tương tự để chạy khi một nhà phát triển đẩy các sửa đổi của họ vào kho lưu trữ trung tâm. Nhưng chúng không hoạt động.Hook máy chủ Git: nhận nội dung tệp đang được đẩy?

Dưới đây là những gì tôi muốn làm:

Tôi muốn đi qua các tập tin dòng đẩy bởi dòng, kiểm tra mã hóa ước vi phạm và nếu tôi tìm thấy bất kỳ, từ chối đẩy, cũng hiển thị số dòng + vi phạm.

Trong hook phía máy khách, tôi có thể thực hiện điều đó bằng cách gọi git diff --cached --name-status --diff-filter=AM để lấy danh sách các tệp đã sửa đổi và git cat-file -p :filename cho mỗi tệp được truy lục trong cuộc gọi đầu tiên để lấy toàn bộ văn bản của tệp.

Khi tôi cố gắng thực hiện tương tự trong móc nối update phía máy chủ của tôi, tôi nhận được một chuỗi trống (cho danh sách các tệp).

Tôi cũng đã thử gọi git show --pretty="format:" --name-only newrev (trong đó newrev là SHA tôi nhận được làm thông số cho móc cập nhật, git diff-tree -r --name-only --no-commit-id <tree-ish> và một số thứ khác tôi tìm thấy trên mạng, nhưng tôi không thể hiểu rõ những gì đang diễn ra trên và những gì tôi nên gọi.

bạn có thể giúp tôi?

+0

lợi ích của việc sử dụng 'git mèo file' qua 'cat' là gì. Tôi đã cố gắng tìm kiếm nhưng không thể phạt một lý do thuyết phục. –

Trả lời

4

bạn cần phải thay đổi kịch bản của bạn vì không có bản sao làm việc trên phía máy chủ, và git diff --cached công trình với diện tích dàn (hoặc chỉ mục), trong khi chỉ mục của bạn trống khi máy chủ nhận được thông báo đẩy.

Thay vào đó, chỉ cần sử dụng git diff --name-status <sha-old> <sha-new>, với sha-oldsha-new là số được gửi đến móc làm đối số và bạn sẽ nhận được kết quả tương tự như chạy git diff --cached trước cam kết.

Đối với việc kiểm tra nội dung tập tin, bạn có thể sử dụng git-show sha-new:/path/to/file

+0

Kỳ lạ thay, tôi vẫn nhận được một chuỗi rỗng ... Tôi không biết liệu nó có quan trọng không, nhưng tôi đang đẩy vào một cái điều khiển trống, và trong khi tôi đẩy, git nói đó là "Viết 27 đồ vật", có vẻ như đẩy không rỗng. – Ibolit

+0

Sau khi đẩy cam kết đầu tiên của tôi ở đó, bây giờ tôi có thể đẩy và tôi nhận được danh sách tập tin. Cảm ơn rất nhiều! – Ibolit