Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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
Git和Mercurial-有人能解释一下这个测试结果吗_Git_Mercurial - Fatal编程技术网

Git和Mercurial-有人能解释一下这个测试结果吗

Git和Mercurial-有人能解释一下这个测试结果吗,git,mercurial,Git,Mercurial,我正在比较GIT和Mercurial的速度。 我选择了一个包含9072个文件(主要是php文件和几个图像)的大项目,大小为95.1MB 这是一个伪造的项目,可能会让别人知道如何解释我得到的结果-这是一个wordpress下载,未更改,在两个文件夹中复制了12次-一个用于GIT,另一个用于Mercurial存储库 然后我创建了一个GIT存储库并提交(使用TortoiseGIT),完成后,我使用TortoiseHG在Mercurial的另一个文件夹上做了同样的操作 Git结果 时间:提交所有内容需要

我正在比较GIT和Mercurial的速度。
我选择了一个包含9072个文件(主要是php文件和几个图像)的大项目,大小为95.1MB

这是一个伪造的项目,可能会让别人知道如何解释我得到的结果-这是一个wordpress下载,未更改,在两个文件夹中复制了12次-一个用于GIT,另一个用于Mercurial存储库

然后我创建了一个GIT存储库并提交(使用TortoiseGIT),完成后,我使用TortoiseHG在Mercurial的另一个文件夹上做了同样的操作

Git结果
时间:提交所有内容需要32分30秒
存储库大小:6.38MB,只有847个文件

反复无常的结果:
时间:1分25秒-是的,只有1分钟。
存储库大小:58.8MB,包含9087个文件

我不是在争论最好的东西,我只是想了解两者的区别以及SCM是如何创建存储库的

HG似乎复制了这些文件,并进行了某种压缩。
但我不明白Git做了什么。
有人能解释一下结果吗


附:我知道关于GIT和Mercurial已经有一些问题了,我只是想弄清楚这个测试的结果——即使它是一个有效的测试。当我开始的时候,我只是在检查速度,但最后我的头上有了一些问号…

这听起来不是一个很好的测试,也就是说,你很少会承诺一个没有历史记录、12份相同内容的相同副本的项目


我建议您在功能和工作流程方面比较DVC,而不是在速度和磁盘空间方面。磁盘空间非常便宜,Git和Mercurial的存储效率也非常高。至于速度,哪怕是非常大的项目也不会让你失望。选择与您使用(或想要使用)的工作流一致的功能

至于您的示例中存储空间的差异,git不会跟踪单个文件,因此它会注意到内容被重复,并且效率更高(同时需要更多的时间)。。。然而,这种情况在现实生活中发生的频率有多高


我建议你也阅读mpe的链接帖子/文章:检查你的工具;hg和git(命令行)都导入这些 大约一秒钟内就有树了。考虑工具的命令行版本。 优先于GUI包装器

您正在遇到一个git优于hg的案例 有效率的Mercurial使用单独的文件作为每个文件的revlog, 而git喜欢让事情更加统一。特别是,复制 在git中,相同的目录12次几乎不占用额外的空间。但是 这种情况多久发生一次?我希望不是很好。如果你经常导入 数千个文件和图像,而不仅仅是最初提交时, DVCS可能不是适合您的工具。类似rsync或a的东西 集中式VCS会更好-DVCS通常针对 保存文本文件并接收修补程序和合并的单个项目 随着时间的推移。其他种类的工具会做出不同的权衡

导入大型目录树真的没有多大意义 仔细检查出现的文件,;你可以看报纸 文档,如果你喜欢的话。这里的主要教训是git保持 整个目录结构的快照,它允许 高效地打包东西(wordpress的捆绑包是2.7MB,这不是 比柏油球大),但计算差异可能更昂贵。 Mercurial维护更多的每个文件信息,如日志和差异, 这意味着仅访问一个文件的日志要比 在git中,但是许多相同的文件和目录可以具有更高的 空间成本

我也可以创造一个病理病例。下面是git获胜的一个例子:

for dir in {1..100}; do
  mkdir $dir
  for file in {1..100}; do
    touch $dir/$file
  done
done
hg add {1..100}; hg commit -m tweedledee
git add {1..100}; git commit -m tweedledum
是的,这是100个相同目录中的10000个空文件。吉特 在十分之一秒内导入整个内容,然后提交它自己 小于1 KB。Mercurial,它为每个 文件,大约需要四秒钟来提交整个内容,最后 在.hg中有10140个新文件,总计40MB

以下是mercurial获胜的一个例子:

mkdir -p a/b/c/d/e
for i in {1..1000}; do
  echo hello >> a/b/c/d/e/file
  hg add a; hg commit -m "Commit $i"
  git add a; git commit -m "Commit $i"
done
这是一千个提交,每个提交都会在 嵌套很深的文件。git中的每个提交都会引入八个新的 对象,这些对象单独放气,但存储为单独的 文件夹。最终,git决定重新打包,这需要时间。打开包装, 整个设备大约32MB,打包后620K。反复无常 另一方面,每次只需在一些日志文件中添加一些注释,然后 最后.hg是396K

这一切有什么意义?关键是没有一个案例 这篇文章中讨论的都是现实的。在日常使用中,使用 现实的存储库,这两种工具都很棒。只要学一个


这些手册本身并没有从头到尾准确地向您展示提交是如何构造的,但是,应该让您开始。

如果您正在评估性能,您是否应该使用“原始”工具,而不是处理GUI/第三方包装和所有(未知?非统一?)它们带来的开销?1)为什么基于性能评估SCM?2) 为什么要对创建一个9000文件提交的性能进行评估(如果我正确解释的话)?这不是正常的用法。3)既然你在谷歌上找到了无数的比较,为什么你自己尝试这么做呢?这是Windows,因为他使用了TortoiseGit,因此我不认为它是一个有效的基准(Git在Windows上没有运行,因为缺少真正的POSIX支持)它的窗口-我正在测试它,因为这是我们将要使用的工具。有趣的是,我们这里有很多批评者。。。你提出了一个真正的问题,试图理解一些东西,人们投了反对票,而有很多“什么是最好的”问题,有很多很多票。试图理解测试结果是错误的吗。这不是决策要点,只是试图了解GIT如何