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

Re: cherry-pick is slow

From
Junio C Hamano <gitster@pobox.com>
Date
May 15, 2012, 20:32 UTC
Message-ID
<7v1umldw3i.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20120515132451.GA25378@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 16 quoted lines
> [let's keep this on-list so others can benefit from the discussion]
>
> On Tue, May 15, 2012 at 12:38:59PM +0400, Dmitry Risenberg wrote:
>
>> > It's probably detecting renames as part of the merge, which can be
>> > expensive if the thing you are cherry-picking is far away from HEAD. You
>> > can try setting the merge.renamelimit config variable to something small
>> > (like 1; setting it to 0 means "no limit").
>> 
>> I set it to 1, but it didn't help at all - cherry-pick time is still
>> about the same.
>
> OK, then my guess was probably wrong. You'll have to try profiling (if
> you are on Linux, "perf record git cherry-pick ..."; perf report" is the
> simplest way). Or if the repository is publicly available, I can do a
> quick profile run.

Perhaps the word "cherry-pick" invites an expectation that it must be faster than a full-tree merge, i.e. something like "format-patch | am -3", especially when the change introduced by the commit being cherry-picked touch only a handful of paths.

Unfortunately, I do not think that the actual implementation of "cherry-pick" matches that expectation, as it is a full three-way merge.

I am somewhat curious to see what the performance characteristics would be if the same commit is replayed using

	git format-patch -1 --stdout $commit | git apply --index --3way

pipeline. Depending on the number of paths in the whole tree vs the number of paths the $commit touches, I wouldn't be surprised if it is faster.

Previous: Paweł SikoraNext: Junio C Hamano
Message 7 of 9 in “cherry-pick is slow”
  1. Dmitry RisenbergMay 12, 2012
  2. Junio C HamanoMay 13, 2012
  3. Dmitry RisenbergMay 13, 2012
  4. Jeff KingMay 14, 2012
  5. Jeff KingMay 15, 2012
  6. Paweł SikoraMay 15, 2012
  7. Junio C HamanoMay 15, 2012
  8. Junio C HamanoMay 15, 2012
  9. Jeff KingMay 19, 2012

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.