Eu tenho um conjunto de repositórios classificados em diretórios com base em seus VCS (Git, Mercurial, SVN). Com o Subversion, eu era capaz de executar svn update *
no diretório pai e ele percorria cada diretório e atualizava cada repositório conforme o esperado. Esse não é o caso do Git ou do Mercurial.
Gostaria de chegar a um script que eu posso correr para fazer exatamente isso, percorrer diretórios e ou git pull
ou hg pull
em cada um. Eu simplesmente não tenho muita experiência com scripts bash.
Respostas:
fonte
Se você precisar que seja recursivo:
Isso irá descer para todos os diretórios abaixo do atual e executar um pull git nos subdiretórios que possuem um diretório .git (você pode limitá-lo
-maxdepth
).fonte
-execdir
é muito melhor aqui:find . -type d -name .git -execdir sh -c "pwd && git pull" \;
Se você possui o GNU Parallel http: // www.gnu.org/software/parallel/ instalado, você pode fazer isso:
Isso será executado em paralelo, portanto, se a conexão de rede de alguns servidores git estiver lenta, isso poderá acelerar as coisas.
Assista ao vídeo de introdução do GNU Parallel para saber mais: http://www.youtube.com/watch?v=OpaiGYxkSuQ
fonte
ls */
para ter certeza de que você está dando uma contribuição coerentecd
.Isso deve funcionar
fonte
-maxdepth 1
sinalizador, este é o único comando que encontrei em várias pesquisas e tentativas que executam um comando recursivamente (em todos os subdiretórios, não apenas nos diretórios de um nível abaixo).Para fazê-lo recursivo sem usar,
find
masforloop
fonte