Вопрос по directory, rename, git – Как правильно переименовать каталог в репозитории Git?

458

Я думаю, что это должно работать, чтобы скопировать каталог, который будет переименован в новый каталог с нужным именем, иудалить старый каталог, а такжеgit add, git commit а такжеpush все. Но так ли это лучше?

Что касается Git, копирование и удаление - это то же самое, что и перемещение. Git запишет и (копировать + удалить) и (переместить) одинаково. Dietrich Epp

Ваш Ответ

7   ответов
813

git mv <old name> <new name>

Переименование с учетом регистра & # x2014; напр. отcasesensitive вCaseSensitive& # x2014; вы должны использовать два шага:

git mv casesensitive tmp
git mv tmp CaseSensitive

(Подробнее о чувствительности к регистру в Git & # x2026;)

& # x2026; с последующим коммитом и push - самый простой способ переименовать каталог в git-репо.

Сохраняет ли он весь журнал и статистику?
в моем случае, из gitbash, я пытался переименовать папку, которая не была частью git-репозитория, поэтому в этом случае просто вызов этого работающего mv & lt; old name & gt; & lt; новое имя & gt;
@ ViliusK, если вы имеете дело с каталогами, чувствительными к регистру, любым простым способом, который я обнаружил,git rm -rf --cached path/to/your/directories затем повторно добавить и зафиксировать
@ViliusK спасибо за трюк с учетом регистра;)
Но если вы хотите переименовать изcasesensitive вCaseSensitive, вы можете сделать это так:git mv casesensitive Temp а потомgit mv Temp CaseSensitive
3

я думаю, вы не можете, но вы можете переименовать все папки в Git Client, он переместит ваши файлы в новые переименованные папки, чем зафиксировать и отправить в удаленный репозиторий.

I had a very similar issue: I had to rename different folders from uppercase to lowercase (like Abc -> abc), I've renamed all the folders with a dummy name (like 'abc___') and than committed to remote repository, after that I renamed all the folders to the original name with the lowercase (like abc) and it took them!

79

foldername & # x2019; не удалось: неверный аргумент

Попробуй это:

git mv foldername tempname && git mv tempname folderName

Это сработало для меня на Mac.
Это работало для меня на Windows, используя Gitbash
Маркер "& amp; & amp;" не является допустимым разделителем операторов в этой версии. git версия 2.11.0.windows.
Это именно то, что мне нужно, чтобы изменить регистр в каталоге.
@Tim Hardy также может быть запущен как две отдельные команды,git mv foldername tempname а такжеgit mv tempname folderName, который должен работать на Windows.
9

используя файловую систему. Тогда вы можете сделатьgit rm <old directory> а такжеgit add <new directory> (Страница справки). Тогда вы можете совершить и нажать.

Git обнаружит, что содержимое одинаково и что это просто операция переименования, и он появится как запись переименования в истории. Вы можете проверить, что это так, перед фиксацией, используяgit status

Вы можете сохранить его, если используете флаг -follow.
@topper Нет, git mv это просто псевдоним для rm + add. Использование git mv - лучшее решение.
Две команды вместо одной, и нужно добавить флаг? Это лучше, чем git mv?
эй, но так я потеряю всю историю коммитов.
@topper Обратите внимание, что вам все равно придется использовать --follow для просмотра истории независимо от того, какой метод вы используете для перемещения файла.
-9

поэтому хэши SHA1 одинаковы, и git знает, что вы его переименовали. Единственное, что меняется, это дерево-объект.

rm <directory>
git add .
git commit
Это не всегда работает. Это точно не сработало для меня. как 20% файлов ...
-3
git rm -rf --cached path/to/your/directories

Это выполнит работу, но это нарушит историю Git. Принятый ответ более четко выполняет работу и не копирует в новые файлы
40

1. Change a folder's name from oldfolder to newfolder

2. If newfolder is already in your repository & you'd like to override it and use:- force

git mv -f oldfolder newfolder

Не забудьте добавить изменения в индекс & amp; передайте их после переименования с помощью git mv.

3. Renaming foldername to folderName on case insensitive file systems

Простое переименование с помощью обычной команды mv (не git mv) не будет распознано как обмен файлами из git. Если вы попробуете это с & # x2018; git mv & # x2019; команда, как в следующей строке

git mv foldername folderName

Если вы используете файловую систему без учета регистра, например, вы работаете на Mac, и вы не настроили его с учетом регистра, вы увидите сообщение об ошибке, подобное следующему:

fatal: renaming ‘foldername’ failed: Invalid argument

И вот что вы можете сделать, чтобы заставить его работать: -

git mv foldername tempname && git mv tempname folderName

Это разделяет процесс переименования, сначала переименовывая папку в совершенно другое имя. После переименования в другое имя папки папка может быть наконец переименована в новое имя папки. После этих git mv & s снова не забудьте добавить и зафиксировать изменения. Хотя это, вероятно, не красивая техника, она прекрасно работает. Файловая система по-прежнему не распознает изменение регистра букв, но git делает это из-за переименования его в новое имя, и это все, что мы хотели :)

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