2009-01-09 27 views
201

Chúng tôi muốn tạo một vài kịch bản móc cơ bản mà tất cả chúng ta có thể chia sẻ - cho những thứ như thông điệp cam kết định dạng trước. Git có các kịch bản móc cho các tập lệnh thường được lưu trữ theo <project>/.git/hooks/. Tuy nhiên, các tập lệnh đó không được nhân giống khi mọi người làm một bản sao và chúng không được kiểm soát phiên bản.Có thể quản lý tập lệnh móc Git cùng với kho lưu trữ không?

Có cách nào tốt để giúp mọi người có được tập lệnh móc phù hợp không? Tôi có thể chỉ làm cho các kịch bản móc đó trỏ đến kịch bản được kiểm soát phiên bản trong repo của tôi không?

+1

Một câu hỏi hay. Tôi chỉ muốn có một câu trả lời tốt hơn (không có khiếu nại với @mipadi, tôi chỉ muốn git có cách để làm điều này một cách tự động hơn - ngay cả khi chỉ với một tùy chọn được chỉ định cho git clone.) – lindes

+0

Tôi đồng ý, @ lindes! Nhưng có lẽ hạn chế sự chia sẻ của móc trong cố ý? Mọi thứ sẽ trở nên lộn xộn đối với người dùng Windows, tôi cho là vậy. – kristianlm

+0

@ kristianlm: Có rất nhiều lý do khiến nó có thể lộn xộn vào những thời điểm ... và cũng có lúc sẽ rất hay khi có nó ở đó. Tôi chỉ muốn có một số tùy chọn hoặc một cái gì đó mà sẽ sao chép các móc. Tôi đoán tôi sẽ chỉ phải kiểm tra mã git-core đôi khi, và thực hiện một bản vá. :) (Hoặc hy vọng rằng ai đó khác ... hoặc sống với cách giải quyết trong [câu trả lời của mipadi] (http://stackoverflow.com/a/427269/313756), hoặc bất cứ điều gì.) – lindes

Trả lời

105

Về mặt lý thuyết, bạn có thể tạo một thư mục hooks (hoặc bất kỳ tên nào bạn muốn) trong thư mục dự án của bạn với tất cả các tập lệnh và sau đó liên kết chúng trong .git/hooks. Tất nhiên, mỗi người nhân bản repo sẽ phải thiết lập các symlink này (mặc dù bạn có thể thực sự ưa thích và có một kịch bản triển khai mà cloner có thể chạy để thiết lập chúng tự động).

+26

điều này là không tầm thường, vì vậy Tôi đang bao gồm một liên kết về cách liên kết đúng cách: http://stackoverflow.com/questions/4592838/symbolic-link-to-a-hook-in-git –

2

Làm thế nào về git-hooks, tuyến đường .git/hooks gọi vào tập lệnh theo thư mục dự án githooks.

Ngoài ra còn có rất nhiều tính năng để cho phép bạn thu nhỏ bản sao và móc nối liên kết khắp nơi.

2

Nếu dự án của bạn là dự án JavaScript và bạn sử dụng npm làm người quản lý gói, bạn có thể sử dụng shared-git-hooks để thực thi githooks theo số npm install.

99

Trong Git 2.9, tùy chọn cấu hình core.hooksPath chỉ định thư mục móc tùy chỉnh.

Di chuyển móc của bạn đến một thư mục được theo dõi hooks trong kho lưu trữ của bạn. Sau đó, cấu hình mỗi trường hợp của kho để sử dụng theo dõi hooks thay vì $GIT_DIR/hooks:

git config core.hooksPath hooks 

Nói chung, con đường có thể tuyệt đối, hoặc tương đối so với thư mục chứa móc đang chạy (thường là cây làm việc gốc, xem phần MÔ TẢ của man githooks).

+8

... và thư mục móc để trỏ đến có thể là các kho chứa móc riêng biệt;) –

+3

Vâng, thông số cấu hình này có được tự động đặt khi bạn tạo một bản sao git không? – Ring

+3

Không thể thiết lập các biến cấu hình git cấu hình bởi kho lưu trữ mà bạn đang nhân bản. Tôi nghĩ rằng đây là để ngăn chặn việc thực hiện mã tùy ý. git config kiểm soát việc thực thi mã thông qua các móc, tên người dùng trên các thư cam kết và các chức năng quan trọng khác. –

1

pre-commit làm cho điều này dễ dàng cho các móc trước khi cam kết. Không trả lời câu hỏi của OP về việc quản lý bất kỳ móc git tùy ý nào, nhưng các móc trước khi cam kết có lẽ được sử dụng thường xuyên nhất cho mục đích chất lượng mã.

0

Chúng tôi đang sử dụng các giải pháp Visual Studio (và do đó dự án) có sự kiện trước và sau khi tạo dựng. Tôi đang thêm một dự án bổ sung có tên 'GitHookDeployer'. Dự án tự sửa đổi một tệp trong sự kiện xây dựng bài đăng. Tệp đó được đặt để sao chép vào thư mục xây dựng. Do đó dự án được xây dựng mọi lúc và không bao giờ bị bỏ qua. Trong sự kiện xây dựng, nó cũng đảm bảo rằng tất cả các git hooks được đặt ra.

Lưu ý rằng đây không phải là giải pháp chung, vì một số dự án, tất nhiên, không có gì để xây dựng.

0

Hầu hết các ngôn ngữ lập trình hiện đại, hay đúng hơn là công cụ xây dựng, các plugin hỗ trợ để quản lý các móc git. Điều đó có nghĩa là tất cả những gì bạn cần làm là định cấu hình package.json, pom.xml, v.v. và bất kỳ ai trong nhóm của bạn sẽ không có tùy chọn nào khác ngoài việc tuân thủ trừ khi họ thay đổi tệp xây dựng. Plugin sẽ thêm nội dung vào thư mục .git cho bạn.

Ví dụ:

https://github.com/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks

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