手冊

附錄 D. TortoiseSVN 自動化

目錄

TortoiseSVN 命令
Tsvncmd URL 處理器
TortoiseIDiff 命令
TortoiseUDiff 命令

由於 TortoiseSVN 的所有命令都透過命令列參數控制,您可以使用批次腳本自動化它,或從其他程式(例如您最愛的文字編輯器)啟動特定的命令和對話方塊。

重要事項

請記住,TortoiseSVN 是一個 GUI 用戶端,本自動化指南向您展示如何讓 TortoiseSVN 對話方塊出現以收集使用者輸入。如果您想編寫一個不需要任何輸入的腳本,您應該改用官方的 Subversion 命令列用戶端。

TortoiseSVN 命令

TortoiseSVN GUI 程式稱為 TortoiseProc.exe。所有命令都使用參數 /command:abcd 指定,其中 abcd 是所需的命令名稱。這些命令大多數至少需要一個路徑引數,該引數使用 /path:"some\path" 給定。在下表中,「命令」指的是 /command:abcd 參數,「路徑」指的是 /path:"some\path" 參數。

有一個特殊的命令不需要 /command:abcd 參數,但是,如果命令列上未指定任何內容,則會啟動專案監視器。如果指定了 /tray,則專案監視器會隱藏啟動,並且只將其圖示新增到系統匣。

由於某些命令可以接受目標路徑列表(例如,提交多個特定檔案),因此 /path 參數可以接受多個路徑,路徑之間以 * 字元分隔。

您也可以指定一個檔案,其中包含以換行符號分隔的路徑列表。該檔案必須是 UTF-16 格式,沒有 BOM 。如果您傳遞了這樣一個檔案,請使用 /pathfile 而不是 /path。若要讓 TortoiseProc 在命令完成後刪除該檔案,您可以傳遞參數 /deletepathfile。如果您不傳遞 /deletepathfile,則必須自行刪除該檔案,否則該檔案將會被留下。

用於提交、更新和許多其他命令的進度對話方塊通常會在命令完成後保持開啟狀態,直到使用者按下 確定 按鈕。可以透過勾選設定對話方塊中的相應選項來變更此行為。但是使用該設定將關閉進度對話方塊,無論您是從批次檔案還是從 TortoiseSVN 內容選單啟動命令。

若要指定組態檔案的不同位置,請使用參數 /configdir:"path\to\config\directory"。這將覆寫預設路徑,包括任何登錄設定。

若要在命令結束時自動關閉進度對話方塊,而無需使用永久設定,您可以傳遞 /closeonend 參數。

  • /closeonend:0 不自動關閉對話方塊

  • /closeonend:1 如果沒有錯誤則自動關閉

  • /closeonend:2 如果沒有錯誤和衝突則自動關閉

  • /closeonend:3 如果沒有錯誤、衝突和合併則自動關閉

若要在本機操作沒有錯誤或衝突時關閉進度對話方塊,請傳遞 /closeforlocal 參數。

下表列出了可以使用 TortoiseProc.exe 命令列存取的所有命令。如上所述,這些命令應以 /command:abcd 的形式使用。在下表中,為了節省空間,省略了 /command 字首。

表 D.1. 可用命令和選項列表

命令描述
:about顯示關於對話方塊。如果未給定任何命令,也會顯示此對話方塊。
:log

開啟日誌對話方塊。/path 指定應顯示日誌的檔案或資料夾。可以設定其他選項

  • /startrev:xxx,

  • /endrev:xxx,

  • /limit:xxx 限制擷取訊息的數量

  • /pegrev:xxx 在特定修訂版本中查找路徑。

  • /strict 啟用「停止於複製」核取方塊,

  • /merge 啟用「包含合併的修訂版本」核取方塊,

  • /datemin:"{datestring}" 設定篩選器的開始日期,以及

  • /datemax:"{datestring}" 設定篩選器的結束日期。日期格式與 svn 日期修訂版本使用的格式相同。

  • /findstring:"filterstring" 填寫篩選文字,

  • /findtext 強制篩選器使用文字,而不是正規表示式,或

  • /findregex 強制篩選器使用正規表示式,而不是簡單的文字搜尋,以及

  • /findtype:X,其中 X 是介於 0 到 511 之間的數字。數字是以下選項的總和

    • /findtype:0 依所有項目篩選

    • /findtype:1 依訊息篩選

    • /findtype:2 依路徑篩選

    • /findtype:4 依作者篩選

    • /findtype:8 依修訂版本篩選

    • /findtype:16 未使用

    • /findtype:32 依錯誤 ID 篩選

    • /findtype:64 未使用

    • /findtype:128 依日期篩選

    • /findtype:256 依日期範圍篩選

  • 如果指定了 /outfile:path\to\file,則在關閉日誌對話方塊時,選定的修訂版本會寫入該檔案。修訂版本以與在合併對話方塊中指定修訂版本相同的格式寫入。

