Переименовать подмодуль git - PullRequest
131 голосов
/ 24 декабря 2010

Есть ли какой-нибудь простой способ переименовать каталог подмодуля git (кроме как пройти весь процесс , удалив его и повторно добавив его с новым именем назначения).

И пока мы занимаемся этим, почему я просто не могу сделать следующее в родительском каталоге: git mv old-submodule-name new-submodule-name

Ответы [ 7 ]

187 голосов
/ 10 сентября 2013

Git1.8.5 (октябрь 2013 г.) должен упростить процесс .Просто выполните:

git mv A B

"git mv A B", когда перемещение подмодуля A научили перемещать его рабочее дерево и корректировать пути в .gitmodulesfile .


Подробнее в commit 0656781fadca1 :

В настоящее время использование «git mv» в подмодуле перемещаетрабочее дерево подмодуля в этом суперпроекте.Но настройка пути подмодуля в .gitmodules осталась нетронутой, что теперь несовместимо с рабочим деревом и заставляет команды git, основанные на правильных path -> name mapping (например, status и diff), вести себя странно.

Позвольте «git mv» помочь здесь, не только перемещая рабочее дерево подмодуля, но также обновляя настройку «submodule.<submodule name>.path» из файла .gitmodules и ставя оба.
Этого не происходит, когда нет .gitmodules файл найден и выдает предупреждение только тогда, когда в нем нет раздела для этого подмодуля.Это связано с тем, что пользователь может просто использовать обычные ссылки gitlinks без файла .gitmodules или уже обновил настройки пути вручную перед выполнением команды «git mv» (в этом случае предупреждение напоминает ему, что mv сделал бы это дляему).
Только когда .gitmodules найден и содержит конфликты слияния, команда mv не удастся и скажет пользователю разрешить конфликт перед повторной попыткой.


git 2.9(Июнь 2016 г.) улучшится git mv для подмодуля:

См. commit a127331 (19 апреля 2016 г.) на Stefan Beller (stefanbeller) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 9cb50a3 , 29 апреля 2016 г.)

mv: разрешить перемещение вложенных подмодулей

"git mv old new" не изменил путь к подмодулю, который находится в качестве подкаталога в каталоге old/. Подмодули

однако необходимо обновить их ссылкув каталог git, а также обновления для файла .gitmodules.

89 голосов
/ 04 апреля 2011

Я нашел следующий рабочий процесс работающим:

  • Обновление .gitmodules
  • mv oldpath newpath
  • git rm oldpath
  • git add newpath
  • git submodule sync

Примечание: этот подход не корректно обновляет индекс и .gitmodules в версиях GIT 2018 года.

9 голосов
/ 10 марта 2014

Я только что попробовал несколько из предложенных выше. Я бегу:

$ git --version
git version 1.8.4

Я обнаружил, что лучше всего де-инициализировать подмодуль, удалить каталог и создать новый подмодуль.

git submodule deinit <submodule name>

git rm <submodule folder name>

git submodule add <address to remote git repo> <new folder name>

По крайней мере, это работает для меня лучше всего. YMMV!

9 голосов
/ 06 мая 2013
$ mv submodule-oldpath submodule-newpath
$ git rm submodule-oldpath
$ git add submodule-newpath
$ git submodule sync

Это решение не работает для меня, потому что при использовании команды git add, подмодуль был включен в проект как простой каталог, а не как подмодуль.1004 *

$ mv submodule-oldpath ~/another-location
$ git rm submodule-oldpath
$ git submodule add submodule-repository-URL submodule-newpath

Источник: http://bcachet.github.io/development/2012/05/25/rename-git-submodule/

3 голосов
/ 28 февраля 2016

Переименовать его невозможно, поэтому сначала вы должны удалить его (deinit) и добавить его снова.

Итак, после его удаления:

git submodule deinit <path>
git rm --cached <path>

Вы также можете дважды проверить и удалить ссылки на него в:

  • .gitmodules
  • .git/config
  • удалить справочную папку из .git/modules/<name> (лучше всего сделать резервную копию), так как каждая папка имеет файл config, где хранится ссылка на ее worktree

затем внесите изменения в ваш репозиторий:

git commit -am 'Removing submodule.'

и дважды проверьте, не возникли ли у вас проблемы:

git submodule update
git submodule sync
git submodule status

так что теперь вы можете снова добавить подмодуль git:

git submodule add --name <custom_name> git@github.com:foo/bar.git <my/path>
3 голосов
/ 24 декабря 2010

Отредактируйте файл .gitmodules, чтобы переименовать подмодуль, а затем переименовать каталог подмодуля.

Я думаю, вам может понадобиться сделать git submodule sync после этого, но я не могу сейчас проверить.

2 голосов
/ 05 сентября 2018

MacOs : Когда я хочу использовать VonC-решение , чтобы изменить папку подмодуля Common на строчные:

git mv Common common

Я получаю

неустранимо: переименование в Common не удалось: неверный аргумент

Решение - используйте какое-нибудь временное имя папки и переместите дважды:

git mv Common commontemp
git mv commontemp common

Вот и все:)

...