我正在使用' git log'在windows7命令行上它很慢。
我试过了:Git/Bash is extremely slow in Windows 7 x64
但这没有帮助。我怎样才能加快速度?
答案 0 :(得分:0)
检查问题是否仍然存在,最新的Git for Windows Git 2.20.1
Git 2.21(2019年第一季度)将提高特定形式git log
的速度:
git log -G<regex>
在补丁输出“ git log -p
”中寻找一个大块,其中包含与给定模式匹配的字符串。
Optimize this code to ignore binary files
,默认情况下不会显示任何匹配任何模式的块(除非textconv
或--text
选项有效)。
请参见commit e0e7cb8的Thomas Braun (t-b
)(2018年12月14日)。
(由Junio C Hamano -- gitster
--在commit ecdc7cb中合并,2019年1月14日)
log -G
:忽略二进制文件日志的
-G<regex>
选项查找其补丁程序文本包含与正则表达式匹配的已添加/已删除行的差异。当前
-G
还会查看二进制文件的补丁(根据LibXDiff,它们也是二进制文件。)这有两个问题:
- 它使镐的搜索速度变慢。
在作者的专有存储库中,仅约5500次提交,.git
的总大小约为300MB:搜索大约需要13秒
$time git log -Gwave > /dev/null real 0m13,241s user 0m12,596s sys 0m0,644s
而与此补丁无关的二进制文件大约需要4 s :
$time ~/devel/git/git log -Gwave > /dev/null real 0m3,713s user 0m3,608s sys 0m0,105s
这是四倍以上的加速速度。
- 内部使用的用于生成补丁文本的算法基于 xdiff及其在LibXDiff中的状态:
二进制补丁文件的输出格式是专有的 (和二进制),它基本上是复制和插入的集合 命令[..]
这意味着,由于内部算法不规范,因此一旦更改内部算法,当前格式可能会更改。
另外,通过比较可以看出,用于为git
准备补丁的git apply
二进制补丁格式与xdiff
格式不同。git log -p -a commit 6e95bf4bafccf14650d02ab57f3affe669be10cf Author: A U Thor <author@example.com> Date: Thu Apr 7 15:14:13 2005 -0700
修改二进制文件
diff --git a/data.bin b/data.bin index f414c84..edfeb6f 100644 --- a/data.bin +++ b/data.bin @@ -1,2 +1,4 @@ a a^@A +a +a^@A
与
git log --binary
commit 6e95bf4bafccf14650d02ab57f3affe669be10cf Author: A U Thor <author@example.com> Date: Thu Apr 7 15:14:13 2005 -0700
修改二进制文件
diff --git a/data.bin b/data.bin index f414c84bd3aa25fa07836bb1fb73db784635e24b..edfeb6f501[..] GIT binary patch literal 12 QcmYe~N@Pgn0zx1O01)N^ZvX%Q literal 6 NcmYe~N@Pgn0ssWg0XP5v
这似乎是意外的。
为解决这些问题,此补丁默认使
-G<regex>
忽略二进制文件。
支持Textconv过滤器,还支持-a
/--text
,以恢复旧的和损坏的行为。
-S<block of text>
的{{1}}选项寻找差异,这些差异改变了文件中指定文本块(即加/删除)的出现次数。当我们想要保持当前行为时,添加一个测试以确保它保持这种状态。