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

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

5 ответов


Если вы говорите о подмодулях, см. ответ cupcakes.

Если вы говорите о некоторой иерархии папок, содержащей репозитории git, вы можете проверить clustergit, инструмент, который я запрограммировал:https://github.com/mnagel/clustergit


Я нахожусь в той же ситуации, когда я хочу обновить свои репозитории llvm/clang, и с помощью bash я могу "вытащить" каждый из них так:

$> for dir in $(find . -name ".git"); do cd ${dir%/*}; git pull ; cd -; done

Это будет "git pull" все репозитории git, найденные в вашем текущем каталоге, и, вероятно, не будут работать, если они являются голыми репозиториями.


не совсем git pull, но близко:

git fetch --recurse-submodules

С git docs:

--recurse-submodules[=yes|on-demand|no]

эта опция управляет, если и при каких условиях должны быть получены новые коммиты заполненных подмодулей. Его можно использовать в качестве логического параметра для полного отключения рекурсии при значении нет или безусловной рекурсии во все заполненные подмодули при значении да, что является значением по умолчанию, когда этот параметр используется без какого-либо значения. Использовать on-demand для рекурсии только в заполненный подмодуль, когда суперпроект извлекает фиксацию, которая обновляет ссылку подмодуля на фиксацию, которая еще не находится в локальном клоне подмодуля.


Я только что написал скрипт для рекурсивного выполнения в нескольких репозиториях git. Вы можете захватить его отсюда:

https://github.com/DariuszOstolski/rgit

идея точно такая же, как в clustergit, но реализация отличается.


Мне это было нужно некоторое время назад и сделало cli доступным через npm. https://github.com/kenglxn/gitr/blob/master/README.md

просто сделайте "npm install-g gitr", а затем вы можете сделать любую команду git рекурсивно с помощью gitr.