2008-07-07

分布式版本控制工具

自己用subversion也得有10几个月的时间了,不但自己用的挺顺手,还推荐给了team,效果显著。最近1.5也发布了,增加了不少新功能,我个人用到的是TSVN的缓存日志功能和changeset功能,特别是tsvn默认提供的ignore-on-commit changeset,给我提供了很大的便利。把不想或不能(例如与个人设置相关的文件)提交,这时

再说一下svn的不足之处,当然这是我喜新厌旧的结果
1)要将一个工程纳入版本控制,必须首先在A出创建版本库,保持版本历史,然后在浅出到B处,然后再在B处(工作)添加要纳入版本控制的文件,或者是创建版本库之后从C处导入要进行版本控制的所有文件,在签出到D处(工作目录)进行开发。但我的情况是,整个项目组用另外一个版本控制工具,工作目录是不可变的(也就是我在同一个目录下同时使用两个版本控制工具,可以想象,这是一件多么痛苦的事情-_-|||),所以我必须把当前工作目录导入到svn,再删除当前目录,再在原地从svn签出文件。
2)工作目录中,每一级目录里都有一个.svn文件夹,很是碍眼。
3) 集中的版本库,一旦版本库服务器关机,所有人将无法提交。
前一阵子研究了一下分布式的版本控制(distributed version control system, DVCS)。所谓分布式,就是所有人都有一个完整的版本库,提交的话只是提交到本地的版本库,这样,基本不需要网络连接,速度也很快。网络连接操作只是clone,push,pull操作。clone,从别处获得一个完整的版本库,pull获得他人的更改,push 把本地更改推送给其他人或者一个“中央”版本库。
我所了解到的dvcs主要有 Bazaar,Mercurial,Git,Darcs
Bazaar,ubuntu 背后的公司 canonical支持的项目,较活跃,目前版本1.5,tortoisebzr貌似好久没有更新了,不过我用cmd的时候中文有时候乱码,再者bzr使用插件的形式扩充其功能,感觉不够简洁(那Firefox呢?你不是装了一堆插件?囧)。不过我喜欢bzr的whoami的设置用户名,还有,有ignore 命令来直接忽略文件,mercuiral 必须使用.ignore文件。
mercurial,又名hg(汞的化学符号)目前版本1.01,tortoisehg也相当不错,不过貌似比较慢,也可能是我自己机器的原因。
Git linux 内核开发的版本控制工具,linux大神Linus Torvalds 所写,主要应用于linux平台,windows下下也有移植版本,据说性能一般
这里有一篇文章论述各个vcs和dvcs 的优缺点:Choosing a Distributed Version Control System
这里有一篇通俗易懂的介绍:Intro to Distributed Version Control (Illustrated)

No comments: