Git/Mercurial(hg)意见

26
首先,我要说我不是专业程序员,而是一个需要学习编程的工程师。我一直在独自工作,所以只有我和我的七个分身...我们作为一个团队工作得很好 :) 我大部分的东西都是用C/Fortran/Matlab完成的,到目前为止我一直在学习git来管理它们。然而,虽然我没有遇到无法解决的问题,但我从未对它感到“那么”满意... 对于我不能做的每件事情,我都必须查阅书籍。而且,最近我听到了很多关于Mercurial的好消息。
现在,我的一个同事将与我合作一个项目(我差点为他感到难过),他已经开始学习Mercurial(说他更喜欢这个),而我正在考虑转换。

我们几乎完全在Windows平台上工作(尽管我使用Unix工具和来自那个世界的东西相对来说还可以)。

因此,我想知道,在描述的情况下,我可以预期哪些问题会出现。我听说Mercurial对Windows用户更加友好,特别是在用户界面方面。

它如何处理代码库?它是否像git一样创建它们(只在工作目录中创建一个子目录),我可以只复制整个项目目录(包括git repo)并将它们随处携带,而无需额外考虑? (我在选择git/svn时真的很喜欢这个方法)。

你能推荐一些好书吗?(像《Pro Git》,但是针对Mercurial)。

有哪些好方法可以将Mercurial集成到Visual Studio/GVim for Windows或Windows Explorer中,以便我可以相对轻松地工作(我想尽量避免使用命令行来处理所有关于它的事情,就像在git shell中那样)。

还有其他需要注意的事项吗?请不要把我引导到其他问题...它们给了我大量的信息,我不确定哪些是重要的,哪些可以忽略。我试图节省一些时间,因为我不能像学习git一样花费所有的时间来重新学习Mercurial。

我听说Git是C语言项目,而Mercurial是Python ... 它们在速度上有任何明显的差异吗?Git非常迅速... 我在工作时是否会遇到等待。

注意:我的所有项目都是中等规模的... 主要是数值模拟... 10-15000行(中等规模?)


请参见https://dev59.com/uXVD5IYBdhLWcg3wQZUg。 - nawfal
10个回答

18

Git 优点:

  • 极快速(可适用于非常大型的项目)
  • 极度灵活
  • C语言工具与Unix哲学相适应

Git 缺点:

  • 陡峭的学习曲线
  • 虽然有GUI工具,但(我个人认为)不太稳定

HG 优点:

  • 非常快速(虽然没有GIT快)-- 在15-20k行的项目中,延迟不应该是一个显著问题
  • 漂亮的GUI工具,即使在Windows上也是如此(TortoiseHg很好并且非常成熟,还有其他工具)
  • 文档齐全,即使是Windows版本也有一个漂亮的带有更改集图形视图的GUI
  • 相较于GIT来说稍微易学一些(我个人认为)

HG 缺点:

  • 比git略慢
  • 可能没有那么灵活

还有其他重要的差异,但这些是我认为最重要的。老实说,如果我主要在Windows上工作,我可能会选择Mercurial。


@jsight,感谢您的回答。如果您两个都用过,那么hg如何处理存储库?只是项目目录中的一个子目录,还是......?我是否可以将其与项目目录一起复制到其他位置?......这是我真正喜欢Git功能之一。 - richard
@Douglas:我正要推荐这个。有趣且提供了典型工作流程的概述。 - intuited
1
@hasenj - 我不同意你的看法,我非常喜欢 Git。从 SVN 转到 Git 时确实需要一定的学习曲线。直到我读了一篇讲解 Git 核心概念的文章之后,我才真正开始理解 Git 的优越性。我不知道是否应该说它的学习曲线陡峭,但相比其他版本控制系统而言,Git 确实有更大的学习曲线。 - mozillalives
1
@hasen j - 不,Git确实有一个更陡峭的学习曲线。我们不必试图证明它;只需看看人们关于Git提出的问题(教程、指南等)的数量就可以了。如果没有这个问题,人们也不会问。它并不是非常直观(像大多数*nix工具一样)。 - Rook
1
@hasen j - 我并不是说这是“错误”的或者什么的。只是确认一下(根据我的经验),即使是基本操作,Git 的学习曲线也要陡峭得多。对于有些人来说,这可能是“有趣的学习”; 对于有些人来说,这纯粹是在“研究” Git 上浪费的时间,这些时间可以用在其他事情上。而且,在我看来,这也是它没有被更多公司采用的主要原因之一;它迫使你修改自己的思维方式,而不是相反。 - Rook
显示剩余5条评论

16
首先,让我说一下,我不是专业的程序员,而是一个需要它并不得不学习的工程师。
我也是一名工程师。我使用过Mercurial、Subversion、BitKeeper和CVS。但还没有用过Git。
我听说hg在用户界面方面对Windows用户更加友好。
不太确定这里的意思是什么,Git和Mercurial本质上都是命令行工具。
它如何处理存储库?
它是一个分布式版本控制系统(DVCS),就像Git一样。
它是否以与git相同的方式创建它们(只需在工作目录中创建一个子目录),我是否可以只复制整个项目目录(包括git repo)并将其带到其他地方而无需额外考虑?(当我在选择git / svn时,我真的很喜欢它)。
是的。Mercurial的存储库位于工作目录中的.hg目录中。此外,Mercurial在其存储库中具有命名系统,以防止在使用不区分大小写的文件系统(如FAT、NTFS或HFS+)时出现文件名冲突。
你能推荐一些好的关于它的书吗(类似于Pro Git,只是针对Hg)。
我建议访问该网站:https://www.mercurial-scm.org/guide 有什么好的方法可以将hg集成到Visual Studio/GVim for Windows或Windows Explorer中,以便我可以相对容易地工作(我希望避免在所有关于它的事情上使用命令行,就像在git shell中一样)。
有一个名为TortoiseHG的工具。我无法证明它有多好,因为我通常只是通过Cygwin使用命令行版本。
我听说git是一个C项目,而mercurial是Python ...速度上有什么明显的区别吗? git非常快...在工作时会遇到一些等待吗?
Mercurial非常快。我不知道它与Git相比如何,但它比Subversion快得多。
注意:所有我的项目都可以说是中等大小...主要是数值模拟... 10-15000行(中等大小?)
听起来像我的东西。当然,不包括原始数据。
离题了...
我的大部分工作都是用C/Fortran/Matlab完成的,到目前为止我一直在学习git来管理它们。我最近一直在从Matlab转向Python...
  • 无需担心许可证和维护。
  • 全部开源。
  • NumPy、SciPy 和 MatPlotLib 能满足我的大部分需求。
  • 我可以将代码轻松地与基于套接字的代码集成,以便与仪器通信。 (我喜欢能够生成波形,下载到函数发生器,等待示波器触发,获取其跟踪和统计信息,然后将所有这些放在循环中。)
  • 我可以将其与 PyGtk、PyQt、Web 服务器、PDF 生成器 (ReportLib) 以及其他我不知道的东西集成。
  • 我可以在不必处理许可证或版税的情况下发布基于 Python 的代码。
  • Python 对于纪律性软件开发比 Matlab 更好。Matlab 的每个文件一个函数和每个类一个目录的做法是疯狂的。
  • Python 更容易用 C 和 C++ 代码扩展。外面的库更好。

只是一个想法。

多年后的编辑: 有一个名为SourceTree的 Mac DVCS 工具,我非常满意。它支持 Git 和 Mercurial,并可在 App Store 上免费下载。


更准确地说,Mercurial是用Python编写的,其中一些核心部分使用C语言实现以提高性能。 - Jakub Narębski
1
有 Scilab 和 Octave,它们是 Matlab 的开源等效替代品。 - Jakub Narębski
@Mike DeSimone - 很高兴认识一个同行工程师!/ 原始数据在我的这边不是太大的问题。更多的问题是程序执行期间可能会产生的临时文件(可能会变得很大)。但我不会将它们保留在版本控制系统中。至于Matlab / Python,是的,我同意。它确实有一些优点。但是,有时候人们不能选择最终使用什么,我们有Matlab许可证,我已经习惯了它(很长时间了),所以就这样吧......最初,我是Fortran程序员,然后是Matlab,然后是C(可以这么说)。我喜欢Python,并一直在阅读相关资料。 - richard
时间很宝贵,虽然我认为学习这门语言可能对我没有太大的帮助(因为其他语言也能胜任),但时间总是不够用。也许有一天……这门语言肯定有未来。尽管我不太喜欢他们在版本之间更改东西。 - richard
@Jakub:我看了Scilab和Octave。虽然我觉得它们是很好的尝试,但我不认为Matlab的做法是我想要走的路。特别是因为我们永远的问题之一是,我们必须在Matlab中编写代码,然后重新实现为C++,以将算法集成到产品中(而且,不,Matlab编译器无法满足部署需求),然后必须处理保持两者同步并证明它们的等效性每次有变化时。一个没有这些顾虑的同事考虑了Octave,并遇到了项目政治方面的问题。 - Mike DeSimone
@richard:我的意思是,原始数据往往与源代码相比过于庞大,因此它需要自己的存储解决方案。至于转向Python...我发现Python比C更容易处理,而且速度不会慢太多。没有makefiles;像回调这样的东西很容易做到,因为函数和字符串一样都是对象;字符串可以是任意长度并且可以包含空值,因此可以轻松处理二进制数据;struct工具使得打包和解包结构体变得容易,甚至可以修复字节顺序...我可以继续说下去。按照自己的步伐学习吧。 - Mike DeSimone

9

关于你提到的几点:

  • Mercurial更适合Windows用户——安装更容易,没有奇怪的终端破坏:)基本上更少的工作量,IMHO。
  • Git比Mercurial快——基准测试显示了这一点。这是你所说的,因为Git是用C语言编写的。不过,坦白地说,我并不觉得Mercurial 那么慢。
  • 如果你的朋友使用Mercurial,请在该项目中使用Mercurial。它们在基本界面和功能上非常相似——我从Git转过来很容易就能掌握Hg。
  • 我可能错了,但我的印象是Git有一个更大的用户社区,可能是由于它被Linux内核使用。
  • 感谢评论者:Git有Github——最好的代码托管网站之一。相信我!
  • 许多知名项目使用Git(内核、Rails、JQuery)——Github的存储库页面很有趣——我惊讶地发现,我每天使用的许多项目都使用Git!
  • Mercurial有一个非常好的教程,由Joel Spolsky在hginit.com上编写。这是我读过的最好的关于源代码控制的教程!:)

我注意到关于 Git 的一件事......并且必须承认,在开始时它让我有点担忧,就是在这个网站上,很多人都在询问它的问题。所以我想,它一定很复杂。到目前为止,我并没有觉得它那么难,但我只是一个业余爱好者在使用它。我不知道是因为 Mercurial 真的更容易理解,还是因为它的用户较少(仅根据发布的问题数量来判断)。 - richard
我认为速度差异主要是由于Git具有稍微更紧凑的存储库。文件和网络IO肯定会占主导地位吧? - jk.
@Richard:我不会太担心——可以把它看作是:已经有更多的问题被解决了! - Lucas Jones
1
@jk:实际上速度并没有太大差别,但是Hg通常由于存储方式(它试图避免寻道)而具有更好的IO模式。链接的基准测试页面相当古老,几乎所有的都使用hg pre 1.0。(现在是1.5)。 - tonfa
1
@Lucas,hg的目标也是kernel-size仓库,它们都是出于同样的目的构建的。 - tonfa
显示剩余11条评论

8
我想谈一下基准测试。有句话我很喜欢:“不要相信你没有伪造过的基准测试” :-)
是的,Git维基列出了一些基准测试,告诉你Git更快。但是你应该对所有基准测试持怀疑态度,如果来自竞争者,则要加倍怀疑。例如,这些Git基准测试是在一个干净的Git仓库上进行的,但它们没有包括清理所需的时间。
你看,Git有两种存储库格式:一种非常适合提交,但极其浪费空间,随着存储库大小的增长,其他操作变得更慢。这就是为什么他们添加了第二个存储库格式,以清理未使用的文件并更有效地存储数据,从而减少占用空间并提高性能。这就是“git-gc”命令所做的(“gc == 垃圾回收”)。
那么你猜会发生什么?当Git基准测试报告快速提交时间时,这是使用一种格式,当他们报告小的占用空间或某些快速操作时,这是使用第二个格式。而且没有任何基准测试显示垃圾回收周期的成本。结果是Git被制造成更快的样子。
请注意,我并不是说Git很慢。但是我认为Git网站上的基准测试高估了它的速度,特别是我不确定Git是否真的比Mercurial更快。
Mercurial使用一种高效的格式,可以让你获得一个“几乎”与Git“fat”格式相同的提交时间,以及一个“几乎”与Git“slim”格式相同的磁盘大小,而无需在两者之间进行垃圾回收。
当然,基准测试永远不可信的另一种方式是性能有许多方面,人们倾向于报告符合他们预先设定的想法的方面。例如,我可以指出,当Google Code推出时,他们只支持Mercurial而不是Git,因为Git的性能与Mercurial相比太差。但是,我会遗漏这个问题是特别针对http性能的。

6

我会逐点解释...

我认为Hg相对直观、易于使用,而且如果有问题,文档也非常详细。

Mercurial在Windows上有优势,但我认为Git在这方面也有所改进,所以它可能不是一个好的区分因素。

就用户界面而言,如果你不喜欢命令行,你可以考虑使用TortoiseHg(你提到的Windows shell集成)。在Windows上工作,我不怪你。:)

Mercurial和Git一样创建存储库:一个隐藏的子目录在根目录下。你可以随意移动它(放在U盘上,带到其他地方等)。那么,为什么这在svn中是个问题呢?

很高兴地说,考虑到Hg是完成工作的工具,我没有感到需要找一本“好书”。可能有一些,但现有的在线文档已经足够我想做的事情了。

虽然Git吹嘘它的速度,但它是否比Mercurial更快还不清楚,但这一点无关紧要:它们都非常快。

为了转述我自己的博客文章,我认为很重要的一点是Git似乎无法摆脱它难以使用的声誉。我遇到过几次引用这一点的语录,比我能想到的任何东西都更好地说明了这一点:“Git已经改变了,老兄!它不像以前那样了,现在完全直观了!你只需要学习它如何存储数据!”

总之,我是一个Mercurial用户(没有使用Git,但读了一些相关资料),很少有软件产品让我享受使用,因为95+%的时间它们都是生硬、有瑕疵、有漏洞等等。Mercurial是真正让我喜欢使用并且会毫不保留地推荐的解决方案!


6

在阅读Mercurial分支指南后,我将Git转换为Mercurial变得更加容易,该指南还提到了Git的分支方式。

如果你使用的是IIS 7,你可以轻松设置Mercurial服务器:在Windows Server 2008 R2上设置Mercurial服务器, 而且你也可以很容易地找到使用IIS 6或Apache2的教程。当然,对于快速同步,hg serve非常有用:使用“hg serve”推送更改

Visual Studio集成:

免费的托管服务:

如果您需要指南和教程,可以从Mercurial wiki开始。


5

4
如果您对Git感到满意,我怀疑是否有真正的强制性理由进行切换,尽管我非常喜欢Hg。Git有TortoiseGit/GitCheetah,虽然我认为TortoiseHg更好一些,而且在我的看法中也更加稳定。
您可能想观看这个关于使用Hg和TortoiseHg(以及Visual Studio Hg插件)的免费视频,tekpub/codeplex。这个视频将让您了解Hg的使用感受。

Ryan,感谢你的回答。我不知道TortoiseGit,但它看起来非常好用。你说它有点不稳定。我的工作方式相对简单...我编写代码,创建“保存”点(以便有历史记录),有时只是分支当前或旧的保存点并添加一些功能进行测试。之后可能会合并它。没有更多了。你认为它足够稳定吗?从我目前所见,我真的很喜欢它,但不稳定的部分让我有点担心(我讨厌丢失工作:(...无论如何,再次感谢你的回答。 - richard
感谢提供 CodePlex 视频的链接。这些视频做得非常好。 - Ben
@richard,我所说的不稳定是指Windows资源管理器集成(GitCheetah/TortoiseGit),在我的某个系统上它曾经导致Windows资源管理器崩溃了好几次。虽然没有丢失任何数据,但它似乎让Win Explorer变得不太稳定。由于我已经安装了TortoiseSvn和TortoiseHg,并且我的系统之前很稳定,所以我卸载了Git Windows资源管理器集成。我相信它将来会更加稳定,但在我看来现在还不够稳定。 - Ryan

1

我不能详细谈论Mercurial,但我可以确认git是用C语言编写的。请查看gitweb获取源代码。

至于需要使用命令行来处理git的所有事情,您并不一定需要这样做。有一个名为TortoiseGit的工具,它与资源管理器集成,可以为您管理git存储库 - 如果您使用Eclipse,则还有EGit。在Linux上,有QGit,尽管CLI更加强大。

我是一名Linux/C开发人员,因此自然而然地喜欢Git;我也听说过Mercurial的好处,但我从未费心去学习它。


0

我已经交替使用gitmercurial约3年了。如果您需要一个稳定的源代码控制系统,我强烈推荐使用mercurial。当我们使用Atlassian Stash时,我们遇到了严重的稳定性问题。因此,我们转向了mercurial并使用SCM作为授权层。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接