git core.ignorecase = false в Mac OS X - PullRequest
0 голосов
/ 17 сентября 2018

Я сделал core.ignorecase=false на локальном и глобальном уровне конфигурации, но я вижу странное поведение, как показано ниже, когда я делаю git checkout MASTER (не мастер). Я также сделал git branch -v, но MASTER не показывался.

git checkout master
Switched to branch 'master'

git branch
* master

git checkout MASTER
Switched to branch 'MASTER'

git branch
master 

Мы видим, что (*) сейчас нет на master. Я знаю, что файловая система Mac OS X нечувствительна к регистру , но тогда

a) Что остается для значимости core.ignorecase=false явного упоминания этого, если даже после этого наша ОС контролирует его?

b) Почему нет (*) в ветке master, если git принимает MASTER и master как одно и то же?[РЕДАКТИРОВАТЬ: Даже если вы сделаете core.ignorecase = true, мы все равно увидим это]

Делая rev-parse, оба указывают на один и тот же SHA1.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Это ожидается.Ваша ОС / файловая система нечувствительна к регистру и вернет файл с альтернативным регистром в своем имени.Это односторонняя ловушка для неосторожных.

Обратите внимание на отсутствие * по отношению к любой из перечисленных ветвей при переходе на ветку с неверным регистром MASTER - ваша ОС вернула подробности из ветви master (то же имя файла), и проверил это.Теперь Git не может найти MASTER в своем списке доступных ветвей.

Подобная проблема существует в Git-for-Windows, и эта проблема возникает регулярно.Это не легко решить (код против людей).

0 голосов
/ 17 сентября 2018

Устанавливая core.ignorecase=false, вы неправильно настроили вашу систему, и вам следует установить для нее правильное значение, true, если вы ожидаете, что Git будет вести себя разумно. Из git-config руководство:

Внутренняя переменная, которая позволяет использовать различные обходные пути, позволяющие Git лучше работать с файловыми системами, не чувствительными к регистру, такими как APFS, HFS +, FAT, NTFS и т. Д. Например, если список каталогов находит «makefile», когда Git ожидает «Makefile» ", Git предположит, что это действительно тот же файл, и продолжит помнить его как" Makefile ".

...

Git полагается на правильную конфигурацию этой переменной для вашей операционной и файловой системы. Изменение этого значения может привести к непредвиденному поведению.

В macOS правильное значение true, если только вы не отформатировали свой диск или раздел с учетом регистра. Поэтому вы никогда не должны изменять это значение, если значение, выбранное Git, неверно. Например, значение будет неправильным, если вы копируете хранилище из тома без учета регистра в регистр с учетом регистра, поскольку Git не проверяет значение после создания хранилища с помощью git clone или git init.

Я не уверен, чего вы ожидали добиться, установив для этой переменной значение false, но единственное, что на самом деле происходит, это то, что Git не работает правильно.


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

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