Как правильно переименовать каталог в репозитории Git?
Как правильно переименовать каталог в репозитории Git? Я думаю, что это должно работать, чтобы скопировать каталог, который будет переименован в новый каталог с нужным именем, и удалить старый каталог, и git add
, git commit
а также push
все. Но так ли это лучше?
18 ответов
Основное переименование (или перемещение):
git mv <old name> <new name>
Чувствительное к регистру переименование - например. от casesensitive
в CaseSensitive
—Вы должны сделать два шага:
git mv casesensitive tmp
git mv tmp CaseSensitive
( Подробнее о чувствительности к регистру в Git…)
... с последующим коммитом и push будет самым простым способом переименовать каталог в git-репо.
Если вы получили эту ошибку: fatal: переименование 'foldername' не удалось: неверный аргумент
Попробуй это:
git mv foldername tempname && git mv tempname folderName
1. Измените имя папки со старой папки на новую
git mv oldfolder newfolder
2. Если новая папка уже есть в вашем хранилище и вы хотите переопределить ее и использовать:- force
git mv -f oldfolder newfolder
Не забудьте добавить изменения в индекс и зафиксировать их после переименования с помощью git mv.
3. Переименование foldername в folderName в нечувствительных к регистру файловых системах.
Простое переименование с помощью обычной команды mv (не git mv) не распознается как обмен файлами из git. Если вы попробуете это с помощью команды 'git mv', как показано в следующей строке
git mv foldername folderName
Если вы используете нечувствительную к регистру файловую систему, например, вы используете Mac и не настроили ее для учета регистра, вы увидите сообщение об ошибке, подобное следующему:
фатально: переименование "имя_фолдера" не удалось
И вот что вы можете сделать, чтобы заставить его работать:-
git mv foldername tempname && git mv tempname folderName
Это разделяет процесс переименования, сначала переименовывая папку в совершенно другое имя. После переименования в другое имя папки папка может быть наконец переименована в новое имя папки. После этих 'git mv's, опять же, не забудьте добавить и зафиксировать изменения. Хотя это, вероятно, не красивая техника, она прекрасно работает. Файловая система по-прежнему не распознает изменения букв, но git делает это из-за переименования в новое имя, и это все, что мы хотели:)
много правильных ответов, но когда я приземлился здесь, чтобы скопировать и вставить переименование папки с историей , я обнаружил, что это
git mv <old name> <new name>
переместит старую папку (саму) в новую папку
пока
git mv <old name>/ <new name>
(обратите внимание на «/») переместит вложенный контент из старой папки в новую папку .
обе команды не копировали историю вложенных файлов. В итоге я переименовал каждую вложенную папку по отдельности ✔
git mv <old name>/<nest-folder> <new name>/<nest-folder>
Вы можете переименовать каталог, используя файловую систему. Тогда вы можете сделать git rm <old directory>
а также git add <new directory>
( Страница справки). Тогда вы можете совершить и нажать.
Git обнаружит, что содержимое одинаково и что это просто операция переименования, и она появится как запись переименования в истории. Вы можете проверить, что это так, перед фиксацией, используя git status
Вот пример переименования каталога.
git mv src/dir1/ src/dir2/
Если вы получаете сообщение об ошибкеPermission Denied
, можешь попробовать
git mv src/dir1 src/temp/
git mv src/temp src/dir2
Из веб-приложения я думаю, что вы не можете, но вы можете переименовать все папки в Git Client, он переместит ваши файлы в новые переименованные папки, чем зафиксировать и отправить в удаленный репозиторий.
У меня была очень похожая проблема: мне приходилось переименовывать разные папки из прописных в строчные (как Abc -> abc), я переименовал все папки с фиктивным именем (например, 'abc___') и затем зафиксировал их в удаленном репозитории после что я переименовал все папки в исходное имя строчными буквами (например, abc), и он взял их!
Я попытался с помощью следующей команды, и это не сработало. я получалfatal: renaming '...' failed: Invalid argument
ошибка.
git mv oldName NewName
Затем решается следующим методом:
- Сначала я дублирую папку, которую хотел переименовать
- Затем я выполнил следующую команду, чтобы удалить папку
git rm oldName -r
- Переименовал дублирующуюся папку в
NewName
Простой трюк
Вы можете просто переименовать каталог с любым временным именем, а затем снова переименовать, и он будет работать.
Просто на заметку, принятый ответ не сработает, если вы не укажете полные пути к папкам. В противном случае вы получите фатальную ошибку: неверный источник.
Для переименования с учетом регистра git mv somefolder someFolder
работал у меня раньше, но по какой-то причине не стал сегодня. Поэтому в качестве обходного пути я создал новую папкуtemp
, переместили все содержимое somefolder
в temp
, удалено somefolder
совершил temp
, затем создал someFolder
, переместили все содержимое temp
в someFolder
, удалено temp
, совершил и подтолкнул someFolder
и это сработало! Отображается какsomeFolder
в git.
переименование в git затруднено, потому что индекс должен будет измениться, а объект дерева будет создан после коммита. У меня была проблема с переименованием шаблонов t в шаблоны T... Я решил проблему,
- копирование шаблонов в шаблоны в bash [cp -r Templates templates](шаблоны git mv Templates не будут работать)
- удаление шаблонов в bash [rm -r Templates](сначала убедитесь, что копирование прошло успешно)
- Удаление файла Templates из индекса [используйте «git ls-files -s», чтобы увидеть индекс, «git rm», вы можете использовать подстановочные знаки, такие как git rm Templates/*, продолжайте проверять индекс]
- Добавляем переименованные пути в индекс («git add -v.» и проверяем результат «git ls-files -s»
- Зафиксировать ["git commit -m "переименование..."
- Если у вас есть пульты git push <to where origin,
Я решил это в два этапа. Чтобы переименовать папку с помощью команды mv, вам нужны права для этого, если у вас нет прав, вы можете выполнить следующие действия. Предположим, вы хотите переименовать регистрочувствительный в регистрозависимый.
Шаг 1: Переименуйте папку (с учетом регистра) во что-то еще из проводника. например, Переименовать с учетом регистра в folder1 зафиксировать это изменение.
Шаг 2: Переименуйте эту недавно названную папку (folder1) в ожидаемое регистрозависимое имя (Casesensitive), например. Переименуйте folder1 в Casesensitive. Передайте это изменение.
К вашему сведению, я продолжал получать "FAILED \ Access denied" при использовании либо Tortoise, либо параметров командной строки для переименования. Он работает только из командной строки после того, как я закрыл окно проводника.
Я просто переименовал каталог, а затем добавил, зафиксировал и отправил на удаленный. Работает нормально
mv git add new_dir git commit -m "<>" git push
На https://github.com/ в их интерфейсе репозитория:
Зайдите в настройки -> Имя репозитория -> введите ваше новое имя в области.
git rm -rf --cached path/to/your/directories
Затем повторно добавьте и подтвердите.
Просто переименуйте папку. git - это "контент-трекер", поэтому хэши SHA1 такие же, и git знает, что вы переименовали его. Единственное, что меняется, это дерево-объект.
rm <directory>
git add .
git commit