Cách thích hợp để kiểm tra dữ liệu cam kết trong Git là gì?


13

Mục tiêu của tôi là kiểm tra dữ liệu cam kết không đáp ứng các yêu cầu nhất định và sau đó từ chối cam kết được tạo hoặc đẩy vào kho lưu trữ từ xa.

Vấn đề của việc thực hiện hook hook trước là khó triển khai tới nhiều người phải cập nhật thủ công tệp hook pre-commit của họ. Đồng thời, Git không cho phép bạn có các mô hình con trong thư mục .git, điều này rất dễ dàng để triển khai nhưng than ôi.

Tùy chọn khác mà tôi thấy là thực hiện kiểm tra Tôi tin rằng móc cập nhật ở phía xa, sẽ kiểm tra từng cam kết được đẩy bởi một nhà phát triển và từ chối đẩy nếu bất kỳ cam kết nào thất bại trong các thử nghiệm.

Có ai có cái nhìn sâu sắc về vấn đề này? Và nếu vậy, bạn có thể cung cấp hoặc chỉ cho tôi một tập lệnh hook cập nhật ví dụ không? Tôi hơi bối rối về cách nó hoạt động.


4
Đây là một câu hỏi đầu tiên tuyệt vời.
Daenyth

Câu trả lời:


7

trước tiên bạn phải tìm hiểu xem bạn không muốn mã không đủ tiêu chuẩn được cam kết hay được đẩy / xuất bản ngược dòng.

Theo tôi thì cái sau này khả thi hơn.

với một DVCS như git. bạn không thực sự muốn kiểm soát cách mọi nhà phát triển sử dụng kho lưu trữ cục bộ của mình. và bạn không thể thực sự kiểm soát điều đó.

một hook pre-commit hoạt động tốt như xác nhận và vệ sinh cơ bản, nếu mọi người tham gia nắm lấy nó một cách tự nguyện. chúng tôi thực sự thực thi điều đó một cách lỏng lẻo trong công ty của chúng tôi. tuy nhiên, nó luôn có thể được bỏ qua với git commit --no-verify.

mặt khác, hook hook của máy chủ không can thiệp vào quy trình làm việc cục bộ của lập trình viên và đảm bảo rằng những người khác trong dự án chỉ làm việc với mã đáp ứng các tiêu chí nhất định. thông thường đây là những gì mọi người tìm kiếm khi họ thực hiện kiểm tra tự động.

xác nhận tự động này không có nghĩa là để thay thế kiểm soát chất lượng, tôi đoán, điều này thường đạt được với việc xem xét mã hoặc lập trình cặp.

nếu bạn đã quen thuộc với github , bạn sẽ nhận thấy rằng "yêu cầu kéo" vẫn là một cách tiếp cận khác cho vấn đề này. nhiều dự án và công ty nguồn mở sử dụng yêu cầu kéo của github để kiểm soát cấp phép chi nhánh và xem xét mã. nhưng nó cần sự tương tác của con người, do đó có thể không phải là những gì bạn yêu cầu.


1

Như bạn đã chỉ ra, làm điều này trên máy khách, trong khi về mặt kỹ thuật có thể, có lẽ không thực tế. Ngoài ra, nhiều người dùng git cam kết làm việc tạm thời, do đó, kiểm tra hà khắc trên mỗi cam kết là phản tác dụng.

Giải pháp tiêu chuẩn sẽ là một cái móc phía máy chủ. Bạn có thể thiết lập một pre-receivecái móc, nó chạy mỗi khi có một cú đẩy và nó có thể từ chối cú đẩy nếu nó muốn. Phần còn lại phụ thuộc vào các kiểm tra chính xác mà bạn muốn thực hiện.

Điều này được giải thích trong Pro Git , chương 7.3 Tùy chỉnh Git - Git Hook .


Cảm ơn câu trả lời của bạn và tôi thực sự thích trang web Git mới. Vấn đề duy nhất của tôi là thật khó để bắt đầu viết các cam kết của riêng bạn, đặc biệt là vì bạn không biết chính xác bạn đang ở đâu trong quá trình và những gì bạn nên kiểm tra. Nếu tôi đang cố gắng viết một cái móc nhận trước, tôi có cho rằng điều khiển từ xa có một nhánh theo dõi những gì tôi đang đẩy không? Làm sao tôi biết? Tôi ước có một số tính năng của git cho phép bạn mô phỏng những gì bạn có trong trường hợp này.
dalanmiller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.