Tengo un conjunto de repositorios ordenados en directorios basados en su VCS (Git, Mercurial, SVN). Con Subversion pude ejecutar svn update *
en el directorio principal y recorría cada directorio y actualizaba cada repositorio como se esperaba. Ese no es el caso de Git o Mercurial.
Me gustaría llegar a un script bash que no puedo correr a hacer exactamente eso, bucle a través de los directorios y, o bien git pull
o hg pull
en cada uno. Simplemente no tengo mucha experiencia en scripting bash.
Respuestas:
fuente
Si necesita que sea recursivo:
Esto descenderá a todos los directorios bajo el actual, y realizará un git pull en esos subdirectorios que tienen un directorio .git (puede limitarlo con
-maxdepth
).fuente
-execdir
es mucho mejor aquí:find . -type d -name .git -execdir sh -c "pwd && git pull" \;
Si tiene instalado GNU Parallel http: // www.gnu.org/software/parallel/, puede hacer esto:
Esto se ejecutará en paralelo, por lo que si algunas de las conexiones de red de los servidores git son lentas, esto puede acelerar las cosas.
Mire el video de introducción de GNU Parallel para obtener más información: http://www.youtube.com/watch?v=OpaiGYxkSuQ
fuente
ls */
para asegurarse de que está dando una entrada coherentecd
.Esto debería funcionar
fuente
-maxdepth 1
bandera, este es el único comando que he encontrado en muchas búsquedas e intentos que ejecuta un comando de forma recursiva (en todos los subdirectorios, no solo en los directorios un nivel por debajo).Para hacerlo recursivo sin usar
find
peroforloop
fuente