比较时,在我看来,它们的功能集之间可能存在1:1的映射。然而,经常被引用的说法是“ Mercurial更容易”。该声明的依据是什么? (如果有的话)

评论

很奇怪,我从未听说Mercurial会更轻松。我发现了更多有关Git的文档(可能是感知的),所以我学到了。

因为它是莱纳斯(Linus)制造的?

转向这里的圣战领土,但我发现Mercurial比Git更易于使用,因为作为Windows用户,我受到Mercurial的欢迎,并被Git视为一个怪物和失败者。我知道我是拟人化软件,而且我都知道这两种软件都完全可以在Windows下正常使用,但这是两者中给人的印象。

hginit.com

我想知道如果Github不存在,或者没有那么多备受瞩目的项目,那么会有多少人会使用Git?

#1 楼

恰当的例子:假设您想更改所有先前提交的用户名。由于种种原因,我需要多次执行此操作。 > authors.convert.list文件:

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD


命令行:

<oldname>=<newname>


现在,看起来更容易使用吗?


注意:我花了2年时间独自与Git一起工作,所以这不是“我讨厌它,我2秒钟内没有得到它”的声音。

对我来说,就是可用性。 Git是非常面向Linux的,采用Linux的做事方式。这意味着命令行,手册页,然后自己解决。它的GUI非常差(请注意:大约从一年前开始,我就基于msysGit了),这似乎很妨碍我。我几乎不能使用它

命令行更糟。作为面向Linux的程序,在Windows上很难使用。他们没有使用本地端口,而是仅将git与MinGW(Think cygwin)包装在一起,这使得使用它变得更加困难。 MinGW不是Windows命令提示符,只是行为有所不同。疯狂的是,这是与Git一起工作的唯一方法。即使在Linux中,似乎唯一的方法就是使用直接命令行。 RabbitVCS之类的项目有所帮助,但功能却不是很强大。

面向命令行的方法并且是linux程序,这意味着几乎所有方法指南,帮助文档和论坛/ QA问题都依赖于运行上述可怕命令。基本的SCM命令(commit,pull,push)并不那么复杂,但是更多,并且复杂性呈指数增长。

我也讨厌很多OSS git用户似乎闲逛的地方:Github。当您第一次进入github页面时,它会用您可能会做的一切让您大吃一惊。对我来说,一个项目git页面看上去混乱,可怕并且过于强大。甚至对项目含义的解释也被推到最底层。 Github确实伤害了尚未设置完整网站的人们。它的问题跟踪器也很可怕且令人困惑。功能超载。

Git用户似乎也很喜欢。 Git用户似乎总是开始进行DVCS更好的“圣战”,从而迫使Mercurial用户捍卫自己。像http://whygitisbetterthanx.com/之类的网站显示出傲慢的态度和几乎“使用我的软件或死亡”的心态。很多时候,我到各个地方寻求帮助,只是因为不了解X,事先使用X,使用Windows等而被解雇。这太疯狂了。走向更友善的方法。对于新用户而言,他们自己的主页似乎比Git友好得多。在简单的Google搜索中,第五个结果是TortoiseHg,这是Mercurial的非常好的GUI。他们的整个方法似乎首先是简单,然后是电源。

使用Mercurial,我没有SSH废话(SSH在Windows上是地狱),我没有愚蠢的复杂命令,没有追随者,没有疯狂。 Mercurial可以正常工作。

TortoiseHg提供了一个实际可用的界面(尽管最近似乎在增长),它提供了实际有用的功能。选项仅限于您需要的选项,可消除混乱情况和很少使用的选项。它还提供了许多不错的默认设置。

Mercurial对新手非常友好,很容易拿起。即使是一些更复杂的主题,例如不同的分支模型和历史记录编辑,也很容易遵循。我迅速而轻松地接起了水星。

