在Git中檢出新分支後,是否有辦法觸發鉤子?在Git中檢出新分支後,是否有辦法觸發鉤子?
26
A
回答
26
如果這些鉤子的人會不會做,我會很驚訝
http://schacon.github.com/git/githooks.html
也許這一個:
結賬後
這個鉤子被調用時, git-checkout在 更新工作樹之後運行。鉤 給出三個參數: 先前HEAD的裁判,新HEAD (其可以或可以不改變)的裁判, 和一個標誌,它指示 結帳是否是分支結帳 (改變分支,flag = 1)或文件 簽出(從 索引中檢索文件,flag = 0)。這個鉤子不能 影響git-checkout的結果。
23
一個Git鉤子放在你的倉庫的特殊位置的腳本,該位置是:
的.git /掛鉤
該腳本可以是任何類型的,你可以在您的環境中執行,即bash,python,ruby等。
簽出後執行的掛鉤爲post-checkout。從文檔:
...鉤子給出三個參數...
例子:
創建掛鉤(腳本):
touch .git/hooks/post-checkout chmod u+x .git/hooks/post-checkout
鉤樣本內容:
#!/bin/bash
set -e
printf '\npost-checkout hook\n\n'
prevHEAD=$1
newHEAD=$2
checkoutType=$3
[[ $checkoutType == 1 ]] && checkoutType='branch' ||
checkoutType='file' ;
echo 'Checkout type: '$checkoutType
echo ' prev HEAD: '`git name-rev --name-only $prevHEAD`
echo ' new HEAD: '`git name-rev --name-only $newHEAD`
注意:第一行的家當表明腳本的類型。
這個腳本(git hook)將只捕獲傳遞的三個參數並以人性化的格式打印它們。
1
的post-checkout
hook接收三個參數:
- 參考先前HEAD的 新HEAD的
- 價
- 這是否是一個文件籤(
0
)或分支結帳(1
)
您可以使用從當前HEAD創建的分支對參數1和2具有相同值的事實。
cat > .git/hooks/post-checkout <<"EOF"
if [ "$3" == "0" ]; then exit; fi
if [ "$1" == "$2" ]; then
echo "New branch created. (Probably)."
fi
EOF
chmod u+x .git/hooks/post-checkout
限制:
- 檢出的現有分支這恰好是在相同的HEAD作爲當前HEAD會欺騙它。
- 創建新分支而不是將不會被檢測到。
4
與其他類似,但驗證分支已經簽出一次。
#!/bin/bash
# this is a file checkout – do nothing
if [ "$3" == "0" ]; then exit; fi
BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
NUM_CHECKOUTS=`git reflog --date=local | grep -o ${BRANCH_NAME} | wc -l`
#if the refs of the previous and new heads are the same
#AND the number of checkouts equals one, a new branch has been created
if [ "$1" == "$2" ] && [ ${NUM_CHECKOUTS} -eq 1 ]; then
git push origin ${BRANCH_NAME}
fi
相關問題
- 1. 在更新後的鉤子中查找Git分支名稱
- 2. 是否有一個git鉤子會在分支刪除後運行?
- 3. 父母重新裝修後,是否有辦法重新設定子分支?
- 4. 在Git中檢出分支
- 5. Git:在檢出新分支之前沒有提交分支
- 6. Git鉤子阻止從特定分支創建新分支
- 7. 在git commit鉤子上重置分支
- 8. 無法從檢測的Git分支後收到鉤
- 9. Git服務器端鉤子沒有觸發 - 如何檢查
- 10. git鉤子語法檢查
- 11. 如何在git中檢出最後一次檢出的分支?
- 12. 如何在pre-recive鉤子中找出新的GIT分支的父提交?
- 13. 預推Git掛鉤以確定分支名稱是否有效
- 14. 每個分支的Git提交鉤子
- 15. Git鉤子創建 - 你在一個分支尚未出生
- 16. git - 檢出分支和子模塊
- 17. 有沒有辦法輸出以前的git分支名稱?
- 18. 當SVN External更新時,是否有辦法觸發構建?
- 19. 是否有一個運行在git reset上的git鉤子?
- 20. Git站點部署 - 在接收後鉤子檢出不工作
- 21. OCaml中是否支持「鉤子」?
- 22. 的Git分支,無法檢出主
- 23. 檢出遠程git分支?
- 24. 創建和/或推入新分支時的Git鉤子
- 25. 有沒有辦法阻止開發人員在git中創建任何分支?
- 26. Git後更新鉤 - 我可以處理「主」和「分支」?
- 27. 從GIT執行PHP後更新鉤子
- 28. 有沒有辦法測試一個文件是否在git鉤子中被加密了?
- 29. 導出Git發佈分支
- 30. Jenkins構建不是用git post-receive鉤子觸發的
你知道有什麼方法可以判斷這是否是分支創建檢出(除了查看新的HEAD的reflog)嗎? – pkoch 2014-01-17 22:55:30
似乎這將是一個好主意,你問一個全新的問題。如果你這樣做,給我鏈接,我會看看我是否可以幫忙。你試圖解決什麼問題? – givanse 2014-01-18 14:16:23