« 分布式的版本控制工具 | 返回首页 | 安全的提交密码 »

版本控制系统再考察

鉴于迁移版本控制系统的工作量比较大(主要是培训成本),这几天我们工作室重新调整了下各自对 svn 仓库的管理权限,理了下以后的开发管理流程。最终决定继续把 svn 用下去(至少到项目第一阶段完成),希望比以前用的更好。

但出于个人兴趣,我继续考察了几个分布式 VCS/SCM ,并装了其中几个玩。个人直觉 Darcs 最好。不过从流行度讲,或许 Mercurial 更佳。

虽然近期网上似乎支持 Mercurial 的最多(包括乌龟版也做的最全面),但我还是找到一篇文章支持我的直觉。

Whose Distributed VCS Is The Most Distributed?

他写的算是有理有据了。

不过这篇 blog 成文于 2006 年 8 月,离现在已有些年头,在这个讯息万变的今天,每个活跃的开源软件都会不断的发展,大家姑且看之。至于我的个人意见,只是出于直觉,没什么可参考性。

作者提出了理想的分布式版本控制系统的八点要求,这也正是我想要的:

  1. 协作的基本模式必须是基于分支。

  2. 做分支必须很廉价。

  3. 可以智能的合并分支。

  4. 每组更改集都不必通过整个更新历史就能和其他部分合并。

  5. 分支既是仓库的副本,分支操作保持有全部的历史。

  6. 合并操作也不损失更新历史。

  7. 提交、分支、合并操作都可以离线完成。

  8. 针对大多数应用都尽可能的快。

关于这 8 点的具体解释,有兴趣的朋友可以去读原文,写的很清楚。其实对于我,没必要分这么细。我需要的就是,大家可以基于分支来协作工作,而不是基于单次提交。我每次向大家工作的集合(主干)做合并操作,应该包含一系列的本地提交。在完成这个功能的基础上,VCS 应该用起来足够简单(简单的用 pull/push 取代 update/commit),不损失我的工作流程包含的信息(从何时分支,何时合并,中间做了一系列什么修改),且跑起来足够快。

作者的结论是明显偏向 Darcs 的,这个观点倒是可以商榷。不过 svn 显然达不到大多数要求。这几天我在 svn 上做了许多分支合并的试验,发现 svn 很不人性(相比更人性的分布式设计而言)。为什么会这样?因为 svn 设计之初本就不是基于分支来解决大家的协作问题的。

btw, Darcs 对中文支持可能会有问题,但是可以通过设置环境变量绕开。请参考 Darcs 的手册中 Character escaping and non-ASCII character encodings 一节设置。

TrackBack

如果你想引用这篇文章,请复制下面的链接发送引用通告(GBK)
http://blog.codingnow.com/mt/mt-tb.cgi/332

Comments

代码管理SVN还是不错的。

本来合并就是件麻烦事,平时勤快点把主分支的变动合并过来,未来合回主分支就轻松。

倒是策划文档管理一直想找一个合适的工具,理想是能有关键字查询,能有历史版本记录,能对比历史版本的区别,最好还能支持策划们习惯的MS的那些文件格式。

我希望不了解新一代版本控制系统的

可以看看这篇对比文章

http://better-scm.berlios.de/comparison/comparison.html

更换VC的代价太大了...
FreeBSD.org上一篇比较各个VC工具的文章:
http://wiki.freebsd.org/VersionControl

用了很长时间的bzr (bazaar-ng),觉得挺有效率的。也建议你考察一下这个。:)

对啊。Perforce速度挺快的啊。。

我们公司以前用CVS,今年刚迁移到Perforce,主要迁移原因是CVS的速度太慢。现在Perforce已经用了半个月左右,感觉除了刚开始登陆的时候比CVS慢,在更新代码的时候,要比CVS快很多,特别是那些dll/lib大文件时。以前用WinCVS更新整个工程需要至少半天时间,现在Perforce一个小时不到就可以搞定。

其实svn只是个工具~重要的是每个人都能养成良好的习惯,我们一直在使用svn,而且效果很好。我们的做法是有一个主干分支,版本必须从主干上出,小功能在主干上直接修改,大功能迁新分支,修改后有版本控制人员合版本,出现冲突由制作人员,修改,制作大功能的时候一般不在主干修改比较频繁的地方修改,或者说制作功能时注意接口的制作,这样合并的时候虽然有冲突但是很少,提交前必须更新代码,提交后必须通知所研发部所有人,测试人员,版本控制人员,大版本提前一天禁止提交,除非发现比较严重的问题,然后就是正式版本制作,测试,加壳,出版本
最重要就是大家要有意识去遵守,凡是不提交的一律不准出版本,凡是提交的一律必须编译通过,提交不通过就要扣业绩,提交上来有问题或者在规定的时间内没有提交也要扣绩效~,时间长了,版本就很流畅

Perforce 对 open source 的项目倒是免费的。

而且 perfoce 的 diff merge 这些 GUI 版工具不错,我偶尔有用到。

今天我们一个参加 freebsd 项目的同事跟我说,perfoce 也赞助了他们的项目,许多家伙在用。不过他放弃了使用,主要原因是网络连接速度有问题,比 cvs 服务器慢多了。

Perforce貌似满足你的所有要求。只不过不是免费的,用的人很少。

一直在用svn,现在感觉,每次merge代码,尤其是两个以上的svn库代码都有修改时,只能把多份代码都导出来,然后再比较,那叫一个痛苦,~_~|||

TortoiseHg没找到rename,只能用命令行的

Post a comment

非这个主题相关的留言请到:留言本