### 第9章Subversion完全参考 **目录** 本章是使用Subversion的一个完全手册,包括了命令行客户端(**svn**)和它的所有子命令,也有版本库管理程序(**svnadmin**和**svnlook**)和它们各自的子命令。 ### Subversion命令行客户端:**svn** 为了使用命令行客户端,只需要输入**svn**和它的子命令[[43](#)]以及相关的选项或操作的对象―输入的子命令和选项没有特定的顺序,下面使用**svn status**的方式都是合法的: ~~~ $ svn -v status $ svn status -v $ svn status -v myfile ~~~ 你可以在[第3章 *指导教程*]发现更多使用客户端命令的例子,以及[“属性”一节]中的管理属性的命令。 ### **svn**选项 虽然Subversion的子命令有一些不同的选项,但有的选项是全局的―也就是说,每个选项保证是表示同样的事情,而不管是哪个子命令使用的。举个例子,`--verbose`(`-v`)一直意味着“冗长输出”,而不管使用它的命令是什么。 `--auto-props` 开启auto-props,覆盖`config`文件中的`enable-auto-props`指示。 `--config-dir`*`DIR`* 指导Subversion从指定目录而不是默认位置(用户主目录的`.subversion`)读取配置信息。 `--diff-cmd`*`CMD`* 指定用来表示文件区别的外部程序,当**svn diff**调用时,会使用Subversion的内置区别引擎,默认会提供统一区别输出,如果你希望使用一个外置区别程序,使用`--diff-cmd`。你可以通过`--extensions`(本小节后面有更多介绍)把选项传递到区别程序。 `--diff3-cmd`*`CMD`* 指定一个外置程序用来合并文件。 `--dry-run` 检验运行一个命令的效果,但没有实际的修改―可以用在磁盘和版本库。 `--editor-cmd`*`CMD`* 指定一个外部程序来编辑日志信息或是属性值。 `--encoding`*`ENC`* 告诉Subversion你的提交日志信息是通过提供的字符集编码的,缺省时是你的操作系统的本地编码,如果你的提交信息使用其它编码,你一定要指定这个值。 `--extensions` (`-x`) *`ARGS`* 指定一个或多个Subversion传递给提供文件区别的外部区别程序的参数,如果你要传递多个参数,你一定能够要用引号(例如,**svn diff --diff-cmd /usr/bin/diff -x "-b -E"**)括起所有的参数。这个选项*只有*在使用`--diff-cmd`选项时使用。 `--file` (`-F`) *`FILENAME`* 使用传递的文件内容作为特定子命令的选项。 `--force` 强制一个特定的命令或操作运行。Subversion有一些操作防止你做普通的使用,但是你可以传递force选项告诉Subversion“我知道我做的事情,也知道这样的结果,所以让我做吧”。这个选项在程序上等同于在打开电源的情况下做你自己的电子工作―如果你不知道你在做什么,你很有可能会得到一个威胁的警告。 `--force-log` 将传递给`--message`(`-m`)或者`--file`(`-F`)的可疑参数指定为有效可接受。缺省情况下,如果选项的参数看起来会成为子命令的目标,Subversion会提出一个错误,例如,你传递一个版本化的文件路径给`--file`(`-F`)选项,Subversion会认为出了点错误,认为你将目标对象当成了参数,而你并没有提供其它的―未版本化的文件作为日志信息的文件。为了确认你的意图并且不考虑这类错误,传递`--force-log`选项给命令来接受它作为日志信息。 `--help` (`-h` or `-`) 如果同一个或多个子命令一起使用,会显示每个子命令内置的帮助文本,如果单独使用,它会显示常规的客户端帮助文本。 `--ignore-ancestry` 告诉Subversion在计算区别(只依赖于路径内容)时忽略祖先。 `--incremental` 打印适合串联的输出格式。 `--message` (`-m`) *`MESSAGE`* 表示你会在命令行中指定日志信息,紧跟这个开关,例如: ~~~ $ svn commit -m "They don't make Sunday." ~~~ `--new`*`ARG`* 使用*`ARG`*作为新的目标。 `--no-auth-cache` 阻止在Subversion管理区缓存认证信息(如用户名密码)。 `--no-auto-props` 关闭auto-props,覆盖`config`文件中的`enable-auto-props`指示。 `--no-diff-deleted` 防止Subversion打印删除文件的区别信息,缺省的行为方式是当你删除了一个文件后运行**svn diff**打印的区别与删除文件所有的内容得到的结果一样。 `--no-ignore` 在状态列表中显示`global-ignores`配置选项或者是`svn:ignore`属性忽略的文件。见[“config”一节]和[“`svn:ignore`”一节]查看详情。 `--non-interactive` 如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息。 `--non-recursive` (`-N`) 防止子命令迭代到子目录,大多数子命令缺省是迭代的,但是一些子命令―通常是那些潜在的删除或者是取消本地修改的命令―不是。 `--notice-ancestry` 在计算区别时关注祖先。 `--old`*`ARG`* 使用*`ARG`*作为旧的目标。 `--password`*`PASS`* 指出在命令行中提供你的密码―另外,如果它是需要的,Subversion会提示你输入。 `--quiet` (`-q`) 请求客户端在执行操作时只显示重要信息。 `--recursive` (`-R`) 让子命令迭代到子目录,大多数子命令缺省是迭代的。 `--relocate`*`FROM TO [PATH...]`* **svn switch**子命令中使用,用来修改你的工作拷贝所引用的版本库位置。当版本库的位置修改了,而你有一个工作拷贝,希望继续使用时非常有用。见**svn switch**的例子。 `--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`)传递一个修订版本号,见[“未受版本控制的属性”一节]关于未版本化的属性的细节。 `--show-updates` (`-u`) 导致客户端显示本地拷贝哪些文件已经过期,这不会实际更新你的任何文件―只是显示了如果你运行**svn update**时更新的文件。 `--stop-on-copy` 导致Subversion子命令在传递历史时会在版本化资源拷贝时停止收集历史信息―也就是历史中资源从另一个位置拷贝过来时。 `--strict` 导致Subversion使用严格的语法,也就是选择含糊,除非谈论特定的子命令。 `--targets`*`FILENAME`* 告诉Subversion从你提供的文件中得到希望操作的文件列表,而不是在命令行列出所有的文件。 `--username`*`NAME`* 表示你要在命令行提供认证的用户名―否则如果需要,Subversion会提示你这一点。 `--verbose` (`-v`) 请求客户端在运行子命令打印尽量多的信息,会导致Subversion打印额外的字段,每个文件的细节信息或者是关于动作的附加信息。 `--version` 打印客户端版本信息,这个信息不仅仅包括客户端的版本号,也有所有客户端可以用来访问Subversion版本库的版本库访问模块列表。 `--xml` 使用XML格式打印输出。 ### **svn**子命令 是的,使用`--version`选项不需要子命令,几分钟后我们会到达那个部分。