Хотя я нашел похожий вопрос, я не нашел ответа на свою проблему
Когда я пытаюсь переименовать каталог из FOO в Foo через 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 <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), почему я не могу просто переименовать каталог?
macos
git
version-control
case-sensitive
oschrenk
источник
источник
git mv
.git mv foo Foo
если вы используете оболочку Cygwin.Ответы:
Вы находитесь в нечувствительной среде. Кроме того, добавление без
-A
не позаботится об удалении,mv
как Git это понимает. Предупреждение! Убедитесь, что никаких других изменений или неотслеживаемых файлов нет, когда вы это сделаете, иначе они будут зафиксированы как часть этого изменения!git stash -u
сначала сделай это, а потомgit stash pop
уже. Продолжение: Чтобы обойти это, сделайте следующее:Это протяженный способ изменения рабочего каталога, фиксации, а затем свертывания двух коммитов. Вы можете просто переместить файл в индексе, но для кого-то, кто новичок в git, это может быть недостаточно ясно, что происходит. Более короткая версия
Как предложено в одном из комментариев, вы также можете сделать интерактивную перебазировку (
git rebase -i HEAD~5
если 5 коммитов назад был введен неправильный случай), чтобы исправить случай и избежать появления неправильного случая вообще в истории. Вам следует быть осторожным, если вы сделаете это, поскольку хэши коммитов с этого момента будут другими, а другим придется перебазировать или заново объединить свою работу с недавним прошлым ветви.Это связано с исправлением имени файла: git не чувствителен к регистру?
источник
git add foo2
.-A
заботится о обоих. Наоборот для первого шага. Я добавлю предупреждение. Спасибо!git rebase -i HEAD~2
. Примечание. Чтобы упростить это, установите последнее сообщение в первом коммите и исправьте второе.Вы хотите установить опцию
core.ignorecase
в false, что заставит Git обращать внимание на регистр в файловых системах, которые изначально не поддерживают его. Чтобы включить в своем репо:Затем вы можете переименовать файл,
git mv
и он будет работать как положено.источник
I modified a file that doesn't exist
... хм,error: The following untracked working tree files would be overwritten by checkout:
но ... эти файлы не существуют.Я смог решить эту проблему, используя git 1.7.7, используя временное имя файла:
источник
(без
git mv
варианта)Я столкнулся с этой проблемой в Git на Mac OS X 10.9. Я решил это следующим образом:
git rm -r --cached /path/to/directory
Это устанавливает каталог для удаления в Git, но фактически не удаляет физические файлы (
--cached
). Это также делает каталог, теперь с правильным регистром, показанным в неотслеживаемых файлах.Так что вы можете сделать это:
Git распознает, что вы переименовали файлы, и когда вы это сделаете,
git status
вы увидите несколькоrenamed:
строк. Осмотрите их и убедитесь, что они выглядят правильно, и если это так, вы можете зафиксировать изменения в обычном режиме.источник
mv
команда не работает, чтобы фактически переименовать каталог; Я должен был переименовать его в Finder. Помимо этого это исправление работает отлично.Это быстрое и безопасное решение:
Предупреждение! Всегда переименовывайте все файлы в переименованной папке (используйте
/*
).Не переименовывайте отдельные файлы. Это приводит к ошибке, описанной в этом ответе .
Если вы сначала хотите увидеть результат, используйте
-n
:После того как вы сделали
mv
:Теперь Git должен был переименовать папку ОБА во внутренних файлах и в файловой системе.
источник
Принудительно с опцией -f:
источник
false
, это сработало для меняУ меня была одна связанная проблема.
Одна папка с именем «Pro» (созданная первой) и другая «pro» (созданная по ошибке). В Mac это одно и то же, но в зависимости от git.
Конфигурация git переименовывает файлы в нужную папку (спасибо), а также создает файлы-призраки в 'pro' (Нет !!). Я не мог добавить изменения файла-призрака на дорожку, и я не мог извлекать другие ветки, если только не носить эти файлы со мной, и я также не мог каким-то образом сбросить их.
Вместо этого я сделал
Чтобы сделать его более безопасным, я сделал это в отдельной ветке исправлений, а затем слился с основной веткой
Может ли какой-нибудь гуру объяснить, как и почему? Заранее спасибо.
источник
Вы не используете чувствительную к регистру файловую систему в OS X, если вы явно не выберете такую. HFS + может быть чувствительным к регистру, но по умолчанию регистр не учитывается.
источник
Вот действительно простое решение для всего gitfoo на этой странице.
источник
Улучшая ответ Адама Димитрука (глупо, что ТАК не позволяет мне комментировать его ответ), использование «git mv» автоматически ставит точно перемещенные файлы. Нет необходимости в скрытии, и можно избежать рискованного «git add -A»:
источник
Это отлично сработало для меня на Windows. Используется powershell со следующим:
mv .\Folder-With-Wrong-Casing .\temp
git add -A
git commit -m "renamed folder with wrong casing to temp"
mv .\temp .\Folder-with-Correct-Casing
git add -A
git commit --amend -m "Renamed to proper casing"
git push
Благодаря ответу Адама выше.
источник