English ▾ 主題 ▾ 最新版本 ▾ githooks 最後更新於 2.54.0

名稱

githooks - Git 使用的掛鉤 (Hooks)

概要

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

描述

掛鉤是你可以放置在掛鉤目錄中的程式,用來在 Git 執行過程的特定點觸發動作。未設定執行位元 (executable bit) 的掛鉤會被忽略。

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

在 Git 呼叫掛鉤之前,它會將工作目錄切換到裸倉庫 (bare repository) 的 $GIT_DIR,或是非裸倉庫的工作樹根目錄。例外情況是在推送過程中觸發的掛鉤(pre-receiveupdatepost-receivepost-updatepush-to-checkout),這些掛鉤始終在 $GIT_DIR 中執行。

環境變數(如 GIT_DIRGIT_WORK_TREE 等)會被匯出,以便掛鉤執行的 Git 指令能正確定位到倉庫。如果你的掛鉤需要在外部倉庫或同一倉庫的不同工作樹中呼叫 Git 指令,則應清除這些環境變數,以免它們干擾外部位置的 Git 操作。例如

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

掛鉤可以透過環境、命令列參數和標準輸入 (stdin) 獲取其參數。詳細資訊請參閱下方各個掛鉤的說明文件。

git init 可能會將掛鉤複製到新倉庫,具體取決於其設定。詳細資訊請參閱 git-init[1] 中的「模板目錄」一節。本文檔其餘部分提到的「預設掛鉤」是指 Git 隨附的預設模板。

目前支援的掛鉤說明如下。

HOOKS (鉤子)

applypatch-msg

此掛鉤由 git-am[1] 呼叫。它接受單一參數,即保存建議提交日誌訊息的檔案名稱。若以非零狀態退出,會導致 git am 在應用修補程式前中止。

該掛鉤允許原地編輯訊息檔案,可用於將訊息標準化為某種專案標準格式。它也可用於在檢查訊息檔案後拒絕提交。

啟用後的預設 applypatch-msg 掛鉤,若 commit-msg 掛鉤也已啟用,則會執行該掛鉤。

pre-applypatch

此掛鉤由 git-am[1] 呼叫。它不接受參數,並在修補程式應用後、提交建立前呼叫。

如果它以非零狀態退出,則在應用修補程式後,工作樹將不會被提交。

它可以用於檢查目前的工作樹,若未通過特定測試,則拒絕建立提交。

啟用後的預設 pre-applypatch 掛鉤,若 pre-commit 掛鉤也已啟用,則會執行該掛鉤。

post-applypatch

此掛鉤由 git-am[1] 呼叫。它不接受參數,並在修補程式應用且提交建立後呼叫。

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

pre-commit

此掛鉤由 git-commit[1] 呼叫,可透過 --no-verify 選項繞過。它不接受參數,在獲取建議的提交日誌訊息並建立提交之前呼叫。若此指令碼以非零狀態退出,會導致 git commit 指令在建立提交前中止。

如果指令不會啟動編輯器來修改提交訊息,則所有 git commit 掛鉤執行時都會帶有環境變數 GIT_EDITOR=:

啟用後的預設 pre-commit 掛鉤,會防止引入非 ASCII 檔名以及行尾包含空白字元的行。可透過將 hooks.allownonascii 設定選項設為 true 來關閉非 ASCII 檢查。

pre-merge-commit

此掛鉤由 git-merge[1] 呼叫,可透過 --no-verify 選項繞過。它不接受參數,在合併成功執行後、獲取建議的提交日誌訊息以進行提交之前呼叫。若此指令碼以非零狀態退出,會導致 git merge 指令在建立提交前中止。

啟用後的預設 pre-merge-commit 掛鉤,若 pre-commit 掛鉤也已啟用,則會執行該掛鉤。

如果指令不會啟動編輯器來修改提交訊息,則此掛鉤執行時會帶有環境變數 GIT_EDITOR=:

