Git
English ▾ 主題 ▾ 最新版本 ▾ githooks 上次更新於 2.46.1

名稱

githooks - Git 使用的 Hook

概要

$GIT_DIR/hooks/* (或 `git config core.hooksPath`/*)

描述

Hook 是您可以放置在 hooks 目錄中的程式,以便在 Git 執行中的特定時間點觸發動作。未設定執行位的 Hook 會被忽略。

預設情況下,hooks 目錄是 $GIT_DIR/hooks,但可以透過 core.hooksPath 設定變數變更 (請參閱 git-config[1])。

在 Git 呼叫 Hook 之前,它會將其工作目錄變更為裸儲存庫中的 $GIT_DIR,或非裸儲存庫中工作樹的根目錄。例外情況是在推送期間觸發的 Hook (pre-receiveupdatepost-receivepost-updatepush-to-checkout),這些 Hook 永遠在 $GIT_DIR 中執行。

環境變數 (例如 GIT_DIRGIT_WORK_TREE 等) 會匯出,以便 Hook 執行的 Git 命令可以正確找到儲存庫。如果您的 Hook 需要在外來儲存庫或相同儲存庫的不同工作樹中呼叫 Git 命令,則應清除這些環境變數,以免它們干擾外來位置的 Git 作業。例如

local_desc=$(git describe)
foreign_desc=$(unset $(git rev-parse --local-env-vars); git -C ../foreign-repo describe)

Hook 可以透過環境、命令列引數和 stdin 取得其引數。請參閱以下每個 Hook 的文件以取得詳細資訊。

git init 可能會根據其設定將 Hook 複製到新的儲存庫。請參閱 git-init[1] 中的「範本目錄」章節以取得詳細資訊。當本文件其餘部分提到「預設 Hook」時,指的是 Git 隨附的預設範本。

以下說明目前支援的 Hook。

HOOKS

applypatch-msg

此 Hook 由 git-am[1] 呼叫。它採用單一參數,即保存建議的提交日誌訊息的檔案名稱。如果以非零狀態結束,會導致 git am 在套用修補程式之前中止。

允許 Hook 在適當位置編輯訊息檔案,並可用於將訊息標準化為某些專案標準格式。它也可用於在檢查訊息檔案後拒絕提交。

預設的 applypatch-msg Hook (啟用時) 會執行 commit-msg Hook (如果後者已啟用)。

pre-applypatch

此 Hook 由 git-am[1] 呼叫。它不採用任何參數,會在套用修補程式之後、但在提交之前呼叫。

如果它以非零狀態結束,則在套用修補程式後不會提交工作樹。

它可用於檢查目前的工作樹,並拒絕在工作樹未通過某些測試時進行提交。

預設的 pre-applypatch Hook (啟用時) 會執行 pre-commit Hook (如果後者已啟用)。

post-applypatch

此 Hook 由 git-am[1] 呼叫。它不採用任何參數,會在套用修補程式並進行提交後呼叫。

此 Hook 主要用於通知,無法影響 git am 的結果。

pre-commit

此 Hook 由 git-commit[1] 呼叫,可以使用 --no-verify 選項繞過。它不採用任何參數,會在取得建議的提交日誌訊息並進行提交之前呼叫。如果此指令碼以非零狀態結束,會導致 git commit 命令在建立提交之前中止。

預設的 pre-commit Hook (啟用時) 會捕捉引入具有尾隨空白的行,並在找到這類行時中止提交。

如果命令不會開啟編輯器來修改提交訊息,則會使用環境變數 GIT_EDITOR=: 呼叫所有 git commit Hook。

預設的 pre-commit Hook (啟用時),如果 hooks.allownonascii 設定選項未設定或設定為 false,則會防止使用非 ASCII 檔案名稱。

pre-merge-commit

此 Hook 由 git-merge[1] 呼叫,可以使用 --no-verify 選項繞過。它不採用任何參數,會在成功執行合併後、但在取得建議的提交日誌訊息以進行提交之前呼叫。如果此指令碼以非零狀態結束,會導致 git merge 命令在建立提交之前中止。

預設的 pre-merge-commit Hook (啟用時) 會執行 pre-commit Hook (如果後者已啟用)。

如果命令不會開啟編輯器來修改提交訊息,則會使用環境變數 GIT_EDITOR=: 呼叫此 Hook。

如果無法自動執行合併,則需要解決衝突並將結果單獨提交 (請參閱 git-merge[1])。在該時間點,不會執行此 Hook,但如果已啟用,則會執行 pre-commit Hook。

prepare-commit-msg

此 Hook 由 git-commit[1] 呼叫,在準備預設日誌訊息之後、且在啟動編輯器之前呼叫。

它採用一到三個參數。第一個是包含提交日誌訊息的檔案名稱。第二個是提交訊息的來源,可以是:message (如果給定了 -m-F 選項);template (如果給定了 -t 選項或設定了設定選項 commit.template);merge (如果提交是合併或存在 .git/MERGE_MSG 檔案);squash (如果存在 .git/SQUASH_MSG 檔案);或 commit,後接提交物件名稱 (如果給定了 -c-C--amend 選項)。

如果結束狀態為非零,git commit 將會中止。

此 Hook 的目的是在適當位置編輯訊息檔案,且不會由 --no-verify 選項抑制。非零結束表示 Hook 失敗並中止提交。它不應作為 pre-commit Hook 的替代方案。

Git 隨附的範例 prepare-commit-msg Hook 會移除提交範本註解部分中的說明訊息。

commit-msg

此 Hook 由 git-commit[1]git-merge[1] 呼叫,可以使用 --no-verify 選項繞過。它採用單一參數,即保存建議的提交日誌訊息的檔案名稱。如果以非零狀態結束,會導致命令中止。

允許 Hook 在適當位置編輯訊息檔案,並可用於將訊息標準化為某些專案標準格式。它也可用於在檢查訊息檔案後拒絕提交。

預設的 commit-msg Hook (啟用時) 會偵測重複的 Signed-off-by 尾部,如果找到一個,則會中止提交。

post-commit

此 Hook 由 git-commit[1] 呼叫。它不採用任何參數,會在進行提交後呼叫。

此 Hook 主要用於通知,無法影響 git commit 的結果。

pre-rebase

此掛鉤由 git-rebase[1] 呼叫,可用於防止分支被變基(rebase)。此掛鉤可能會被傳遞一或兩個參數。第一個參數是該序列所分叉的上游(upstream)。第二個參數是正在被變基的分支,當變基目前分支時,此參數不會設定。

post-checkout

當執行 git-checkout[1]git-switch[1],且工作樹(worktree)已更新後,會調用此掛鉤。此掛鉤會收到三個參數:前一個 HEAD 的 ref、新的 HEAD 的 ref(可能已變更也可能未變更),以及一個旗標,表示 checkout 是分支 checkout(變更分支,flag=1)還是檔案 checkout(從索引檢索檔案,flag=0)。此掛鉤無法影響 git switchgit checkout 的結果,除了掛鉤的結束狀態會變成這兩個指令的結束狀態之外。

在執行 git-clone[1] 後也會執行此掛鉤,除非使用了 --no-checkout (-n) 選項。傳遞給此掛鉤的第一個參數是 null-ref,第二個參數是新的 HEAD 的 ref,而旗標永遠是 1。同樣地,執行 git worktree add 時,除非使用了 --no-checkout 選項,也會執行此掛鉤。

此掛鉤可用於執行儲存庫有效性檢查、自動顯示與前一個 HEAD 的差異(如果不同),或設定工作目錄元數據屬性。

post-merge

此掛鉤由 git-merge[1] 呼叫,當在本地儲存庫執行 git pull 時會發生合併。此掛鉤會接收一個參數,即一個狀態旗標,表示正在執行的合併是否為 squash 合併。此掛鉤無法影響 git merge 的結果,如果合併因衝突而失敗,則不會執行此掛鉤。

此掛鉤可與相應的 pre-commit 掛鉤結合使用,以儲存和恢復與工作樹相關聯的任何形式的元數據(例如:權限/所有權、ACL 等)。有關如何執行的範例,請參閱 contrib/hooks/setgitperms.perl。

pre-push

此掛鉤由 git-push[1] 呼叫,可用於防止推送發生。此掛鉤會被傳遞兩個參數,提供目標遠端(remote)的名稱和位置。如果未使用具名遠端,則這兩個值將會相同。

有關要推送的資訊會透過掛鉤的標準輸入提供,每行格式如下:

<local-ref> SP <local-object-name> SP <remote-ref> SP <remote-object-name> LF

例如,如果執行了命令 git push origin master:foreign,掛鉤會收到類似以下的一行:

refs/heads/master 67890 refs/heads/foreign 12345

雖然會提供完整的物件名稱。如果 foreign ref 尚不存在,則 <remote-object-name> 將會是全零的物件名稱。如果要刪除 ref,則 <local-ref> 將會以 (delete) 提供,而 <local-object-name> 將會是全零的物件名稱。如果本地提交是由無法展開的名稱(例如 HEAD~ 或物件名稱)以外的東西指定,則會以原始方式提供。

如果此掛鉤以非零狀態結束,git push 將會中止,而不會推送任何內容。關於推送被拒絕的原因的資訊可以透過寫入標準錯誤來傳送給使用者。

pre-receive

git-receive-pack[1]git push 做出反應並更新其儲存庫中的參考(ref)時,會調用此掛鉤。在開始更新遠端儲存庫上的 refs 之前,會先調用 pre-receive 掛鉤。其結束狀態決定了更新的成功或失敗。

此掛鉤會針對接收操作執行一次。它不接受任何參數,但對於每個要更新的 ref,它會在標準輸入上接收格式如下的一行:

<old-oid> SP <new-oid> SP <ref-name> LF

其中 <old-oid> 是儲存在 ref 中的舊物件名稱,<new-oid> 是要儲存在 ref 中的新物件名稱,而 <ref-name> 是 ref 的完整名稱。當建立新的 ref 時,<old-oid> 是全零的物件名稱。

如果掛鉤以非零狀態結束,則不會更新任何 ref。如果掛鉤以零狀態結束,則仍然可以透過 update 掛鉤來阻止更新個別的 ref。

標準輸出和標準錯誤輸出都會轉發到另一端的 git send-pack,因此您可以簡單地使用 echo 來向使用者顯示訊息。

可以在環境變數 GIT_PUSH_OPTION_COUNT 中讀取在 git push --push-option=... 命令列中給出的推送選項數量,並且這些選項本身可以在 GIT_PUSH_OPTION_0GIT_PUSH_OPTION_1…​中找到。如果協商不使用推送選項階段,則不會設定環境變數。如果用戶端選擇使用推送選項,但未傳輸任何選項,則計數變數將設定為零,即 GIT_PUSH_OPTION_COUNT=0

有關一些注意事項,請參閱 git-receive-pack[1] 中的「隔離環境」章節。

update

git-receive-pack[1]git push 做出反應並更新其儲存庫中的參考(ref)時,會調用此掛鉤。在遠端儲存庫上更新 ref 之前,會先調用 update 掛鉤。其結束狀態決定了 ref 更新的成功或失敗。

此掛鉤會針對每個要更新的 ref 執行一次,並接收三個參數:

  • 要更新的 ref 的名稱、

  • 儲存在 ref 中的舊物件名稱,

  • 以及要儲存在 ref 中的新物件名稱。

從 update 掛鉤返回零值表示允許更新 ref。以非零狀態結束會阻止 git receive-pack 更新該 ref。

此掛鉤可用於透過確保物件名稱是提交物件,且該提交物件是舊物件名稱所命名的提交物件的後代,來防止在某些 ref 上強制更新。也就是說,強制執行「僅快速轉發」策略。

它也可以用於記錄 old..new 狀態。但是,它不知道整個分支集合,因此如果使用天真的方式,最終會針對每個 ref 發送一封電子郵件。 post-receive 掛鉤更適合用於此目的。

在僅限制使用者透過網路存取 git 指令的環境中,此掛鉤可用於實作存取控制,而無需依賴檔案系統的所有權和群組成員資格。有關如何使用登入 shell 來限制使用者僅存取 git 指令,請參閱 git-shell[1]

標準輸出和標準錯誤輸出都會轉發到另一端的 git send-pack,因此您可以簡單地使用 echo 來向使用者顯示訊息。

啟用時,預設的 update 掛鉤(且未設定或將 hooks.allowunannotated 設定選項設為 false)會阻止推送未加註解的標籤。

proc-receive

此掛鉤由 git-receive-pack[1] 呼叫。如果伺服器已設定多值組態變數 receive.procReceiveRefs,並且傳送給 receive-pack 的命令具有相符的參考名稱,則這些命令將由此掛鉤執行,而不是由內部 execute_commands() 函式執行。此掛鉤負責更新相關的參考,並將結果回報給 receive-pack

此掛鉤會針對接收操作執行一次。它不接受任何參數,但使用 pkt-line 格式協定與 receive-pack 通訊,以讀取命令、推送選項並傳送結果。在以下協定範例中,字母 S 代表 receive-pack,字母 H 代表此掛鉤。

# Version and features negotiation.
S: PKT-LINE(version=1\0push-options atomic...)
S: flush-pkt
H: PKT-LINE(version=1\0push-options...)
H: flush-pkt
# Send commands from server to the hook.
S: PKT-LINE(<old-oid> <new-oid> <ref>)
S: ... ...
S: flush-pkt
# Send push-options only if the 'push-options' feature is enabled.
S: PKT-LINE(push-option)
S: ... ...
S: flush-pkt
# Receive results from the hook.
# OK, run this command successfully.
H: PKT-LINE(ok <ref>)
# NO, I reject it.
H: PKT-LINE(ng <ref> <reason>)
# Fall through, let 'receive-pack' execute it.
H: PKT-LINE(ok <ref>)
H: PKT-LINE(option fall-through)
# OK, but has an alternate reference.  The alternate reference name
# and other status can be given in option directives.
H: PKT-LINE(ok <ref>)
H: PKT-LINE(option refname <refname>)
H: PKT-LINE(option old-oid <old-oid>)
H: PKT-LINE(option new-oid <new-oid>)
H: PKT-LINE(option forced-update)
H: ... ...
H: flush-pkt

proc-receive 掛鉤的每個命令都可能指向一個偽參考,並且其舊 oid 始終為零,而 proc-receive 掛鉤可能會更新替代參考,並且該替代參考可能已存在且具有非零的舊 oid。對於這種情況,此掛鉤將使用「option」指令來報告由前導「ok」指令給定的參考的擴充屬性。

此掛鉤的命令報告應與輸入的順序相同。除非使用原子推送,否則 proc-receive 掛鉤的結束狀態僅決定傳送給它的一組命令的成功或失敗。

post-receive

git-receive-pack[1]git push 做出反應並更新其儲存庫中的參考(ref)時,會調用此掛鉤。在處理完所有提議的 ref 更新之後,且如果至少有一個 ref 因此更新,此掛鉤會在遠端儲存庫上執行一次。

此掛鉤不接受任何參數。它會在標準輸入上接收一行,針對每個成功更新的 ref,其格式與 pre-receive 掛鉤的格式相同。

此掛鉤不會影響 git receive-pack 的結果,因為它是在真正的工作完成後才呼叫的。

此掛鉤取代了 post-update 掛鉤,因為它除了名稱之外,還可以取得所有 ref 的新舊值。

標準輸出和標準錯誤輸出都會轉發到另一端的 git send-pack,因此您可以簡單地使用 echo 來向使用者顯示訊息。

預設的 post-receive 掛鉤是空的,但在 Git 發行版的 contrib/hooks 目錄中提供了一個範例腳本 post-receive-email,用於實作傳送提交電子郵件。

可以在環境變數 GIT_PUSH_OPTION_COUNT 中讀取在 git push --push-option=... 命令列中給出的推送選項數量,並且這些選項本身可以在 GIT_PUSH_OPTION_0GIT_PUSH_OPTION_1…​中找到。如果協商不使用推送選項階段,則不會設定環境變數。如果用戶端選擇使用推送選項,但未傳輸任何選項,則計數變數將設定為零,即 GIT_PUSH_OPTION_COUNT=0

有關其他詳細資訊,請參閱 git-receive-pack[1] 中的「post-receive」章節。

post-update

git-receive-pack[1]git push 做出反應並更新其儲存庫中的參考(ref)時,會調用此掛鉤。在所有 ref 都更新完成之後,它會在遠端儲存庫上執行一次。

它會接收可變數量的參數,每個參數都是實際更新的 ref 的名稱。

此掛鉤主要用於通知,且無法影響 git receive-pack 的結果。

post-update 掛鉤可以判斷哪些是已推送的 head,但它不知道它們的原始值和更新值,因此它不是執行 log old..new 的好地方。 post-receive 掛鉤確實可以取得 ref 的原始值和更新值。如果您需要這些值,可以考慮改用它。

啟用後,預設的 post-update 掛鉤會執行 git update-server-info,以保持(例如 HTTP)這種「dumb」傳輸所使用的資訊為最新狀態。如果您要發布可透過 HTTP 存取的 Git 儲存庫,則可能應該啟用此掛鉤。

標準輸出和標準錯誤輸出都會轉發到另一端的 git send-pack,因此您可以簡單地使用 echo 來向使用者顯示訊息。

reference-transaction

任何執行參考更新的 Git 命令都會調用此掛鉤。每當準備、提交或中止參考事務時,它都會執行,因此可能會被呼叫多次。此掛鉤也支援符號參考更新。

此掛鉤只接收一個參數,該參數是給定參考事務的目前狀態:

  • 「prepared」:所有參考更新都已加入事務佇列,且磁碟上的參考已鎖定。

  • 「committed」:參考事務已提交,且所有參考現在都具有各自的新值。

  • 「aborted」:參考事務已中止,未執行任何變更,且鎖定已釋放。

對於已加入事務的每個參考更新,掛鉤都會在標準輸入上收到格式如下的一行:

<old-value> SP <new-value> SP <ref-name> LF

其中 <old-value> 是傳遞到參考事務的舊物件名稱,<new-value> 是要儲存在 ref 中的新物件名稱,而 <ref-name> 是 ref 的完整名稱。當強制更新參考(無論其目前值如何)或要全新建立參考時,<old-value> 是全零的物件名稱。為了區分這些情況,您可以使用 git rev-parse 檢查 <ref-name> 的目前值。

對於符號參考更新,<old_value><new-value> 欄位可能會表示參考而不是物件。參考將會以 ref: 前綴表示,例如 ref:<ref-target>

除了「prepared」狀態之外,此掛鉤的結束狀態會被忽略。在「prepared」狀態下,非零結束狀態將導致事務中止。在這種情況下,不會以「aborted」狀態呼叫此掛鉤。

push-to-checkout

git push 嘗試更新目前已檢出的分支,且 receive.denyCurrentBranch 組態變數設定為 updateInstead 時,此掛勾會由 git-receive-pack[1] 在其反應時觸發,並更新其儲存庫中的參考(或多個參考)。預設情況下,如果遠端儲存庫的工作樹和索引與目前檢出的提交有任何差異,則會拒絕此類推送;當工作樹和索引都與目前的提交匹配時,它們會更新以匹配新推送的分支頂端。此掛勾用於覆寫預設行為。

此掛勾會接收將用於更新目前分支頂端的提交。它可以退出並返回非零狀態以拒絕推送(當它這樣做時,它不得修改索引或工作樹)。或者,它可以對工作樹和索引進行任何必要的更改,以使它們在目前分支的頂端更新為新的提交時達到期望的狀態,並以零狀態退出。

例如,此掛勾可以簡單地執行 git read-tree -u -m HEAD "$1",以便模擬以與 git push 相反方向執行的 git fetch,因為 git read-tree -u -m 的雙樹形式本質上與 git switchgit checkout 相同,它們在切換分支時保留工作樹中不干擾分支之間差異的本機變更。

pre-auto-gc

此掛勾由 git gc --auto 觸發(請參閱 git-gc[1])。它不接收任何參數,並且從此腳本以非零狀態退出會導致 git gc --auto 中止。

post-rewrite

此掛勾由重寫提交的命令觸發(當使用 --amend 呼叫時的 git-commit[1]git-rebase[1];然而,像 git-fast-import[1]git-filter-repo 這樣完整的歷史(重)寫工具通常不會呼叫它!)。它的第一個參數表示觸發它的命令:目前為 amendrebase 其中之一。未來可能會傳遞更多命令相關的參數。

此掛勾會透過 stdin 接收重寫提交的列表,格式如下

<old-object-name> SP <new-object-name> [ SP <extra-info> ] LF

額外資訊 再次與命令相關。如果為空,則會省略前面的空格。目前,沒有任何命令傳遞任何額外資訊

此掛勾總是在自動註解複製(請參閱 git-config[1] 中的「notes.rewrite.<command>」)發生後執行,因此可以存取這些註解。

以下是特定於命令的註解

rebase

對於 squashfixup 操作,所有被壓縮的提交都會被列為重寫到壓縮提交。這表示將有多行共享相同的 new-object-name

保證提交會按照它們被 rebase 處理的順序列出。

sendemail-validate

此掛勾由 git-send-email[1] 觸發。

它接收這些命令列參數。它們是,1. 儲存要傳送電子郵件內容的檔案名稱。2. 儲存電子郵件 SMTP 標頭的檔案名稱。

SMTP 標頭的傳遞方式與它們傳遞給使用者的郵件傳輸代理程式 (MTA) 完全相同。實際上,提供給使用者 MTA 的電子郵件,是 $2 的內容,後接 $1 的內容。

下面顯示了一些常見標頭的範例。請注意大小寫和多行 Tab 結構。

From: Example <from@example.com>
To: to@example.com
Cc: cc@example.com,
 A <author@example.com>,
 One <one@example.com>,
 two@example.com
Subject: PATCH-STRING

以非零狀態退出會導致 git send-email 在傳送任何電子郵件之前中止。

執行此掛勾時,會設定以下環境變數。

GIT_SENDEMAIL_FILE_COUNTER

每個儲存要傳送電子郵件的檔案(不包括任何 FIFO)都會以 1 為基礎遞增一的計數器。此計數器不遵循修補程式系列計數器方案。它將始終從 1 開始,並以 GIT_SENDEMAIL_FILE_TOTAL 結束。

GIT_SENDEMAIL_FILE_TOTAL

將要傳送的檔案總數(不包括任何 FIFO)。此計數器不遵循修補程式系列計數器方案。它將始終等於正在傳送的檔案數量,無論是否有封面信件。

這些變數可以用於例如驗證修補程式系列。

Git 隨附的範例 sendemail-validate 掛勾會檢查所有已傳送的修補程式(不包括封面信件)是否可以應用於上游儲存庫的預設分支之上,而不會發生衝突。在已應用特定系列的所有修補程式之後,會保留一些佔位符用於執行額外的驗證步驟。

fsmonitor-watchman

當組態選項 core.fsmonitor 設定為 .git/hooks/fsmonitor-watchman.git/hooks/fsmonitor-watchmanv2 時,會觸發此掛勾,具體取決於要使用的掛勾版本。

版本 1 接收兩個參數,一個版本 (1) 和自 1970 年 1 月 1 日午夜以來經過的奈秒時間。

版本 2 接收兩個參數,一個版本 (2) 和一個用於識別自 Token 以來變更的 Token。對於 watchman,這會是時鐘 ID。此版本必須輸出到 stdout 新 Token,後接一個 NUL,然後才是檔案列表。

此掛勾應將自請求時間以來可能已變更的工作目錄中的所有檔案列表輸出到 stdout。此邏輯應具有包含性,以免遺漏任何潛在變更。路徑應相對於工作目錄的根目錄,並以單個 NUL 分隔。

包含實際上未變更的檔案是允許的。應包含所有變更,包括新建立和已刪除的檔案。當檔案重新命名時,應包含舊名稱和新名稱。

Git 將根據給定的路徑名稱限制它檢查變更的檔案以及檢查未追蹤檔案的目錄。

告知 Git「所有檔案都已變更」的優化方法是傳回檔案名稱 /

結束狀態決定 Git 是否會使用掛勾中的資料來限制其搜尋。發生錯誤時,它會回復為驗證所有檔案和資料夾。

p4-changelist

此掛勾由 git-p4 submit 觸發。

p4-changelist 掛勾在使用者編輯變更列表訊息之後執行。可以使用 --no-verify 選項繞過它。它接收一個參數,即儲存建議變更列表文字的檔案名稱。以非零狀態退出會導致命令中止。

允許此掛勾編輯變更列表檔案,並且可以用於將文字正規化為某些專案標準格式。它也可以用於在檢查訊息檔案後拒絕提交。

執行 git-p4 submit --help 以取得詳細資訊。

p4-prepare-changelist

此掛勾由 git-p4 submit 觸發。

p4-prepare-changelist 掛勾在準備預設變更列表訊息之後,且在啟動編輯器之前執行。它接收一個參數,即包含變更列表文字的檔案名稱。從腳本以非零狀態退出將會中止程序。

此掛勾的目的是就地編輯訊息檔案,並且不會被 --no-verify 選項抑制。即使設定了 --prepare-p4-only,也會呼叫此掛勾。

執行 git-p4 submit --help 以取得詳細資訊。

p4-post-changelist

此掛勾由 git-p4 submit 觸發。

p4-post-changelist 掛勾在提交在 P4 中成功發生後觸發。它不接收任何參數,主要用於通知,不會影響 git p4 submit 動作的結果。

執行 git-p4 submit --help 以取得詳細資訊。

p4-pre-submit

此掛勾由 git-p4 submit 觸發。它不接收任何參數,也不從標準輸入接收任何內容。從此腳本以非零狀態退出會阻止 git-p4 submit 啟動。可以使用 --no-verify 命令列選項繞過它。執行 git-p4 submit --help 以取得詳細資訊。

post-index-change

當索引在 read-cache.c do_write_locked_index 中寫入時,會觸發此掛勾。

傳遞給此掛勾的第一個參數是正在更新的工作目錄指示符。「1」表示工作目錄已更新,「0」表示工作目錄未更新。

傳遞給此掛勾的第二個參數是索引是否已更新且 skip-worktree 位元是否可能已變更的指示符。「1」表示 skip-worktree 位元可能已更新,「0」表示未更新。

執行掛勾時,只能將一個參數設定為「1」。掛勾執行並傳遞「1」、「1」應該是不可能的。

另請參閱

GIT

屬於 git[1] 套件的一部分

scroll-to-top