У нас есть мерзавец пустой репозиторий в Unix, который имеет файлы с тем же именем, которое отличается только по случаям.
Пример:
GRANT.sql
grant.sql
Когда мы клонируем пустой репозиторий от Unix в к полю окон, состояние мерзавца обнаруживает файл, как изменено. Рабочее дерево загружается только с grant.sql, но состояние мерзавца сравнивает grant.sql и GRANT.sql и показывает файл, как изменено в рабочем дереве.
Я пытался использовать core.ignorecase ложь, но результатом является то же.
Там какой-либо путь состоит в том, чтобы устранить эту проблему?
Windows нечувствительна к регистру (точнее, с сохранением регистра). Просто не существует возможности для существования двух файлов, имена которых различаются только регистром: два имени файла, которые отличаются только регистром, являются одним и тем же именем. Период.
Итак, Git просматривает репозиторий, проверяя один файл за другим, пока не найдет первый из двух проблемных файлов. Git проверяет его, а затем продолжает свои дела, пока не найдет второй файл. Опять же, Git проверяет это. Поскольку с точки зрения Windows имя файла такое же, как и у первого, первый файл просто перезаписывается вторым. Это заставляет Git думать, что первый файл был изменен, чтобы иметь то же содержимое, что и второй.
Обратите внимание, что это не имеет ничего общего с Git: точно так же произошло бы, если бы у вас был tarball, zip-файл или репозиторий Subversion.
Если вы хотите заниматься разработкой на нескольких разных платформах, вы должны соблюдать ограничения этих платформ и ограничиваться наименьшим общим знаменателем для всех платформ, которые вы поддерживаете. Windows поддерживает ADS, а Linux - нет. OSX поддерживает вилки ресурсов, а Windows - нет. BSD поддерживает чувствительность к регистру, Windows - нет. Итак, вы не можете использовать ни один из них. Просто так оно и есть.
core.ignorecase
здесь не поможет, потому что он решает как раз противоположную проблему.
Я не уверен, что это вообще возможно. Git's ignorecase обрабатывает несоответствия в случае одного файла. Он не сможет обойти неспособность Window иметь два имени файлов в одном каталоге, которые отличаются только регистром.
FWIW, иметь два одинаковых имени файлов, кроме их регистра - очень плохая идея, даже на Unix.
Я столкнулся с похожей проблемой. В моем случае два файла с похожими именами, которые отличаются только в том случае, если они находятся в подкаталоге, который не имеет отношения к клону Windows. Git 1.7 имеет функцию разреженного извлечения , которая позволяет исключить определенные файлы из рабочей копии. Чтобы исключить этот каталог:
git config core.sparsecheckout true
echo '*' >.git/info/sparse-checkout
echo '!unwanted_dir/' >>.git/info/sparse-checkout
git read-tree --reset -u HEAD
После этого подкаталог unwanted_dir /
полностью исчез из моей рабочей копии, и Git продолжает работать с остальными файлами в обычном режиме.
Если ваши GRANT.sql
и grant.sql
не подходят для клона Windows, то вы можете добавить их имена в .git / info / sparse-checkout
, чтобы исключить именно эти файлы.