Encontré una gran solución para extraer de la rama actual de todos los subdirectorios que tienen una carpeta .git, incluso si cada repositorio tiene una rama diferente. El comando es de una sola línea, lo suficientemente flexible como para modificarlo para diferentes comandos de git y puede tener un alias.
Simplemente copie y pegue lo siguiente:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
Desglosando:
find . -type d -maxdepth 2 -name .git
Busque todos los directorios (-tipo d) en el directorio actual (find.) Que tengan el nombre ".git" (-name .git), buscando un máximo de dos directorios de profundidad (2 en lugar de 1 porque estamos buscando el git dentro de la carpeta git repo).
-exec sh -c
Ejecute el siguiente comando de shell (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
Cambie el directorio al primer argumento (cd $ 0), luego cambie el directorio un nivel hacia arriba para dejar la carpeta .git (cd ..) luego haga git pull origin mientras especifica la rama ejecutando git rev-parse ... para la rama actual HEAD cometer.
{} \;
El "{}" es la ruta relativa de resultado que obtenemos del hallazgo inicial comando de . Los ; se utiliza para finalizar el comando.
Probado en MacOS 10.14.6 en zsh. Tal como está, funciona solo cuando las sucursales remotas y locales tienen el mismo nombre, AFAIK.
Puede modificar esto para obtener el estado. Espero que pueda agregar argumentos para hacer esto más flexible, pero aún no lo he intentado.
hg mercurial
.