Окна мерзавца чувствительные к регистру имена файлов, не обработанные правильно

У нас есть мерзавец пустой репозиторий в Unix, который имеет файлы с тем же именем, которое отличается только по случаям.

Пример:

GRANT.sql
grant.sql

Когда мы клонируем пустой репозиторий от Unix в к полю окон, состояние мерзавца обнаруживает файл, как изменено. Рабочее дерево загружается только с grant.sql, но состояние мерзавца сравнивает grant.sql и GRANT.sql и показывает файл, как изменено в рабочем дереве.

Я пытался использовать core.ignorecase ложь, но результатом является то же.

Там какой-либо путь состоит в том, чтобы устранить эту проблему?

36
задан Greg Hewgill 22 July 2010 в 22:52
поделиться

3 ответа

Windows нечувствительна к регистру (точнее, с сохранением регистра). Просто не существует возможности для существования двух файлов, имена которых различаются только регистром: два имени файла, которые отличаются только регистром, являются одним и тем же именем. Период.

Итак, Git просматривает репозиторий, проверяя один файл за другим, пока не найдет первый из двух проблемных файлов. Git проверяет его, а затем продолжает свои дела, пока не найдет второй файл. Опять же, Git проверяет это. Поскольку с точки зрения Windows имя файла такое же, как и у первого, первый файл просто перезаписывается вторым. Это заставляет Git думать, что первый файл был изменен, чтобы иметь то же содержимое, что и второй.

Обратите внимание, что это не имеет ничего общего с Git: точно так же произошло бы, если бы у вас был tarball, zip-файл или репозиторий Subversion.

Если вы хотите заниматься разработкой на нескольких разных платформах, вы должны соблюдать ограничения этих платформ и ограничиваться наименьшим общим знаменателем для всех платформ, которые вы поддерживаете. Windows поддерживает ADS, а Linux - нет. OSX поддерживает вилки ресурсов, а Windows - нет. BSD поддерживает чувствительность к регистру, Windows - нет. Итак, вы не можете использовать ни один из них. Просто так оно и есть.

core.ignorecase здесь не поможет, потому что он решает как раз противоположную проблему.

41
ответ дан 27 November 2019 в 05:35
поделиться

Я не уверен, что это вообще возможно. Git's ignorecase обрабатывает несоответствия в случае одного файла. Он не сможет обойти неспособность Window иметь два имени файлов в одном каталоге, которые отличаются только регистром.

FWIW, иметь два одинаковых имени файлов, кроме их регистра - очень плохая идея, даже на Unix.

4
ответ дан 27 November 2019 в 05:35
поделиться

Я столкнулся с похожей проблемой. В моем случае два файла с похожими именами, которые отличаются только в том случае, если они находятся в подкаталоге, который не имеет отношения к клону 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 , чтобы исключить именно эти файлы.

33
ответ дан 27 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: