Ответ 1
Вы можете попробовать:
-
"git mv -f foo.txt Foo.txt"
(обратите внимание: это больше не требуется с git 2.0.1) - установить
ignorecase
в false в файле конфигурации.
Но проблема case (например, для Windows) описана в msysgit issue 228 (опять же: это должно сейчас - июнь 2014 года - работайте с git 2.0.1)
всегда есть возможность установить
ignorecase
в false в файле конфигурации, который заставит использовать Unix как git семантику поверх NTFS.
git поддерживает это поведение, но не по умолчанию - с точки зрения NTFSa.txt
иa.txt
- одно и то же - поэтому git пытается сохранить это, поскольку большинство пользователей ожидали бы
Как лучшее обходное решение, вы можете
git mv foo.txt foo.txt.tmp && git mv foo.txt.tmp Foo.txt
который также изменяет регистр файла, хранящегося на диске.
Это сообщение в блоге иллюстрирует ту же проблему в MacOS во время rebase:
По умолчанию в файловых системах Mac OS X они не учитывают регистр.
FFFFFF.gif
совпадает сFFFFFF.gif
.Если вы удалите файл, о котором идет речь, просто из файловой системы, а не из индекса git, разумеется, вы можете объединить рассматриваемую ветку и восстановить ее, как будто ничего не произошло.
Шаги довольно просты:
$ rm file/in/question.gif $ git merge trunk
Во всяком случае помните, что означает git mv:
mv oldname newname
git add newname
git rm oldname
поэтому, если newname
и oldname
сталкиваются, вам нужно сделать их разными (даже если это только на короткий период времени), следовательно git mv foo.txt foo.txt.tmp && git mv foo.txt.tmp Foo.txt