for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
Eu tenho um conjunto de repositórios classificados em diretórios baseados em seus VCS (Git, Mercurial, SVN). Com o Subversion eu consegui executar svn update *
no diretório pai e ele passaria por cada diretório e atualizaria cada repositório conforme o esperado. Esse não é o caso do Git ou do Mercurial.
Eu gostaria de criar um script bash que eu possa executar para fazer exatamente isso, fazer um loop pelos diretórios e git pull
ou hg pull
em cada. Eu simplesmente não tenho muita experiência em scripts.
Se você precisar que ele seja recursivo:
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
Isto descerá em todos os diretórios sob o atual, e executará um git pull naqueles subdiretórios que possuem um diretório .git (você pode limitá-lo com -maxdepth
).
Se você tem o GNU Parallel http: // www.gnu.org/software/parallel/ instalado, você pode fazer isso:
cd ~/projects/git/; ls | parallel 'cd {} && git pull'
Isso funcionará em paralelo, portanto, se algumas das conexões de rede dos servidores git estiverem lentas, isso pode acelerar as coisas.
Assista ao vídeo de introdução do GNU Parallel para saber mais: link
Isso deve funcionar
find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
Para fazer recursivo sem usar find
, mas forloop
for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done