Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn Git、Mercurial和Bazaar的相对优势和劣势是什么?_Svn_Git_Version Control_Mercurial_Bazaar - Fatal编程技术网

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

Svn Git、Mercurial和Bazaar的相对优势和劣势是什么?,svn,git,version-control,mercurial,bazaar,Svn,Git,Version Control,Mercurial,Bazaar,这里的人们认为Git、Mercurial和Bazaar的相对优势和劣势是什么 在考虑它们之间的相互关系以及针对SVN和Perforce等版本控制系统时,应该考虑哪些问题 P>规划从一个VSN迁移到一个分布式版本控制系统,你会考虑哪些因素? < P>这是一个很大的问题,很大程度上取决于上下文,这将花费大量的时间来键入这些小文本框中的一个。此外,当用于大多数程序员通常做的事情时,这三种方法看起来基本相似,因此即使理解它们之间的差异也需要一些相当深奥的知识 如果你能将对这些工具的分析分解到你有更具体

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

在考虑它们之间的相互关系以及针对SVN和Perforce等版本控制系统时,应该考虑哪些问题


<> P>规划从一个VSN迁移到一个分布式版本控制系统,你会考虑哪些因素?

< P>这是一个很大的问题,很大程度上取决于上下文,这将花费大量的时间来键入这些小文本框中的一个。此外,当用于大多数程序员通常做的事情时,这三种方法看起来基本相似,因此即使理解它们之间的差异也需要一些相当深奥的知识


如果你能将对这些工具的分析分解到你有更具体问题的地方,你可能会得到更好的答案。

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

Bazaar的速度相当快(对于历史较浅的树来说非常快,但目前随着历史长度的增加,它的伸缩性较差),对于熟悉传统SCM(CVS、SVN等)的命令行界面的人来说,它很容易学习。Win32被其开发团队视为一流的目标。对于不同的组件,它有一个可插拔的体系结构,并经常替换其存储格式;这使他们能够引入新功能(例如更好地支持与基于不同概念的修订控制系统集成)并提高性能。Bazaar团队认为目录跟踪和重命名支持一流的功能。虽然全球唯一的修订id标识符可用于所有修订,但使用树本地修订编号(标准修订编号,更类似于svn或其他更传统的SCM使用的编号)代替内容哈希来识别修订。Bazaar支持“轻量级签出”,其中历史记录保存在远程服务器上,而不是复制到本地系统,并在需要时通过网络自动引用;目前,这在DSCM中是独一无二的

两者都有某种形式的SVN集成可用;然而,bzr svn比git svn的能力要强得多,这主要是由于为此目的引入了后端格式修订。[截至2014年的更新:第三方商业产品SubGit在SVN和Git之间提供了一个双向接口,其保真度与bzr SVN相当,并且更加完善;我强烈建议在预算和许可限制允许的情况下使用它,而不是Git SVN]

我没有广泛使用Mercurial,因此无法对其进行详细评论——只是需要注意的是,它和Git一样,具有用于修订的内容哈希地址;与Git一样,它也不将目录视为一级对象(并且不能存储空目录)。然而,它比除Git之外的任何其他DSCM都要快,并且具有比任何竞争对手都好得多的IDE集成(特别是对于Eclipse)。考虑到Mercurial的性能特点(仅略落后于Git)及其卓越的跨平台和IDE支持,Mercurial对于拥有大量以win32为中心或绑定IDE的成员的团队来说可能很有吸引力

从SVN迁移的一个问题是SVN的GUI前端和IDE集成比任何分布式SCM都要成熟。此外,如果您当前大量使用SVN的预提交脚本自动化(即,在提交可以继续之前需要通过单元测试),您可能需要使用类似的工具来自动化对共享分支的合并请求

SVK是一个DSCM,它使用Subversion作为其后台存储,并且与以SVN为中心的工具有很好的集成。但是,它的性能和可伸缩性比任何其他主要的DSCM(甚至DARC)都要差得多,并且对于那些在历史长度或文件数量方面可能增长过大的项目,应该避免使用它


[关于作者:我在工作中使用Git和Performance,在个人项目中使用Bazaar,并将其作为嵌入式库;我的雇主组织的其他部分大量使用Mercurial。在前世,我围绕SVN构建了大量自动化系统;在此之前,我有过GNU Arch、BitKeeper、CVS和其他方面的经验。Git对f非常反感irst——它感觉像GNU Arch,因为它是一个重概念的环境,而不是为符合用户对工作流的选择而构建的工具包——但从那以后,我对它已经相当满意了]Mercurial和Bazaar从表面上看非常相似。它们都提供基本的分布式版本控制,如脱机提交和合并多个分支,都是用python编写的,速度都比git慢。一旦深入研究代码,就会有很多不同之处,但对于日常任务来说,它们是有效的同样,尽管Mercurial似乎更有动力

Git并不是为外行设计的。它比Mercurial和Bazaar快得多,是为管理Linux内核而编写的。它是最快的