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

Re: Bug? git commit fileA tries to delete fileB and other oddities

From
MSMikael Simonsson <m@mikaelsimonsson.com>
Date
Dec 17, 2019, 11:04 UTC
Message-ID
<CA+PLxnVzu0zDtpT2T660UGhZ0RvFcq50nPfZz9Que7_7mqiSyQ@mail.gmail.com>
In-Reply-To
<20191217073306.GA3313061@coredump.intra.peff.net>

git bisect made that pretty easy, thanks. It looks like it started with this commit:

"unpack-trees: optimize walking same trees with cache-tree" https://github.com/git/git/commit/b4da37380b7774248086f42bcd59397a44e1ac79

(I ran git bisect between tags v2.19.2 and v2.20.0.)

Testing the commit in question: % git checkout b4da37380b7774248086f42bcd59397a44e1ac79 % gmake -j 6 NO_OPENSSL=YesPlease NO_PERL=YesPlease NO_TCLTK=YesPlease NO_GETTEXT=YesPlease NO_EXPAT=YesPlease all

% ~/tmp/git-source/git version git version 2.18.0.751.gb4da37380b

% ~/tmp/git-source/git commit null_terminated.hh

# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch master # Your branch is up to date with 'origin/master'. # # Changes to be committed: # deleted: algo/find.hh # new file: app/.reserved # deleted: ascii/contains_icase.hh # deleted: ascii/contains_icase.test.cc # modified: null_terminated.hh # # Changes not staged for commit: Aborting commit due to empty commit message.

Note that the latest version behaves differently (it tries to delete another file):

% git version git version 2.24.1

% git commit null_terminated.hh

# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch master # Your branch is up to date with 'origin/master'. # # Changes to be committed: # deleted: defer.hh # modified: null_terminated.hh Aborting commit due to empty commit message.

The commit before "unpack-trees: optimize walking same trees with cache-tree" works as it should: % git checkout b4da37380b7774248086f42bcd59397a44e1ac79^ % gmake -j 6 NO_OPENSSL=YesPlease NO_PERL=YesPlease NO_TCLTK=YesPlease NO_GETTEXT=YesPlease NO_EXPAT=YesPlease all

% ~/tmp/git-source/git version git version 2.18.0.750.g0d1ed5963d

% ~/tmp/git-source/git commit null_terminated.hh

# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch master # Your branch is up to date with 'origin/master'. # # Changes to be committed: # modified: null_terminated.hh # # Changes not staged for commit: Aborting commit due to empty commit message.

Here's my local commit from about a week ago when the problems started.

I'm sure I ran "git commit readme.md" because I had several files staged. The commit pulled in 3 staged files (I think there were more) and deleted 3 files that 100% weren't staged.

% git show --numstat 7d5d43d849f1391b3cc11f12e037b8cb5174e3a3
commit 7d5d43d849f1391b3cc11f12e037b8cb5174e3a3
Author: Mikael Simonsson <m@mikaelsimonsson.com>
Date:   Sun Dec 8 10:38:38 2019 +0000
    Add short info and requirements for ranges

56 0 algo/find.hh 0 1 app/.reserved 16 0 ascii/contains_icase.hh 28 0 ascii/contains_icase.test.cc 0 41 bench/bench.hh 0 41 debug.hh 76 0 readme.md

-Mikael
On Tue, Dec 17, 2019 at 7:33 AM Jeff King <peff@peff.net> wrote:
Show 33 quoted lines
>
> On Mon, Dec 16, 2019 at 09:50:33AM +0000, Mikael Simonsson wrote:
>
> > I will try to recreate the problem with a new repository.
> >
> > So far I think I've narrowed it down to a bug introduced in git 2.20.0.
> >
> > Not buggy:
> > [...]
>
> If you can build Git from source, you might try using "git bisect" to
> find the exact commit where the problem starts.
>
> > The buggy versions all try to delete fileX when running "git commit fileA":
> >
> > % git commit fileA
> >
> > # Please enter the commit message for your changes. Lines starting
> > # with '#' will be ignored, and an empty message aborts the commit.
> > #
> > # On branch master
> > # Your branch is up to date with 'origin/master'.
> > #
> > # Changes to be committed:
> > #       deleted:    fileX
> > #       modified:   fileA
> > #
> > # Changes not staged for commit:
>
> Is there anything about "fileX" and "fileA"'s names that might be
> relevant? E.g., might they case-fold to the same name or something?
>
> -Peff
Previous: Jeff King
Message 5 of 5 in “Bug? git commit fileA tries to delete fileB and other oddities”
  1. Mikael SimonssonDec 14, 2019
  2. Johannes SchindelinDec 15, 2019
  3. Mikael SimonssonDec 16, 2019
  4. Jeff KingDec 17, 2019
  5. Mikael SimonssonDec 17, 2019

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.