We are using a remote Git repository located on a Linux server at the office. All clients are Windows PCs with Git Extensions installed as a client (running with msysgit).
I would like to add more details over @meagar's answer:
FAT32 / NTFS are case-preserving file systems. That is, if you name a file "Foo.txt", it will be stored as ""Foo.txt". If you save a file as "foo.txt", it will be saved as "foo.txt". But since it is case-insensitive, "Foo.txt" and "foo.txt" are effectively the same and you cannot have both files in the same directory.
In your repository in Windows, if you change the name from "Foo.txt" to "foo.txt", and if you do not git to show that as a change , you can set core.ignorecase
configuration to true and git will not see that as a change. If you set it to false it will. ( But because of the nature of the filesystem and git, it will seem like a new file foo.txt was added, adding to confusion on Windows).
That's the purpose of the core.ignorecase
Coming to the branch. Branches are just pointers to a commit. These pointers are just files. These files are stored in .git/refs/heads
. When you create a branch, say, bar
, a file named .git/refs/head/bar
is created. Now, in Linux, when you create a branch named Bar
, it can go ahead and create a file .git/refs/head/Bar
and hence allows the branch creation. But on Windows, you cannot create .git/refs/head/Bar
and hence you will not be able to create the Bar branch when bar exists. Realize that core.ignorecase
is to do with files in your repository - your code base - and has no influence over the metadata files of git.
So you will have to live with and adjust to the fact that in Linux, you can create branches with same names, differing in case, but in Windows, you cannot.