Мой проект struture
ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)
Как я могу рекурсивно обновлять субмодули? Я уже попробовал некоторые команды git (в корне ProjectA)
git submodule foreach git pull origin master
или
git submodule foreach --recursive git pull origin master
но не могу вытащить файлы Twig.
git
git-submodules
complez
источник
источник
Ответы:
Вы также, вероятно, захотите использовать опцию --init, которая будет инициализировать любые неинициализированные подмодули:
Примечание: в некоторых старых версиях Git , если вы используете эту
--init
опцию, уже инициализированные подмодули могут не обновляться. В этом случае вы также должны запустить команду без--init
опции.источник
--init
используется, не соответствует моему опыту работы с Git 2.2.2. Я вижу как субмодули верхнего уровня, так и вложенные, которые уже были инициализированы, когда я использую правильную фиксациюgit submodule update --init --recursive
, и я думаю, что утверждение о том, что вам нужно запускать команду с или без--init
, просто неверно. Если кто-либо не сможет доказать, что это такое поведение, или продемонстрировать, что оно изменилось между версиями и когда-то было правдой, я планирую полностью его отредактировать.Способ, которым я пользуюсь:
источник
git submodule foreach git pull --ff-only origin master
git submodule foreach --recursive 'git commit -a | :'
. Это:
делает цикл независимо от результата. См. Ссылку stackoverflow.com/questions/19728933/… .Так как может случиться, что ветки по умолчанию ваших подмодулей нет
master
(что часто случается в моем случае), вот как я автоматизирую полные обновления подмодулей Git:источник
Entering 'Core' fatal: ambiguous argument 'origin/HEAD': unknown revision or path not in the working tree.
гдеCore
находится подмодульВ недавнем Git (я использую v2.15.1), следующее рекурсивно объединит изменения подмодулей вверх по течению:
Вы можете добавить
--init
для инициализации любые неинициализированные подмодули и использовать их,--rebase
если хотите перебазировать вместо слияния.После этого вам необходимо зафиксировать изменения:
источник
git submodule update --remote my-dir/my-submodule
работает так же хорошо