git/list[1] front-page[2] threads[3] people[4] search[5] about
 

"git notes show" is orders of magnitude slower than doing it manually with ls-tree and cat-file

From
Mike Hommey <mh@glandium.org>
Date
Nov 26, 2014, 00:42 UTC
Message-ID
<20141126004242.GA13915@glandium.org>
Hi,
I have a note tree with a bit more than 200k notes.

$ time git notes --ref foo show $sha1 > /dev/null real 0m0.147s user 0m0.136s sys 0m0.008s

That's a lot of time, especially when you have a script that does that on a fair amount of sha1s.

Now, the interesting thing is this:

$ time git ls-tree -r refs/notes/foo $sha1 ${sha1:0:2}/${sha1:2:38} ${sha1:0:2}/${sha1:2:2}/${sha1:4:36} > /dev/null real 0m0.006s user 0m0.008s sys 0m0.000s

$ time git cat-file blob $objsha1 > /dev/null real 0m0.002s user 0m0.000s sys 0m0.000s

And even better:

$ wc -l /tmp/note 39 /tmp/note $ time git ls-tree refs/notes/foo $(awk '{print $1, substr($1,1,2) "/" substr($1,3), substr($1,1,2) "/" substr($1,3,2) "/" substr($1,5)}' /tmp/note) | awk '{print $3}' | git cat-file --batch > /dev/null real 0m0.035s user 0m0.028s sys 0m0.004s

Reading 39 notes with ls-tree and cat-file --batch takes less time than using git notes show for only one of them...

(and reading all 39 of them with git notes show takes 5.5s)
Mike
Next: Jeff King
Message 1 of 10 in “"git notes show" is orders of magnitude slower than doing it manually with ls-tree and cat-file”
  1. Mike HommeyNov 26, 2014
  2. Jeff KingNov 26, 2014
  3. Jeff KingNov 26, 2014
  4. Jeff KingNov 26, 2014
  5. Mike HommeyNov 26, 2014
  6. Jeff KingNov 26, 2014
  7. Mike HommeyNov 26, 2014
  8. Jeff KingNov 26, 2014
  9. Johan HerlandNov 26, 2014
  10. Mike HommeyNov 26, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.