J'ai un ensemble de référentiels triés dans des répertoires basés sur leur VCS (Git, Mercurial, SVN). Avec Subversion, je pouvais m'exécuter svn update *
dans le répertoire parent, qui parcourait chaque répertoire et mettait à jour chaque référentiel comme prévu. Ce n'est pas le cas pour Git ou Mercurial.
Je voudrais créer un script bash que je peux exécuter pour faire exactement cela, en parcourant des répertoires et l'un git pull
ou l' autre hg pull
. Je n'ai tout simplement pas beaucoup d'expérience de script bash.
Réponses:
la source
Si vous en avez besoin pour être récursif:
Cela descendra dans tous les répertoires sous le répertoire actuel et effectuera un tirage git sur les sous-répertoires contenant un répertoire .git (vous pouvez le limiter
-maxdepth
).la source
-execdir
est beaucoup mieux ici:find . -type d -name .git -execdir sh -c "pwd && git pull" \;
Si vous avez installé GNU Parallel http: // www.gnu.org/software/parallel/, vous pouvez le faire:
Cela fonctionnera en parallèle, donc, si certaines connexions réseau des serveurs git sont lentes, cela peut accélérer les choses.
Regardez la vidéo d'introduction de GNU Parallel pour en savoir plus: http://www.youtube.com/watch?v=OpaiGYxkSuQ
la source
ls */
pour vous assurer que vous apportez une contribution cohérente àcd
.Cela devrait marcher
la source
-maxdepth 1
indicateur, c'est la seule commande que j'ai trouvée dans beaucoup de recherches et d'essais qui exécute une commande de manière récursive (dans tous les sous-répertoires, pas seulement les répertoires d'un niveau inférieur).Pour le faire récursif sans utiliser
find
maisforloop
la source