Non dovresti usare git branch quando scrivi script. Git fornisce un'interfaccia "idraulica" progettata esplicitamente per l'uso nello scripting (molte implementazioni attuali e storiche dei normali comandi Git (aggiungi, checkout, merge, ecc.) Utilizzano questa stessa interfaccia).
Il comando idraulico che desideri è git for-each-ref :
git for-each-ref --shell \
--format='git log --oneline %(refname) ^origin/master' \
refs/heads/
Nota: non è necessario il remotes/
prefisso sul riferimento remoto a meno che non si disponga di altri riferimenti che fanno origin/master
corrispondere più posizioni nel percorso di ricerca del nome del riferimento (vedere "Un nome di riferimento simbolico ..." nella sezione Specifica delle revisioni di git-rev-parse (1) ). Se si sta cercando di evitare esplicitamente l'ambiguità, poi andare con il nome completo ref: refs/remotes/origin/master
.
Otterrai un output come questo:
git log --oneline 'refs/heads/master' ^origin/master
git log --oneline 'refs/heads/other' ^origin/master
git log --oneline 'refs/heads/pu' ^origin/master
Puoi reindirizzare questo output in sh .
Se non ti piace l'idea di generare il codice della shell, potresti rinunciare a un po 'di robustezza * e fare questo:
for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
git log --oneline "$branch" ^origin/master
done
* I nomi dei riferimenti dovrebbero essere al sicuro dalla suddivisione delle parole della shell (vedere git-check-ref-format (1) ). Personalmente mi atterrei alla versione precedente (codice shell generato); Sono più fiducioso che non possa accadere nulla di inappropriato.
Dato che hai specificato bash e supporta gli array, puoi mantenere la sicurezza ed evitare comunque di generare il coraggio del tuo ciclo:
branches=()
eval "$(git for-each-ref --shell --format='branches+=(%(refname))' refs/heads/)"
for branch in "${branches[@]}"; do
# …
done
Potresti fare qualcosa di simile $@
se non stai usando una shell che supporta gli array ( set --
per inizializzare e set -- "$@" %(refname)
aggiungere elementi).