Subject: Re: MIDX woes, was Re: [ANNOUNCE] Git v2.54.0-rc2

From: Taylor Blau <[email-masked]>
Date: Thu, 16 Apr 2026 16:26:14 -0400

On Thu, Apr 16, 2026 at 09:24:31AM -0400, Derrick Stolee wrote:
> On 4/16/2026 1:34 AM, Jeff King wrote:
> > On Thu, Apr 16, 2026 at 01:17:33AM -0400, Jeff King wrote:
> >
> >> I think removing the .midx file (and optionally regenerating with the
> >> old version) would be the appropriate workaround, but I wonder how hard
> >> it would be to go back to generating v1 midx files by default. I know v2
> >> is a building block for more advanced features, but for those who are
> >> not using those features yet it is a strict regression.
> >
> > I think doing so is just this one-liner:
> ...
> > and then here we need to use v2 for the new compaction feature:
> ...
> > So that would make things work as usual for anybody mixing and matching
> > multiple versions of Git, but does make life slightly worse for anybody
> > who wants to use the new feature (they have to set the config). We might
> > need a doc update, or possibly even to automatically default to v2 when
> > using the compact command. But that could come post-2.54.
> >
> > At this point I'll stop poking and speculating and see what direction
> > Taylor suggests. ;)
>
> I think this is a good change to make. This fits with the standard
> approach of not making breaking file changes by default, but letting
> users opt-in to new versions (at least for a few major releases).

Yeah, I agree, and sorry for the trouble here. A few thoughts:

 - In the immediate term, we should downgrade the default format to
   write V1 MIDXs for the compatibility issues pointed out by this
   thread. That would seem to be the minimal thing to do to make sure
   that the 2.54 release is as smooth as possible.

 - In the medium term (i.e., on the other side of 2.54) we should
   implement the changes that Peff sketched earlier in the thread to
   make loading the MIDX robust towards unrecognized versions.

   Of course, that doesn't fix any old clients who don't upgrade and at
   some point want to fetch from or otherwise interact with a repository
   that has a V2 MIDX. But it does improve things for, say, users that
   are on an eventual 2.55 if we make the V1->V2 by default change in
   2.56.

 - In the long term (i.e., in 2.56 or otherwise in a release after the
   above change is implemented) we should make V2 the default format for
   MIDXs.

Thanks,
Taylor