如果無法自動進行合併,則需要解決衝突並分別提交結果(參閱 git-merge[1])。在這種情況下,此掛鉤不會執行,但若 pre-commit 掛鉤已啟用,則會執行它。

prepare-commit-msg

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

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

如果退出狀態為非零,git commit 將會中止。

此掛鉤的目的是原地編輯訊息檔案,且它不會被 --no-verify 選項抑制。非零退出意味著掛鉤失敗並中止提交。它不應用作 pre-commit 掛鉤的替代品。

Git 附帶的範例 prepare-commit-msg 掛鉤會移除提交模板註解部分中的說明訊息。

commit-msg

此掛鉤由 git-commit[1]git-merge[1] 呼叫,可透過 --no-verify 選項繞過。它接受單一參數,即保存建議提交日誌訊息的檔案名稱。若以非零狀態退出,會導致指令中止。

該掛鉤允許原地編輯訊息檔案,可用於將訊息標準化為某種專案標準格式。它也可用於在檢查訊息檔案後拒絕提交。

啟用後的預設 commit-msg 掛鉤會偵測重複的 Signed-off-by 結尾內容,若發現重複則中止提交。

post-commit

此掛鉤由 git-commit[1] 呼叫。它不接受參數,並在提交建立後呼叫。

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

pre-rebase

此掛鉤由 git-rebase[1] 呼叫,可用於防止分支被變基 (rebase)。掛鉤可能使用一個或兩個參數呼叫。第一個參數是變基系列所衍生的上游。第二個參數是要變基的分支,當變基目前分支時不會設定此參數。

post-checkout

此掛鉤在 git-checkout[1]git-switch[1] 更新工作樹後呼叫。此掛鉤會給予三個參數:上一個 HEAD 的引用 (ref)、新 HEAD 的引用(可能已變更也可能未變更),以及一個旗標,指示檢出是分支檢出(切換分支,flag=1)還是檔案檢出(從索引檢索檔案,flag=0)。此掛鉤除了能讓自身的退出狀態成為這兩個指令的退出狀態外,無法影響 git switchgit checkout 的結果。

它也會在 git-clone[1] 後執行,除非使用了 --no-checkout (-n) 選項。給予此掛鉤的第一個參數是 null-ref,第二個是新 HEAD 的引用,旗標始終為 1。對於 git worktree add,除非使用了 --no-checkout,否則也一樣。

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

post-merge

此掛鉤由 git-merge[1] 呼叫(當在本地倉庫執行 git pull 時發生)。此掛鉤接受單一參數,一個狀態旗標,指定所進行的合併是否為壓縮合併 (squash merge)。此掛鉤無法影響 git merge 的結果;若合併因衝突而失敗,則不會執行。

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

pre-push

此掛鉤由 git-push[1] 呼叫,可用於防止推送發生。呼叫掛鉤時會提供兩個參數,分別是目標遠端名稱和位置;若未使用具名遠端,則兩個值相同。

關於要推送的內容資訊會透過標準輸入提供給掛鉤,格式如下

<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

雖然會提供完整的物件名稱。如果遠端引用尚不存在,<remote-object-name> 將會是全零的物件名稱。如果要刪除某個引用,<local-ref> 將會顯示為 (delete),而 <local-object-name> 將會是全零的物件名稱。如果本地提交是由無法展開的名稱(如 HEAD~ 或物件名稱)指定的,則會按原始給定的名稱提供。

如果此掛鉤以非零狀態退出,git push 將會中止且不推送任何內容。關於推送被拒絕的原因,可以透過寫入標準錯誤來通知使用者。

pre-receive

此掛鉤由 git-receive-pack[1] 在對 git push 做出反應並更新其倉庫中的引用時呼叫。就在開始更新遠端倉庫中的引用之前,會呼叫 pre-receive 掛鉤。其退出狀態決定了更新的成功或失敗。

