Re: Poor performance of git describe in big repos
- From
Thomas Rast <trast@inf.ethz.ch>
- Date
- May 31, 2013, 08:46 UTC
- Message-ID
- <87y5av4jvj.fsf@linux-k42r.v.cablecom.net>
- In-Reply-To
- <CAJ-05NOdg5TvjzEMrXaPgogU5z5W6kywZhD-82eTUmvE9Hp=Lw@mail.gmail.com>
Alex Bennée <kernel-hacker@bennee.com> writes:
Show 5 quoted lines
> I think you are right. I was brave (well I assumed the tags would come > back from the upstream repo) and ran: > > git for-each-ref | grep "refs/tags" | grep "commit" | cut -d '/' -f 3 > | xargs git tag -d
So that deleted all unannotated tags pointing at commits, and then it was fast. Curious.
Show 5 quoted lines
> However I have some big commits it seems: > > 09:37 ajb@sloy/x86_64 [work.git] >(git for-each-ref | grep ' commit' | > cut -d\ -f1 | xargs -n1 git cat-file commit) | wc -c > 1147231984
How many unique entries are there in that list, i.e., what does
git for-each-ref | grep ' commit' | cut -d\ -f1 | sort -u | wc -l
say? Perhaps you can also find the biggest commit, e.g. like so:
git for-each-ref | grep ' commit' | cut -d\ -f1 | while read sha; do git cat-file commit $sha | wc -c; done | sort -n
However, if that turns out to be the culprit, it's not fixable currently[1]. Having commits with insanely long messages is just, well, insane.
[1] unless we do a major rework of the loading infrastructure, so that we can teach it to load only the beginning of a commit as long as we are only interested in parents and such
--
Thomas Rast
trast@{inf,student}.ethz.ch