Как заставить переключение веток работать, когда одни и те же файлы имеют разные регистры?
Изменить core.ignoreCase
обратно на true
.
Вы находитесь на нечувствительной файловой системе; git использует параметр core.ignoreCase
, чтобы указать это. Он настраивается при создании хранилища (либо через git init
, либо через git clone
): git просматривает вашу файловую систему, чтобы определить, чувствительна ли она к регистру, и кэширует эту информацию (в настройке core.ignoreCase
), чтобы она не нужно делать этот поиск для каждой операции.
Это не настройка, которую вы должны изменить.
С core.ignoreCase = false
, на кейсе нечувствительная файловая система:
% git ls-tree HEAD
100644 blob 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 foo
% git ls-tree branch
100644 blob bcc9cdfd113753edf279e92afd622b0f3bb05fbc FOO
% git checkout branch
error: The following untracked working tree files would be overwritten by checkout:
FOO
Please move or remove them before you switch branches.
Aborting
Это потому, что я сказал git, что моя файловая система чувствительна к регистру. Он смотрит на дерево, которое я пытаюсь проверить, видит, что в моем текущем дереве HEAD
есть файл с именем FOO
, который не , а затем просматривает диск, чтобы увидеть, есть ли неотслеживаемый рабочий файл с тем же именем. Он stats
файл FOO
(который на самом деле является файлом foo
, так как мы находимся в нечувствительной к регистру файловой системе) и понимает, что у вас есть неотслеживаемый файл в рабочем каталоге.
За исключением, конечно, нет. У вас есть файл foo
.
Если я исправлю это, установив core.ignoreCase
, чтобы отразить реальность моей файловой системы, тогда я смогу правильно переключать ветви:
% git config core.ignoreCase true
% git checkout branch
Switched to branch 'branch'
% git ls-tree HEAD
100644 blob bcc9cdfd113753edf279e92afd622b0f3bb05fbc FOO