此文本尚在编写中,内容可能会发生很大变化,可能无法准确描述任何已发布版本的 Apache™ Subversion® 软件。将此页面添加为书签或以其他方式向他人推荐此页面可能不是一个好主意。请访问 https://svnbooks.subversion.org.cn/ 以获取此书籍的稳定版本。

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 命令行客户端程序提供的每个子命令和选项,包括每个子命令典型用法的示例。

虽然 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 (default is to prompt
                             only if standard input is a terminal device)
  --force-interactive      : do interactive prompting even if standard input
                             is not a terminal device
  --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 子命令识别以下选项

svn 选项

--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

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

--auto-props

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

--change (-c) ARG

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

--changelist (--cl) ARG

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

--config-dir DIR

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

[Note] 注意

所有 svn 子命令都接受此选项。

--config-option CONFSPEC

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

[Note] 注意

所有 svn 子命令都接受此选项。

--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

指定一个外部程序,用于编辑日志消息或属性值。请参阅 名为“一般配置”部分 中的 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)

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

--unified (-u)

显示三行统一差异上下文。

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

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

--file (-F) FILENAME

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

--force

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

--force-log

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

--force-interactive

强制 svn 命令行客户端在标准输入不是终端设备时以交互模式运行。

[Note] 注意

所有 svn 子命令都接受此选项。

--git

svn diff 启用一种特殊的输出模式,该模式旨在与流行的 Git 分布式版本控制系统实现跨兼容性。

--help (-h, -?)

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

--ignore-ancestry

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

--ignore-externals

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

--ignore-keywords

禁用关键字扩展。

--ignore-properties

指示 svn diff 抑制属性更改的输出。

--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-auth-cache

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

[Note] 注意

所有 svn 子命令都接受此选项。

--no-auto-props

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

--no-diff-added

阻止 Subversion 打印已添加文件的差异。当您添加文件时,默认行为是打印与您添加现有(空)文件的全部内容时看到的相同差异。

--no-diff-deleted

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

--no-ignore

在状态列表中显示文件,或添加/导入通常会被忽略的文件,因为它们与 global-ignores 配置选项或 svn:ignoresvn:global-ignores 属性中的模式匹配。有关更多信息,请参阅 General configurationIgnoring Unversioned Items

--no-unlock

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

--non-interactive

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

从 Subversion 1.8 开始,默认情况下,svn 命令行客户端在标准输入不是终端设备时是非交互式的。传递 --force-interactive 选项以使客户端以交互模式运行。

[Note] 注意

所有 svn 子命令都接受此选项。

--non-recursive (-N)

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

--notice-ancestry

在计算差异时注意祖先。

--old ARG

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

--parents

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

--password PASSWD

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

[Note] 注意

所有 svn 子命令都接受此选项。

--patch-compatible

指示 svn diff 生成与通用第三方补丁工具兼容的输出。使用此选项的结果与使用 --show-copies-as-adds --ignore-properties 选项运行 svn diff 相同。

--properties-only

指示 svn diff 仅显示属性更改。

--quiet (-q)

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

--record-only

启用 svn merge 的一种特殊模式,在该模式下,指定的合并操作将记录在本地合并跟踪信息中,但实际上不会执行。

--recursive (-R)

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

--reintegrate

已弃用。与 svn merge 子命令一起使用,将更改从功能分支合并回功能分支的祖先分支。从 Subversion 1.8 开始,svn merge 子命令会自动检测此场景并执行适当的合并。有关详细信息,请参阅 Reintegrating a Branch

--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) 选项传递一个修订版。

--search ARG

过滤日志消息,只显示与搜索模式 ARG 匹配的消息。仅当提供的搜索模式与作者、日期、日志消息文本(除非使用 --quiet)或(如果也提供了 --verbose 选项)更改的路径中的任何一项匹配时,才会显示日志消息。如果提供了多个 --search 选项,则如果日志消息与任何提供的搜索模式匹配,就会显示该消息。如果使用 --limit,则它会限制搜索的日志消息数量,而不是限制输出到特定数量的匹配日志消息。

搜索模式(也称为 glob 或 shell 通配符模式)可以包含常规字符和以下通配符字符

?

匹配任何单个字符。

*

匹配任意字符序列。

[ABC]

匹配括号内列出的任何字符。

--search-and ARG

该选项的参数与命令行上先前 --search--search-and 选项的模式组合在一起。仅当日志消息与组合的搜索模式匹配时,才会显示该消息。

--set-depth ARG

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

--show-copies-as-adds

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

--show-inherited-props

使 svn propget svn proplist 显示目标文件或目录继承的版本化属性。

--show-revs ARG

用于使 svn mergeinfo 显示某些类别的合并跟踪信息。 ARG 可以是 mergedeligible,分别表示希望看到从指定的源 URL 合并的修订版或将来可从该源 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 应包含每行一个路径,并且每个路径都应使用与直接在命令行上指定它时相同的编码和格式。

--trust-server-cert

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

[Note] 注意

所有 svn 子命令都接受此选项。

--use-merge-history (-g)

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

--username NAME

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

[Note] 注意

所有 svn 子命令都接受此选项。

--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 格式打印输出。输出的 XML 模式(以 RELAX NG 格式)保存在 Subversion 源代码树的 subversion/svn/schema/ 目录中。

TortoiseSVN 官方中文版 1.14.7 发布