我喜欢在向上游推送之前检查我的提交,所以我总是在提交之前运行一个gitk
(我喜欢一点视觉效果)。不过,我注意到,先提交代码然后运行 gitk 要快得多。
慢点:
- [未提交的更改]
gitk
- 查看未提交的更改
快一点:(还没有计时,但它似乎是即时的,而不是几秒钟的延迟)
- git 提交
gitk
- 审查最后一次提交
- 根据需要恢复或修改。
我的理解是在git
创建提交时基本上会运行差异。那么,为什么 diff 未提交的代码比提交和审查最后一次提交需要更长的时间呢?
我喜欢在向上游推送之前检查我的提交,所以我总是在提交之前运行一个gitk
(我喜欢一点视觉效果)。不过,我注意到,先提交代码然后运行 gitk 要快得多。
慢点:
gitk
快一点:(还没有计时,但它似乎是即时的,而不是几秒钟的延迟)
gitk
我的理解是在git
创建提交时基本上会运行差异。那么,为什么 diff 未提交的代码比提交和审查最后一次提交需要更长的时间呢?
我的理解是 git 在创建提交时基本上会运行差异。
至少,这不是真的。提交时,Git 只是将当前索引完全按原样存档。提交中没有差异;相反,它们是在您每次实际查看提交时动态生成的。
因此,在某种程度上,你也有错误的想法。当您使用 来查看您的最后一次提交时gitk
,gitk
实际上会运行git diff
以产生您所看到的内容,因此,如果您没有发现那么慢,那么git diff
根本就不慢。:)
如果生成当前工作树的差异很慢,那么我怀疑这更多的是您的文件系统的问题而不是其他任何问题。我从来没有发现它很慢,我什至使用 NFS。(所以我必须承认我不太明白你的文件系统怎么会比这慢得多。)
或者,它可能只是有点gitk
慢。我从来没有用它来查看存储库的当前状态,通常更喜欢git status
,git diff
和/或git gui
代替。(我确实使用gitk
,但几乎只用于查看历史和/或历史提交。)
几个提示:
gitk
在后台运行,而不是每次都重新启动它。git diff
本身是否与启动一样慢gitk
。git gc
来优化存储库。编辑:既然您已经提到您使用 Windows 7 运行,那么应该提到 Linus 在评论 Git 的设计时引用了他对 Linux 内核文件系统实现的知识来提高速度吉特。那么,将工作树与索引进行比较的速度很慢的原因很可能是 Windows 7 的文件系统调用速度比 Linux 慢和/或根本不喜欢 Git 使用文件系统的方式。
Git 邮件列表上的这个线程似乎与您遇到的问题相同,只是更糟。它有这样的报价,其中包括:
我认为简单的现实是,Git 是在假设 stat 很便宜的情况下编写的,而在 Windows 上并非如此,文件系统缓存似乎并不能很好地做到这一点。
这个关于 SO 的答案提到了 msysgit 的一个补丁,它显着提高了 Windows 的性能。