Windows нечувствительна к регистру (точнее, сохраняет регистр). Просто не существует способа существования двух файлов, имена которых отличаются только регистром: два имени файла, отличающиеся только регистром, являются одним и тем же именем. Период.
Итак, Git просматривает хранилище, проверяя один файл за другим, пока не найдет первый из двух проблемных файлов. Git проверяет это, затем идет дальше о своих делах, пока не найдет второй файл. Опять Git проверяет это. Поскольку с точки зрения Windows имя файла совпадает с первым, первый файл просто перезаписывается вторым. Что теперь заставляет Git думать, что первый файл был изменен, чтобы иметь то же содержимое, что и второй.
Обратите внимание, что это не имеет ничего общего с Git: то же самое произошло бы, если бы у вас был архив tar, zipfile или Subversion.
Если вы хотите заниматься разработкой для нескольких разных платформ, вы должны соблюдать ограничения этих платформ и ограничиваться наименьшим общим знаменателем из всех платформ, которые вы поддерживаете. Windows поддерживает ADS, Linux - нет. OSX поддерживает ветвления ресурсов, Windows - нет. BSD поддерживает чувствительность к регистру, Windows - нет. Таким образом, вы не можете использовать ни один из них. Так оно и есть.
core.ignorecase
здесь вам не поможет, потому что это решает точно противоположную проблему.