今天定義git hook: prepare-commit-msg
:
意圖是在用戶提交時, 在commit msg後加一行: issue #${issueID}
, 以此關聯以redmine.
#! /bin/sh
# branch名爲: xxx-yyy-123, 123爲issueID, 最後必須是"-number"這種格式
currBranch=$(git branch --show-current)
issueID=$(echo $currBranch | grep -o -E -- '-[0-9]+$' | sed 's/-//')
# branch名中沒有issueID
if [ x"$issueID" = x ]; then
read -p "分支名一般最後都有\"-issueID\", 你是否確定你的分支名正確?(N/Y): " confirm </dev/tty
case "$confirm" in
n|N):
echo "認識到了錯誤, 可以新建立正確的分支"
exit 1
;;
y|Y):
# 選擇了確認
exit 0
;;
*)
echo 2>&1 "請輸入N/Y"
exit 2
;;
esac
fi
# issue #140
issueRef="issue #$issueID"
echo "$issueRef" >> "$1"
我們約定分支名格式爲: “xx-xx…-number”, 其中number是某個issueID.
開始出現的問題是, 提交時, read沒有出現交互式的效果, 直接退出了.
後來上網查,
發現: https://stackoverflow.com/questions/45495061/how-to-ask-for-user-input-in-a-git-hook,
說什麼"Git hooks do not use standard input", 這裏不是很懂, 最後在read 最後加 < /dev/tty
就可以了.
特此記錄.
歡迎補充指正!