Могу ли я сделать "глубокую копию" репозитория git с подмодулями?
Легко клонировать весь проект плюс все его подмодули:
git clone --recursive [email protected]:homer/powerplant.git
Однако, как мне создать клон, у которого все эти подмодули заменены начальниками отдельных субрепозиториев? Предпочтительно таким образом, чтобы это можно было повторить легко, как только что-то изменилось. Цель должна быть "плоской" версией только для чтения того же общего кода. Не должно быть необходимости слияния.
Если это возможно, это решит мои проблемы с Launchpad, где bzr
может импортировать только репозитории без подмодулей.
Ответы
Ответ 1
Если вы хотите начать с файлов подмодулей, но не как git repos, просто выполните следующие действия:
- рекурсивно клонировать
git clone --recursive [email protected]:homer/powerplant.git
(безумное имя репо btw)
- затем перерегистрируйте подмодуль с
git config --remove-section submodule.name
Вы получите то, что хотите, файлы подмодулей в рабочем дереве, но подмодули не инициализируются как таковые.
Вы могли бы использовать самую новую команду git submodule deinit
, но она также удаляет файлы подмодуля из рабочего дерева.
Ответ 2
Вы не можете сделать это напрямую, поскольку подмодули никогда не ссылаются на HEAD
. Это функция Git, которая предотвращает нежелательное обновление в зависимостях, поэтому субмодули ссылаются суперпроектом на фиксированный SHA1, который можно изменить, совершив (в суперпроекте) новые.
Обновление подмодулей до последней редакции после клонирования является простым: запустите следующие команды в суперпроекте.
git submodule foreach git merge origin/master
git commit -am "updated all submodules to origin/master"
ИЗМЕНИТЬ
Похоже, вы хотите проверить подмодули после клона, команда
git submodule update --init --recursive