git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 17:00 UTC

Re: 2.29.0.rc0.windows.1: Duplicate commit id error message when fetching

From
Thomas Braun <thomas.braun@virtuell-zuhause.de>
Date
Oct 9, 2020, 15:29 UTC
Message-ID
<267a9f46-cce9-0bd3-f28d-55e71cc8a399@virtuell-zuhause.de>
In-Reply-To
<5bbdaed5-df29-8bfe-01c2-eb2462dcca22@gmail.com>
On 08.10.2020 15:22, Derrick Stolee wrote:
Show 41 quoted lines
> On 10/8/2020 8:50 AM, Derrick Stolee wrote:
>> On 10/8/2020 8:06 AM, Jeff King wrote:
>>> But regardless, it seems unfriendly that we can't
>>> get out of it while merging the graphs. Doing this obviously makes the
>>> problem go away:
>>>
>>> diff --git a/commit-graph.c b/commit-graph.c
>>> index cb042bdba8..ae1f94ccc4 100644
>>> --- a/commit-graph.c
>>> +++ b/commit-graph.c
>>> @@ -2023,8 +2023,11 @@ static void sort_and_scan_merged_commits(struct write_commit_graph_context *ctx)
>>>  
>>>  		if (i && oideq(&ctx->commits.list[i - 1]->object.oid,
>>>  			  &ctx->commits.list[i]->object.oid)) {
>>> -			die(_("unexpected duplicate commit id %s"),
>>> -			    oid_to_hex(&ctx->commits.list[i]->object.oid));
>>> +			/*
>>> +			 * quietly ignore duplicates; these could come from
>>> +			 * incremental graph files mentioning the same commit.
>>> +			 */
>>> +			continue;
>>>  		} else {
>>>  			unsigned int num_parents;
>>>  
>>>
>>> but it's not clear to me if that's papering over another bug, or
>>> gracefully handling a situation that we ought to be.
>>
>> I think this is a good thing to do, at minimum. As I discussed above,
>> the "input data" of the incremental commit-graph chain with duplicate
>> commits across layers isn't actually _invalid_. It's unexpected based
>> on what Git "should" be doing.
> 
> As I was working on my own version of this, I realized that just
> commenting here still creates duplicate commits in the new layer,
> which is even MORE unexpected. It could cause some confusion with
> the binary search, but likely that is still fine. The only "real"
> issue is that it is wasted data.
> 
> I'll send [1] to the list soon (after build & test validation),
> but it includes copying the pointers to a new "de-duplicated" list.
Thanks both for digging into it.

I think I have a starting point for what goes wrong. I found a local repo with another broken commit graph. And after some fiddling the following script can reproduce it. I tried with git/git first but that seems not to trigger that.

# rm -rf dummy mkdir dummy cd dummy

git init

git remote add origin https://github.com/tango-controls/cppTango git remote add fork1 https://github.com/bourtemb/cppTango git remote add fork2 https://github.com/t-b/cppTango git fetch --all --jobs 12 git commit-graph verify rm -rf .git/objects/info/commit-graphs/ git commit-graph verify git fetch --jobs 12 git remote add fork3 git@github.com:t-b/cppTango.git git commit-graph verify git remote add fork4 git@github.com:t-b/cppTango.git git fetch --jobs 12 git commit-graph verify

The last verify outputs

commit-graph generation for commit 029341567c24582030592585b395f4438273263f is 1054 != 1 commit-graph generation for commit 1e8d10aec7ca6075f622c447d416071390698124 is 4294967295 != 1171 commit-graph generation for commit 296e93516189c0134843fd56ac4f10d36ccf284f is 1054 != 1 commit-graph generation for commit 4c0a7a3cd369d06b99d867be6b47a96c519efd7f is 1054 != 1 commit-graph has non-zero generation number for commit 4d39849950d3dc02b7426c780ac7991ec7221176, but zero elsewhere commit-graph has non-zero generation number for commit 4 [....]

Does that reproduce on your end as well?
Thomas
Previous: Derrick StoleeNext: Derrick Stolee
Message 7 of 14 in “2.29.0.rc0.windows.1: Duplicate commit id error message when fetching”
  1. Thomas BraunOct 7, 2020
  2. Jeff KingOct 7, 2020
  3. Thomas BraunOct 8, 2020
  4. Jeff KingOct 8, 2020
  5. Derrick StoleeOct 8, 2020
  6. Derrick StoleeOct 8, 2020
  7. Thomas BraunOct 9, 2020
  8. Derrick StoleeOct 9, 2020
  9. Thomas BraunOct 9, 2020
  10. Derrick StoleeOct 9, 2020
  11. Jeff KingOct 9, 2020
  12. Taylor BlauOct 9, 2020
  13. Derrick StoleeOct 9, 2020
  14. Taylor BlauOct 9, 2020

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.