svn 日期修訂版本可以是以下格式之一

  • {2006-02-17}

  • {15:30}

  • {15:30:00.200000}

  • {"2006-02-17 15:30"}

  • {"2006-02-17 15:30 +0230"}

  • {2006-02-17T15:30}

  • {2006-02-17T15:30Z}

  • {2006-02-17T15:30-04:00}

  • {20060217T1530}

  • {20060217T1530Z}

  • {20060217T1530-0500}

:checkout

開啟簽出對話方塊。/path 指定目標目錄,/url 指定要簽出的 URL。如果您指定金鑰 /blockpathadjustments,則會封鎖自動簽出路徑調整。/revision:XXX 指定要簽出的修訂版本。

如果您指定 /outfile:"path/to/file",則在簽出後,指定的檔案將包含三行。第一行是簽出路徑,第二行是 URL,第三行是修訂版本。

:import開啟匯入對話方塊。/path 指定要匯入資料的目錄。您也可以指定 /logmsg 參數,將預先定義的日誌訊息傳遞到匯入對話方塊。或者,如果您不想在命令列上傳遞日誌訊息,請使用 /logmsgfile:path,其中 path 指向包含日誌訊息的檔案。
:update/path 中的工作副本更新到 HEAD。如果給定了選項 /rev,則會顯示一個對話方塊,詢問使用者應更新到哪個修訂版本。若要避免顯示對話方塊,請指定修訂版本號碼 /rev:1234。其他選項包括 /nonrecursive/ignoreexternals/includeexternals/stickydepth 表示指定的深度應為黏著性的,從而建立稀疏簽出。/skipprechecks 可以設定為跳過在更新之前完成的所有檢查。如果指定了此選項,則會停用 顯示日誌 按鈕,並且在更新後也會停用顯示差異的內容選單。
:commit開啟提交對話方塊。/path 指定目標目錄或要提交的檔案列表。您也可以指定 /logmsg 參數,將預先定義的日誌訊息傳遞到提交對話方塊。或者,如果您不想在命令列上傳遞日誌訊息,請使用 /logmsgfile:path,其中 path 指向包含日誌訊息的檔案。若要預先填寫錯誤 ID 方塊(如果您已正確設定與錯誤追蹤器的整合),您可以使用 /bugid:"the bug id here" 來執行此操作。
:add/path 中的檔案新增至版本控制。
:revert還原工作副本的本機修改。/path 告知要還原的項目。
:cleanup清除中斷或中止的操作,並解除鎖定 /path 中的工作副本。您還必須傳遞 /cleanup 才能實際執行清除。使用 /noui 以防止結果對話方塊彈出(告知清除已完成或顯示錯誤訊息)。/noprogressui 也會停用進度對話方塊。/nodlg 停用顯示清除對話方塊,使用者可以在其中選擇應在清除中執行的具體操作。可用的動作可以使用選項 /cleanup 進行狀態清除、/breaklocks 斷開所有鎖定、/revert 還原未提交的變更、/delunversioned/delignored/refreshshell/externals/fixtimestamps/vacuum 來指定。
:resolve/path 中指定的衝突檔案標記為已解決。如果給定了 /noquestion,則在解決時不會先詢問使用者是否真的應該執行此操作。
:repocreate/path 中建立儲存庫
:switch開啟切換對話方塊。/path 指定目標目錄,/url 指定要切換到的 URL。
:export/path 中的工作副本匯出到另一個目錄。如果 /path 指向未版本控制的目錄,則會顯示一個對話方塊,詢問要匯出到 /path 中目錄的 URL。如果您指定金鑰 /blockpathadjustments,則會封鎖自動匯出路徑調整。
:dropexport/path 中的工作副本匯出到 /droptarget 中指定的目錄。此匯出不使用匯出對話方塊,而是直接執行。選項 /overwrite 指定覆寫現有檔案時不需使用者確認,選項 /autorename 指定如果檔案已存在,則匯出的檔案會自動重新命名以避免覆寫。選項 /extended 可以指定 localchanges 以僅匯出本機變更的檔案,或指定 unversioned 以同時匯出所有未版本控制的項目。
:dropvendor/path 中的資料夾遞迴複製到 /droptarget 中指定的目錄。新檔案會自動新增,目標工作副本中遺失的檔案會被移除,基本上確保來源和目的地完全相同。指定 /noui 以跳過確認對話方塊,並指定 /noprogressui 以同時停用顯示進度對話方塊。
:merge開啟合併對話方塊。/path 指定目標目錄。對於合併修訂版本範圍,可以使用以下選項:/fromurl:URL/revrange:string。對於合併兩個儲存庫樹狀結構,可以使用以下選項:/fromurl:URL/tourl:URL/fromrev:xxx/torev:xxx
:mergeall開啟合併全部對話方塊。/path 指定目標目錄。
:copy開啟分支/標籤對話方塊。/path 是要從中建立分支/標籤的工作副本。/url 是目標 URL。如果 URL 以 ^ 開頭,則假定它相對於儲存庫根目錄。若要預先勾選 將工作副本切換到新的分支/標籤 選項,您可以傳遞 /switchaftercopy 參數。若要勾選 建立中繼資料夾 選項,請傳遞 /makeparents 參數。您也可以指定 /logmsg 參數,將預先定義的日誌訊息傳遞到分支/標籤對話方塊。或者,如果您不想在命令列上傳遞日誌訊息,請使用 /logmsgfile:path,其中 path 指向包含日誌訊息的檔案。
:settings開啟設定對話方塊。
:remove從版本控制中移除 /path 中的檔案。
:rename重新命名 /path 中的檔案。檔案的新名稱會在對話方塊中詢問。若要避免詢問是否要一步重新命名類似的檔案,請傳遞 /noquestion
:diff啟動 TortoiseSVN 設定中指定的外部差異程式。/path 指定第一個檔案。如果設定了選項 /path2,則會使用這兩個檔案啟動差異程式。如果省略 /path2,則會在 /path 中的檔案及其 BASE 之間進行差異比較。如果指定的檔案也有屬性修改,則也會為每個修改的屬性啟動外部差異工具。若要防止這種情況,請傳遞選項 /ignoreprops。若要明確設定修訂版本號碼,請使用 /startrev:xxx/endrev:xxx,對於可選的釘住修訂版本,請使用 /pegrev:xxx。如果設定了 /blame 且未設定 /path2,則會先使用給定的修訂版本 blame 檔案來完成差異比較。參數 /line:xxx 指定在顯示差異時要跳轉到的行。
:shelve將指定的路徑暫存到新的暫存架中。選項 /shelfname:name 指定暫存架的名稱。可以使用 /logmsg:message 指定可選的日誌訊息。如果傳遞了選項 /checkpoint,則會保留檔案的修改。
:unshelve將名稱為 /shelfname:name 的暫存架應用於工作副本路徑。預設情況下,會應用暫存架的最後一個版本,但您可以使用 /version:X 指定版本。
:showcompare

根據要比較的 URL 和修訂版本,這會顯示統一差異(如果設定了選項 unified),一個包含已變更檔案列表的對話方塊,或者如果 URL 指向檔案,則會為這兩個檔案啟動差異檢視器。

必須指定選項 url1url2revision1revision2。選項 pegrevignoreancestryblameunified 是可選的。

如果指定的 URL 也有屬性修改,則也會為每個修改的屬性啟動外部差異工具。若要防止這種情況,請傳遞選項 /ignoreprops

如果請求了統一差異,則可以指定可選的 prettyprint 選項,這將以更易於使用者閱讀的格式顯示合併資訊屬性。

:conflicteditor使用 /path 中衝突檔案的正確檔案,啟動 TortoiseSVN 設定中指定的衝突編輯器。
:relocate開啟重新定位對話方塊。/path 指定要重新定位的工作副本路徑。
:help開啟說明檔案。
:repostatus開啟檢查修改對話方塊。/path 指定工作副本目錄。如果指定了 /remote,則對話方塊會在啟動時立即聯絡儲存庫,就像使用者按一下 檢查儲存庫 按鈕一樣。
:repobrowser

啟動儲存庫瀏覽器對話方塊,指向 /path 中給定的工作副本或 /path 直接指向 URL 的 URL。

/pegrev:xxx 可用於在特定修訂版本中查找路徑。

可以使用其他選項 /rev:xxx 來指定儲存庫瀏覽器應顯示的修訂版本。如果省略 /rev:xxx,則預設為 HEAD。

如果 /path 指向 URL,則 /projectpropertiespath:path/to/wc 指定從何處讀取和使用專案屬性的路徑。