Mercurial也只需很少的设置即可首次使用。在任何操作系统上,我都可以安装TortoiseHg并获得我想要的所有功能(主要是上下文菜单命令),而不必寻找不同的Guis。还缺少设置SSH(一半的指南说使用Putty,Plink和Pagent,而另一半则说使用ssh-keygen)。对于新用户,TortoiseHg需要花费几分钟的时间来设置,而Git则需要花费30分钟到一个小时的时间来进行大量的谷歌搜索。

最后您有了在线仓库。 Githubs相当于BitBucket,它具有我上面概述的一些问题。但是,还有Google Code。当我进入Google Code项目时,不会出现功能超载的情况,而会得到一个简洁的界面。 Google Code更像是在线存储库/网站组合,对于没有现有站点设置的OSS项目确实有帮助。在相当长的一段时间内使用Google Code作为我的项目网站时,我会感到非常自在,只在绝对必要时才建立网站。它的问题跟踪器也功能强大,非常适合Github几乎没有用的问题跟踪器和Bugzilla的怪兽之间。

水银每次都会起作用。 Git挡住了我,只会越发激怒我。

评论


评论员:评论旨在寻求澄清,而不是进行扩展讨论。如果您有解决方案,请留下答案。如果您的解决方案已经发布,请对其进行投票。如果您想与他人讨论此问题,请使用聊天。有关更多信息,请参见FAQ。

–user8
2011年6月30日下午0:27

IntelliJ IDEA和Xcode 4在各自平台上与Git完美集成,对于日常任务,您无需使用命令行。

–user7519
2011年9月19日在1:06

我想补充一点,当您想在Windows上使用GIT时,tortoiseGIT现在要好得多。您仍然必须处理SSL密钥,安装过程并不顺利,但安装完成后很容易。

– Arkh
2011年10月1日在22:14

Git扩展程序我个人发现,与Windows上的TortoiseHG相比,它更易于浏览和使用,而且git仅使用1个命令行。

– KalDrexx
2011年11月18日在18:26

我对这一行感到困惑:“ MinGW不是Windows命令提示符,只是行为有所不同。这是与Git一起工作的唯一方法,这很疯狂。我使用msysgit安装和选项2从Windows命令行运行。它工作正常。有些事情不起作用(例如插入符号,DOS中的换行符),但是还有一些替代方法(例如波浪号)可以正常工作。我不是命令行爱好者(或者至少我不是在开始学习Git之前就不是),但是在命令行中使用Git确实很容易。我想念什么吗?

– Kyralessa
13年2月19日在21:05

#2 楼

Git vs Mercurial


人们普遍认为Mercurial比Git更简单易学。
反过来,人们通常会认为
Git更加灵活并且功能强大。这部分是由于
,因为Git倾向于提供更多的
低级命令,也部分是由于
,因为默认的Mercurial往往会隐藏高级功能,而保留它以便
用户编辑Mercurial config
文件以激活他们喜欢的高级功能。这通常会导致人们
认为高级功能
在Mercurial中不可用。


Git概念
一直更加关注
界面方面,这使得它本来就更容易学习。与Git相比,需要以一种有用的方式对
进行更深入的了解。从长远来看,这样的封装使Mercurial具有虚假的外观
,而其功能和功能却不如实际。

评论


因此,Mercurial仅隐藏高级功能,而GIT隐藏所有功能... ;-)

–敬畏
2011-6-7 18:56



Git确实具有更大的功能。例如,没有等效于git的HEAD〜1。 Mercurial的p(x)跨过分支,多么没用。汞没有阶段。推送时必须推送所有分支。即使使用histedit,shelf和rebase之类的所有插件,Mercurial也不是那么灵活。 Git的命令行也更好,它给了用户提示,但没有提示。我被迫在工作中使用这个略显残缺的DVCS,并且遇到了一些问题,即汞缺乏能力来做我想做的事情。

– Keyo
11年6月28日在5:09

@Keyo:Mercurial有〜,请参阅修订。它没有暂存区域,但是您可以使用MQ来模拟它,它的功能要强大得多。学会使用该工具,而不是坚持从git中学到的知识,它会有所回报。

