Update : I just upgraded my personal mac to 2.20.1, and am experiencing none of the slowdown I had on my work Mac. So something else is afoot. Maybe some of the 'spyware-ish' software that's installed on the work mark is making calls like
lstat()super slow? Looks like I might be profiling some things on that machine anyways :)
I regularly use Homebrew to switch to more recent versions of CLI utilities and other packages I use in my day-to-day software and infrastructure development. In the past, it was necessary to use Homebrew to get a much newer version of Git than was available at the time on macOS. But as Apple's evolved macOS, they've done a pretty good job of keeping the system versions relatively up-to-date, and unless you need bleeding edge features, the version of Git that's installed on macOS Mojave (2.17.x) is probably adequate for now.
But back to Homebrewârecently I ran
brew upgrade
to upgrade a bunch of packages, and it happened to upgrade Git to
2.20.1
.
Later in the day when I was doing some heavy Git activity, I noticed everything felt... so... sluggish. And it was even sluggish on tiny git repos with less than 100 files, so either something was seriously wrong with my filesystemâwhich should've shown problems elsewhereâor Git was being funny.
So I benchmarked it:
$ time git status
On branch master
nothing to commit, working tree clean
real 0m1.037s
user 0m0.004s
sys 0m0.009s
That's... suspicious. A full second just to check the working directory? And I ran
git gc
and
git status
again, no difference. I ran it a bunch of times and it was always ± 0.1% of that timing.
I went ahead and unlinked the Brew-installed Git:
brew unlink git
Then opened a new Terminal window, and ran the same test:
$ time git status
On branch master
nothing to commit, working tree clean
real 0m0.018s
user 0m0.005s
sys 0m0.010s
Ahh... much better. Special thanks to Steven Wichers for putting the idea in my head that the Git version could be the problemâI remember a couple weeks ago in a tech chat at Acquia he mentioned something similar. If it weren't for that, I would've spent a few hours trying to profile and debug git traces, most likely! Seconds count, when you run like 5,000
git
commands a day!