Windows ist case-insensitive (genauer, Fall-Erhaltung). Es gibt einfach keine Möglichkeit, dass zwei Dateien existieren, deren Namen sich nur in Groß- und Kleinschreibung unterscheiden: zwei Dateinamen, die sich nur in Groß- und Kleinschreibung unterscheiden, haben denselben Dateinamen. Zeitraum.
Also geht Git das Repository durch und checkt eine Datei nach der anderen aus, bis es die erste der beiden Problemdateien erreicht. Git überprüft es und geht dann weiter, bis es die zweite Datei erreicht. Git überprüft es erneut. Da der Dateiname aus Sicht von Windows derselbe ist wie der erste, wird die erste Datei einfach mit der zweiten Datei überschrieben. Nun denkt Git, dass die erste Datei geändert wurde, um den gleichen Inhalt wie die zweite Datei zu haben.
Beachten Sie, dass dies nichts mit Git zu tun hat: Genau dasselbe würde passieren, wenn Sie einen Tarball, eine Zip-Datei oder ein Subversion-Repository hätten.
Wenn Sie die Entwicklung auf mehreren verschiedenen Plattformen tun wollen, müssen Sie die Einschränkungen dieser Plattformen respektieren und Sie müssen sich gemeinsame Nenner auf den niedrigsten beschränken aller Plattformen, die Sie unterstützen. Windows unterstützt ADS, Linux nicht. OSX unterstützt Ressourcengabeln, Windows nicht. BSD unterstützt Groß-/Kleinschreibung, Windows nicht. Sie können also keines davon verwenden. So ist es halt.
core.ignorecase
wird Ihnen hier nicht helfen, denn das behandelt genau das gegenüber Problem.
Super Frage und Gregs Antwort rockt einfach! – Hazok
Dies kann auch passieren, wenn Sie die Datei mit einem anderen Gehäuse in verschiedenen Zweigen unter Windows erstellen. – Thomas