– Idan K
2011-6-28在6:50



@Keyo:推送时不必使用Mercurial推送所有分支。您可以推送特定的分支(例如:hg push --branch BRANCH),也可以推送特定的版本(例如,hg push --rev REV)。请参阅hg帮助推送以获取更多选项。

–摄政王
2011年6月28日上午8:46

仅供参考,可以使用记录扩展名获得过渡区域的相当一部分。 OTOH,我认为货架扩展(模仿Baazar的“ shelve”命令,并且接近“ git stash”)在使用过渡区域的大多数目的上都更好。

– brandizzi
2012年6月30日0:00



#3 楼

上下文:我每天都使用Mercurial(用于工作)和Git(用于辅助项目和开源)。我主要同时使用基于文本的工具(而不是IDE),并且在Mac上。

一般来说,我发现Mercurial更易于使用。我发现一些使Mercurial更容易的方法:



索引不足。索引是启用Git的许多功能的强大工具,但它还是一个额外的层,可增加我经常做的许多事情。 Mercurial的工作流程更类似于svn。

版本号代替shas。我发现这是一件小事,在Mercurial中,每天使用命令变得非常容易。在编写命令时,在进行变基,合并等操作时,将一些修订版本号推入您的头脑要比使用什至更短的shas更容易。

分支。 Git通过命名提交来分支的方法功能强大,并且与其他版本控制系统完全不同。它使某些事情变得容易得多。我发现Mercurial的方法与svn的思想更好地匹配,并且更容易从视觉上理解分支的历史。这可能只是一个首选项。


评论


+1表示索引;我认为索引及其交互作用使git较之于mercurial更难以学习。

– Sean McMillan
2011年6月27日18:56

相当于git分支的hg实际上称为书签。据我所知,hg分支在git中没有等效项。

–汉克·盖伊
2011年6月27日19:10

我处在同样的情况下,工作时很忙碌,而git则在家中。水银分支对我来说很烦人,我喜欢拥有私人分支机构,并在需要时推动它们。 Mercurial强迫我使用架子或其他存储库。修订版号很傻,给我哈希。 git舞台很棒,我想念这个。我真的很想念git的功能。我用一些插件做了一些事情,但是分支确实让我很烦。

– Keyo
2011年6月28日下午4:57

@Keyo-根据我的经验,git分支是hg分支的子集。在hg中,您可以同时具有已命名和未命名(拓扑)分支,甚至可以使用书签以与git相同的方式管理未命名分支。我从来没有真正看到登台区域的意义。我宁愿搁置不需要的更改,然后在提交之前确保我的代码编译并完成我的测试。然后,我可以搁置并继续。另外,查尔斯·贝利(Charles Bailey)的“按摩帅哥”(p90 +)吓我一跳* 8'):accu.org/content/conf2011/accu2011LT_fri_share_v2.pdf

– Mark Booth
2011年6月29日10:27



@Keyo:在Mercurial中,私有分支称为“书签”:更新到根修订版,hg书签keyo-stuff,执行操作,hg commit,然后最终进行hg push -B keyo-stuff。如果您不喜欢修订号,请不要使用它们。我认为,Mercurial会在任何接受修订号的地方接受哈希。我不得不说,您的评论抨击了Mercurial,因为它实际上缺乏功能,但是却无知又有点进取。对于Git用户的刻板印象,您做得不好!

–汤姆·安德森(Tom Anderson)
2011年7月3日在15:02

#4 楼

