Моя команда в настоящее время управляет git-репо в нескольких файловых системах. Большинство из нас используют Windows, но некоторые используют Linux. Кроме того, мы развертываем наш производственный код на сервере Linux. Это привело к многочисленным проблемам с регистром имен файлов в нашей кодовой базе (т.е. импорт Foo.js
, когда файл на самом деле foo.js
). Недавно я завершил очистку папки нашего проекта, которая состояла в основном из реорганизации наших каталогов и переименования наших каталогов / файлов в общий стандарт именования. Многие из этих изменений имени файла меняли регистр файла (например, foo.js
-> Foo.js
).
Я не был полностью осведомлен о том, как git по-разному обрабатывает имена файлов в зависимости от регистра и в сравнении с регистромфайловые системы, когда я делал эти изменения, и это приводило ко многим странным ошибкам. Одна вещь, с которой я столкнулся при исследовании этого, была ignorecase
значение в .gitconfig
.
Из документации git-config:
Внутренняя переменная, которая позволяет использовать различные обходные путиGit лучше работает с файловыми системами, не чувствительными к регистру, такими как APFS, HFS +, FAT, NTFS и т. Д. Например, если список каталогов находит «makefile», когда Git ожидает «Makefile», Git будет считать, что это действительно тот же файли продолжайте помнить его как «Makefile».
…
Git полагается на правильную конфигурацию этой переменной для вашей операционной и файловой системы. Изменение этого значения может привести к неожиданному поведению.
Из того, что я могу понять из этого, установка ignorecase = true
сделает так, что если git обнаружит то же имя файла, но с другим регистром,он изменит имя в индексе git в соответствии с тем, что находится в файловой системе (т. е. если Windows имеет foo.js
, а git checkout / pull имеет Foo.js
, он будет считать, что foo.js
является правильным, и git будет использовать этот регистр). Меня беспокоит то, что произойдет, если я перейду на удаленный сервер, и наш сервер развертывания примет изменения. Затем он попытается импортировать Foo.js
, который не существует и выдает ошибку.
Однако, установив ignorecase = false
, git сможет обнаружить разницу в именах файлов и правильно заменитьфайлы. Это правильно, и мне нужно, чтобы моя команда установила это значение в false, потому что мы работаем в разных файловых системах?
Я читал посты, где люди говорят, что вы должны это делать, и некоторые посты, в которых говорится точнонапротив.