Как поменять ветку при изменении имени файла? - PullRequest
0 голосов
/ 30 апреля 2018
  1. У меня есть ветка development с файлом Config.json.
  2. Я создаю новую ветку new_development, где я переименовываю Config.json в config.json и фиксирую.
  3. Я переключаюсь обратно на development, чтобы посмотреть, как кое-что было сделано в этой ветке. Нет ошибок.
  4. Я переключаюсь на new_development, чтобы продолжить работу над новым материалом. Это показывает ошибку:

ошибка: следующие неотслеживаемые файлы рабочего дерева будут перезаписаны извлечением:

   Config.json

Пожалуйста, переместите или удалите их, прежде чем переключать ветви.

1024 * Aborting *

Файл на самом деле находится в git.

У меня есть этот конфиг git:

[core]
    ignorecase = false

Как заставить переключение веток работать, когда одни и те же файлы имеют разные регистры?

1 Ответ

0 голосов
/ 30 апреля 2018

Как заставить переключение веток работать, когда одни и те же файлы имеют разные регистры?

Изменить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...