web-dev-qa-db-fra.com

Git récursif Push/pull?

J'ai un référentiel Git qui contient d'autres référentiels Git. Existe-t-il des commandes qui poussent et/ou tirent de manière récursive non seulement pour le méta-référentiel mais également pour les sous-référentiels?

20
David Y. Stephenson

si vous parlez de sous-modules, voir la réponse de cupcakes.

si vous parlez d'une hiérarchie de dossiers contenant des dépôts git, vous pouvez récupérer clustergit, un outil que j'ai programmé: https://github.com/mnagel/clustergit

8
mnagel

Je me trouve dans la même situation chaque fois que je veux mettre à jour mes référentiels llvm/clang et avec un peu d'aide bash, je peux 'tirer chacun' comme ça:

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

Cela "git tirera" tous les dépôts git trouvés dans votre répertoire actuel, et ne fonctionnera probablement pas s’il s’agit de dépôts nus. 

10
vguerra

Pas tout à fait git pull, mais proche:

git fetch --recurse-submodules

De les documents Git :

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

Cette option détermine également si et dans quelles conditions les nouveaux commits des sous-modules remplis doivent être récupérés. Il peut être utilisé comme une option booléenne pour désactiver complètement la récursion lorsqu'il est défini sur Non ou pour effectuer une récidive inconditionnelle dans tous les sous-modules remplis lorsqu'il est défini sur Oui, valeur par défaut lorsque cette option est utilisée sans aucune valeur. Utilisez à la demande pour ré-initier uniquement dans un sous-module rempli lorsque le superprojet récupère un commit qui met à jour la référence du sous-module à un commit qui ne figure pas déjà dans le clone de sous-module local.

9
user456814

Je viens d'écrire un script à exécuter de manière récursive sur plusieurs référentiels git. Vous pouvez le récupérer d'ici:

https://github.com/DariuszOstolski/rgit

L'idée est exactement la même que dans clustergit mais la mise en œuvre diffère.

1
Dariusz Ostolski

J'avais besoin de cela il y a quelque temps et j'ai mis un cli à disposition via NPM. https://github.com/kenglxn/gitr/blob/master/README.md

Il suffit de faire "npm install -g gitr" et vous pouvez ensuite exécuter n'importe quelle commande git de manière récursive en utilisant gitr.

0
kenglxn