Re: Bug? git commit fileA tries to delete fileB and other oddities
- From
- Mikael 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