Lý tưởng nhất, hook được viết bằng bash, nếu bạn làm theo các tệp mẫu. Nhưng bạn có thể viết nó bằng bất kỳ ngôn ngữ nào có sẵn và chỉ cần đảm bảo rằng nó có cờ thực thi.
Vì vậy, bạn có thể viết mã Python hoặc Go để đạt được mục tiêu của mình và đặt nó dưới thư mục hook. Nó sẽ hoạt động, nhưng nó sẽ không được quản lý cùng với kho lưu trữ.
Hai lựa chọn
a) Đa tập lệnh
Bạn có thể mã hóa các hook của mình bên trong trợ giúp của bạn và thêm một đoạn mã nhỏ vào các hook để gọi tập lệnh hoàn hảo của bạn, như thế này:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Tập lệnh đơn
Một tùy chọn thú vị hơn là chỉ thêm một tập lệnh để thống trị tất cả, thay vì một tập lệnh. Vì vậy, bạn tạo một hook / mysuperhook.go và chỉ ra mọi hook mà bạn muốn có.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
Tham số sẽ cung cấp tập lệnh của bạn mà hook đã được kích hoạt và bạn có thể phân biệt nó trong mã của mình. Tại sao? Đôi khi, bạn có thể muốn chạy cùng một kiểm tra cho cam kết và đẩy, chẳng hạn.
Và sau đó?
Sau đó, bạn có thể muốn có thêm các chức năng, như:
- Kích hoạt móc thủ công để kiểm tra xem mọi thứ có ổn ngay cả trước khi cam kết hoặc đẩy. Nếu bạn chỉ gọi kịch bản của mình (tùy chọn a hoặc b) sẽ thực hiện thủ thuật.
- Kích hoạt các hook trên CI, vì vậy bạn không cần phải viết lại các kiểm tra tương tự cho CI, ví dụ, đó chỉ là gọi các kích hoạt cam kết và đẩy. Giống như trên nên giải quyết nó.
- Gọi các công cụ bên ngoài, như trình xác nhận đánh dấu hoặc trình xác nhận YAML. Bạn có thể tạo các tòa nhà chọc trời và cần xử lý STDOUT và STDERR.
- Đảm bảo tất cả các nhà phát triển có một cách đơn giản để cài đặt các hook, do đó, một đoạn script đẹp cần được thêm vào kho lưu trữ để thay thế các hook mặc định bằng các hook chính xác
- Có một số người trợ giúp toàn cầu, như kiểm tra để chặn các cam kết phát triển và làm chủ các nhánh, không phải thêm nó vào mọi kho lưu trữ. Bạn có thể giải quyết nó bằng cách có một kho lưu trữ khác với các tập lệnh toàn cầu.
Điều này có thể đơn giản hơn?
Có, có một số công cụ giúp bạn quản lý git-hook. Mỗi người trong số họ được thiết kế để giải quyết vấn đề từ một quan điểm khác nhau, và bạn có thể cần phải hiểu tất cả trong số họ để có được vấn đề tốt nhất cho bạn hoặc nhóm của bạn. GitHooks.com cung cấp rất nhiều đọc về hooking, và một số công cụ có sẵn ngày hôm nay.
Tính đến hôm nay, có 21 dự án được liệt kê ở đó với các chiến lược khác nhau để quản lý móc git. Một số chỉ làm điều đó cho một hook duy nhất, một số cho một ngôn ngữ cụ thể, v.v.
Một trong những công cụ đó, được viết bởi tôi và được cung cấp miễn phí dưới dạng một dự án mã nguồn mở, được gọi là hook4git . Nó được viết bằng Python (vì tôi thích nó) nhưng ý tưởng là xử lý tất cả các mục được liệt kê ở trên trong một tệp cấu hình duy nhất có tên .hooks4git.ini, nằm trong kho lưu trữ của bạn và có thể gọi bất kỳ tập lệnh nào bạn muốn gọi, bằng bất kỳ ngôn ngữ nào .
Sử dụng git hook là hoàn toàn tuyệt vời, nhưng cách chúng được cung cấp thường chỉ khiến mọi người tránh xa nó.