В то время как я нашел подобный вопрос, я не нашел решение своей проблемы
Когда я пытаюсь переименовать каталог от НЕЧТО до нечто через git mv FOO foo
Я добираюсь
fatal: renaming 'FOO' failed: Invalid argument
Хорошо. Таким образом, я пробую git mv FOO foo2 && git mv foo2 foo
Но когда я пытаюсь фиксировать через git commit .
Я добираюсь
# On branch master
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
Когда я добавляю каталог через git add foo
ничто не изменяется и git commit .
дает мне то же сообщение снова.
Что я делаю неправильно? Я думал, что использую чувствительную к регистру систему (OSX), почему я не могу просто переименовать каталог?
Вы находитесь в среде, нечувствительной к регистру. Кроме того, добавление без -A
не позаботится об удалении mv
, как это понимает Git. Внимание! Убедитесь, что рядом нет других изменений или неотслеживаемых файлов, когда вы делаете это, иначе они будут зафиксированы как часть этого изменения! git stash -u
сначала сделайте это, а затем git stash pop
после. Продолжение: Чтобы обойти это, сделайте следующее:
mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"
Вот такой затяжной способ изменения рабочего каталога, фиксации и последующего объединения двух коммитов. Вы можете просто переместить файл в индекс, но для новичка в git это может быть недостаточно явным, чтобы понять, что происходит. Более короткая версия такова
git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"
Как было предложено в одном из комментариев, вы также можете сделать интерактивный rebase (git rebase -i HEAD~5
, если неправильный случай был представлен 5 коммитов назад), чтобы исправить случай там и не допустить появления неправильного случая где-либо в истории вообще. Вы должны быть осторожны, если делаете это, так как хэши коммитов с этого момента будут другими, и другим придётся переделывать или заново объединять свою работу с недавним прошлым ветки.
Это связано с исправлением имени файла: Неужели git не чувствителен к регистру?
Вы хотите установить для параметра core.ignorecase
значение false, что заставит Git обратить внимание на регистр в файловых системах, которые изначально не поддерживают его. Чтобы включить в репо:
$ git config core.ignorecase false
Затем вы можете переименовать файл с помощью git mv
, и он будет работать должным образом.
Вы не используете файловую систему с учетом регистра в OS X, если вы явно не выберете ее. HFS + может быть чувствительным к регистру, но по умолчанию регистр не учитывается.