Git в окнах: не удается переключить ветвь после переименования файла (только в случае изменения)
Я работаю с git в Windows, и у меня есть файл в моем репо, скажем, "foo.txt".
Сегодня я хотел переименовать этот файл в "Foo.txt" (в верхнем регистре). Как было предложено в этом вопросе SO, я использовал git mv -f foo.txt Foo.txt
, который дал желаемый результат. Я приступил к совершению изменения моего репо.
EDIT: Я хотел бы, чтобы это было постоянным изменением и все еще способным совершить чек, который предшествует этому изменению.
Однако после этого я столкнулся с ошибкой при попытке переключить ветку:
# I'm on branch1
git checkout branch2
Aborting
error: The following untracked working tree files would be overwritten by checkout:
Foo.txt
Please move or remove them before you can switch branches.
После некоторого разговора я обнаружил, что мой файл .git/config
имеет следующий параметр:
[core]
ignorecase=false
Изменение этого значения на true, похоже, устраняет проблему и позволяет мне менять ветки как обычно.
В связи с этим я хотел бы знать:
- Есть ли какой-либо неблагоприятный эффект от этой настройки? Должно ли это всегда быть на окнах? Что делать, если я работаю с другим разработчиком, и у них нет одинакового значения для этого?
- Есть ли другой способ переименовать файл без изменения этого параметра?
- Почему это происходит в первую очередь? Когда я совершил изменение, git правильно определил, что файл был фактически переименован (не удалял один файл, а затем добавлял другое). Итак, что именно произошло, когда я попытался переключить ветки?
Спасибо!
Ответы
Ответ 1
Как упоминалось в "Неразрешимая ошибка Git: следующие необработанные рабочие файлы дерева будут перезаписаны с помощью checkout", установка core.ignorecase
- true
- это действительный способ для продолжения проверки.
Но я бы предпочел, как в "GIT: следующие необработанные рабочие файлы дерева будут перезаписаны с помощью checkout", чтобы:
-
git add
то, что я только что изменил (в вашем случае git mv
, возможно, уже добавил переименованный файл в индекс)
-
git stash
, сохраняя индекс
-
git checkout -b anotherBranch
: это должно работать, поскольку индекс чист.
-
git stash pop
, если вы хотите восстановить изменение case в этом новом индексе.
Ответ 2
Простой (но неэлегантный) способ преодолеть эту проблему без изменения настройки конфигурации - это удалить файл и снова проверить его. В моем случае это позволило моим изменениям снова как нормальные.
Изменить: Как указал Avivr, мое предложенное решение не решило проблему навсегда. Я все равно не удалю этот ответ, потому что он может помочь в качестве временного исправления в некоторых случаях.