Чувствительность к регистру в Git

84

У меня проблема с git. В основном я устанавливаю значение false, core.ignorecaseпотому что я хотел изменить регистр имен некоторых папок (поскольку я нахожусь в OSX с файловой системой без учета регистра, в противном случае изменения не отображались). Когда я извлек свои данные, я заметил, что теперь каждая переименованная папка появляется в репозитории дважды со старым и новым именем. Я не знаю, что делать, чтобы удалить старые папки, поскольку они не отображаются локально (я снова пытаюсь установить core.ignorecaseзначение true, но это не помогает).

энтропид
источник
1
Возможно, вы могли бы создать файловую систему ext3 поверх образа, смонтировать ее и использовать эту чувствительную к регистру файловую систему.
André Puel
@ AndréPuel: ну, вообще-то я искал что-нибудь «попроще». : P но спасибо за совет, пойду на это если не найду других решений.
entropid

Ответы:

126

Может быть, может помочь обходной путь, аналогичный этому комментарию в проблеме msysgit (для другой нечувствительной к регистру ОС: Windows)?

Я столкнулся с такой же проблемой. Произведен рефакторинг имени пакета в Eclipse, и переключение на предыдущую сборку не удалось из-за того, что имя папки не возвращалось. Я использую Windows 7, Git 1.7.0.2.msysgit.0

Моя папка была переименована в Windows в " folder", но Folderв Git отображалась как " ".
Я исправил проблему, переименовав ее в " Folder" в Windows и запустив:

git mv "Folder" "Folder2"
git mv "Folder2" "folder"

Обратите внимание, что с git 2.0.1 (июнь 2014 г.) он git mv Folder folderдолжен работать!

См. « Git: изменение заглавных букв в именах файлов »

VonC
источник
1
Я заметил, что при таком переименовании второе переименование может занять очень много времени. Ответ - проявить терпение; папка в конечном итоге будет переименована, после чего ее можно будет зафиксировать.
NathanAldenSr 07
Другой способ добиться того же - переименовать «Folder» в «Folder2» и сделать фиксацию, а затем «Folder2» в «folder» и изменить последнюю фиксацию.
DaniCE
@DaniCE Я только что отредактировал ответ: с git 2.0.1 это должно быть намного проще.
VonC
22

Используйте следующую команду в macOS. Это изменит вашу конфигурацию git, чтобы в именах файлов учитывался регистр.

git config core.ignorecase false

Вы можете установить это глобально, отредактировав ~/.gitconfigи установив его, coreнапример:

[core]
    ignoreCase = false
Брэндон Янг
источник
Я сделал прямо противоположное, чтобы git успешно выполнил перебазирование, включающее переименование случая. Благодаря!
sorin
21

Вы можете создать образ диска (предпочтительно образ диска с разреженным набором) с файловой системой с учетом регистра и проверить там свой репозиторий git.

На снимке экрана ниже Дисковой утилиты показано, как создать образ диска с учетом регистра.

Disk Utility Settings

адиб
источник
Гораздо лучшее и постоянное решение этой проблемы и других загадок, связанных с чувствительностью к регистру. Я сделал образ диска; скопировал в него мои старые репозитории Git; сделал символическую ссылку, откуда я хранил все свои репозитории git на новую версию с разреженным пакетом. Вернуться к нормальному рабочему процессу, чтобы никогда больше не столкнуться с этим.
jwd630
Созданный таким образом диск работает очень-очень медленно.
Minqi Pan
1
@MinqiPan, у меня была такая же проблема, но этого не должно быть, если вы создаете том APFS. Тома APFS могут находиться в одном разделе «контейнера» , что не снижает производительности.
Виктор Сергиенко
12

Mac OS X по умолчанию "нечувствителен к регистру, но сохраняет регистр". Это важное различие.

Я предлагаю вам создать еще один образ диска и, в частности, отформатировать его как «HFS с учетом регистра».

Арафангион
источник
Спасибо за подсказку, но пост выше все решил!
entropid
7
К сожалению, многие плохие программы (конечно, Adobe) полагаются на сломанную файловую систему OSX по умолчанию. Будьте осторожны.
Джим Стюарт
5
git mv "Folder" "Folder2"
git mv "Folder2" "folder"
git commit -a -m "my message"
Мохамед ЭЛЬ-ХАБИБ
источник
Ага. Вы тоже должны пойти вперед и совершить это. ++
RubberDuck
1

На дискуссионном форуме git@vger.kernel.org недавно появилась длинная ветка под названием Ошибка? Git checkout завершается ошибкой из-за неправильного сообщения об ошибке, в котором указываются проблемы и способы проверки чувствительности к регистру между различными платформами.

Филип Окли
источник