如果指定了 /outfile:path\to\file,則在關閉儲存庫瀏覽器時,選定的 URL 和修訂版本會寫入該檔案。該文字檔案中的第一行包含 URL,第二行包含文字格式的修訂版本。

:ignore/path 中的所有目標新增到忽略列表,即將 svn:ignore 屬性新增到這些檔案。
:blame

開啟 /path 中指定的檔案的 blame 對話方塊。

如果設定了選項 /startrev/endrev,則不會顯示詢問 blame 範圍的對話方塊,而是改為使用這些選項的修訂版本值。

/pegrev:xxx 可用於在特定修訂版本中查找路徑。

如果設定了選項 /line:nnn,TortoiseBlame 將開啟並顯示指定的行號。

也支援選項 /ignoreeol/ignorespaces/ignoreallspaces

:cat/path 中給定的 URL 或工作副本路徑中的檔案儲存到 /savepath:path 中給定的位置。修訂版本在 /revision:xxx 中給定。這可以用於取得具有特定修訂版本的檔案。
:createpatch/path 中給定的路徑建立修補程式檔案。若要跳過「另存新檔」對話方塊,您可以傳遞 /savepath:path 以指定要將修補程式檔案直接儲存到的路徑。若要防止啟動統一差異檢視器來顯示修補程式檔案,請傳遞 /noview。如果請求了統一差異,則可以指定可選的 prettyprint 選項,這將以更易於使用者閱讀的格式顯示合併資訊屬性。
:revisiongraph

顯示 /path 中給定路徑的修訂版本圖表。

/pegrev:xxx 可用於在特定修訂版本中查找路徑。

若要為特定路徑建立修訂版本圖表的影像檔案,但不顯示圖表視窗,請傳遞 /output:path 以及輸出檔案的路徑。輸出檔案必須具有修訂版本圖表實際可以匯出的副檔名。這些副檔名包括:.svg.wmf.png.jpg.bmp.gif

由於修訂版本圖表有許多選項會影響其顯示方式,因此您也可以設定在建立輸出影像檔案時要使用的選項。使用 /options:XXXX 傳遞這些選項,其中 XXXX 是十進位值。找到所需選項的最佳方法是以通常的方式啟動修訂版本圖表,設定所有使用者介面選項並關閉圖表。然後可以從登錄檔 HKCU\Software\TortoiseSVN\RevisionGraphOptions 中讀取您需要在命令列上傳遞的選項。

:lock鎖定 /path 中給定的檔案或目錄中的所有檔案。將顯示「鎖定」對話方塊,以便使用者可以輸入鎖定的註解。
:unlock解除鎖定 /path 中給定的檔案或目錄中的所有檔案。
:rebuildiconcache重建 Windows 圖示快取。僅在 Windows 圖示損壞時使用此命令。這樣做的一個副作用(無法避免)是桌面上的圖示會重新排列。若要隱藏訊息方塊,請傳遞 /noquestion
:properties

顯示 /path 中給定路徑的屬性對話方塊。

對於處理版本控制的屬性,此命令需要工作副本。

如果 /path 是 URL 且指定了 /rev:XXX,則可以檢視/變更修訂版本屬性。

若要直接為特定屬性開啟屬性對話方塊,請將屬性名稱作為 /property:name 傳遞。

:sync

匯出/匯入設定,取決於目前設定或匯出的設定是否較新,或根據指定的方式。

如果使用 /path 傳遞路徑,則該路徑用於儲存或從中讀取設定。

參數 /askforpath 將顯示檔案開啟/儲存對話方塊,供使用者選擇匯出/匯入路徑。

如果未指定 /load/save,則 TortoiseSVN 會透過查看哪個設定較新來判斷是匯出還是匯入設定。如果匯出檔案比目前設定更新,則會從檔案載入設定。如果目前設定比匯出檔案更新,則會將設定匯出到設定檔案。

如果指定了 /load,則會從設定檔案匯入設定。

如果指定了 /save,則會將目前設定匯出到設定檔案。

參數 /local 強制設定匯出包含本機設定,即參考本機路徑的設定。


範例 (應在一行中輸入)

TortoiseProc.exe /command:commit
                 /path:"c:\svn_wc\file1.txt*c:\svn_wc\file2.txt"
                 /logmsg:"test log message" /closeonend:0

TortoiseProc.exe /command:update /path:"c:\svn_wc\" /closeonend:0

TortoiseProc.exe /command:log /path:"c:\svn_wc\file1.txt"
                 /startrev:50 /endrev:60 /closeonend:0

TortoiseSVN 首頁