此掛鉤針對接收操作執行一次。它不接受參數,但對於每個要更新的引用,它會在標準輸入接收到一行格式如下的內容

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

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

如果掛鉤以非零狀態退出,則不會更新任何引用。如果掛鉤以零狀態退出,個別引用的更新仍可能被 update 掛鉤阻止。

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

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

請參閱 git-receive-pack[1] 中關於「隔離環境 (Quarantine Environment)」一節以了解注意事項。

update

此掛鉤由 git-receive-pack[1] 在對 git push 做出反應並更新其倉庫中的引用時呼叫。就在更新遠端倉庫中的引用之前,會呼叫 update 掛鉤。其退出狀態決定了引用更新的成功或失敗。

該掛鉤針對每個要更新的引用執行一次,並接受三個參數

  • 要更新的引用名稱,

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

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

update 掛鉤以零退出允許更新該引用。以非零狀態退出會防止 git receive-pack 更新該引用。

此掛鉤可用於透過確保物件名稱是舊物件名稱所命名的提交物件的後代,來防止對特定引用進行強制更新。也就是說,強制執行「僅限快轉 (fast-forward only)」策略。

它也可以用來記錄 old..new 的狀態。然而,它不知道分支的全貌,因此若簡單地使用,最終會對每個引用發送一封電子郵件。這時 post-receive 掛鉤更適合此用途。

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

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

啟用後的預設 update 掛鉤(且 hooks.allowunannotated 設定選項未設定或設為 false 時)會防止推送未註釋的標籤 (unannotated tags)。

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 掛鉤的每個指令可能指向一個偽引用 (pseudo-reference),且其 old-oid 始終為零,而 proc-receive 掛鉤可能會更新一個替代引用,且該替代引用可能已經存在一個非零的 old-oid。在這種情況下,此掛鉤將使用「option」指令來報告由「ok」開頭指令給出的引用的擴充屬性。

此掛鉤的指令報告順序應與輸入順序相同。除非正在使用原子推送,否則 proc-receive 掛鉤的退出狀態僅決定發送給它的那組指令的成功或失敗。

post-receive

此掛鉤由 git-receive-pack[1] 在對 git push 做出反應並更新其倉庫中的引用時呼叫。此掛鉤在遠端倉庫執行一次,發生在所有提議的引用更新處理完畢,且結果至少有一個引用被更新之後。

此掛鉤不接受參數。它會在標準輸入接收每一行成功更新的引用資訊,格式與 pre-receive 掛鉤相同。

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

這取代了 post-update 掛鉤,因為它除了獲得所有引用的名稱外,還能同時獲得舊值和新值。

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

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

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

詳細資訊請參閱 git-receive-pack[1] 中的「post-receive」一節。

post-update

此掛鉤由 git-receive-pack[1] 在對 git push 做出反應並更新其倉庫中的引用時呼叫。它在遠端倉庫執行一次,發生在所有引用更新完成後。

它接受不定數量的參數,每個參數都是實際更新的引用名稱。

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

post-update 掛鉤可以得知哪些 HEAD 被推送了,但不知道它們的原始值和更新後的值,因此不適合用來執行 old..new 的日誌記錄。post-receive 掛鉤確實能取得引用的原始值和更新值。如果你需要這些資訊,可以考慮使用它。

啟用後的預設 post-update 掛鉤會執行 git update-server-info,以保持啞傳輸 (dumb transports,如 HTTP) 使用的資訊為最新狀態。如果你正在發佈一個可透過 HTTP 存取的 Git 倉庫,你應該啟用此掛鉤。

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

reference-transaction

此掛鉤由任何執行引用更新的 Git 指令呼叫。只要引用交易正在準備中、已準備好、已提交或已中止,它就會執行,因此可能會被多次呼叫。該掛鉤也支援符號引用更新。

