Re: Unexpected ignorecase=false behavior on Windows
- From
Marc Strapetz <marc.strapetz@syntevo.com>
- Date
- Jun 24, 2018, 10:07 UTC
- Message-ID
- <c9a9167c-8528-c85a-e7aa-9197ab92e685@syntevo.com>
- In-Reply-To
- <CAGyf7-GvcN8EhMgtaZcDJNYNdfLwVH8HVBDmZqJU40nze0NSEA@mail.gmail.com>
On 22.06.2018 22:58, Bryan Turner wrote:
Show 51 quoted lines
> On Fri, Jun 22, 2018 at 1:45 PM Marc Strapetz <marc.strapetz@syntevo.com> wrote: >> >> On 22.06.2018 19:36, Johannes Sixt wrote: >>> Am 22.06.2018 um 14:04 schrieb Marc Strapetz: >>>> On Windows, when creating following repository: >>>> >>>> $ git init >>>> $ echo "1" > file.txt >>>> $ git add . >>>> $ git commit -m "initial import" >>>> $ ren file.txt File.txt >>>> $ git config core.ignorecase false >>> >>> This is a user error. core.ignorecase is *not* an instruction as in >>> "hey, Git, do not ignore the case of file names". It is better regarded >>> as an internal value, with which Git remembers how it should treat the >>> names of files that it receives when it traverses the directories on the >>> disk. >>> >>> Git could probe the file system capabilities each time it runs. But that >>> would be wasteful. Hence, this probe happens only once when the >>> repository is initialized, and the result is recorded in this >>> configuration value. You should not change it. >> >> Sorry, it looks like my example was misleading. I'm actually questioning >> current behavior in case of Windows repositories with core.ignorecase >> initialized to false, like in following setup: >> >> $ git init >> $ git config core.ignorecase false >> >> The repository is now set up to be case-sensitive on Windows. From this >> point on, core.ignorecase won't change anymore and the repository will >> be filled: > > I don't think Hannes's point was _when_ you changed it; it was that > you changed it _at all_. > > Git on Windows is not designed to run with anything other than > core.ignoreCase=true, and attempting to do so will cause unexpected > behavior. In other words, it's not a behavior toggle so user's can > request the functionality to work one way or the other; it's an > implementation detail that `git init` and `git clone` set when a > repository is created purely so they don't have to probe the file > system each time you run a `git` command. > > NTFS is case-preserving-but-case-insensitive by default[1]. So long as > that's the case, the only mode for running Git on Windows is > core.ignoreCase=true. > > Hopefully this clarifies things!
Thanks, it does. In this case, I'd suggest to make this clear in the documentation, too. I've just sent a patch.
-Marc