git mv и только изменить случай каталога
в то время как я нашел подобное вопрос Я не нашел ответа на мою проблему
когда я пытаюсь переименовать каталог из FOO в foo через git mv FOO foo
Я
fatal: renaming 'FOO' failed: Invalid argument
OK. Поэтому я стараюсь git mv FOO foo2 && git mv foo2 foo
но когда я пытаюсь совершить через git commit .
Я
# On branch master
# Untracked files:
# (use "git add <file>..." 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) почему я не могу просто переименовать каталог?
10 ответов
вы находитесь в регистр окружающей среды. Далее, добавив без -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"
это нарисованный вне путь изменять работу каталог, фиксация, а затем сворачивание 2 коммитов. Вы можете просто переместить файл в индекс, но для кого-то, кто новичок в git, он может быть недостаточно явным относительно того, что происходит. Более короткая версия
git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"
как было предложено в одном из комментариев, Вы можете также сделать интерактивный перебазирования (git rebase -i HEAD~5
если неправильный случай был введен 5 коммитов назад), чтобы исправить случай там и не иметь неправильный случай появляются в любом месте в истории вообще. Вы должны быть осторожны, если вы делаете это поскольку хэши фиксации с этого момента будут отличаться, и другим придется перебазировать или повторно объединить свою работу с этим недавним прошлым ветви.
это связано с исправлением имени файла:git не чувствителен к регистру?
вы хотите установить параметр core.ignorecase
в false, что заставит Git обратить внимание на case в файловых системах, которые изначально его не поддерживают. Чтобы включить в вашем РЕПО:
$ git config core.ignorecase false
затем вы можете переименовать файл с git mv
и он будет работать, как ожидалось.
я смог решить эту проблему, используя git 1.7.7, используя временное имя файла:
$ git mv improper_Case improve_case2
$ git mv improve_case2 improve_case
$ git commit -m "<your message>"
(git mv
-бесплатный вариант.)
я столкнулся с этой проблемой в Git на Mac OS X 10.9. Я решил это следующим образом:
git rm -r --cached /path/to/directory
это этапы каталога для удаления в Git, но на самом деле не удаляет физические файлы (--cached
). Это также делает каталог, теперь с правильным случаем, отображаться в неотслеженных файлах.
так что вы можете сделать это:
mv /path/to/directory /path/to/DIRECTORY
git add -A /path/to/DIRECTORY
Git затем распознает, что вы переименовали файлы, и когда вы это сделаете git status
вы должны увидеть ряд renamed:
строки. Проверьте их и убедитесь, что они выглядят правильно, и если это так, вы можете зафиксировать изменения нормально.
это быстрое и безопасное решение для ошибок:
git mv -f path/to/foo/* path/to/FOO/
предупреждение! Всегда переименовывайте все файлы в переименованной папке (используйте /*
).
не переименовывайте отдельные файлы. Это приводит к ошибке, описанной в этой ответ.
если вы сначала хотите увидеть результат первым, используйте -n
:
git mv -f -n path/to/foo/* path/to/FOO/
после того, как вы сделали mv
:
- фиксация изменений
- оформить заказ на любой другой ревизия
- извлечь обратно.
теперь Git должен был переименовать папку как во внутренних файлах, так и в файловой системе.
вы не используете файловую систему с учетом регистра в OS X, если вы явно не выберете такую. На HFS+ can учитывайте регистр, но по умолчанию регистр не учитывается.
вот очень простое решение для всех gitfoo на этой странице.
- скопируйте файлы из вашего проекта вручную.
- git rm все файлы.
- git commit как обычно.
- добавить файлы вручную.
- git добавить все файлы.
- git commit как обычно.
- прибыль.
у меня была одна связанная проблема.
одна папка с именем " Pro "(создана первой) и anther " pro " (создана по ошибке). В Mac это то же самое, но по-разному в соответствии с git.
$ git config core.ignorecase false
конфигурация git переименовывает файлы в правую папку (спасибо), а также создает файлы-призраки в " pro " (нет!!). Я не мог добавить изменения файла призрака в трек, и я не мог проверить другие ветви, если не нести эти файлы со мной, и я также не мог сбросить его как-то.
вместо этого, я сделал
$ git rm -r --cached pro
$ git status // => pro files removed, new Pro files untracked
$ git add Pro
чтобы сделать его более безопасным, я сделал это в ветви функции, а затем я слился обратно в главную ветвь
для Проблемы с файлом-призраком, созданной, может ли любой гуру объяснить, как и почему? Спасибо заранее.
улучшение ответа Адама Димитрука (глупо, что так не позволяет мне комментировать его ответ), используя "git mv", автоматически разместит точно перемещенные файлы. Никакого тайника не требуется, и рискованного "git add-A" можно избежать:
old="abc"; new="ABC";
tmp="$old-renamed";
git mv "$old" "$tmp";
git commit -m "Renamed '$old' to '$tmp'.";
git mv "$tmp" "$new";
git commit --amend -m "Renamed '$old' to '$new'.";