Archive

Posts Tagged ‘mercurial’

Mercurial和Git的主要区别

August 17th, 2008 Sparkle 6 comments

1、Mercurial用Python开发,Git用C开发,相对来说,Git比较快,但是Mercurial的性能也不差
2、Mercurial对windows平台支持比较好,而且有一个开发中的TortoiseHg,而且NetBeans内置支持,Git主要还是用命令行,而且对windows不太友好
3、Mercurial核心指令只有10个左右,Git核心指令几十个,全部指令更多了,Mercurial比较简单,也容易上手
4、Mercurial一个目录树就是一个分支,需要使用分支就必须clone一份完整的目录树,这样比较浪费空间,而且使用IDE的时候要为新分支开一个新项目,Git支持本地分支,在一个目录树里面开无限个分支,切换非常方便迅速。这个功能也是我慢慢迁移到Git上的主要原因
5、Git内置对SVN的支持,现在也很多人在SVN repo上使用Git,方便自己的分支开发,当然跟别人合作还是会受到SVN本身的限制,Mercurial有一个第三方的hgsvn,最初的版本还有编码问题,现在已经修正了,但是它只能从SVN导入数据到Mercurial,不能把在Mercurial做的提交导入SVN,作者说未来会制作这个功能,这样就限制了hgsvn的使用,只能作为类似备份的性质

Categories: Uncategorized Tags: ,

Mercurial续

March 19th, 2008 Sparkle 1 comment

上次谈到一些Mercurial的事情,后来因为忙别的事情没有继续写下去。中途跟cyfdecyf通过几次email讨论Mercurial。总体来说,我对Mercurial和分布式版本管理的理解还是比较松散的,比较难形成文章,但还是很希望把我所知道的写出来。

我对分布式版本管理的理解很简单。首先这里假设你有一般版本管理软件的概念(CVS或者SVN)。假设你在家里装了一个SVN服务器,你在家里编写的代码都提交上去。在公司也装了一个SVN,你在公司编写的代码也都提交上去。这里就有两个完全独立的SVN服务器了。分布式版本管理,就是这两个SVN服务器之间可以互相提交,其操作就像你提交上其中一台SVN那样,SVN之间互相提交就会将多个changeset同时提交。而且这两个SVN服务器没有主次之分,这样处理是很容易混乱的,实际上,我们会架设另一个SVN服务器,作为两个SVN的父,两个SVN向父提交changeset。这个行为仅仅是方便我们管理的一个比较好的参考做法,并没有强制。另外,当然SVN服务器是不支持互相提交的,于是我们需要一个分布式版本管理软件。

个人觉得,一台SVN就好像一台MySQL,我们只有一个数据库。而分布式版本管理就好像Master-Master MySQL集群。有经验的朋友就会知道,在集群中使用自增字段是不可取的,就像SVN的changeset id是自增的不能适应分布一样。做MySQL集群很经常会用UUID作为主键,分布式版本管理也使用了类似的机制来保证多个库之间的changeset有唯一的ID不会冲突。这个已经是比较细节的处理问题。这里暂时不打算细节研究具体的机制或者使用方法,先有一个大概的概念,看软件的refrence很快会上手的。

再待续

预告:
权限问题
Mercurial目前的情况
远程模式
在Dreamhost上使用Mercurial
Mercurial基本使用

Categories: Uncategorized Tags:

我与Mercurial

January 25th, 2008 Sparkle 4 comments

最初知道 Mercurial这个工具其实是因为去年6月份看了cyfdecyf的一篇blog分布式版本管理工具:git & mercurial(作者搬迁了blog,新地址是这里).然后断断续续有在使用,一直想把一些经验写出来.最近刚好遇到云风在研究分布式版本管理,还是动手把一些经验写下来吧

一直一来都是用CVS,然后是SVN来做版本管理,最初认识分布式版本管理,是一个叫SVK的工具,是一个台湾人的作品,本身基于SVN,令到SVN可以分布式工作.当时觉得安装非常麻烦就没有研究下去了,而且本身对这样的功能需求也不大.后来Linus因为不满现有版本管理软件的问题,自己花了两个星期写了一个分布式版本管理Git,现在Linux kernel等源代码已经完全工作在Git的管理之上了.但是Git本身非常晦涩难懂,而且只能在Linux下运行,我本身也主要用Windows来工作,因此也没有深入研究.

直至看到 cyfdecyf的文章,这篇文章有坚定我研究分布式版本管理的信心.集中式版本管理的缺陷, cyfdecyf和云风都有描述了一些例子,我认为那些例子都很典型.如果所有开发人员都在一个房间里面,集中式版本管理是最好的,最明显的例子就是公司的开发,大家都能直接访问到服务器,网络不会中断.这种情况下,使用分布式版本管理反而增加了复杂性.但是,如果开发人员不是在同一个房间,甚至在不同的国家.当然你也可以在Internet上假设一个SVN服务器.但是,开发人员不一定有网络,或者网络不一定很好.而每次提交,或者同步,都要花上好几分钟或者更长时间,这非常影响开发.又或者你只是私人的项目,而你有没有能力假设公开的SVN服务器.而且我只是一个人,为什么每次都要提交到外边的服务器.当然也可以在自己的机器上面架设一个SVN,但是如果你有两台以上的机器就会觉得很麻烦了.

所有的这些场景,其实你需要一个分布式版本管理.cyfdecyf的文章最后在选择Git的代替品,定了用Mercurial.那我也从Mercurial开始吧.不过Mercurial的中文资料非常少,我始终不理解分布式版本管理的原理.最后,非常搞笑的情况是,我其实是看了Git的一份中文资料才真正明白的,也推荐大家从Git的中文资料入手.

待续…

Categories: Uncategorized Tags: