This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.
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 的命令行选项, 同时还展示了每个子命令的典型用法.
虽然各个子命令的选项不完全相同, 但所有的选项都在同一个名字空间内
—无论对于哪个子命令, 选项的意义是完全相同的. 例如无论用户执行
的是哪个子命令, 选项 --verbose
(-v
)
的意义总是 “详细输出”.
如果用户向 svn 传递了子命令不支持的选项, 那么 程序通常会马上报错退出, 但是从 Subversion 1.5 开始, 有几个选项可被 所有 (或者说几乎所有) 的子命令支持, 因此它们就被当成了可被所有的子命 令接受, 即使该选项对子命令不会产生任何效果. (这种行为主要是为了方便从 定制化的封装脚本中调用 svn.) 这些选项作为全局选项 出现在命令行客户端的帮助信息中, 可以用下面的命令看到它们:
$ 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 注意到冲突发生时不
会再询问用户如何处理. Subversion 支持的
ACTION
如下所示, 但不同的子命令, 其可用
的 ACTION
是不同的:
postpone
(p
)
对冲突不采取任何措施, 将冲突记录起来, 以便稍后再作处理.
edit
(e
)
在文本编辑器中打开每一个冲突文件, 由用户手工处理冲突.
launch
(l
)
为每一个冲突文件调用交互式的冲突合并工具.
base
在把服务器上的修改合并到工作副本之前, 把文件指定成版本
号为 BASE
, 且未修改的版本.
working
将文件在工作副本中的当前版本作为冲突解决后的版本, 在这 之前用户应该手工处理了文件里的冲突.
mine-full
(mf
)
如果文件发生了冲突, 则保留文件里的所有本地修改, 丢弃 该文件从服务器接收到的所有修改.
theirs-full
(tf
)
如果文件发生了冲突, 则丢弃文件里的所有本地修改, 保留 从服务器接收到的所有修改.
mine-conflict
(mc
)
如果文件的某一区域发生了冲突, 则保留该区域的本地修改, 丢弃从服务器接收到的同一区域上的修改.
theirs-conflict
(tc
)
如果文件的某一区域发生了冲突, 则丢弃该区域的本地修改, 保留从服务器接收到的同一区域上的修改.
为了查看特定的子命令支持哪些 ACTION
,
阅读 svn help SUBCOMMAND
的输出.
--allow-mixed-revisions
在合并时, 禁止去核实目标及其子文件的版本号是否是相同的. 从 Subversion 1.7 开始, 默认都会去核实版本号是否相同. 虽然推荐的 做法是让待合并的工作副本处于一个相同的版本号下, 但必要时还是可以 用这个选项允许向版本号混合的工作副本执行合并.
--auto-props
允许自动属性设置, 它将覆盖运行时配置指令
enable-auto-props
的设置.
--change
(-c
) ARG
使用一个特定的 “修改” 执行所请求的操作. 通常来说,
这个选项是 -r
的同义语. 某些子命令允许选项的参数是逗号分隔的版本号列表 (即
ARG-1
:ARG
-c
),
用户还可以用连字符分隔的两个版本号指定一个版本号范围 (即
ARG1
,ARG2
,ARG3
-c
), 范围包括起始与结束版本号. 最后, 如果版本号是一个负数, 则表示相反
的版本号范围, 例如 ARG1
-ARG2
-c -45
等价于
-r 45:44
.
--changelist
(--cl
) ARG
告诉 Subversion 只去操作属于变更列表
ARG
的文件, 用户可以多次使用这个选项,
从而指定多个变更列表.
--config-dir
DIR
告诉 Subversion 从指定的目录 (而不是默认的
.subversion
) 中读取配置信息.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--config-option
CONFSPEC
在命令执行期间设置运行时配置选项.
CONFSPEC
是一个字符串, 指定了运行时配置
选项的名字空间, 选项名和选项值, 形式是
FILE
:SECTION
:OPTION
=[VALUE
],
其中, FILE
和
SECTION
分别是选项所在的运行时配置文件
(config
或 server
) 和配置
文件里的节. OPTION
就是选项本身, 而
VALUE
(如果有的话) 就是选项的值. 比如
说用户想要临时禁止 HTTP 压缩, 那就可以把
--config-option
写成
--config-option=servers:global:http-compression=no
.
该选项可以在命令行上出现多次.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--depth
ARG
告诉 Subversion 把命令的操作范围限制在一个指定的目录深度内.
ARG
可以是 empty
(目标本身), 或 files
(目标和目标的直接子文件,
不包括直接子目录), immediates
(目标和目标的直接
子文件, 包括直接子目录), 或 infinity
(目标和
目标的所有子孙—即完全递归).
--diff
告诉 svn log 输出版本号所包含的差异 (按照 svn diff 的方式进行输出).
--diff-cmd
CMD
指定一个外部差异比较工具. 如果在执行 svn diff
时没有指定该选项, Subversion 将会使用它自己的差异比较引擎, 默认
按照标准差异格式进行输出. 如果用户希望使用一个外部的差异比较工具,
就可以用该选项实现, 然后还可以用选项 --extensions
(-x
) 为外部差异比较工具传递选项.
--diff3-cmd
CMD
指定一个外部的三路差异比较工具 (用于合并文件的修改).
--dry-run
执行命令的所有过程, 除了做出实际的修改—无论是修改工作 副本还是仓库.
--editor-cmd
CMD
指定一个外部文本编辑器, 用于编辑日志消息或属性值. 关于如何
指定一个默认文本编辑器, 见 “通用配置选项”一节 的
editor-cmd
节.
--encoding
ENC
告诉 Subversion 你的提交消息是用该选项所指定的字符集编码编写的. 默认情况下, Subversion 根据操作系统的本地语言环境判断提交消息的 字符集编码, 如果你用了其他字符集编码, 就要用该选项显式地告诉 Subversion 你所用的字符集编码.
--extensions
(-x
) ARG
为 Subversion 的差异比较引擎指定扩展选项, 有效的扩展选项有:
--ignore-space-change
(-b
)
忽略空白字符在数量方面的变化.
--ignore-all-space
(-w
)
忽略所有的空白字符.
--ignore-eol-style
忽略 EOL (end-of-line, 行结束标记) 的变化.
--show-c-function
(-p
)
在差异比较输出中显示 C 程序的函数名.
--unified
(-u
)
显示宽度为 3 行的标准差异上下文.
ARG
的默认值是
-u
, 如果你希望指定多个扩展选项, 就把它们放在一
对双引号中.
需要注意的是, 如果差异比较引擎是一个外部的差异比较工具, 那么
选项 --extensions
(-x
) 的值
不仅限于以上提到的这些, 而是可以设置成 任意
值.
--file
(-F
) FILENAME
将文件的内容传递给子命令, 不同的子命令将文件内容用于不同的目的, 例如 svn commit 把文件内容作为提交日志消息, 而 svn propset 把文件内容作为属性值.
--force
强迫命令或操作往下执行. 在正常使用时, Subversion 会阻止用户 执行某些操作, 但是用户可以用这个选项告诉 Subversion: “我 知道我正在做什么, 也知道这样做的可能后果, 所以请继续往下执行. ” 用这个选项就好像一个电工在未断电的情况下工作—如果 你不知道自己正在做什么, 你可能会对命令的执行结果感到震惊.
--force-log
迫使 Subversion 接受传递给 --message
(-m
) 或 --file
(-F
) 的可疑参数, 默认情况下, 如果传递给这两个
选项的参数看起来好像是子命令的目标参数, 那么 Subversion 将会报
错退出. 比如说用户向选项 --file
(-F
) 传递了一个处于版本控制下的文件路径,
Subversion 将会认为用户犯了一个错误: 这个文件路径应该作为子命令
的目标参数, 选项 --file
(-F
)
的参数应该是一个未被版本控制的文件路径. 为了表明自己的意图, 并且
阻止 Subversion 进行这种检查, 用户就可以用选项
--force-log
迫使 Subversion 无条件地接受日志消息.
--force-interactive
如果标准输入不是一个终端设备, 强迫 svn 以 交互模式运行.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--git
按照分布式版本控制系统 Git 的格式, 打印 svn diff 的标准差异输出.
--help
(-h
, -?
)
如果在执行时带了一个或多个子命令, 则显示各个子命令的内建帮助 文档. 如果只是单独使用, 则显示客户端命令行工具的总体帮助文档.
--ignore-ancestry
告诉 Subversion 在计算差异时忽略祖先 (仅依赖路径上的内容), 对 svn merge 而言, 该选项还会禁止 合并跟踪.
--ignore-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 使用指定的行结束标记作为
系统的本地标记, 这将会影响那些 svn:eol-style
属性值为 native
的文件.
ARG
的有效值包括 CR
,
LF
和 CRLF
.
--new
ARG
使用 ARG
作为较新的目标 (与
svn diff 配合使用).
--no-auth-cache
禁止在 Subversion 运行时配置目录里缓存认证信息 (例如用户名 和密码).
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--no-auto-props
禁止自动属性设置, 该选项会覆盖运行时配置选项
enable-auto-props
.
--no-diff-added
禁止为新增的文件输出差异. 默认情况下, 新文件的差异输出就像是 往一个已有的空文件内写入了全部内容后的差异输出效果.
--no-diff-deleted
禁止为删除了的文件输出差异. 默认情况下, 删除了的文件的差异 输出就像是删除了文件的所有内容 (但不删除文件) 后的差异输出效果.
--no-ignore
在显示工作副本状态, 添加文件或导入文件时不要忽略任何文件
(即使文件名与运行时配置选项 global-ignores
,
属性 svn:ignore
或属性
svn:global-ignores
里的模式相匹配), 更多的
信息见 “通用配置选项”一节 和
“忽略未被版本控制的项”一节.
--no-unlock
告诉 Subversion 不要自动释放锁. (默认的提交行为会释放所有已 提交的文件上的锁.) 更多的信息见 “锁”一节.
--non-interactive
禁止所有的交互式提示. 交互式提示的例子包括向用户请求认证证书 和冲突解决. 如果你是在一个自动化的脚本中运行 Subversion, 那么比 起向用户发出交互式请求, 更方便的做法是报错退出.
从 Subversion 1.8 开始, 如果标准输入不是一个终端设备, 那么
svn 默认以非交互式模式运行. 为了强制
svn 以交互式模式运行, 可使用选项
--force-interactive
.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--non-recursive
(-N
)
不再推荐使用该选项. 禁止子命令递归执行到
子目录内. 大多数子命令默认都会递归执行到子目录内, 但有些不会. 用户
应该不再使用该选项, 而使用更精确的 --depth
, 对于
大多数子命令而言, 选项 --non-interactive
等价于
--depth=files
, 但是对于 svn
status 来说, 与 --non-recursive
等价
的选项是 --depth=immediates
, 对于
svn revert, svn add 和
svn commit 来说, 等价的选项则是
--depth=empty
.
--notice-ancestry
在计算差异时要考虑祖先.
--old
ARG
使用 ARG
作为较旧的目标 (与
svn diff 配合使用).
--parents
作为操作的一部分, 在工作副本或仓库中自动创建不存在的父目录. 这个选项对于自动创建多级子目录非常方便, 如果目标是一个 URL, 那么 所有的目录都会在同一个提交中创建完成.
--password
PASSWD
指定用于 Subversion 服务器认证的密码. 如果没有在命令行上指定 密码, 或者密码有误, 在需要时 Subversion 将提示用户输入密码.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--patch-compatible
告诉 svn diff 的输出要和通用的第三方补丁
工具保持兼容. 该选项等价于 --show-copies-as-adds
--ignore-properties
.
--properties-only
告诉 svn diff 只输出属性上的变化.
--quiet
(-q
)
告诉 svn 在执行时只打印必要的信息.
--record-only
告诉 svn merge 只合并合并信息, 不合并文件 上的修改.
--recursive
(-R
)
告诉子命令要递归地执行到子目录内 (大多数子命令都会默认递归 执行).
--reintegrate
不再推荐使用该选项. 该选项用于 svn merge 把特性分支上的修改合并到特性分支的祖先分支上. 从 Subversion 1.8 开始, svn merge 能够自动检测这种合并场景并执行 恰当的合并操作, 更多的细节见 “重新整合分支”一节.
--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
) 或被修改的路径中的任意一条与模式
匹配, 该日志消息就被认为是匹配的. 如果选项
--search
出现了多次, 只要日志消息和其中的任意一
个 --search
匹配, 该日志消息就被认为是匹配的.
如果同时还指定了选项 --limit
, 那么
--limit
限制的是被搜索的日志消息数量, 而不是匹配
的日志消息数量.
搜索模式 (也被叫作文件名模式或 Shell 通配符模式) 可以包含普通 字符和下面这些通配符:
?
匹配任意一个字符.
*
匹配任意一个字符串, 字符串的长度可以为零.
[ABC]
匹配方括号内的任意一个字符.
--search-and
ARG
该选项的参数和前面的 --search
或
--search-and
的参数联合起来, 只有匹配
所有 模式的日志消息才被认为是匹配的.
--set-depth
ARG
把目录的粘着 (sticky) 深度设置成 exclude
,
empty
, files
,
immediates
或 infinity
,
关于这些参数的详细信息以及如何使用它们, 见
“稀疏目录”一节.
--show-copies-as-adds
告诉 svn diff 在显示通过复制得到的文件 的差异时, 不要显示它们与被复制的源文件之间的差异, 而是把它们当作 全新的文件 (就好像往一个空文件中写了内容后的差异输出).
--show-inherited-props
告诉 svn propget 和 svn proplist 显示继承到的版本化属性.
--show-revs
ARG
告诉 svn mergeinfo 显示特定种类的合并跟踪
信息. ARG
可以是
merged
或 eligible
, 分别表示
已经合并的版本号和未来有资格被合并的版本号.
--show-updates
(-u
)
要求客户端显示关于文件是否过时的信息, 它不会更新工作副本中的 文件—它只是会告诉你在下一次执行 svn update 时, 哪些文件将被更新.
--stop-on-copy
该选项将导致 Subversion 子命令在遍历历史时, 如果遇到了复制 —即历史中某一位置上的资源是通过复制仓库中其他位置来得到的 —则不再往前遍历历史.
--strict
告诉 Subversion 使用更严格的语义, 在谈到 “更严格的语义” 时, 必须关联上特定的子命令 (即 svn propget) 才能解释清楚.
--strip
NUM
用于 svn patch 忽略补丁文件中的前
NUM
个路径分量.
--summarize
告诉子命令只显示总结性的信息.
--targets
FILENAME
告诉子命令从文件 FILENAME
读取额外的目标
路径参数. FILENAME
的每一行都是一个路径, 路径
的编码和格式应该和把它们直接写在命令行上时相同.
--trust-server-cert
和选项 --non-interactive
一起使用时, 指示
Subversion 接受由未知的证书机构颁发的 SSL 服务器证书, 而不必提
示用户. 为了安全起见, 只有当远程服务器和网络路径的完整性很可靠
时才能使用该选项.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--use-merge-history
(-g
)
使用或显示来自合并历史的额外信息.
--username
NAME
指定用于向 Subversion 服务器认证的用户名, 如果没有指定用户名 或者指定的用户名不正确, Subversion 将会再次提示用户输入用户名.
注意 | |
---|---|
所有的 svn 子命令都支持该选项. |
--verbose
(-v
)
要求子命令输出更详细的信息, 这可能会导致客户端输出额外的字段, 关于每个文件的详细信息, 或与操作有关的额外信息.
--version
打印客户端的版本信息. 版本信息不仅包括客户端的版本号 (这里的
版本号指的是软件的版本, 注意不要和 Subversion 的版本号 (revision)
混淆), 还有客户端支持的所有仓库访问模块. 如果加上了选项
--quiet
(-q
), 则只打印版本号.
--with-all-revprops
和选项 --xml
一起使用, 指示 Subversion 检索并
输出所有的版本号属性—包括 Subversion 保留给自己内部使用的属性
和用户的自定义属性—到日志中.
--with-no-revprops
和选项 --xml
一起用在命令 svn
log 时, 指示 Subversion 在日志输出中忽略所有的版本号
属性—包括标准的日志消息, 作者和版本号时间戳属性.
--with-revprop
ARG
如何该选项和其他需要向仓库写数据的命令一起使用时, 它可用于设置
版本号属性, 格式是
,
意思是把属性 NAME
=VALUE
NAME
的值设置成
VALUE
; 如果该选项和
--xml
一起用在命令 svn log 里,
那么 ARG
的值将会显示在日志输出中.
--xml
按照 XML 格式打印输出. 输出所使用的 XML 模式 (使用 RELAX NG
格式) 的相关文件位于 Subversion 源代码树的
subversion/svn/schema/
目录内.
目录