簡體   English   中英

如何僅在運行 git 工作樹添加命令時運行 git 掛鈎

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM