2011-03-22 38 views
12

Tôi muốn kiểm tra thư cam kết trước khi git commit. Tôi sử dụng móc trước cam kết để thực hiện điều đó, nhưng không thể tìm thấy cách để nhận thư cam kết trong tập lệnh .git/pre-commit. Tôi có thể lấy nó bằng cách nào?nhận thông báo cam kết trong git hook

Trả lời

18

Trong móc trước cam kết, thông báo cam kết chưa được tạo. Bạn có thể muốn sử dụng một trong các móc prepare-commit-msg hoặc commit-msg thay thế. Có một số nice section in Pro Git theo thứ tự các móc này được chạy và những gì bạn thường làm với chúng.

+1

Xin lưu ý rằng đây là các tập lệnh phía máy khách, cho tập lệnh phía máy chủ, người dùng có thể cần phải sử dụng 'tiền nhận trước'. –

0

Bạn có thể thực hiện như sau trong móc pre-receive (đối với phía máy chủ) và điều đó sẽ hiển thị thông tin sửa đổi.

old, new, branch = sys.stdin.read().split() 
proc = subprocess.Popen(["git", "rev-list", "--oneline","--first-parent" , "%s..%s" %(old, new)], stdout=subprocess.PIPE) 
commitMessage=str(proc.stdout.readlines()[0]) 
+4

Có vẻ thú vị. Nhưng không có bất kỳ thông tin nào về ngôn ngữ đó hoặc bất kỳ thứ gì khác, điều này không phải là siêu hữu ích. – conradkdotcom

+1

Đây là trong Python. – ArekBulski

3

Tôi đã thực hiện điều này trong móc commit-msg. Xem documentation.

commit-msg 
This hook is invoked by git commit, and can be bypassed with the --no-verify option. 
It takes a single parameter, the name of the file that holds the proposed commit log message. 
Exiting with a non-zero status causes the git commit to abort. 

Dưới my_git_project/.git/hooks, tôi đã thêm tập tin này commit.msg (phải là tên này). Tôi đã thêm các nội dung bash bên trong tệp này đã thực hiện xác thực.

#!/usr/bin/env bash 
INPUT_FILE=$1 
START_LINE=`head -n1 $INPUT_FILE` 
PATTERN="^(MYPROJ)-[[:digit:]]+: " 
if ! [[ "$START_LINE" =~ $PATTERN ]]; then 
    echo "Bad commit message, see example: MYPROJ-123: commit message" 
    exit 1 
fi 
Các vấn đề liên quan