手册

附录 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,对于可选的 peg 修订版,请使用 /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 中给出的工作副本的 URL,或者 /path 直接指向 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 主页