这是非常主观的,并且取决于一个人,但是,是的,我想告诉那些完全不接触VCS的人或某个来自“老派” VCS的人,Mercurial看起来会更容易。 >例如,添加文件,以Hg表示不存在索引,返回某些旧版本并从那里进行分支(仅更新和提交)的简便性,这是一些“最明显”的示例。现在,一个系统的大多数功能可以在另一个系统中进行仿真,反之亦然,但这需要在Git中有一定的知识,而在Mercurial中,默认值(如果允许的话)是“用户友好的”。这些小东西-到处切换,一个命令中的非显而易见行为等等...这些东西加在一起,最后,一个系统似乎比另一个系统更易于使用。 br只需使答案完整即可;我使用git,但是当为“新手”推荐VCS时,我几乎总是推荐Mercurial。我记得,当它第一次出现在我手中时,感觉非常直观。根据我的经验,Mercurial的wtf / min低于Git。

评论


+1表示“较少wtf /分钟” -1表示“这非常主观”。这不是很主观...我不知道为什么人们仍然认为UI的差异是主观的。如果我使用mercurial并用md5哈希它的命令,那么您不会说某些人可能会发现md5哈希比原始的更为直观,不是吗? (我希望不是)。 Git也是如此。只有当您使用git的经验远大于汞时,Git才比汞容易。

–weberc2
2013年9月21日在17:35

#5 楼

我认为这很简单:Mercurial具有更熟悉的语法(特别是对于SVN用户),并且文档齐全。一旦习惯了Git语法,就会发现它像其他任何东西一样易于使用。

评论


不。您有太多的工作流程步骤可以称其为“不同语法”。为了使用Git,您必须了解要操作的基础模型以及git索引的所有状态。说SQL和Pascal是同一件事的两种不同语法,这同样是错误的。 Git是具有DVCS功能的文件系统内容版本控制系统。 Mercurial是DVCS,它不会执行GIT的每个文件系统内容版本转换操作,而只是DVCS用户都需要的子集。

– Warren P
2012年11月20日19:55

#6 楼

对此,认知可能会随着时间而改变。 Mercurial的设计非常好,Git也是如此。 Mercurial似乎更容易学习(至少对我来说是这样),并且在Git中遇到了很多困难,而我在Mercurial中没有类似的困难。我尝试学习Python和Ruby,并通过Python更快,更快速地学习。这并不意味着Python永远在任何地方都比Ruby更好,甚至不代表我更好。这就是我所学并坚持的。程序员经常出于个人喜好进行圣战。

我是一名购物狂,试图对Git保持开放态度,并且我自由地承认,它并没有“成为我的新宠”。就像水星一样。我认为Git确实非常好。

关于GIT /商品复杂性的反例:Mac上的XCode内置了对GIT的良好支持。与Meritial一起使用XCode不如GIT容易。

到目前为止,我在GIT方面的经验使我感到困惑和迷茫,在使用GIT时需要更多地查阅文档。我相信已经写了很多文档,但是没有什么能使我“理解”。其次,我可以轻松地在Python中修改和扩展Mercurial,并且由于我精通Python,并且因为任何人都可以真正快速地学习python,所以这对我来说似乎是一个优势。我也知道C,并且用C编写Python扩展,所以我想有一天,如果需要的话,我可以轻松地用C编写Git扩展。

易用性不是容易量化。它在那里,我不认为它完全是主观的,但是我们没有良好的客观测量技术。易于使用的单位是什么? Milli-iPods?

我不那么喜欢党派,以至于100%赞成水银,而100%反对git。我现在对Mercurial,Windows和Linux都比较满意,当我开始做更多的Mac工作时,我希望我会尽量坚持使用XCode + GIT。2013年更新:我现在已经使用Mercurial AND GIT了足够长的时间,以查找一些我希望它具有Git的功能,例如关于合并策略的问题。真的,Git很棒,即使很难学习,有时也非常复杂。

#7 楼

IMO可能会使Git失去新用户:


