Подтвердить что ты не робот

Рекурсивный Git push/pull?

У меня есть репозиторий git, который содержит другие репозитории git. Существуют ли команды, которые рекурсивно нажимают и/или вытягивают не только мета-репозиторий, но и субрепозитории?

4b9b3361

Ответ 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.