本手册的编写目的是介绍 Subversion 1.1。如果您运行的是更新版本的 Subversion,我们强烈建议您访问 https://svnbooks.subversion.org.cn/ 并查阅适合您 Subversion 版本的本书版本。
本章旨在全面介绍 Subversion 的使用。这包括命令行客户端 (svn) 及其所有子命令,以及仓库管理程序 (svnadmin 和 svnlook) 及其各自的子命令。
要使用命令行客户端,您需要键入 svn、您要使用的子命令 [42] 以及您要操作的任何开关或目标——子命令和开关的出现顺序并不固定。例如,以下所有方法都是使用 svn status 的有效方法
$ svn -v status $ svn status -v $ svn status -v myfile
您可以在 第 3 章,导览 中找到更多关于如何使用大多数客户端命令的示例,以及在 名为“属性”的章节 中找到管理属性的命令。
虽然 Subversion 针对其子命令有不同的开关,但所有开关都是全局的,也就是说,每个开关保证在使用它的任何子命令中都具有相同的含义。例如,--verbose (-v) 始终表示“详细输出”,无论您使用它与哪个子命令一起使用。
启用自动属性,覆盖enable-auto-props指令在config文件中。
指示 Subversion 从指定目录而不是默认位置 (.subversion在用户的家目录中) 读取配置信息。
指定用于显示文件之间差异的外部程序。当调用 svn diff 时,它使用 Subversion 的内部 diff 引擎,默认情况下提供统一 diff。如果您想使用外部 diff 程序,请使用--diff-cmd. 您可以使用--extensions开关向 diff 程序传递开关(稍后在本节中详细介绍)。
指定用于合并文件的外部程序。
执行运行命令的所有操作,但不进行任何实际更改——无论是在磁盘上还是在仓库中。
指定用于编辑日志消息或属性值的外部程序。
告诉 Subversion 您的提交消息是以提供的字符集编码的。默认值为您的操作系统的本地语言环境,如果您以其他任何编码提交消息,则应指定编码。
指定 Subversion 在提供文件之间差异时应传递给外部 diff 命令的一个或多个参数。如果您想传递多个参数,则必须将它们全部括在引号中(例如,svn diff --diff-cmd /usr/bin/diff -x "-b -E")。此开关只能在您也传递了--diff-cmd开关时使用。
使用作为此开关参数传递的文件的内容来执行指定的子命令。
强制执行特定的命令或操作。有些操作 Subversion 将阻止您在正常使用过程中执行,但您可以传递 force 开关告诉 Subversion “我知道我在做什么以及执行此操作的可能后果,所以让我来试试看”。此开关类似于在通电状态下自己进行电气工程的编程方式——如果您不知道自己在做什么,您很可能会受到严重的电击。
强制接受传递给--message (-m) 或--file (-F) 选项的疑似参数。默认情况下,如果这些选项的参数看起来像是子命令的目标,Subversion 将产生错误。例如,如果您将版本化文件的路径传递给--file (-F) 选项,Subversion 会认为您犯了错误,该路径实际上是操作的目标,而您只是没有提供其他——非版本化——文件作为您的日志消息的来源。要断言您的意图并覆盖这些类型的错误,请将--force-log选项传递给接受日志消息的命令。
如果与一个或多个子命令一起使用,则显示每个子命令的内置帮助文本。如果单独使用,则显示常规客户端帮助文本。
告诉 Subversion 在计算差异时忽略祖先(仅依赖路径内容)。
以适合串联的格式打印输出。
表明您将在命令行上指定提交消息,在该开关之后。例如
$ svn commit -m "They don't make Sunday."
使用 ARG 作为较新的目标。
阻止在 Subversion 管理目录中缓存身份验证信息(例如用户名和密码)。
禁用自动属性,覆盖enable-auto-props指令在config文件中。
阻止 Subversion 打印已删除文件的差异。当您删除文件时,默认行为是 svn diff 打印与您保留文件但删除所有内容时所看到的相同差异。
显示状态列表中通常会被省略的文件,因为它们与global-ignores配置选项或svn:ignore属性匹配。有关详细信息,请参见 名为“配置”的章节 和 名为“svn:ignore”的章节。
在身份验证失败或凭据不足的情况下,阻止提示输入凭据(例如用户名或密码)。如果您在自动化脚本中运行 Subversion,并且让 Subversion 失败比提示输入更多信息更合适,这将非常有用。
阻止子命令递归进入子目录。大多数子命令默认情况下都会递归,但一些子命令——通常是那些有可能删除或撤消本地修改的子命令——不会递归。
在计算差异时注意祖先。
使用 ARG 作为较旧的目标。
表明您正在命令行上提供您的密码进行身份验证——否则,如果需要,Subversion 将提示您输入密码。
请求客户端在执行操作时仅打印必要的信息。
使子命令递归进入子目录。大多数子命令默认情况下都会递归。
与 svn switch 子命令一起使用,更改工作副本引用的仓库的位置。如果您要更改仓库的位置并且有一个您想要继续使用的现有工作副本,这将非常有用。有关示例,请参见 svn switch。
表明您将为特定操作提供修订版本(或修订版本范围)。您可以将修订版本号、修订版本关键字或日期(用大括号括起来)作为修订版本开关的参数提供。如果您想提供修订版本范围,您可以提供两个用冒号分隔的修订版本。例如
$ 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}
有关详细信息,请参见 名为“修订版本关键字”的章节。
对修订版本属性进行操作,而不是对特定于文件或目录的 Subversion 属性进行操作。此开关要求您还使用--revision (-r) 开关传递修订版本。有关非版本化属性的详细信息,请参见 名为“非版本化属性”的章节。
使客户端显示有关工作副本中哪些文件已过时的信息。这不会实际更新任何文件——它只会显示如果您运行 svn update 将更新哪些文件。
使遍历版本化资源历史记录的 Subversion 子命令在遇到复制时停止收集历史信息——即历史记录中资源从仓库中的另一个位置复制的位置。
使 Subversion 使用严格语义,除非谈论特定子命令,否则这个概念相当模糊。
告诉 Subversion 从您提供的文件名中获取您要操作的文件列表,而不是在命令行上列出所有文件。
表明您正在命令行上提供您的用户名进行身份验证——否则,如果需要,Subversion 将提示您输入用户名。
要求客户端在运行任何子命令时打印尽可能多的信息。这可能会导致 Subversion 打印出额外的字段、每个文件的详细信息或有关其操作的额外信息。
打印客户端版本信息。此信息不仅包含客户端的版本号,还包含客户端可用于访问 Subversion 存储库的所有存储库访问模块的列表。
以 XML 格式打印输出。