初始检出

初始检出

初始检出大多数情况下,您将通过对项目进行 检出 来开始使用 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.

名称的含义

Subversion 尽力不限制您可以放在版本控制下的数据类型。文件内容和属性值以二进制数据形式存储和传输,并且 名为“文件内容类型”的部分 会告诉您如何为 Subversion 提供提示,表明“文本”操作对特定文件没有意义。但是,在某些地方,Subversion 会限制其存储的信息。

Subversion 在内部处理某些数据位(例如,属性名称、路径名称和日志消息)作为 UTF-8 编码的 Unicode。但这并不意味着您与 Subversion 的所有交互都必须使用 UTF-8。作为一般规则,Subversion 客户端将优雅且透明地处理 UTF-8 与您计算机上使用的编码系统之间的转换,如果可以有意义地进行这种转换(对于当今使用的大多数常见编码来说都是这样)。

此外,路径名称用作 WebDAV 交换中的 XML 属性值,以及 Subversion 的某些内部管理文件。这意味着路径名称只能包含合法的 XML(1.0)字符。Subversion 还禁止路径名称中的 TAB、CR 和 LF 字符,以防止路径在差异中被拆分,或在 svn log 或 svn status 等命令的输出中被拆分。

虽然看起来需要记住很多内容,但实际上这些限制很少会成为问题。只要您的区域设置与 UTF-8 兼容,并且您不在路径名称中使用控制字符,您就不应该遇到与 Subversion 通信的麻烦。命令行客户端提供了额外的帮助——它会自动在您输入的 URL 中转义非法路径字符,以创建“合法”的内部版本。

虽然上面的示例检出了 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 copy 或 svn move,而不是操作系统提供的复制和移动命令。我们将在本章的后面详细介绍它们。

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

为什么有 .svn 目录?

工作副本中的每个目录都包含一个管理区域,一个名为 .svn 的子目录。通常情况下,目录列表命令不会显示此子目录,但它仍然是一个重要的目录。无论您做什么,都不要删除或更改管理区域中的任何内容!Subversion 依赖它来管理您的工作副本。

如果您不小心删除了 .svn 子目录,修复此问题的最简单方法是删除包含的整个目录(普通系统删除,而不是 svn delete),然后从父目录运行 svn update。Subversion 客户端将重新下载您已删除的目录,以及一个新的 .svn 区域。

虽然您当然可以使用存储库的 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 万个密码都不相同,对吧?对吧?

相关推荐