网上大部分关于 CVS 和 Subversion 的文章一般都只是提到了 Subversion 相对于 CVS 的优点:版本化目录,原子提交,彻底的版本历史(文件/目录的重命名),而对于一些更本质的概念性差别却很少有人提到。
对于像我这样使用 CVS 已经很多年、已经习惯了 CVS 操作的人来说,想要迁移到 Subversion,需要从概念和具体操作上进行如下转变:
1、修订版本号差别:在 CVS 中,修订版本号是每个文件的,这是因为 CVS 使用 RCS 作为后端;每个文件都在版本库有一个对应的 RCS 文件,版本库几乎就是根据目录树的结构创建。而在 Subversion 中,修订版本号是针对整个目录树的,每个修订号代表了一次提交后版本库整个目录树的特定状态,另一种理解是修订号 N 代表版本库已经经过了 N 次提交。当 Subversion 用户讨论“foo.c 的修订号 5”的时候,他们的实际意思是“版本库在修订号 5 时包含的 foo.c”。
2、由此引起第二个重大差别:分支和标签的不同处理方式。在 CVS 中,你可以通过给你的目录树(或者单个文件)建立分支或标签以标记某个时刻的目录树状态,但不管如何处理,从物理目录上来说,始终是同样的目录结构,表面来说看不出差别。而 Subversion 则不同,其不区分文件系统空间和“分支”空间;分支和标签都是普通的文件系统目录,这恐怕是 CVS 用户需要逾越的最大心理障碍。也就是说,如果你在 Subversion 下创建分支或者标签,事实上是在额外的地方保存了一个版本库目录树的快照(snapshot),事实上,按照 Subversion 文档的说法,并不是目录树的完整复制,采用了更加高效的方法,类似 Unix 下的硬链接[hard link]。如果你访问过采用 Subversion 的开源项目,你会发现这些版本库都会建立类似 /trunk、/branches 和 /tags 等三个根目录,然后版本库主干分支位于 /trunk 目录下,当你创建分支的时候,会将目录树快照保存到 /branches,同样,标签会保存到 /tags 中。
除了这两点概念上的变动比较大之外,Subversion 在其他方面对 CVS 的兼容操作性还是很强的。
标签:cvs,subversion
posted on 2007-03-07 23:12
小石头 阅读(632)
评论(0) 编辑 收藏 所属分类:
Subversion