手冊

伺服器端 hook 腳本

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

如果 hook 腳本拒絕您的提交,則其決定是最終的。但是您可以使用 Magic Word 技術在腳本本身中建立覆寫機制。如果腳本想要拒絕操作,它首先會掃描日誌訊息以尋找特殊的密碼,可以是固定的短語,或者可能是帶有前綴的檔案名稱。如果找到 magic word,則允許提交繼續進行。如果找不到該短語,則可以使用類似 您沒有說出 magic word 這樣的訊息來阻止提交。 :-)

TortoiseSVN 首頁