Как правильно переименовать каталог в репозитории 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

Затем решается следующим методом:

  1. Сначала я дублирую папку, которую хотел переименовать
  2. Затем я выполнил следующую команду, чтобы удалить папку
      git rm oldName -r
  1. Переименовал дублирующуюся папку в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
Другие вопросы по тегам