0

我喜欢在向上游推送之前检查我的提交,所以我总是在提交之前运行一个gitk(我喜欢一点视觉效果)。不过,我注意到,先提交代码然后运行 ​​gitk 要快得多。

慢点:

  1. [未提交的更改]
  2. gitk
  3. 查看未提交的更改

快一点:(还没有计时,但它似乎是即时的,而不是几秒钟的延迟)

  1. git 提交
  2. gitk
  3. 审查最后一次提交
  4. 根据需要恢复或修改。

我的理解是在git创建提交时基本上会运行差异。那么,为什么 diff 未提交的代码比提交和审查最后一次提交需要更长的时间呢?

4

1 回答 1

2

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

至少,这不是真的。提交时,Git 只是将当前索引完全按原样存档。提交中没有差异;相反,它们是在您每次实际查看提交时动态生成的。

因此,在某种程度上,你也有错误的想法。当您使用 来查看您的最后一次提交时gitkgitk实际上会运行git diff以产生您所看到的内容,因此,如果您没有发现那么慢,那么git diff根本就不慢。:)

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

或者,它可能只是有点gitk慢。我从来没有用它来查看存储库的当前状态,通常更喜欢git status,git diff和/或git gui代替。(我确实使用gitk,但几乎只用于查看历史和/或历史提交。)

几个提示:

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

编辑:既然您已经提到您使用 Windows 7 运行,那么应该提到 Linus 在评论 Git 的设计时引用了他对 Linux 内核文件系统实现的知识来提高速度吉特。那么,将工作树与索引进行比较的速度很慢的原因很可能是 Windows 7 的文件系统调用速度比 Linux 慢和/或根本不喜欢 Git 使用文件系统的方式。

Git 邮件列表上的这个线程似乎与您遇到的问题相同,只是更糟。它有这样的报价,其中包括:

我认为简单的现实是,Git 是在假设 stat 很便宜的情况下编写的,而在 Windows 上并非如此,文件系统缓存似乎并不能很好地做到这一点。

这个关于 SO 的答案提到了 msysgit 的一个补丁,它显着提高了 Windows 的性能。

于 2014-02-11T23:25:15.703 回答