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, мое предложенное решение не решило проблему навсегда. Я все равно не удалю этот ответ, потому что он может помочь в качестве временного исправления в некоторых случаях.