У меня есть репозиторий git, который содержит другие репозитории git. Существуют ли команды, которые рекурсивно нажимают и/или вытягивают не только мета-репозиторий, но и субрепозитории?
Рекурсивный Git push/pull?
Ответ 1
если вы говорите о подмодулях, см. ответ кексов.
если вы говорите о какой-либо иерархии папок, содержащей git repos, вы можете проверить clustergit
, запрограммированный инструмент: https://github.com/mnagel/clustergit
Ответ 2
Я нахожусь в той же ситуации, когда хочу обновить свои репозитории llvm/clang и немного с помощью bash help я can 'git вытащить каждый из них следующим образом:
$> for dir in $(find . -name ".git"); do cd ${dir%/*}; git pull ; cd -; done
Это будет git pull 'все репозитории git, найденные в вашем текущем каталоге, и, вероятно, не будут работать, если они являются пустыми репозиториями.
Ответ 3
Не совсем git pull
, но закрыть:
git fetch --recurse-submodules
Из Git docs:
--recurse-submodules[=yes|on-demand|no]
Эта опция управляет тем, когда и при каких условиях должны быть получены новые комманды населенных подмодулей. Его можно использовать в качестве логической опции, чтобы полностью отключить рекурсию, если она установлена на no или для безоговорочной рекурсии во все заполненные подмодули, когда она установлена в yes, что является значением по умолчанию, когда эта опция используется без какого-либо значения. Используйте по требованию только для повторной обработки в заполненный подмодуль, когда суперпроект получает фиксацию, которая обновляет ссылку подмодулей на фиксацию, которая уже не находится в клоне локального подмодуля.
Ответ 4
Я только что написал script, чтобы выполнить рекурсивно на нескольких репозиториях git. Вы можете взять это отсюда:
https://github.com/DariuszOstolski/rgit
Идея точно такая же, как в clustergit, но реализация отличается.
Ответ 5
Мне понадобилось это некоторое время назад и сделал cli доступным через npm. https://github.com/kenglxn/gitr/blob/master/README.md
Просто выполните "npm install -g gitr", а затем вы можете сделать любую команду git рекурсивно, используя gitr.