I am using 'git log' on the windows7 command line and it is very slow.
I tried: Git/Bash is extremely slow in Windows 7 x64
but this did not help. How can i speed things up?
I am using 'git log' on the windows7 command line and it is very slow.
I tried: Git/Bash is extremely slow in Windows 7 x64
but this did not help. How can i speed things up?
Check if the issue persists with the latest Git for Windows Git 2.20.1
And Git 2.21 (Q1 2019) will improve the speed for a particular form of git log:
git log -G<regex> looked for a hunk in the "git log -p" patch output that contained a string that matches the given pattern.
Optimize this code to ignore binary files, which by default will not show any hunk that would match any pattern (unless textconv or the --text option is in effect, that is).
See commit e0e7cb8 (14 Dec 2018) by Thomas Braun (t-b).
(Merged by Junio C Hamano -- gitster -- in commit ecdc7cb, 14 Jan 2019)
log -G: ignore binary filesThe
-G<regex>option of log looks for the differences whose patch text contains added/removed lines that match regex.Currently
-Glooks also into patches of binary files (which according to LibXDiff) is binary as well.This has a couple of issues:
- It makes the pickaxe search slow.
In a proprietary repository of the author with only ~5500 commits and a total.gitsize of ~300MB:searching takes ~13 seconds
$time git log -Gwave > /dev/null real 0m13,241s user 0m12,596s sys 0m0,644swhereas when we ignore binary files with this patch it takes ~4s:
$time ~/devel/git/git log -Gwave > /dev/null real 0m3,713s user 0m3,608s sys 0m0,105swhich is a speedup of more than fourfold.
- The internally used algorithm for generating patch text is based on xdiff and its states in LibXDiff:
The output format of the binary patch file is proprietary (and binary) and it is basically a collection of copy and insert commands [..]
which means that the current format could change once the internal algorithm is changed as the format is not standardized.
In addition thegitbinary patch format used for preparing patches forgit applyis different from thexdiffformat as can be seen by comparing.git log -p -a commit 6e95bf4bafccf14650d02ab57f3affe669be10cf Author: A U Thor <author@example.com> Date: Thu Apr 7 15:14:13 2005 -0700modify binary file
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^@Awith
git log --binarycommit 6e95bf4bafccf14650d02ab57f3affe669be10cf Author: A U Thor <author@example.com> Date: Thu Apr 7 15:14:13 2005 -0700modify binary file
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@Pgn0ssWg0XP5vwhich seems unexpected.
To resolve these issues this patch makes
-G<regex>ignore binary files by default.
Textconv filters are supported and also-a/--textfor getting the old and broken behaviour back.The
-S<block of text>option ofloglooks for differences that changes the number of occurrences of the specified block of text (i.e. addition/deletion) in a file. As we want to keep the current behaviour, add a test to ensure it stays that way.