本手册旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您正在运行其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的手册。

svn—Subversion 命令行客户端

svn 是 Subversion 的官方命令行客户端。它的功能通过一系列特定于任务的子命令提供,其中大多数子命令接受许多选项,以便对程序的行为进行细粒度控制。

在使用 svn 程序时,子命令和其他非选项参数必须以指定的顺序出现在命令行上。另一方面,选项可以在命令行上的任何位置出现(当然是在程序名称之后),并且通常,它们的顺序无关紧要。例如,以下所有都是使用 svn status 的有效方法,并且以完全相同的方式解释

$ svn -vq status myfile
$ svn status -v -q myfile
$ svn -q status -v myfile
$ svn status -vq myfile
$ svn status myfile -qv

以下部分描述了 svn 命令行客户端程序提供的各种子命令和选项,包括每个子命令典型用法的示例。

svn 选项

虽然 Subversion 对其子命令有不同的选项,但所有选项都存在于单个命名空间中,也就是说,每个选项都保证具有大致相同的含义,无论您使用它与哪个子命令一起使用。例如,--verbose (-v) 始终表示 详细输出,” 无论您使用它与哪个子命令一起使用。

如果传递给 svn 命令行客户端一个不适用于指定子命令的选项,它通常会快速退出并显示错误。但从 Subversion 1.5 开始,几个适用于所有或几乎所有子命令的选项被所有子命令认为是可接受的,即使它们对其中一些子命令没有影响。(此更改主要是为了提高客户端从自定义包装脚本调用的能力。)这些选项在命令行客户端的使用消息中作为全局选项分组在一起,如下面的输出片段所示

$ svn help upgrade
upgrade: Upgrade the metadata storage format for a working copy.
usage: upgrade [WCPATH...]

  Local modifications are preserved.

Valid options:
  -q [--quiet]             : print nothing, or only summary information

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --trust-server-cert      : accept SSL server certificates from unknown
                             certificate authorities without prompting (but only
                             with '--non-interactive')
  --config-dir ARG         : read user configuration files from directory ARG
  --config-option ARG      : set user configuration option in the format:
                                 FILE:SECTION:OPTION=[VALUE]
                             For example:
                                 servers:global:http-library=serf
$

svn 子命令识别以下全局选项

--config-dir DIR

指示 Subversion 从指定的目录读取配置信息,而不是从默认位置读取 (.subversion 在用户的 home 目录中)。

--config-option CONFSPEC

在命令执行期间,设置运行时配置选项的值。 CONFSPEC 是一个字符串,用于指定要分配的配置选项命名空间、名称和值,格式为 FILE:SECTION:OPTION=[VALUE]。 在此语法中,FILESECTION 分别是包含要更改其值的选项的运行时配置文件(configservers)及其部分。 OPTION 当然是指选项本身,而 VALUE 是要分配给选项的值(如果有)。 例如,要临时禁用 HTTP 协议中压缩的使用,请使用 --config-option=servers:global:http-compression=no。 可以多次使用此选项来同时更改多个选项值。

--no-auth-cache

防止在 Subversion 运行时配置目录中缓存身份验证信息(例如,用户名和密码)。

--non-interactive

禁用所有交互式提示。 交互式提示的一些示例包括身份验证凭据请求和冲突解决决策。 如果您在自动化脚本中运行 Subversion,并且让 Subversion 失败比提示更多信息更合适,那么这将很有用。

--password PASSWD

指定在对 Subversion 服务器进行身份验证时使用的密码。 如果未提供或不正确,Subversion 将在需要时提示您输入此信息。

--trust-server-cert

--non-interactive 一起使用时,指示 Subversion 接受由未知证书颁发机构颁发的 SSL 服务器证书,而无需先提示用户。 出于安全考虑,您应该仅在远程服务器的完整性和它与您的客户端之间的网络路径已知可信的情况下使用此选项。

--username NAME

指定在对 Subversion 服务器进行身份验证时使用的用户名。 如果未提供或不正确,Subversion 将在需要时提示您输入此信息。

其余选项仅适用于子命令的子集,并被子集接受。它们如下所示

--accept ACTION

指定自动冲突解决的操作,禁用交互式提示,这些提示会询问用户如何处理遇到的每个冲突。虽然具体操作的适用性取决于使用的子命令,但 Subversion 支持以下 ACTION 的长(和短)值

postpone (p)

不采取任何解决操作,而是允许记录冲突以供将来解决。

edit (e)

在文本编辑器中打开每个冲突文件,以手动解决基于行的冲突。

launch (l)

为每个冲突文件启动交互式合并冲突解决工具。

base

选择在尝试将来自服务器的更改集成到工作副本之前,(未修改的)BASE 修订版的文件。

working

假设您已手动处理冲突解决,请选择当前工作副本中文件的版本。

mine-full (mf)

通过保留所有本地修改并丢弃在导致冲突的操作期间从服务器获取的所有更改来解决冲突文件。

theirs-full (tf)

通过丢弃所有本地修改并集成在导致冲突的操作期间从服务器获取的所有更改来解决冲突文件。

mine-conflict (mc)

通过在每个文件内容的冲突区域中优先考虑本地修改而不是从服务器获取的更改来解决冲突文件。

theirs-conflict (tc)

通过在每个文件内容的冲突区域中优先考虑从服务器获取的更改而不是本地修改来解决冲突文件。

请参阅 svn help SUBCOMMAND 的输出,以查看特定子命令支持的具体操作。

--allow-mixed-revisions

禁用从 Subversion 1.7 开始由 svn merge 默认执行的验证,即合并操作的目标及其所有子项是否处于统一修订版。虽然将合并到单一修订版工作副本目标是推荐的最佳实践,但此选项可用于根据需要允许合并到混合修订版工作副本。

--auto-props

启用自动属性分配(根据运行时配置规则),覆盖enable-auto-props运行时配置指令。

--change (-c) ARG

使用特定的change执行请求的操作。一般来说,此选项是-r ARG-1:ARG的语法糖。一些子命令允许使用逗号分隔的修订号参数列表(例如,-c ARG1,ARG2,ARG3)。或者,您可以提供两个用连字符分隔的参数(如-c ARG1-ARG2)来标识ARG1ARG2之间的修订范围(包括)。最后,如果修订参数被否定,则隐含的修订范围将被反转:-c -45等效于-r 45:44

--changelist (--cl) ARG

指示 Subversion 仅对名为ARG的变更列表中的成员进行操作。您可以多次使用此选项来指定变更列表集。

--depth ARG

指示 Subversion 将操作范围限制到特定的树深度。 ARG 是以下之一:empty(仅目标本身)、files(目标及其所有直接文件子节点)、immediates(目标及其所有直接子节点)或 infinity(目标及其所有后代 - 全递归)。

--diff

svn log 启用一种特殊的输出模式,其中包括差异报告(类似于 svn diff)作为每个修订信息的一部分。

--diff-cmd CMD

指定一个外部程序来显示文件之间的差异。当 svn diff 在没有此选项的情况下被调用时,它使用 Subversion 的内部差异引擎,该引擎默认情况下提供统一的差异。如果您想使用外部差异程序,请使用 --diff-cmd。然后,您可以使用 --extensions (-x) 选项将选项传递给指定的程序。

--diff3-cmd CMD

指定一个外部三方差异比较程序(用于将基于行的更改合并到文件中)。

--dry-run

执行命令的所有操作,但不进行实际更改 - 无论是在磁盘上还是在存储库中。

--editor-cmd CMD

指定一个外部程序来编辑日志消息或属性值。有关如何指定默认编辑器的更多信息,请参阅 名为“Config”的部分 中的 editor-cmd 部分。

--encoding ENC

告诉 Subversion 您的提交消息使用提供的字符编码编写。默认字符编码来自您的操作系统的本地语言环境;如果您的提交消息使用任何其他编码,请使用此选项。

--extensions (-x) ARG

指定 Subversion 在执行差异计算时应进行的自定义操作。有效的扩展包括

--ignore-space-change (-b)

忽略空白量更改。

--ignore-all-space (-w)

忽略所有空白。

--ignore-eol-style

忽略 EOL(行尾)样式更改。

--show-c-function (-p)

在 diff 输出中显示 C 函数名称。

--unified (-u)

显示三行统一 diff 上下文。

ARG 的默认值为 -u。如果您希望传递多个参数,则必须将它们全部用引号括起来。

请注意,当 Subversion 配置为调用外部 diff 命令时,--extension (-x) 选项的值不受前面提到的选项的限制,而是可以是 Subversion 应传递给该命令的 任何 附加参数。

--file (-F) FILENAME

使用指定子命令的命名文件的内容。不同的子命令对内容进行不同的操作。例如,svn commit 使用内容作为提交日志消息,而 svn propset 使用它作为属性值。

--force

强制执行特定命令或操作。在正常使用中,Subversion 会阻止您执行某些操作,但您可以传递此选项来告诉 Subversion 我知道自己在做什么以及可能产生的后果,所以让我来做吧。 此选项相当于在通电的情况下进行自己的电气工作——如果您不知道自己在做什么,您很可能会受到电击。

--force-log

强制接受传递给 --message (-m) 或 --file (-F) 选项的可疑参数。默认情况下,如果这些选项的参数看起来像是子命令的目标,Subversion 会产生错误。例如,如果您将版本控制文件的路径传递给 --file (-F) 选项,Subversion 会假设您犯了一个错误,该路径实际上是操作的目标,而您只是没有提供其他——未版本控制的——文件作为日志消息的来源。要断言您的意图并覆盖这些类型的错误,请将 --force-log 选项传递给接受日志消息的子命令。

--git

svn diff 启用一种特殊的输出模式,该模式专为与流行的 Git 分布式版本控制系统跨兼容而设计。

--help (-h, -?)

如果与一个或多个子命令一起使用,则显示每个子命令的内置帮助文本。如果单独使用,它将显示常规客户端帮助文本。

--ignore-ancestry

告诉 Subversion 在计算差异时忽略祖先(仅依赖路径内容)。在与 svn merge 子命令一起使用时,还会禁用 合并跟踪

--ignore-externals

告诉 Subversion 忽略外部定义以及由它们管理的外部工作副本。

--ignore-keywords

禁用关键字扩展。

--ignore-whitespace

指示 svn patch 在尝试识别补丁上下文时忽略空白。

--incremental

以适合与先前类似输出连接的格式打印输出。

--internal-diff

指示 Subversion 使用其内置的差异引擎,即使用户运行时配置中可能指定了任何外部差异机制。

--keep-changelists

告诉 Subversion 在提交后不要从工作副本项目中删除变更列表分配。

--keep-local

保留文件或目录的本地副本(与 svn delete 命令一起使用)。

--limit (-l) NUM

仅显示前 NUM 个日志消息。

--message (-m) MESSAGE

表示您将在命令行上指定日志消息或锁定注释,紧随此选项之后。例如

$ svn commit -m "They don't make Sunday."
--native-eol ARG

导致 svn export 使用特定的行尾序列,就好像它是客户端平台的本机序列一样。 ARG 可以是 CRLFCRLF 之一。

--new ARG

使用 ARG 作为较新的目标(与 svn diff 一起使用)。

--no-auto-props

禁用自动属性设置,覆盖 enable-auto-props 运行时配置指令。

--no-diff-deleted

阻止 Subversion 打印已删除文件的差异。当您删除文件时,默认行为是 svn diff 打印与您保留文件但删除其所有内容时相同的差异。

--no-ignore

在状态列表中显示通常会被忽略的文件,因为它们与 global-ignores 配置选项或 svn:ignore 属性中的模式匹配。有关更多信息,请参见 名为“Config”的部分名为“Ignoring Unversioned Items”的部分

--no-unlock

告诉 Subversion 不要自动解锁文件。(默认提交行为是解锁列为提交一部分的所有文件。)有关更多信息,请参见 名为“Locking”的部分

--non-recursive (-N)

已弃用。阻止子命令递归到子目录。大多数子命令默认情况下会递归,但有些不会。用户应避免使用此选项,而应使用更精确的 --depth 选项。对于大多数子命令,指定 --non-recursive 会产生与您指定 --depth=files 相同的行为,但存在例外:非递归 svn statusimmediates 深度运行,非递归形式的 svn revertsvn addsvn commitempty 深度运行。

--notice-ancestry

在计算差异时注意祖先关系。

--old ARG

使用 ARG 作为较旧的目标(用于 svn diff)。

--parents

在操作过程中创建并添加工作副本或存储库中不存在或未版本化的父子目录。这对于在当前不存在任何子目录的情况下自动创建多个子目录很有用。如果在 URL 上执行,所有目录将在单个提交中创建。

--quiet (-q)

请求客户端在执行操作时仅打印基本信息。

--record-only

启用 svn merge 的特殊模式,其中指定的合并操作记录在本地合并跟踪信息中,但实际上并未执行。

--recursive (-R)

