Переименовать в Git подмодуля



есть ли простой способ переименовать каталог подмодулей git (кроме прохождения всего движения удаление это и повторное добавление его с новым именем назначения).



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

728   7  

7 ответов:

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

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

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

Git1.8. 5 (октябрь 2013) должен упростить процесс. Просто сделайте:

git mv A B

"git mv A B", при движении подмодуль A был научен переместить его рабочее дерево и настроить пути в .gitmodules file.


Смотрите больше в commit 0656781fadca1:

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

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


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

посмотреть совершить a127331 (19 Apr 2016) by Стефан Беллер (stefanbeller).
(слитый Junio C Hamano--gitster-- на commit 9cb50a3, 29 апр 2016)

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

"git mv old new " не отрегулировал путь для a подмодуль, который живет как подкаталог внутри правильно.

однако подмодули должны обновить свою ссылку на каталог git как а также обновления для .

$ mv submodule-oldpath submodule-newpath
$ git rm submodule-oldpath
$ git add submodule-newpath
$ git submodule sync

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

правильное решение:

$ 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/

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

$ 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>

по крайней мере это работало для меня лучший. МММ!

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

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

переименовать его невозможно, поэтому сначала его нужно удалить (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 submodule add --name <custom_name> [email protected]:foo/bar.git <my/path>

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

git mv Common common

Я

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

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

git mv Common commontemp
git mv commontemp common

вот и все :)

Comments

    Ничего не найдено.