Git与Mercurial:他们有何不同?

Git和Mercurial有何不同?本文的目的是解释两个版本控制系统(VCS) - Git和Mercurial之间的相同点和不同点。

自2005年4月他们几乎同时在开源世界首次亮相以来,Git和Mercurial采取了截然不同的路径。它们都旨在取代名为BitKeeper的商业VCS。BitKeeper的创建者最初向Linux内核开发人员提供免费许可,但随后他以“善变”(或变化无常)的方式改变了主意。这就是Mercurial这个名字的来源。

Git和Mercurial的历史

从那时起,Git一直稳步成长为最受欢迎的VCS。它最初由Linus Torvalds本人大力推广。作为开创性的Linux创建者,他曾经是世界上首屈一指的开源倡导者,他非常高兴地批评其他所有VCS。

Mercurial没有以同样的方式成长。2008年,开源社区在Bitbucket和GitHub中找到了新家。GitHub显然支持Git,而一个鲜为人知的事实是Bitbucket推出了Mercurial。

2011年,在Atlassian收购了Bitbucket之后,他们又增加了对Git仓库的支持。但是,GitHub已经成为开源的家园。GitHub的受欢迎程度超出了Bitbucket和Mercurial的范围。如今,它拥有超过3100万用户,并归微软所有。在过去十年中,Git已成为大多数开发项目的标准。

Mercurial仍然有少数大型开发组织使用它 - 包括Facebook,Mozilla和万维网联盟(W3)。但它只占VCS市场份额的2%左右。相比之下,Git的比例超过80%。

 Git vs. Mercurial:有什么相同?

Mercurial和  Git都是分布式版本控制系统(DVCS)

DVCS允许开发人员将充满代码的仓库下载到他们的工作站,执行他们的工作项,然后将其放回中央服务器。虽然这意味着您可以脱机工作,但这不像过去那样令人担忧。(谁不总是在线?)

一旦每个开发人员的工作完成,它就会与其他人在“开发代码行”中的工作合并。它会经过测试,然后,在某些时候(通常希望更早而不是更晚),它将投入生产。

在一天结束时,Git和Mercurial做同样的事情 - 它们可以帮助您管理源代码的版本历史记录。但它们之间存在很大差异。在讨论Git与Mercurial之间的差异时,对话往往围绕可用性,所需专业知识和安全性。

易于使用 - Mercurial更简单

在比较Git与Mercurial时,其中一个显着差异是使用每个系统所需的专业知识水平。Git更复杂,它需要您的团队在安全有效地使用它之前从内到外地了解它。使用Git,一个草率的开发人员可能会对整个团队造成重大损害。它的文档也很难理解。

一般而言,如果您的团队经验不足,或者团队中有非技术人员,Mercurial可能是更好的解决方案。

Mercurial的语法更简单,文档更容易理解。此外,它以工具的方式工作 - 在使用它时你不会考虑很多事情。相反,使用Git,您最终可能会花时间搞清楚那些你被Git“挑剔”的行为(意指不合法的操作)并且往往还要在论坛上寻求帮助。

一旦你克服了学习曲线,Git为团队提供了更大的灵活性。

 Git有更多的命令,而且命令参数很多样化

如果您选择Git,请考虑选择一个直观的GUI。在命令行上使用Git会导致噩梦,特别是在开始时。Git中的命令很长并且有多个选项,这增加了难度。

Git与Mercurial 的安全性

Git与Mercurial中的分支模型

听起来可能比较奇怪,但你可以说Git和Mercurial都比另一个更安全,不会自相矛盾。也就是说,它们都没有提供大多数团队所需的安全性。

Git与Mercurial的安全性取决于您的技术专长水平。对于缺乏经验的用户来说,Mercurial可能更安全,但Git可以提供增强安全性的方法(一旦你知道自己在做什么)。

VCS都没有提供防止人们意外或故意破坏代码的安全性。简而言之,它们都没有提供大多数团队所需的强大安全性。

默认情况下,Mercurial不允许您更改历史记录。但是,Git允许所有相关开发人员更改版本历史记录。显然,这可能会带来灾难性的后果。使用基本的Mercurial,您只能使用“hg commit - amend”更改上次提交。

Git还会在reflog中存储30天内所做的每一项更改。例如,您可以修改最新提交的提交消息,并将其还原30天。但是,更改只能在本地进行,因为默认情况下这些更改不会推送到远程存储库。30天后,更改被统一,这意味着您无法再恢复。

 Git与Mercurial中的分支模型

分支意味着使用您要修改的文件 - 源代码。分支允许您同时处理不同版本的代码。然后开发人员可以合并更改,而不会(希望)打破代码库。

Git的分支模型

开发人员使用Git的主要原因之一是其有效的分支模型。在Git中,分支只引用某个提交。这使它们轻巧而强大。

Git允许您随时创建,删除和更改分支,而不会影响提交。如果您需要测试新功能或发现错误 - 创建分支,请执行更改,然后删除分支。

Mercurial的分支模型可能导致混乱

Mercurial中的分支并不具有相同的含义。这可能会使它更加麻烦。在Mercurial中,分支指的是连续变更集的线性线。变更集(csets)是指对存储库中的文件所做的一整套更改。

Mercurial将分支嵌入提交中,永久存储它们。这意味着无法删除分支,因为这会改变历史记录。但是,您可以使用书签引用某些提交,并以与Git分支类似的方式使用它们。

最后,Mercurial要求您小心谨慎,不要将代码推送到错误的分支,特别是如果您没有明确命名它们。你可以在Git中轻松避免这种情况。

Git和Mercurial之间的主要区别在于不同的分支结构。可以说,Git中的分支比Mercurial更好。尽管Mercurial可能更容易学习和使用,但它的分支模型经常会造成混乱。

 在Git中获取就绪代码,即索引文件

Git支持暂存区域的概念,也称为索引文件。

暂存是为下次提交添加文件的做法。它允许您选择下一个要提交的文件。当您不想将所有已更改的文件一起提交时,这非常有用。

在Mercurial中,提交前没有索引或暂存区域。更改将在工作目录中提交。对许多人来说,这可能是一个充分而简单的解决方案。但是,如果您希望选项选择您提交的工作目录的哪些部分,则可以使用Mercurial扩展,例如DirState或Mercurial Queues。

Git Mercurial:你选择哪个?

从根本上说,Git和Mercurial是相似的,每个都有它作为版本控制系统的优点。它们的设计不同,需要不同程度的专业知识。

Git已经成为行业标准,这意味着更多的开发人员对它很熟悉。Mercurial的最大优势在于它易于学习和使用,这对于技术含量较低的贡献者非常有用。

几乎没有人再使用Mercurial了。在Git 和 Mercurial辩论中,Git是纯Web和移动应用程序开发的明智选择。但是,如果您拥有混合资产,大型全球团队或严格的安全要求,您可能需要考虑Helix CoreHelix4Git

Helix4Git可帮助您扩展现有的Git环境。Helix Core和Helix4Git提供细化权限和所有数字资产的完整更改历史记录 - 从源代码到二进制文件。这两种解决方案都可确保全球团队快速获取所需文件。

原文链接:https://www.perforce.com/blog/vcs/git-vs-mercurial-how-are-they-different