所有的开源版本管理工具有很多,堪用的开源版本管理工具就三个:svn, git, hg(hg就是分布式管理,Mercurial),今天公司用hg,所以了解一下svn,git,hg的区别。
相关摘取文章链接一
相关摘取文章链接二
hg:hg 是个奇迹,易用性堪比 svn,速度堪比 git,跨平台良好。hg 据说对文件重命名、移动支持不大好(新版本可能改善了,没细用),新版本支持类似 git 的轻量级分支(好像是用 tag 模拟出来的),对模块支持有个 forrest 插件,不知道好用不。hg 内置的特性远没有 git 多,但一般也够用了。hg 被很多大型项目采用,可用性有保证,如果对跨平台开发很看重,对工具易用性要求高,那么 hg 是很好的选择。
Mercurial与TortoiseHg简介这篇文章有介绍
Git的优势:
客户端存储控制。可以删除任意的版本,而无需考虑该分支的后续版本,而Hg做不到。
无限的父结点数。Hg一次只能分成2个分支,合并N个分支要进行很多次操作。而Git没有限制。
支持rebase。它可以将当前版本移到最新的分支去。例如假设有个本地库在开发1.0的新特性,而基线已经升级到1.1了;一般情况下是需要合并到1.1去的,而rebase可以避免这种操作。
Hg的优势:
学习曲线。由于很多因素,Git比Hg的学习曲线更陡峭。
支持Windows。
维护。Git需要定期维护。
历史是不可侵犯的。Git很强大,可以干几乎任何事,因此也会丢失历史信息。
很多人说 Mercurial 比较跨平台,这是比较早期的事。Git 高度依赖 Linux 环境导致早期在 Windows 上需要安装 Cygwin 等模拟环境,运作起来效能不佳。更重要的是Mercurial 在不同平台上(尤其 Windows 与 Linux 之间)有档名编码的问题,如果你的版本库可能使用到中文档名,最好不要使用 Mercurial,那会造成跨平台的交流障碍。
Mercurial 胜过 Git 的主要优点是命令行简单、容易上手。然而,如果你是有心深入分散式版本控制的人,你需要追求充足的功能,并且对命令行相当熟悉,你不该贪图一时的容易上手而选择功能不足的工具。如果你只是业余想玩玩,你只要使用图形界面就好,Tortoise 系列或 SourceTree 都是很好的选择,图形界面并不存在 Git 比 Mercurial 难上手的问题,甚至由于 Git 功能比较强大,用起来往往还比 Mercurial 自由方便轻松(Mercurial 对于修改旧提交有非常多设限,对于刚上手常搞出错误提交的人非常不友善)。
Git 胜过 Mercurial 的一大亮点是分支模型,Git 只有一种简单的模型,但非常全面且好用;而 Mercurial 有很多种分支方式,像神马匿名分支法、具名分支法、书签法、克隆版本库法,但每一种都有很多缺点及不便之处。
Git 胜过 Mercurial 的第二大亮点是自由的修改历史。如果你有在某些时候改写历史的需求,你终究会发现 Mercurial 改写历史很麻烦,即使用了 hg histedit、hg rebase、hg graft/transplant、mq 等扩展,操作起来仍远比 Git 繁琐,更难还原错误操作之前的状态,更容易导致版本库混乱,也更容易出错导致丢失历史。
Git 胜过 Mercurial 的第三大亮点是方便多个版本库的交流,因为 Git 有命名空间,你可以非常明确的区别哪些是自己的提交,哪些是别人的提交,而不致混淆。Mercurial 没有命名空间,一但和很多个版本库交流,很容易导致自己与别人的代码混成一团,就这个意义而言,Mercurial 根本不是个合格的分布式管理。