使用TortoiseSVN提交時,每次都填寫日誌資訊比較繁瑣。
Subversion命令列用戶端可以通過選項“--file”(“-F”)從檔案載入日誌資訊。
TSVN雖然可以很方便的選擇曆史訊息,但是當前的最新版本“TortoiseSVN 1.6.12”好像還不支援選擇從檔案匯入日誌資訊。
不過我們可以利用TSVN的“鉤子指令碼”來實作類別似的功能,讓它自動從某些檔案中讀取日誌資訊並填入提交對話方塊。
TSVN在執行提交或者更新的前後,會調用相應的鉤子指令碼,我們可以利用這些指令碼做一些預先處理或後處理。
關於TSVN鉤子指令碼的官方範例,可以參考這裡:http://tortoisesvn.googlecode.com/svn/trunk/contrib/hook-scripts/
假設我希望TSVN在每次提交前尋找“readme.txt”檔案,將其內容填寫進“提交對話方塊”的日誌資訊中,以供我進一步修改。
TSVN在提交之前,會產生幾個臨時檔案,其中一個用來存放“提交”命令操作的檔案路徑列表,還有一個用來存放日誌資訊。
我們需要設定一個“啟動提交鉤子”(Start Commit Hook)指令碼,TSVN會在彈出對話方塊之前先調用此指令碼,並將臨時檔案的路徑作為命令列參數傳給它。之後我們可以在此指令碼中修改臨時檔案的內容,以此來改變“提交對話方塊”中的內容。
首先編寫鉤子指令檔:"C:/tsvn_hook/import_log_message_from_readme.txt.js"
// 啟動提交鉤子(Start Commit Hook)指令碼。<br />// 將目前的目錄中的“readme.txt”檔案內容填入“提交對話方塊”的日誌資訊中。</p><p>var args = WScript.Arguments; // 鉤子指令碼被調用時,由TSVN傳入的參數<br />var list = args(0); // 提交列表臨時檔案路徑<br />var message = args(1); // 日誌訊息臨時檔案路徑<br />var cwd = args(2); // 指令碼執行的當前工作目錄路徑</p><p>// 使用FSO在當前工作目錄中尋找是否存在“readme.txt”檔案<br />var fso = new ActiveXObject('Scripting.FileSystemObject');<br />var readme = cwd + '//readme.txt';<br />if (fso.FileExists(readme)) {<br />// 使用當前系統預設的編碼方式(ANSI)讀取文字檔<br />var ts = fso.OpenTextFile(readme, 1, false);<br />var text = ts.ReadAll();<br />ts.Close();</p><p>// 使用ADO Stream對象重新輸出utf-8編碼的檔案,覆蓋日誌訊息檔案<br />// TSVN將從訊息檔案中以utf-8編碼讀出訊息,並填入提交對話方塊<br />var stream = new ActiveXObject('Adodb.Stream');<br />stream.Mode = 3; // read/write<br />stream.Open();<br />stream.Type = 2; // text<br />stream.Charset = 'utf-8';<br />stream.WriteText(text);<br />stream.SaveToFile(message, 2); // overwrite<br />stream.Close();<br />}
(圖片:TSVN設定鉤子指令碼對話方塊)
TSVN鉤子指令碼設定:
鉤子類型(Hook Type)選擇“啟動提交鉤子”(“Start Commit Hook”)。表示在提交對話方塊彈出之前執行鉤子指令碼。
工作複本路徑(Working Copy Path)填寫要應用此鉤子指令碼的工作複本路徑。
要執行的命令列(Command Line To Execute)填寫如下命令:
WScript.exe "C:/tsvn_client_hook_scripts/start_commit_hook_Import_log_message_from_readme.txt.js"
檔案名稱與前面建立的鉤子指令檔對應,路徑中如果包含空格則需要用雙引號括起來。
等待指令碼運行結束(Wait for the script to finish)複選框必須勾上。若未勾上,TSVN會立即彈出提交對話方塊,而不會等待鉤子指令碼執行完成。因為我們需要在對話方塊彈出之前修改TSVN的臨時檔案,所以必須保證指令碼已經執行完成。
(圖片:TSVN提交測試,自動填寫日誌資訊)
設定完成後,轉到應用了鉤子指令碼的工作複本檔案夾,建立一個readme.txt檔案,隨意填寫一些內容,然後提交此工作複本,會看到TSVN彈出的對話方塊中已經把readme.txt的內容自動填寫進去了,我們還可以在此處進一步修改日誌資訊。
PS:上述鉤子指令碼為TortoiseSVN的用戶端鉤子指令碼,只對當前的TSVN用戶端有效,與Subversion命令列用戶端及服務端無關。
PS:TSVN用戶端鉤子指令碼並非預設對所有的工作複本有效。必須在鉤子指令碼設定中指定需要生效“工作複本路徑”。
不過經測試發現,此路徑並非一定要填寫真實的工作複本路徑。
可填寫一個任意的路徑,其下級目錄的所有工作複本都會應用此鉤子指令碼。如果希望某個邏輯磁碟機下面的所有工作複本都夠能應用此鉤子指令碼,直接填寫磁碟機的根路徑即可(比如“C:/”)。
甚至可以直接填寫星號(*),那樣當前TSVN用戶端在處理任何工作複本時,此鉤子指令碼都會生效了。