手册

附录 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 限制获取的消息数量

  • /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 指向未版本化的目录,则会弹出一个对话框,要求提供一个 URL,以将 /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 设置中指定的外部 diff 程序。选项 /path 指定第一个文件。如果设置了选项 /path2,则使用这两个文件启动 diff 程序。如果省略了 /path2,则在 /path 中的文件与其 BASE 之间进行 diff。如果指定的文件也具有属性修改,则也会为每个修改的属性启动外部 diff 工具。要防止这种情况,请传递选项 /ignoreprops。要显式设置修订版本号,请使用 /startrev:xxx/endrev:xxx,并为可选的挂钩修订版本使用 /pegrevision:xxx。如果设置了 /blame 并且未设置 /path2,则首先使用给定的修订版本对文件进行 blame,然后进行 diff。参数 /line:xxx 指定在显示 diff 时要跳转到的行。
:shelve 将指定路径保存在一个新的搁置区中。选项 /shelfname:name 指定搁置区的名称。可以使用 /logmsg:message 指定可选的日志消息。如果传递了选项 /checkpoint,则会保留文件的修改。
:unshelve 将名称为 /shelfname:name 的搁置区应用于工作副本路径。默认情况下,将应用搁置区的最新版本,但可以使用 /version:X 指定版本。
:showcompare

根据要比较的 URL 和修订版本,此命令将显示统一 diff(如果设置了选项 unified)、包含已更改文件列表的对话框,或者如果 URL 指向文件,则启动这些文件的 diff 查看器。

必须指定选项 url1url2revision1revision2。选项 pegrevisionignoreancestryblameunified 是可选的。

如果指定的 URL 也具有属性修改,则也会为每个修改的属性启动外部 diff 工具。要防止这种情况,请传递选项 /ignoreprops

如果请求统一 diff,则可以指定可选的 prettyprint 选项,该选项将以更易于用户阅读的格式显示合并信息属性。

:conflicteditor 使用 TortoiseSVN 设置中指定的冲突编辑器启动 /path 中冲突文件的正确文件。
:relocate 打开重定位对话框。 /path 指定要重定位的工作副本路径。
:help 打开帮助文件。
:repostatus 打开检查修改对话框。 /path 指定工作副本目录。如果指定了 /remote,则对话框在启动时立即联系存储库,就像用户单击了 检查存储库 按钮一样。
:repobrowser

启动存储库浏览器对话框,指向 /path 中给出的工作副本的 URL,或者 /path 直接指向 URL。

可以使用附加选项 /rev:xxx 指定存储库浏览器应显示的修订版。如果省略了 /rev:xxx,则默认为 HEAD。

如果 /path 指向 URL,则 /projectpropertiespath:path/to/wc 指定从哪里读取和使用项目属性的路径。

如果指定了 /outfile:path\to\file,则在关闭存储库浏览器时,选定的 URL 和修订版将写入该文件。该文本文件的第一行包含 URL,第二行包含文本格式的修订版。

:ignore/path 中的所有目标添加到忽略列表,即向这些文件添加 svn:ignore 属性。
:blame

打开 /path 中指定文件的责备对话框。

如果设置了选项 /startrev/endrev,则不会显示询问责备范围的对话框,而是使用这些选项的修订版值。

如果设置了选项 /line:nnn,则 TortoiseBlame 将打开并显示指定的行号。

还支持选项 /ignoreeol/ignorespaces/ignoreallspaces

:cat/path 中给出的 URL 或工作副本路径中的文件保存到 /savepath:path 中给出的位置。修订版在 /revision:xxx 中给出。这可用于获取具有特定修订版的文件。
:createpatch/path 中给出的路径创建补丁文件。要跳过文件“另存为”对话框,您可以传递 /savepath:path 来指定直接保存补丁文件的路径。要防止统一差异查看器启动并显示补丁文件,请传递 /noview。如果请求统一差异,则可以指定可选的 prettyprint 选项,该选项将以更易于用户阅读的格式显示合并信息属性。
:revisiongraph

显示 /path 中给定路径的修订图。

要为特定路径创建修订图的图像文件,但不显示图形窗口,请使用 /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 主页