мерзавец mv и только изменяет случай каталога

В то время как я нашел подобный вопрос, я не нашел решение своей проблемы

Когда я пытаюсь переименовать каталог от НЕЧТО до нечто через 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), почему я не могу просто переименовать каталог?

250
задан Community 23 May 2017 в 01:47
поделиться

3 ответа

Вы находитесь в среде, нечувствительной к регистру. Кроме того, добавление без -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 не чувствителен к регистру?

389
ответ дан 23 November 2019 в 02:56
поделиться

Вы хотите установить для параметра core.ignorecase значение false, что заставит Git обратить внимание на регистр в файловых системах, которые изначально не поддерживают его. Чтобы включить в репо:

$ git config core.ignorecase false

Затем вы можете переименовать файл с помощью git mv , и он будет работать должным образом.

139
ответ дан 23 November 2019 в 02:56
поделиться

Вы не используете файловую систему с учетом регистра в OS X, если вы явно не выберете ее. HFS + может быть чувствительным к регистру, но по умолчанию регистр не учитывается.

2
ответ дан 23 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: