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

cherry-pick very slow on big repository

From
Peter Krefting <peter@softwolves.pp.se>
Date
Nov 10, 2017, 09:39 UTC
Message-ID
<alpine.DEB.2.00.1711100959300.2391@ds9.cixit.se>
Hi!

On a big repository (57000 files, 2,5 gigabytes in .git/objects), git cherry-pick is very slow for me (v2.15.0). This is cherry-picking a one-file change, where the file is in the same place on both branches, and which applies cleanly (I am backporting a few fixes to a maintenance version):

$ time git cherry-pick -x 717eb328940ca2e33f14ed27576e656327854b7b
[redacted 391454f16d] Redacted
  Author: Redacted <redacted>
  Date: Mon Oct 16 15:58:05 2017 +0200
  1 file changed, 2 insertions(+), 2 deletions(-)

real 6m9,054s user 5m49,432s sys 0m2,292s

Something is not how it should be here. The repo shares objects (.git/objects/info/alternates) with another repository (I have run "git gc" on both repositories).

Running strace, it seems like it is doing lstat(), open(), mmap(), close() and munmap() on every single file in the repository, which takes a lot of time.

I thought it was just updating the status, but "git status" returns immediately, while cherry-picking takes several minutes for every cherry-pick I do.

-- 
\\// Peter - http://www.softwolves.pp.se/
Next: Jeff King
Message 1 of 13 in “cherry-pick very slow on big repository”
  1. Peter KreftingNov 10, 2017
  2. Jeff KingNov 10, 2017
  3. Peter KreftingNov 10, 2017
  4. Derrick StoleeNov 10, 2017
  5. Peter KreftingNov 10, 2017
  6. Kevin WillfordNov 10, 2017
  7. Peter KreftingNov 13, 2017
  8. Elijah NewrenNov 10, 2017
  9. Elijah NewrenNov 10, 2017
  10. Peter KreftingNov 13, 2017
  11. Elijah NewrenNov 13, 2017
  12. Peter KreftingNov 21, 2017
  13. Elijah NewrenNov 21, 2017

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.