使子命令递归到子目录。(大多数子命令默认递归。)

--reintegrate

svn merge 子命令一起使用,将源 URL 的所有更改合并到工作副本中。有关详细信息,请参阅 名为“保持分支同步”的部分

--relocate

已弃用。与 svn switch 子命令一起使用时,会更改工作副本引用的存储库的位置。但是,从 Subversion 1.7 开始,首选方法是使用 svn relocate 子命令。有关更多详细信息和示例,请参阅 svn relocate

--remove

svn changelist 一起使用,用于从变更列表中取消关联目标(而不是关联,这是默认操作)。

--reverse-diff

使 svn patch 反向解释输入补丁指令——将添加的行视为删除的行,反之亦然。

--revision (-r) REV

指定要操作的修订版(或修订版范围)。您可以提供修订版号、关键字或日期(在花括号中)作为修订版选项的参数。如果您想提供一个修订版范围,您可以提供两个用冒号分隔的修订版。例如

$ svn log -r 1729
$ svn log -r 1729:HEAD
$ svn log -r 1729:1744
$ svn log -r {2001-12-04}:{2002-02-17}
$ svn log -r 1729:{2002-02-17}

有关更多信息,请参阅 名为“修订版关键字”的部分

--revprop

操作修订版属性,而不是特定于文件或目录的属性。此选项要求您还使用 --revision (-r) 选项传递修订版。

--set-depth ARG

在工作副本中将目录的粘性深度设置为以下之一:excludeemptyfilesimmediatesinfinity。有关这些含义以及如何使用此选项的详细介绍,请参阅名为“稀疏目录”的部分

--show-copies-as-adds

svn diff 启用特殊输出模式,其中通过复制操作创建的文件的内容差异将显示为全新文件(其中每一行都显示为对空文件的添加),而不是作为与创建复制操作的原始文件的增量。

--show-revs ARG

用于使 svn mergeinfo 显示某些类别的合并跟踪信息。 ARG 可以是 mergedeligible,分别表示希望查看已合并的修订版或从指定的源 URL 合并的合格修订版。

--show-updates (-u)

使客户端显示有关工作副本中哪些文件已过时的信息。这不会实际更新任何文件,它只是显示使用 svn update 时将更新哪些文件。

--stop-on-copy

使遍历版本控制资源历史记录的 Subversion 子命令在遇到复制操作(即历史记录中的位置,其中该资源从存储库中的另一个位置复制)时停止收集历史信息。

--strict

使 Subversion 使用严格语义,除非谈论特定子命令(即 svn propget),否则这个概念相当模糊。

--strip NUM

svn patch 用于忽略在补丁输入文件中指定的路径上找到的 NUM 个前导路径组件。

--summarize

仅显示有关操作的高级摘要通知,而不是其详细输出。

--targets FILENAME

告诉 Subversion 从 FILENAME 中读取操作的附加目标路径。 FILENAME 应包含每行一个路径,每个路径都应使用与直接在命令行上指定路径相同的编码和格式。

--use-merge-history (-g)

使用或显示来自合并历史的附加信息。

--verbose (-v)

要求客户端在运行任何子命令时打印尽可能多的信息。这可能导致 Subversion 打印出额外的字段、每个文件的详细信息或有关其操作的附加信息。

--version

打印客户端版本信息。此信息不仅包括客户端的版本号,还包括客户端可用于访问 Subversion 存储库的所有存储库访问模块的列表。使用 --quiet (-q) 它只以紧凑形式打印版本号。

--with-all-revprops

svn log--xml 选项一起使用,指示 Subversion 检索和显示所有修订属性——Subversion 内部使用的标准属性以及任何用户定义的属性——在日志输出中。

--with-no-revprops

svn log--xml 选项一起使用,指示 Subversion 从日志输出中省略所有修订属性——包括标准日志消息、作者和修订日期戳。

--with-revprop ARG

当与任何写入存储库的命令一起使用时,使用 NAME=VALUE 格式设置修订属性,将 NAME 设置为 VALUE。当与 svn log--xml 模式下一起使用时,这将在日志输出中显示 ARG 的值。

--xml

以 XML 格式打印输出。

svn 子命令

以下是 svn 程序的各种子命令。为了简洁起见,我们省略了全局选项(在 名为“svn 选项”的部分 中描述)从以下子命令描述中。

TortoiseSVN 官方中文版 1.14.7 发布