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

Perf bug: rev-list w/ 2+ paths relatively slow with commit-graph

From
Kai Koponen <kaikoponen@google.com>
Date
Jun 23, 2025, 17:58 UTC
Message-ID
<CADYQcGqaMC=4jgbmnF9Q11oC11jfrqyvH8EuiRRHytpMXd4wYA@mail.gmail.com>

Reproduce steps: ``` git clone https://github.com/golang/go.git cd go git config core.commitGraph true git commit-graph write --split --reachable --changed-paths # Without this, all calls equally slow (~1s) time git rev-list -10 3730814f2f2bf24550920c39a16841583de2dac1 -- src/clean.bash > /dev/null # ~90ms time git rev-list -10 3730814f2f2bf24550920c39a16841583de2dac1 -- src/Make.dist > /dev/null # ~100ms time git rev-list -10 3730814f2f2bf24550920c39a16841583de2dac1 -- src/clean.bash src/Make.dist > /dev/null # ~650ms ```

The rev-list call with multiple paths takes over 3x longer than the sum of individual calls to it for the same files.

Expectation: rev-list with multiple paths should take <= the sum of
the time it takes to call it with each path individually (ideally <,
since with the count limit it should be able to early-exit and search
less commits for either path).

Also reproduces without the -10 arg, or with a lower count (double instead of triple w/ -1), but these results are perhaps most surprising with a count present.

Next: Kai Koponen
Message 1 of 7 in “Perf bug: rev-list w/ 2+ paths relatively slow with commit-graph”
  1. Kai KoponenJun 23, 2025
  2. Kai KoponenJun 23, 2025
  3. Junio C HamanoJun 23, 2025
  4. Kai KoponenJun 23, 2025
  5. Junio C HamanoJun 23, 2025
  6. Lidong YanJun 24, 2025
  7. Junio C HamanoJun 24, 2025

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.