3.进入工作拷贝的管理区

Posted on Posted in 9.嵌入svn

进入工作拷贝的管理区

像我们前面提到的,每个Subversion工作拷贝包含了一个特别的子目录叫做.svn,这个目录包含了关于工作拷贝目录的管理数据,Subversion使用.svn中的信息来追踪如下的数据:

  • 工作拷贝中展示的目录和文件在版本库中的位置。

  • 工作拷贝中当前展示的文件和目录的修订版本。

  • 所有附加在文件和目录上的用户定义属性。

  • 初始(未编辑)的工作拷贝文件的拷贝。

Subversion工作拷贝管理区域的布局和内容主要是考虑的实现细节,不是被人来使用的。开发者被鼓励使用Subversion的API或工具来访问和处理工作拷贝数据,反对直接读写操作组成工作拷贝管理区域的文件。工作拷贝中管理数据采用的文件格式会不断改变—只是公共API成功的隐藏了这种改变。在本小节,我们将会探讨一些实现细节来安抚你们的焦虑。

条目文件

或许.svn目录中最重要的单个文件就是entries了,这个条目文件是一个XML文档,包含了关于工作拷贝中的版本化的资源的大多数管理性信息,这个文件保留了版本库URL、原始修订版本、文件校验数据、可知的最后提交信息(作者、修订版本和时间戳)和本地拷贝历史—实际上是Subversion客户端关于一个版本化(或者是将要版本化的)资源的所有感兴趣的信息!

熟悉CVS管理目录的人可能会发现,Subversion的.svn/entries实现了CVS的CVS/EntriesCVS/RootCVS/Repository的功能。

.svn/entries的格式曾经多次修改,最初是XML文件,现在使用自定义的—尽管依然是可读的文件格式。早期的Subversion需要频繁调试文件内容,所以选择了XML这种格式,随着Subversion的成熟,频繁调试的需求消失了,而产生了用户对性能的要求。当然,Subversion的工作拷贝库可以从一种格式自动升级到另一种格式—按照老格式读取,然后按照新格式写—避免了重新检出工作拷贝,但是也造成了不同版本Subversion程序访问同一份工作拷贝的复杂情形。

原始拷贝和属性文件

如我们前面提到的,.svn也包含了一些原始的“text-base”文件版本,可以在.svn/text-base看到。这些原始文件的好处是多方面的—察看本地修改和区别不需要经过网络访问,减少传递修改时的数据—但是随之而来的代价是每个版本化的文件都在磁盘至少保存两次,现在看来这是对大多数文件可以忽略不计的一个惩罚。但是,当你版本控制的文件增多之后形势会变得很严峻,我们已经注意到了应该可以选择使用“text-base”,但是具有讽刺意味的是,当版本化文件增大时,“text-base”文件的存在会更加重要—谁会希望在提交一个小修改时在网络上传递一个大文件?

同“text-base”文件的用途一样的还有属性文件和它们的“prop-base”拷贝,分别位于.svn/props.svn/prop-base。因为目录也有属性,所以也有.svn/dir-props.svn/dir-prop-base文件。