此掛鉤接受唯一的一個參數,即給定引用交易目前的狀態:

  • "preparing":所有引用更新都已排入交易隊列,但引用尚未在磁碟上鎖定。

  • "prepared":所有引用更新都已排入交易隊列,且引用已在磁碟上鎖定。

  • "committed":引用交易已提交,所有引用現在都有各自的新值。

  • "aborted":引用交易已中止,未執行任何變更,且鎖已釋放。

對於加入交易的每個引用更新,掛鉤會在標準輸入接收一行格式如下的內容:

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

其中 <old-value> 是傳入引用交易的舊物件名稱,<new-value> 是要儲存在引用中的新物件名稱,<ref-name> 是引用的完整名稱。當無論目前值為何而強制更新引用,或當引用是重新建立時,<old-value> 是全零的物件名稱。若要區分這些情況,你可以透過 git rev-parse 檢查 <ref-name> 的目前值。在「preparing」狀態期間,符號引用不會被解析:<ref-name> 將反映符號引用本身,而不是它所指向的物件。

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

除「preparing」和「prepared」狀態外,掛鉤的退出狀態將被忽略。在這些狀態下,非零的退出狀態會導致交易被中止。在這種情況下,掛鉤將不會以「aborted」狀態被呼叫。

push-to-checkout

此掛鉤由 git-receive-pack[1] 在對 git push 做出反應並更新其倉庫中的引用時呼叫,且當推送嘗試更新目前已檢出的分支,且 receive.denyCurrentBranch 設定變數設為 updateInstead 時觸發。這種推送預設情況下,若遠端倉庫的工作樹和索引與目前檢出的提交有任何差異,則會被拒絕;當工作樹和索引都符合目前提交時,它們會被更新以匹配剛推送的分支尖端。此掛鉤用於覆寫預設行為。

此掛鉤接收目前分支尖端將被更新到的提交。它可以以非零狀態退出以拒絕推送(此時它不得修改索引或工作樹)。或者,當目前分支尖端更新到新提交時,它可以在工作樹和索引中進行任何必要的變更以使其達到所需狀態,並以零狀態退出。

例如,掛鉤可以簡單地執行 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

extra-info 再次與指令相關。如果它為空,則前面的 SP (空格) 也會被省略。目前沒有指令會傳遞任何 extra-info

此掛鉤始終在自動註釋複製(參閱 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 的內容。

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

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

一個 1 基底的計數器,每處理一個保存電子郵件內容的檔案(不包括任何 FIFO)就會遞增 1。此計數器不遵循修補程式系列計數器方案。它始終從 1 開始,並以 GIT_SENDEMAIL_FILE_TOTAL 結束。

GIT_SENDEMAIL_FILE_TOTAL

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

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

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。此版本必須在檔案列表之前將新 Token 後接一個 NUL 輸出到 stdout。

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

包含未實際變更的檔案是可以的。所有變更(包括新建立和刪除的檔案)都應包含在內。當檔案被重新命名時,舊名稱和新名稱都應包含在內。

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

告訴 git「所有檔案都已變更」的優化方法是返回檔名 /

退出狀態決定了 git 是否會使用來自掛鉤的資料來限制搜尋。若發生錯誤,它將回退到驗證所有檔案和資料夾。

p4-changelist

此掛鉤由 git-p4 submit 呼叫。

p4-changelist 掛鉤在 changelist 訊息被使用者編輯後執行。它可透過 --no-verify 選項繞過。它接受單一參數,即保存建議 changelist 文字的檔案名稱。以非零狀態退出會導致指令中止。

該掛鉤允許編輯 changelist 檔案,可用於將文字標準化為某種專案標準格式。它也可用於在檢查訊息檔案後拒絕提交 (Submit)。

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

p4-prepare-changelist

此掛鉤由 git-p4 submit 呼叫。

p4-prepare-changelist 掛鉤在準備好預設 changelist 訊息後、編輯器啟動前執行。它接受一個參數,即包含 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] 套件的一部分