Git文化更以命令行为中心。虽然这两种工具的确倾向于过多地关注命令行(正如我多次提到的那样,命令行指令可能功能强大且更流畅,但它们并不是一种好的营销策略),但Git的情况尤其如此。 Mercurial在TortoiseHg中具有事实上的标准GUI工具,甚至是Mercurial主页上Windows用户的默认下载选项,而Git具有一些竞争的GUI前端(TortoiseGit,Git Extensions,gitk等),它们的广告宣传不佳在Git网站上,反正这一切都是令人讨厌的。 (红色标签上的黑色文字?来吧,TortoiseGit,您可以做得更好!)Git社区中还普遍存在一种态度,即使用GUI工具的人不是合适的软件开发人员。有几种开箱即用的默认设置对高级用户来说是很有意义的,但如果不吓到新用户,则可能会令人惊讶。例如,自动化诸如合并之类的任务要积极得多(例如,git pull在可能的情况下自动合并并提交)。有一种完全自动合并的情况,但是大多数经验不足的用户对合并感到恐惧,因此需要在释放其源代码功能之前,有机会获得对其工具的信心。

文档和固有的复杂性:

$ hg help log | wc -l
64
$ git help log | wc -l
912




评论


实际上,相对于64位帮助,我更喜​​欢912行的帮助。

–灾难
2011年10月1日21:15

实际上,我更喜欢如此直观且无缝的UI,因此您一开始不需要帮助。

–果酱蛋糕
2011年10月1日在21:40

我同时需要GUI和帮助。 :)在我看来直觉是别人的一团糟。

–灾难
2011年10月1日在21:47



当然可以,但是当需要帮助时,应该很容易遵循。

–果酱蛋糕
2011年10月1日22:42

我想到了一个新的类比; Git就像C ++(对不起Linus!),Mercurial就像Pascal。隐式的内容只能在Pascal(或Mercurial)中用一种方法来显式地完成,而在C ++(和Git)中可以用十九种方法来完成。有些人喜欢带有更多按钮和手柄的电动工具,而Git就是这样。

– Warren P
2013年6月6日12:50

#8 楼

我能想到的一件事是

git add .
git commit -am "message"


vs.

hg ci -Am "message"


git commit -a不添加新创建的文件,hg ci -A确实如此,这意味着可以使用Mercurial中的一个命令来完成需要使用git的两个命令的操作。再说一次,“减少键入”并不一定意味着“更加用户友好”。

评论


我经常发现在我的工作流程中,自动添加新文件实际上是不可取的。我开始更喜欢git commit -a的工作原理,因为它可以更轻松地控制给定提交中添加和不添加的内容。 (对我来说,为每个svn ci指定单独的路径名以避免在提交中添加无关的材料实际上并不罕见。)

– Greyfade
2011年6月27日16:30

足够公平,但是我相信没有-A标志的hg ci等同于git commit -a。我使用git比使用hg多得多,所以我不确定100%。

–毛哲豪
2011年6月27日17:10



我检查过了,hg ci == git commit -a。

–毛哲豪
2011年6月27日17:19

但是如果您使用hg commit指定特定文件,则可以避免拉入不需要的文件。在我不希望使用此控件的情况下,我发现这种方法很好用。

– Alex Miller
2011年6月27日17:33

你为什么要“ git add”。然后“ git commit -am”?难道不是所有内容都已经添加到索引中了吗?

– jacobangel
2011-6-7 18:42



#9 楼

因为它是。

Git暴露的胆量远远超过了汞。您可以在捡起它后的几分钟内愉快地使用Mercury,但是经过几个月的搏斗,我发现git仍然很难解决(除了尝试学习git以外,我在过去几个月中几乎没有做过)。我既从命令行使用命令行,又在Linux上使用,所以这不仅是对命令行界面的厌恶。 git。临时区域和git中add命令的行为也增加了不必要的复杂性。重置,检出和还原这三者及其多重排列增加了巨大的复杂性,当您看到还原和更新汞的直接本质时,这是不必要的。

我也同意上面关于Hginit的评论,这无疑使水星更容易理解。写得很好,很容易理解。没有为git编写的文档接近。首先,我发现Scott Chacone(他一人撰写了有关git的大多数文档/书籍)所写的大部分内容特别令人困惑。