[英]How to run another git command only if ”git diff“ outputs something?
[英]How to run a git hook only when running git worktree add command
當我調用命令git worktree add
時,我想運行 shell 腳本。 閱讀用於post-checkout
的文檔似乎適用於git worktree add
但它也適用於我不想使用它的其他命令,例如git checkout
。
我可以使用其他任何鈎子嗎? 或者也許我可以使用后結帳但有腳本設置,所以如果它不是git worktree add
命令,它就會退出?
我想這樣做的原因是運行一組命令來設置我運行git worktree add
時所需的目錄,但我不需要為僅使用git checkout
出的普通 git 存儲庫執行此設置命令。
我想出了一個解決方案,雖然我不確定它是如何被拒絕的。 我將post-checkout
掛鈎用作 bash 腳本,頂部有以下幾行。
if ! [[ "$0" =~ ".bare/hooks/post-checkout" ]] \
|| ! [[ "$1" == "0000000000000000000000000000000000000000" ]]; then
echo "WARNING: post-checkout hook running for reason otherwise than git worktree add, bailing";
exit 0;
fi
# Do something down here every time we run `git worktree add`
這是如何工作的:$0 是腳本的路徑,$1 是前一個頭的引用。
按照慣例,我一直將我的裸存儲庫克隆到一個名為.bare
的目錄中,這是第一條語句正在檢查的內容。 第二個語句是檢查 HEAD 的前一個 ref 是那個 0 字符串。 如果您只是使用其他簽出命令(例如git checkout
出),則會捕獲並退出,因為在這種情況下,前一個 HEAD 不是 0 的字符串,因為它指向一個提交。 但是,似乎因為我每次運行git worktree add
時都會創建一個新 HEAD,所以它會將前一個 HEAD ref 設置為該字符串 0,這允許我在該條件下斷言。
這確實適用於我的用例,所以我不確定是否有更好的方法。 如果有人有更好的建議,請告訴我。
PS 我可以簡單地在我post-checkout
腳本中使用pwd
來獲取新分支的目錄,這對於我想在鈎子中運行的命令很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.