Git,Mercurial和Bazaar的相对优势和劣势是什么?

这里的人们认为Git,Mercurial和Bazaar的相对优势和劣势是什么?

在考虑彼此之间以及SVN和Perforce等版本控制系统时,应考虑哪些问题?

在规划从SVN到其中一个分布式版本控制系统的迁移时,您会考虑哪些因素?

Git速度非常快,规模非常好,并且对其概念非常透明。 这是因为它有一个相对陡峭的学习曲线。 一个Win32端口可用,但不是一stream的公民。 Git将哈希公开为用户的版本号; 这提供了保证(因为单个散列总是指完全相同的内容;攻击者不能在没有被检测到的情况下修改历史logging),但是对用户来说可能是麻烦的。 Git有跟踪文件内容的独特概念,即使这些内容在文件之间移动,并将文件视为第一级对象,但不跟踪目录。 git的另一个问题是有许多操作(例如rebase ),可以很容易地修改历史logging(从某种意义上讲,哈希引用的内容永远不会改变,但引用该哈希可能会丢失)。 一些纯粹主义者(包括我自己)不那么喜欢。

市场相当快(对于历史悠久的树木来说速度非常快,但是现在的规模与历史长度相差甚远),并且很容易学习那些熟悉传统SCM(CVS,SVN等)的命令行界面的人。 Win32被开发团队视为一stream的目标。 它具有适用于不同组件的可插拔架构,并经常replace其存储格式。 这使他们能够引入新的function(例如更好地支持与基于不同概念的修订控制系统的集成)并提高性能。 Bazaar团队考虑目录跟踪并重新命名支持一stream的function。 虽然全球唯一的版本ID标识符可用于所有版本,但是使用树本地版本号(标准版本号,更类似于svn或其他更传统的SCM使用的版本号)来代替内容哈希值来标识修订版本。 Bazaar支持“轻量级检出”,其中历史保存在远程服务器上,而不是复制到本地系统,并在需要时通过networking自动引用; 目前这在DSCM中是独一无二的。

