Anda sebaiknya tidak menggunakan git branch saat menulis skrip. Git menyediakan antarmuka "pipa ledeng" yang secara eksplisit dirancang untuk digunakan dalam skrip (banyak implementasi saat ini dan historis dari perintah Git normal (tambahkan, checkout, gabung, dll.) Menggunakan antarmuka yang sama ini).
Perintah pemipaan yang Anda inginkan adalah git for-each-ref :
git for-each-ref --shell \
--format='git log --oneline %(refname) ^origin/master' \
refs/heads/
Catatan: Anda tidak memerlukan remotes/
prefiks pada referensi jarak jauh kecuali Anda memiliki referensi lain yang menyebabkan origin/master
kecocokan beberapa tempat di jalur pencarian nama ref (lihat “Nama referensi simbolik.…” Di bagian Revisi Menentukan dari git-rev-parse (1) ). Jika Anda mencoba untuk secara eksplisit menghindari ambiguitas, kemudian pergi dengan nama ref penuh: refs/remotes/origin/master
.
Anda akan mendapatkan hasil seperti ini:
git log --oneline 'refs/heads/master' ^origin/master
git log --oneline 'refs/heads/other' ^origin/master
git log --oneline 'refs/heads/pu' ^origin/master
Anda dapat menyalurkan output ini ke sh .
Jika Anda tidak menyukai ide untuk membuat kode shell, Anda dapat melepaskan sedikit ketahanan * dan melakukan ini:
for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
git log --oneline "$branch" ^origin/master
done
* Nama referensi harus aman dari pemisahan kata shell (lihat git-check-ref-format (1) ). Secara pribadi saya akan tetap menggunakan versi sebelumnya (kode shell yang dihasilkan); Saya lebih yakin bahwa tidak ada yang tidak pantas dapat terjadi dengannya.
Karena Anda menentukan bash dan mendukung array, Anda dapat menjaga keamanan dan tetap menghindari menghasilkan nyali dari loop Anda:
branches=()
eval "$(git for-each-ref --shell --format='branches+=(%(refname))' refs/heads/)"
for branch in "${branches[@]}"; do
# …
done
Anda bisa melakukan hal serupa $@
jika Anda tidak menggunakan shell yang mendukung array ( set --
untuk menginisialisasi dan set -- "$@" %(refname)
menambahkan elemen).