git - Mercurial和Git之间的区别是什么?

  显示原文与译文双语对照的内容

一段时间以来,我一直在为我的个人项目使用 subversion 。

我越来越多地听到关于Git和Mercurial的东西,以及 DVCS 。

我想给整个DVCS做一个旋转,但我对其中的一个选项并不太熟悉。

Mercurial和Git之间有什么区别?

注意,我不是试图找出哪一个是"最佳"甚至哪一个我应该开始。 我主要在寻找它们相似的关键领域,它们是不同的,因为我想知道它们在实现和哲学方面的差异。

时间:

如果你需要好的Windows 支持,你可能更喜欢 Mercurial 。 TortoiseHg ( Windows Explorer 插件) 设法提供一个简单易用的图形化界面。 作为这里的状态,你还将拥有一个 Visual Studio 插件 。 但是,上次我尝试的时候,SVN接口在 Windows 上的作用并不好。

如果你不介意 命令行 接口,我推荐 Git 。 不是出于技术原因,而是出于策略性原因。 git的采用速度高了 。 看看有多少著名的开源项目正在从 cvs/svn切换到 Mercurial,还有多少人正在切换到 Git 。 查看与Mercurial托管相比,你可以找到多少代码/项目托管提供程序。

查看 Scott Chacon的后的文章。

我认为git"更复杂"名声,不过以我的经验并不比需要更复杂。 国际海事组织,git模型是方式更容易理解( 标记包含提交( 和指向零个或者多个父提交的指针) ) 包含树包含blob和其他树木。 已经完成) 。

不仅仅是我的经验,git比mercurial更令人困惑。 我建议你再次阅读 Chacon上的Scott 。博客文章。

读完整个mercurial( 我仍然相信,毕竟,互联网社区是) 容易,当我开始使用git和hg我觉得git是相对简单的对我来说适应( 我开始使用TortoiseHg和) 命令行 工作时,主要是因为git命令适当命名根据我和数量更少。 Mercurial对每个执行不同任务的命令都有不同的命名,而Git命令可以根据情况进行多用途。 虽然Git当时比较困难,但现在的差异几乎不存在了。 YMMV。好的gui客户机TortoiseHg一样,真的是更容易使用mercurial和我没有记住稍微混乱的命令。 我不会详细介绍同一动作的每个命令是如何变化的,但这里有两个综合列表: 1 hg的从自己的站点并第2 从 wikivs


╔═══════════════════════════════════════════════╦════════════════════════════════════════════════════════════════════════════════════════════════╗
║ Git ║ Mercurial ║
╠═══════════════════════════════════════════════╬════════════════════════════════════════════════════════════════════════════════════════════════╣
║ git pull ║ hg pull -u ║
║ git fetch ║ hg pull ║
║ git reset --hard ║ hg up -C ║
║ git revert <commit> ║ hg backout <cset> ║
║ git add <new_file> ║ hg add <new_file> (Only equivalent when <new_file> is not tracked.) ║
║ git add <file> ║ Not necessary in Mercurial. ║
║ git add -i ║ hg record ║
║ git commit -a ║ hg commit ║
║ git commit --amend ║ hg commit --amend ║
║ git blame ║ hg blame or hg annotate ║
║ git blame -C ║ (closest equivalent): hg grep --all ║
║ git bisect ║ hg bisect ║
║ git rebase --interactive ║ hg histedit <base cset> (Requires the HisteditExtension.) ║
║ git stash ║ hg shelve (Requires the ShelveExtension or the AtticExtension.) ║
║ git merge ║ hg merge ║
║ git cherry-pick <commit> ║ hg graft <cset> ║
║ git rebase <upstream> ║ hg rebase -d <cset> (Requires the RebaseExtension.) ║
║ git format-patch <commits> and git send-mail ║ hg email -r <csets> (Requires the PatchbombExtension.) ║
║ git am <mbox> ║ hg mimport -m <mbox> (Requires the MboxExtension and the MqExtension. Imports patches to mq.) ║
║ git checkout HEAD ║ hg update ║
║ git log -n ║ hg log --limit n ║
║ git push ║ hg push ║
╚═══════════════════════════════════════════════╩════════════════════════════════════════════════════════════════════════════════════════════════╝

Git在内部保存每个提交文件的记录,而Hg只保存可以占用较小内存的变更集。 Git比Hg更容易改变历史,但它又是一个hate-it-or-love-it特性。 我喜欢前者,也喜欢 Git 。

我在Hg中漏掉的是Git的子模块特性。 Hg有 subrepos,但这不是完全的Git子模块。

围绕这两者的生态系统也可以影响一个: git是( 但这很简单) 更受欢迎,git GitHub虽然mercurialbitbucket都, mercurial TortoiseHg了我还没有看到一个等价的git的一样好。

每一个都有自己的优点和缺点,其中之一你不会失去。

...