两者都有某种forms的SVN集成可用; 然而,bzr-svn比git-svn更有能力,很大程度上是由于为此目的而引入的后端格式修订。 [更新,截至2014年:第三方商业产品SubGit提供SVN和Git之间的双向接口,与bzr-svn保真度相当,并且更加精美; 强烈build议在预算和许可限制允许的情况下,将其用于git-svn。

我没有广泛使用Mercurial,所以不能对它进行详细评论 – 除了要注意的是,它像Git一样,对内容进行修改, 也像Git一样,它不会将目录视为一级对象(并且不能存储一个空目录)。 但是,除了Git之外,它比任何其他DSCM都要快,并且比其他竞争对手的IDE集成(特别是Eclipse)要好得多。 考虑到它的性能特征(仅略低于Git的性能特征)以及其优秀的跨平台和IDE支持,Mercurial可能会吸引大量以win32为中心或IDE绑定成员的团队。

从SVN迁移的一个问题是,SVN的GUI前端和IDE集成比任何分布式SCM都要成熟。 另外,如果你现在大量使用SVN的预提交脚本自动化(也就是在提交之前要求unit testing通过),你可能需要使用类似于PQM的工具来自动化你的共享分支的合并请求。

SVK是一个使用Subversion作为后台存储的DSCM,与SVN中心工具有很好的集成。 但是,它的性能和可扩展性要比任何其他主要的DSCM(甚至Darcs)都要差很多,对于那些在历史长度或文件数量方面可能会变大的项目,应该避免这种情况。

[关于作者:我使用Git和Perforce工作,Bazaar使用我的个人项目和embedded式库; 我的雇主组织的其他部门大量使用Mercurial。 在以前的生活中,我围绕SVNbuild立了大量的自动化; 在此之前我有GNU Arch,BitKeeper,CVS等等的经验。 Git刚开始非常令人厌烦 – 它感觉像GNU Arch,因为它是一个概念繁重的环境,而不是依照用户select的工作stream程来构build的工具包 – 但是我后来变得相当舒服它]。

Ogre 3D项目的Steve Streeting(9/28/2009)发表了一篇关于这个主题的博客文章,他对Git,Mercurial和Bazaar进行了很好的甚至是比较的比较 。

最后,他发现了三个优点和缺点,没有明确的赢家。 从好的方面来说,他给了一个很棒的桌子来帮助你决定去哪里。

替代文字

它是一个简短的阅读,我强烈推荐它。

InfoQ有一个很好的比较 。


这里的人们认为Git,Mercurial和Bazaar的相对优势和劣势是什么?

在我看来, Git的优势在于其清晰的底层devise和非常丰富的function。 它也有我认为对多分支仓库和pipe理分支繁重的工作stream程的最佳支持。 这是非常快的,有小的存储库大小。

它有一些有用的function,但需要花费一些努力去适应它们。 这些包括在工作区域和版本库数据库之间的可见的中间版本ara(索引),这允许在更复杂的情况下更好的合并解决,增量的合作,以及与脏树的合作; 使用相似性启发式来检测重命名和复制,而不是使用某种文件ID来跟踪它们,这很好运行,并且允许在文件之后移动代码,而不仅仅是批量重命名。

它的一个缺点是MS Windows支持滞后,而且不完整。 另一个被认为是缺点的是,它没有像Mercurial那样有很好的文档logging,并且比竞争对手更不方便用户,但是它会改变。

在我看来, Mercurial的优势在于其良好的性能和小的资源库大小,并且具有良好的MS Windows支持。

主要的缺点是我认为地方分支机构(单个存储库中的多个分支机构)仍然是二等公民,以奇怪而复杂的方式实现标签。 另外,它处理文件重命名的方式并不理想(但是这种迁移已经改变)。 Mercurial不支持章鱼合并(与两个以上的父母)。

从我所听到的和读取主集市的好处是它容易支持集中化的工作stream程(这也是不利的,集中的概念可见的地方不应该),跟踪文件和目录的重命名。

它的主要缺点是具有长非线性历史的大型存储库的性能和存储库大小(至less对于不太大的存储库而言性能得到改进),默认范例是每个存储库一个牧场(尽pipe可以设置为共享数据) ,集中的概念(但也是从我听到的变化)。

Git是用C,shell脚本和Perl编写的,可编写脚本; Mercurial是用C(核心,性能)和Python编写的,并提供扩展API; Bazaar是用Python编写的,并提供扩展的API。


在考虑彼此之间以及SVN和Perforce等版本控制系统时,应考虑哪些问题?

像Subversion(SVN),Perforce或ClearCase这样的版本控制系统是集中式版本控制系统。 Git,Mercurial,Bazaar(以及Darcs,Monotone和BitKeeper)都是分布式版本控制系统。 分布式版本控制系统允许更广泛的工作stream程。 他们允许使用“发布准备就绪”。 他们更好地支持分支和合并,以及分支机构繁重的工作stream程。 您不需要信任具有提交访问权限的人们就可以通过简单的方式从他们那里获得贡献。


在规划从SVN到其中一个分布式版本控制系统的迁移时,您会考虑哪些因素?

你可能要考虑的一个因素是对SVN的支持; Git有git-svn,Bazaar有bzr-svn,而Mercurial有hgsubversion扩展。

免责声明:我是Git用户和小时间贡献者,并观看(并参与)git邮件列表。 我只从他们的文档,IRC和邮件列表的各种讨论以及比较各种版本控制系统(其中一些在Git Wiki上的GitComparison页面上列出)的博客文章和文章中了解Mercurial和Bazaar。

Mercurial和Bazaar在表面上非常相似。 他们都提供基本的分布式版本控制,就像离线提交和合并多个分支一样,都是用python编写的,而且都比git慢。 一旦你深入了解代码,就会有很多不同之处,但是对于日常的日常工作来说,它们实际上是一样的,尽pipeMercurial似乎有更多的动力。

Git,好吧,不适合不熟练的人。 它比Mercurial和Bazaar都快得多,而且是为了pipe理Linux内核而编写的。 这是三者中最快的,也是三者中最强大的一个。 Git的日志和提交操作工具是无与伦比的。 然而,这也是最复杂和最危险的使用。 如果你不了解git的内部工作方式,就很容易失去一个提交或者破坏一个仓库。

看看Python开发人员最近的比较: http : //wiki.python.org/moin/DvcsComparison 。 他们select了Mercurial基于三个重要原因:

Mercurial的select有三个重要原因:

  • 根据一项小调查,Python开发人员比使用Bazaar或Git更感兴趣使用Mercurial。
  • Mercurial是用Python编写的,与python-dev倾向于“吃自己的狗食”一致。
  • Mercurial比bzr快得多(它比git慢,但差距要小得多)。
  • 对于SVN用户来说,Mercurial比Bazaar更容易学习。

(来自http://www.python.org/dev/peps/pep-0374/

Sun对git , Mercurial和Bazaar进行了评估,以取代Solaris代码库的Sun Teamware VCS。 我发现它很有趣。

这是一个很大的问题,这个问题很大程度上取决于上下文,这会花费你很多时间来input这些小文本框之一。 而且,所有这三者在用于大多数程序员所做的通常的东西时看起来基本相似,所以即使了解差异也需要相当深奥的知识。

如果你能把这些工具的分析打破到你有更具体问题的地步,你可能会得到更好的答案。

集市恕我直言,比git更容易学习。 Git在github.com上有很好的支持。

我认为你应该尝试使用两者,并决定最适合你。

这里的人们认为Git,Mercurial和Bazaar的相对优势和劣势是什么?

这是一个非常开放的问题,与flamebait接壤。

Git是最快的,但是三者都足够快。 Bazaar是最灵活的(它对SVN版本库有透明的读写支持),并且关心用户体验。 Mercurial是在中间的某个地方。

所有三个系统都有很多粉丝。 我个人是个Bazaar迷。

在考虑彼此之间以及SVN和Perforce等版本控制系统时,应考虑哪些问题?

前者是分布式系统。 后者是中央系统。 另外,Perforce是专有的,而其他所有的都是免费的。

集中式与分散式相比,您所提到的任何一个系统都是非常重要的select。

在规划从SVN到其中一个分布式版本控制系统的迁移时,您会考虑哪些因素?

首先,缺乏一个很好的替代TortoiseSVN。 虽然集市正在自己的乌龟变种 ,但它还没有,直到2008年9月。

然后,培训关键人物如何使用分散系统将影响他们的工作。

最后,与系统的其他部分整合,如问题跟踪器,夜间构build系统,自动化testing系统等。

在市场上一个非常重要的失踪的是cp。 您不能像SVN中那样共享相同历史logging的多个文件,请参阅此处和此处的示例。 如果你不打算使用cp,bzr是svn的一个很好的(而且非常容易使用)replace。

我曾经使用Bazaar一段时间,我喜欢很多,但它只是更小的项目,即使这样很慢。 如此容易学习,但不是超级快。 这是非常x平台。

我目前使用Git,从版本1.6开始,我非常喜欢Git,因为它使用的命令更加类似于其他VCS。

我认为我使用DVCS的主要差异是:

  1. Git是最有活力的社区,看到关于Git的文章是很常见的
  2. GitHub真的很有趣。 Launchpad.net是好的,但没有像Github的乐趣
  3. Git的工作stream工具的数量非常棒。 它被整合到了所有的地方。 有一些为Bzr,但不是那么多或维护。

总之,当我在DVCS上切齿时Bzr非常棒,但是现在我对Git和Github非常满意。

分布式版本控制系统(DVCS)解决了与集中式VCS不同的问题。 比较它们就像比较锤子和螺丝刀。

集中的VCS系统的devise意图是有一个真正的来源是有福的,因此是好的。 所有的开发人员都从这个源头开始工作(签出),然后添加(提交)他们的更改,这些更改同样变得有福了。 CVS,Subversion,ClearCase,Perforce,VisualSourceSafe和所有其他CVCS之间的唯一真正区别在于每个产品提供的工作stream程,性能和集成。

分布式VCS系统旨在使一个存储库与其他存储库一样好,并且从一个存储库合并到另一个存储库只是另一种通信forms。 任何仓库应该被信任的语义值都是由外部的过程而不是由软件本身强加的。

使用一种或另一种types的真正select是组织性的 – 如果您的项目或组织需要集中控制,那么DVCS是不起作用的。 如果您的开发人员需要在全国/世界各地工作,而没有安全的宽带连接到中央存储库,那么DVCS可能是您的救命稻草。 如果你需要两个,你是fsck'd。

你的主要问题是这些是分布式 SCM,因此需要对用户的思维进行一些改变。 一旦人们习惯了这个想法,技术细节和使用模式就会落到实处,但是不要低估最初的障碍,尤其是在企业环境中。 请记住,所有问题都是人为问题。

ddaa.myopenid.com提到它,但我认为这是值得一提的:Bazaar可以读取和写入远程SVN存储库。 这意味着您可以在本地使用Bazaar作为概念certificate,而其他人仍然使用Subversion。

编辑:几乎所有的工具现在有一些与SVN交互的方式,但我现在有个人经验, git svn工作得非常好。 我已经使用了几个月,打嗝很less。

Linus Torvalds在git上有很好的video。 他是Git的创造者,所以这是他所推崇的,但在video中,他解释了什么是分布式SCM,以及为什么他们比集中式更好。 有很多比较混帐(mercurial被认为是好的)和cvs / svn / perforce。 也有观众向分布式SCM迁移的问题。

我发现这个材料很有启发性,而且我卖给了分布式SCM。 但尽pipe莱纳斯的努力,我的select是mercurial。 原因是bitbucket.org,我发现它更好(更慷慨),然后github。

我需要在这里说一句警告:莱纳斯有相当侵略性的风格,我想他想笑,但我没有笑。 除此之外,如果您是分布式SCM的新手,并且考虑从SVN迁移,则该video非常棒。

http://www.youtube.com/watch?v=4XpnKHJAok8