2014-02-11 35 views
0

我喜欢在我将它们推向上游之前检查我的提交,所以在提交之前我总是运行一个gitk(我喜欢一点视觉效果)。不过,我注意到,首先提交代码然后运行gitk会更快。为什么提交代码比运行diff要快得多?

较慢:

  1. [与未提交的修改]
  2. gitk
  3. 审查提交的修改

相当快一点(有没有超时,但它似乎瞬间,而不是几秒滞后)

  1. git的承诺
  2. gitk
  3. 回顾上次提交
  4. 还原或在必要时修改。

我的理解是git在创建提交时基本上运行diff。那么为什么要花费这么长的时间来区分未提交的代码,而不是提交和审查最后一次提交?

+0

如果你怀疑的差异,多久'混帐diff'走? –

+0

当我的回购是肮脏的时候,我会尽力为它定时:)。我想说git的差异大约需要3或4秒 – Benmj

+0

/磁盘您正在使用什么文件系统?存储库中有多少个文件? –

回答

2

我的理解是git在创建提交时基本上运行diff。

这至少是不正确的。提交时,Git只是简单地归档当前的索引,就像现在一样。在提交中没有差异;相反,它们是每次实际查看提交时动态生成的。

因此,您也有一些错误的想法。当你查看你最近一次提交的gitkgitk实际上运行git diff来产生你所看到的,所以如果你没有发现那么慢,那么git diff根本就不是很慢。 :)

如果生成当前工作树的差异很慢,那么我怀疑这对您的文件系统来说比其他任何问题都更大。我从来没有发现它很慢,我甚至使用NFS。 (所以我必须承认,我不太了解你的文件系统可能会比这慢得多。)

或者,它可能只是位gitk,这很慢。我从来没有用过它来审查存储库的当前状态,通常更喜欢git status,git diff和/或git gui。 (我使用gitk,但几乎只查看历史记录和/或历史的提交。)

几个秘诀:

  • 离开gitk在后台运行,而不是每次都重新启动它。
  • 检查运行git diff本身是否与启动gitk一样缓慢。
  • 可以肯定的是,运行一个git gc来优化存储库。

编辑:现在你已经提到,您运行使用Windows 7,它应该提到Linus的引述,对Git的设计进行评论时,他已经取得了很大的利用他的知识Linux内核文件系统实现Git的速度。那么,由于你将工作树与索引进行比较的速度较慢,原因很可能是Windows 7的文件系统调用比Linux慢,或者根本不喜欢Git使用文件系统的方式。

This thread on the Git mailing list似乎是你有,只是差了同样的问题。它有这个报价,其中包括:

我想简单的事实是,Git的是与假设 认为统计是便宜的,这是不是真的在Windows上,其中 文件系统缓存没有按”的情况下写的这似乎很好地做到了这一点。

This answer on SO提到了msysgit的补丁,它显着提高了Windows的性能。

相关问题