Windows no distingue entre mayúsculas y minúsculas (más precisamente, preservación de mayúsculas y minúsculas). Simplemente no existe una forma posible de que existan dos archivos cuyos nombres solo difieren en el caso: dos nombres de archivo que difieren solo en caso de que tengan el mismo nombre de archivo. Período.
Entonces, Git recorre el repositorio, revisando un archivo después del otro, hasta que llega al primero de los dos archivos problemáticos. Git lo verifica, luego va más allá sobre su negocio hasta que llega al segundo archivo. Nuevamente, Git lo verifica. Dado que desde el punto de vista de Windows el nombre del archivo es el mismo que el primero, el primer archivo simplemente se sobrescribe con el segundo. Lo que ahora hace que Git piense que el primer archivo fue cambiado para tener el mismo contenido que el segundo.
Tenga en cuenta que esto no tiene nada que ver con Git: exactamente lo mismo ocurriría si tuviera un tarball, un archivo zip o un repositorio de Subversion.
Si desea hacer desarrollo en múltiples plataformas diferentes, debe respetar las restricciones de esas plataformas y debe limitarse al mínimo común denominador de todas las plataformas que admite. Windows admite ADS, Linux no. OSX admite resource bifurcaciones, Windows no. BSD admite mayúsculas y minúsculas, Windows no. Entonces, no puedes usar ninguno de esos. Esa es la forma como es.
core.ignorecase
no lo ayudará aquí, porque maneja exactamente el problema opuesto a.
pregunta impresionante y la respuesta de Greg es simplemente genial! – Hazok
Esto también puede suceder cuando crea el archivo con diferentes envolturas en diferentes ramas en Windows. – Thomas