小石头
Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.
posts - 91,comments - 22,trackbacks - 0

CVS 与 Subversion 二三事

DIrk 发表于 2006-05-14 Sunday

网上大部分关于 CVSSubversion 的文章一般都只是提到了 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 的兼容操作性还是很强的。

标签:cvssubversion

4 条评论 »

  1. 理解得不错,再补充一点就是服务端没有像cvs那样完整的仓库镜像
    而是只存储了每次提交的变化内容
    所以cvs checkout最新版要比较快
    而svn查询更新记录则更快一些

  2. 第一点我已经慢慢习惯了,现在觉得svn这样处理是理所当然的,第二点还是不习惯,以前就这个问题,还上过subversion的maillist,用半生不熟的中国英语发过邮件,居然还引来一个作者的多次回应,让我再看看基本的概念。

  3. 由此看来,svn要比cvs占得空间大得多,不过综合来看还是进步了不少,值得使用

  4. 其实并不是文件目录的直接拷贝,手册解释说更加接近Unix下的soft link,理解上可能只是一个符号链接,并不真的重复存储数据。

    我们所命定的目标,不是享乐,不是受苦,而是行动,在每一个明天,都要比今天前进一步!
posted on 2007-03-07 23:12 小石头 阅读(633) 评论(0)  编辑  收藏 所属分类: Subversion

只有注册用户登录后才能发表评论。


网站导航: