编程学生更容易使用哪种DVCS(git或hg)?[关闭]


25

有一点背景:我正在上大学三年级。学生分为4人一组。几乎每个人都将在Windows下工作(除了像我这样在Linux上的一些人)。作为学校课程的一部分,我们将很快开始为一个真正的客户开发项目,但是我和另一个团队想知道哪种方法最适合彼此共享我们的代码。

我从事兼职工作已有3年,并且在不同项目上同时使用git和mercurial有丰富的经验,因此使用一个或另一个系统没有任何问题。但是,我的队友以前从未使用过版本控制系统。还有另一个团队尝试使用SVN但遇到了重大问题,并且希望尝试其他尝试,因此他们征询了我的意见。

我的想法:听说Mercurial + TortoiseHg在Windows下具有更好的集成,但是我想知道即使我解释了匿名头的概念是否也可能使他们感到困惑。另一方面,我发现git分支对于初学者来说更容易理解(每个程序员的工作分离清晰),但在Windows下效果不佳。


2
git默认情况下启用了很多功能,但是我刚才说过的每个人都说Mercurial较容易学习,根据我在使用这两种方法的经验,我倾向于同意。是的,与git等价物相比,Mercurial工具更易于在Windows中安装。就是说,期望能引导人们并在第一周(或更多……)中为他们提供辅导。
2011年

1
从开始使用DVCS可能是管理多个并行工作的贡献者的合并贡献的最简单方法。如果您发现匿名头令人困惑,请不要使用它们(Mercurial支持命名分支)。
斯蒂芬·斯蒂尔

2
再次链接到此博客文章?吉特(Git)是Har跳喷气式飞机
2011年

1
我从来不明白为什么整个“太难学了”都很重要。好的,所以要花20分钟来学习如何进行提交和分支,而不是10分钟。。。大不了?
选项

1
观看(其中一个)通过hginit.com并根据他们的反应采取措施。
chelmertz

Answers:


49

水银无疑。

这当然是主观的,并且会从一个人到另一个人,但是普遍的看法是,Mercurial更容易被嘲笑,特别是对于VCS新手或旧VCS之一的人。

手头观点:

  1. Mercurial是在考虑Windows的基础上开发的 ; Git已移植。不管有人试图告诉我什么,Git仍然是Windows上的二等公民。在过去的几年中,情况确实有所改善,但是您仍然对为什么某些东西在Windows上能像在* nix盒上那样能工作/不起作用感到困惑。TortoiseHg可以很好地工作,Visual Studio实现甚至在不中断工作流程的情况下更易于使用。

  2. 如果有人开始讨论“在您之后,Git会更强大……”,那么他几乎是在说所有这一切。对于95%的用户,Mercurial似乎更直观。从缺乏索引开始,到其更直观的选项(选项开关是一致的),再到其提交而不是SHA1哈希值的本地数字(曾经认为SHA1哈希值是用户友好的?!!)

  3. Mercurial的分支机构不亚于Git的分支机构。发布说明一些差异。回到某些以前的修订很简单,就像“更新旧修订”一样。从那里开始;只是做一个新的提交。如果希望使用命名分支,也可以使用它们。

现在,我知道所有这些都是细节,它们都是可以学习的,并且是所有东西,但是问题是……这些东西加在一起。最后,一个似乎比另一个更简单,更直观。版本控制系统不应该是花时间学习的东西-您在那里学习编程然后进行编程;VCS是一种工具。

只是要注意;我每天都使用Git和Mercurial。使用其中任何一个都没有问题。但是,当有人要求我推荐时,我总是推荐Mercurial。仍然记得,当它第一次出现在我手中时,感觉非常直观。以我的经验,Mercurial产生的WTF /分钟少于Git。


4
+表示“ VCS是一种工具”。我没有考虑过“小事”的因素,但的确,当您在这里和那里加总小问题时,它们可能会成为真正的麻烦。
格雷戈里·埃里克·桑德森

8
“版本控制系统不应是花时间学习的东西。” 这是一堆废话。您应该始终花时间学习工具。您花时间学习编译器;但是VCS与编译器一样,对于您的编程同样重要。
JesperE 2011年

9
+1。在这种情况下,尤其是“ Windows上的二等公民”论点绝对重要。
tdammers 2011年

+1代表“ WTF / s /分钟”(osnews.com/story/19266/WTFs_m)。这些孩子必须学习技巧:-)
罗斯·帕特森

1
@Mark只是术语差异的结果... Git中的分支实际上只是一个名称。
选项

10

我发现TortoiseHg UI在Windows上是很棒的体验。过去尝试Git时,我最终转到了命令行。对于普通用户来说,一个好的UI比命令行更容易实现。因此,我建议使用Mercurial。(它还在工作台窗口中包括一个漂亮的分支图。它应该清除任何基本的分支困难。)

一旦他们从UI角度了解了事情,他们可能最终会进入命令行来编写脚本或进行手动操作-但他们不需要这样做。


我自己是一个“控制台迷”,我之前从未使用过Tortoise {Svn,Git,Hg}应用程序,所以我不知道TortoiseHg有一个分支图。我必须去检查一下
Gregory Eric Sanderson

4

如果您对第三种选择感兴趣,我建议使用化石。我发现抛出临时Web服务器以共享代码的功能在小型项目中非常有用。Fossil只是一个可执行文件,因此您可以将其和源代码放入拇指驱动器,并在任何大学计算机上使用它。

用于fossil ui在任何地点启动临时Web服务器,以使您的同学与您同步。它还为您提供票务系统,Wiki和易于使用的Web界面,用于更改分支和标记提交。

只要确保他们阅读了快速入门指南和/或这本书即可。最终,有一个名为winFossil的项目为他们提供了比Web ui更友好的用户界面。


我听说过有关化石的好消息,但不幸的是,我没有太多时间来熟悉新的DVCS。我更喜欢使用我习惯的(如果可能的话),因为我已经知道如何解决最常见的陷阱。但是,感谢您的建议,我一有空就一定会研究它。
格雷戈里·埃里克·桑德森

+1; 化石鲜为人知,但它是如此易于操作且自成一体(dvsc + wiki + tickets + webserver),因此它整个trac甚至github的真正替代品。
哈维尔

但是化石在学生的简历上看起来不如git或hg好,因为很少有人能做到。
伊恩

Mercurial也内置了HG服务功能。当然,它缺少Bug跟踪程序和Wiki。但是随后还有bitbucket.com
约翰内斯·鲁道夫

3

鉴于这些团队是版本控制的新手,并且许多团队都在使用Windows,因此我建议使用git而不是git。

git和mercurial使用的版本控制的概念模型非常相似,因此一旦掌握了一个,就很容易拿起另一个(由于类似的原因,将存储库从一个转换为另一个很容易) 。这意味着,如果您以后改变主意,这并不重要。

我认为,Mercurial对于新用户来说更容易学习。它使简单的事情变得容易,而使危险的事情变得困难。Git使危险操作变得容易(容易执行,不一定容易正确地执行!)。

Winodows的TortoiseHg界面也非常好,这是支持使用水银的另一个论点。



0

正如许多人所建议的那样,通过TortoiseHg的Mercurial的进入门槛非常低。

对于Windows上的用户,它是一个安装程序,而不是两个安装程序(以及他们可能不想学习的全部内容),并且THg用户界面比TortoiseGit + Msysgit更加优美。

匿名头

如果您认为匿名头会混淆他们,那么不要鼓励使用它们。大多数hg书籍采取平衡的方法,同时教授拓扑分支和命名分支,并让读者确定最适合使用的分支。

命名分支

有一件事我真的很想念githg命名分支,所以这是一个选项。git在处理分支时可以很好地使用分支,但是将工作合并到另一个分支后,这些更改将失去很多上下文。

hg你可以创建一个名为分支Jira#1234,总是能找到所有与此有关的修订修复。在中git,一旦合并分支并删除了ref,就必须从修订树的拓扑结构中推断出哪些修订是修订的一部分。即使您不删除引用,您仍然只知道该分支上的最后一次提交,而不知道哪个祖先是该提交链的一部分。

书签

另外,如果您不想使用命名分支,但希望使用git带有匿名分支的样式工作流,则可以改用书签

这可能是两全其美的选择-他们可以学习git工作流程,但可以使用更简单的hg命令。

索引/缓存/暂存区

就个人而言,我认为githg与的匿名​​负责人相比,的索引/缓存/暂存区更容易使学生感到困惑。我更喜欢hg在命令行中将此高级功能git设为可选,而不是假设您始终希望/需要使用它。

我还认为,暂存区鼓励未经过测试甚至编译的提交。由于我工作过的许多地方都没有提交如果不编译规则就不要提交,所以我宁愿搁置 / 隐藏我现在不想要的更改,重新运行单元测试并提交一个版本,我知道编译。

以后当您使用hg bisectgit bisect跟踪错误时,您将感谢自己可以测试所有修订,而不仅仅是编译的修订。


完成后,您不必删除git分支;这是唯一的习惯。对于错误解释索引的使用,也为-1-您不将其用于暂存错误的提交,而将其用于暂存较大系列的提交的部分步骤。通常,这在清理历史记录时发生在重新定级期间。
替代

@mathepic-如果您不删除分支名称,而是将所有本地“修复”分支推至远程,那么您将最终获得大量的引用,就像您最终获得了过多的旧分支一样在svn中。在hg这些分支中,名称始终在拓扑上是本地的,因此只有在查找时才看到它们。
Mark Booth,

@mathepic-至于您的-1,我认为您误解了我的意思。我无法想象为什么有人会故意做出错误的提交,但是使用git可以很容易地无意间做到这一点。如果您忘记了该文件c在文件中实现了修改后的接口,i并且不小心提交了not,那么如果有人在您i未完成提交c之前进行了更改,那么c他们将失败。如果改用stash / compile / commit工作流程,则不会发生此错误,因为您自己的构建将首先中断。我试图使答案更清楚。
Mark Booth,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.