Ho trovato un'ottima soluzione per estrarre dal ramo corrente da tutte le sottodirectory che hanno una cartella .git, anche se ogni repository ha un ramo diverso estratto. Il comando è di una riga, abbastanza flessibile da modificare per diversi comandi git e può essere alias.
Basta copiare e incollare quanto segue:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
Abbattendolo:
find . -type d -maxdepth 2 -name .git
Trova tutte le directory (-type d) nella directory corrente (find.) Che hanno il nome ".git" (-name .git), cercando un massimo di due directory in profondità (2 anziché 1 perché stiamo cercando il git nella cartella git repo).
-exec sh -c
Esegui il seguente comando di shell (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
Cambia directory al primo argomento (cd $ 0), quindi cambia directory di un livello in alto per lasciare la cartella .git (cd ..) quindi esegui git pull origin specificando il ramo eseguendo git rev-parse ... per il ramo corrente HEAD commit.
{} \;
"{}" È il percorso relativo del risultato ottenuto dal comando find iniziale . Il ; viene utilizzato per terminare il comando.
Testato su MacOS 10.14.6 su zsh. Così com'è, funziona solo quando i rami remoti e locali hanno lo stesso nome, AFAIK.
Puoi modificarlo per ottenere lo stato. Mi aspetto che tu possa aggiungere argomenti per renderlo ulteriormente più flessibile, ma non ho ancora provato.
hg mercurial
.