J'ai un ensemble de référentiels triés dans des répertoires basés sur leur VCS (Git, Mercurial, SVN). Avec Subversion, j’ai pu exécuter svn update *
dans le répertoire parent. Il parcourait chaque répertoire et mettait à jour chaque référentiel comme prévu. Ce n'est pas le cas pour Git ou Mercurial.
J'aimerais créer un script bash que je peux exécuter pour faire exactement cela, en parcourant les répertoires et git pull
ou hg pull
dans chacun. Je n'ai tout simplement pas beaucoup d'expérience de script bash.
for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
Si vous en avez besoin pour être récursif:
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
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 avec -maxdepth
).
Si vous avez GNU Parallel http: // www.gnu.org/software/parallel/ installé, vous pouvez le faire:
cd ~/projects/git/; ls | parallel 'cd {} && git pull'
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 Parallèle pour en savoir plus: http://www.youtube.com/watch?v=OpaiGYxkSuQ
Cela devrait marcher
find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
Pour le faire récursif sans utiliser find
mais forloop
for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done