2012-03-16 30 views
6

Chúng tôi có một móc nối trước tốt đẹp cho GIT, cũng như một commit-msg tốt đẹp. Hook trước cam kết thực hiện xác nhận cú pháp và commit-msg thực hiện một số logic nghiệp vụ khác. Tất cả đều hoạt động tốt.Móc điều kiện trước cam kết có điều khiển từ dòng lệnh cho GIT: Có thể không?

Tuy nhiên, tôi muốn thêm xác thực Chuẩn mã hóa vào móc trước khi cam kết. Trong thực tế, nó đã được thêm vào. Tuy nhiên, tôi không muốn thực thi nghiêm ngặt các nhà phát triển của mình để phù hợp với các tiêu chuẩn mã hóa, theo mặc định tôi muốn xác thực mã cho các tiêu chuẩn nhưng nếu họ muốn vượt qua Xác nhận tiêu chuẩn mã hóa, tôi muốn cho họ vượt qua bằng cách thêm tham số trong quá trình cam kết.

Có thể chụp/giải thích bất kỳ tham số dòng lệnh đó đã được đưa ra trong cam kết git tại cam kết trước mức móc để bỏ mã xác nhận tiêu chuẩn trong các pre-cam kết nối (tùy chọn?)

Hoặc là nó chỉ có thể trong móc thông báo trước cam kết bằng cách phân tích thông điệp cam kết cho một chuỗi con cụ thể?

Hãy chia sẻ các phương pháp hay nhất về cách (và ở đâu) để tạo mã điều kiện có kiểm soát dòng lệnh bằng móc git pre-commit (hoặc móc git khác).

Trả lời

10

Một cách đơn giản để làm điều này sẽ chỉ cần sử dụng một biến môi trường:

STANDARDS=no git commit 

và sau đó trong kịch bản (ví dụ trong Bash, nhưng bạn có thể đọc env VAR trong bất cứ ngôn ngữ móc của bạn là in) :

if [ "$STANDARDS" != "no" ]; then 
    ...check for code standards... 
fi 

Git thường không chuyển thông tin xa hơn những gì được liệt kê trong man githooks cho mỗi móc, vì vậy cố gắng để làm điều đó với một "tùy chọn dòng lệnh" a la git commit --no-standards hoặc một số như vậy sẽ không hoạt động.

3

Để thêm vào những gì @Amber nói, bạn sẽ có thể làm:

STANDARDS=no git commit -m "committing" 

và có thích hợp trước khi cam kết nối đó sẽ thấy các biến môi trường và đưa ra quyết định.

Có của khóa học là --no-verify, nhưng tôi giả sử bạn không muốn bỏ qua toàn bộ pre-cam kết:

-n
--no-xác minh

tùy chọn này sẽ bỏ qua các commit trước và commit-msg. Xem thêm githooks (5).

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