git filter-branch can "forget" directories on case insensitive filesystems
- From
Simeon Maxein <smaxein@googlemail.com>
- Date
- Sep 3, 2010, 16:36 UTC
- Message-ID
- <AANLkTimOs9m==KaD3BNHcgkTTqNQF1yV0NLA_Ew+iS-N@mail.gmail.com>
When running git filter-branch on a case insensitive filesystem, the working tree checked out for filtering is missing a directory in my project. This is probably related to the problem discussed here: http://article.gmane.org/gmane.comp.version-control.git/154662
In contrast to that report, this one affects repositories on case-insensitive filesystems, regardless of the setting of core.ignorecase.
To reproduce the problem, follow the steps below. I tested them with git 1.7.0.4 on a laptop running Ubuntu, with the repository on a Fat32 USB drive.
mkdir gittest cd gittest git init mkdir testdir echo 'abc' >testdir/testfile git add testdir git commit -m foo git rm -r testdir mkdir testDir echo 'abc' >testDir/testfile git add testDir git commit -m bar
Now, check out master^1 and master to ensure the commits look as expected. Then, run this:
git filter-branch --tree-filter 'ls' master
You will notice that the directory vanishes when the second commit is filtered.
The problem occurs whether core.ignorecase is set to true or false. It doesn't occur on case sensitive filesystems.
Simeon