Hook 腳本是一種程式,由某些儲存庫事件觸發,例如建立新的修訂版本或修改未版本化的屬性。每個 hook 都會收到足夠的資訊,以告知該事件是什麼、它正在操作的目標,以及觸發事件的人的使用者名稱。根據 hook 的輸出或傳回狀態,hook 程式可能會繼續該動作、停止它或以某種方式暫停它。有關已實作的 hook 的完整詳細資訊,請參閱 Subversion Book 中關於 Hook Scripts 的章節。
這些 hook 腳本由託管儲存庫的伺服器執行。TortoiseSVN 也允許您設定用戶端 hook 腳本,這些腳本在某些事件發生時於本機執行。有關更多資訊,請參閱標題為「用戶端 Hook 腳本」的章節。
範例 hook 腳本可以在儲存庫的 hooks
目錄中找到。這些範例腳本適用於 Unix/Linux 伺服器,但如果您的伺服器是基於 Windows 的,則需要修改。hook 可以是批次檔或可執行檔。下面的範例顯示了一個批次檔,可用於實作 pre-revprop-change hook。
rem Only allow log messages to be changed. if "%4" == "svn:log" exit 0 echo Property '%4' cannot be changed >&2 exit 1
請注意,任何傳送到 stdout 的內容都會被丟棄。如果您希望訊息出現在「提交拒絕」對話方塊中,則必須將其傳送到 stderr。在批次檔中,這可以使用 >&2
來實現。
如果 hook 腳本拒絕您的提交,則其決定是最終的。但是您可以使用 Magic Word 技術在腳本本身中建立覆寫機制。如果腳本想要拒絕操作,它首先會掃描日誌訊息以尋找特殊的密碼,可以是固定的短語,或者可能是帶有前綴的檔案名稱。如果找到 magic word,則允許提交繼續進行。如果找不到該短語,則可以使用類似 “您沒有說出 magic word” 這樣的訊息來阻止提交。 :-)