本文档旨在描述 Subversion 1.4。如果您运行的是更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您的 Subversion 版本的版本。

初始检出

大多数情况下,您将通过对项目进行 检出 来开始使用 Subversion 存储库。检出存储库会在您的本地机器上创建一个“工作副本”。此副本包含您在命令行上指定的 Subversion 存储库的 HEAD(最新修订版)

$ svn checkout http://svn.collab.net/repos/svn/trunk
A    trunk/Makefile.in
A    trunk/ac-helpers
A    trunk/ac-helpers/install.sh
A    trunk/ac-helpers/install-sh
A    trunk/build.conf
…
Checked out revision 8810.

虽然上面的示例检出了 trunk 目录,但您可以通过在检出 URL 中指定子目录,轻松检出存储库的任何深层子目录。

$ svn checkout \
      http://svn.collab.net/repos/svn/trunk/subversion/tests/cmdline/
A    cmdline/revert_tests.py
A    cmdline/diff_tests.py
A    cmdline/autoprop_tests.py
A    cmdline/xmltests
A    cmdline/xmltests/svn-test.sh
…
Checked out revision 8810.

由于 Subversion 使用的是“复制-修改-合并”模型,而不是“锁定-修改-解锁”(参见 名为“版本控制模型”的部分),因此您可以直接开始对工作副本中的文件和目录进行更改。您的工作副本就像系统上的任何其他文件和目录集合一样。您可以编辑和更改它们,将它们移动,甚至可以删除整个工作副本并忘记它。

警告

虽然您的工作副本“就像系统上的任何其他文件和目录集合一样”,您可以随意编辑文件,但您必须告诉 Subversion 您所做的 所有其他操作。例如,如果您想在工作副本中复制或移动项目,您应该使用 svn copysvn move,而不是操作系统提供的复制和移动命令。我们将在本章的后面详细介绍它们。

除非您已准备好提交新文件或目录的添加,或对现有文件的更改,否则无需进一步通知 Subversion 服务器您已经执行了任何操作。

虽然您当然可以使用存储库的 URL 作为唯一参数检出工作副本,但您也可以在存储库 URL 后指定一个目录。这会将您的工作副本放在您命名的新的目录中。例如

$  svn checkout http://svn.collab.net/repos/svn/trunk subv
A    subv/Makefile.in
A    subv/ac-helpers
A    subv/ac-helpers/install.sh
A    subv/ac-helpers/install-sh
A    subv/build.conf
…
Checked out revision 8810.

这会将您的工作副本放在名为 subv 的目录中,而不是之前我们使用的名为 trunk 的目录中。如果目录 subv 不存在,它将被创建。

禁用密码缓存

当您执行需要您进行身份验证的 Subversion 操作时,默认情况下 Subversion 会将您的身份验证凭据缓存到磁盘上。这样做是为了方便起见,这样您就不必不断地为将来的操作重新输入密码。如果您担心缓存 Subversion 密码,[3]您可以永久或逐个地禁用缓存。

要禁用特定一次性命令的密码缓存,请在命令行上传递 --no-auth-cache 选项。要永久禁用缓存,您可以在本地机器的 Subversion 配置文件中添加行 store-passwords = no。有关详细信息,请参见 名为“客户端凭据缓存”的部分

以不同用户身份进行身份验证

由于 Subversion 默认情况下会缓存身份验证凭据(用户名和密码),因此它会方便地记住您上次修改工作副本时所扮演的角色。但有时这并不方便——尤其是当您在共享的工作副本中工作时,比如系统配置目录或 Web 服务器文档根目录。在这种情况下,只需在命令行上传递 --username 选项,Subversion 就会尝试以该用户身份进行身份验证,并在必要时提示您输入密码。



[3] 当然,您并没有特别担心——首先,因为您知道您不能 真正从 Subversion 中删除任何东西,其次,因为您的 Subversion 密码与您拥有的其他 300 万个密码都不相同,对吧?对吧?