* diperluas, yang dapat Anda lakukan adalah menggunakan sed alih-alih grep dan segera dapatkan nama cabang:
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
Dan versi yang menggunakan git symbolic-ref, seperti yang disarankan oleh Noufal Ibrahim
branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
Untuk menguraikan perluasan, (seperti yang sudah dilakukan marco), perluasan terjadi di gema, ketika Anda melakukan echo $test
dengan $test
berisi * master
lalu *
diperluas sesuai dengan aturan ekspansi normal. Untuk menekan yang satu ini harus mengutip variabel, seperti yang ditunjukkan oleh marco:echo "$test"
. Alternatifnya, jika Anda menghilangkan tanda bintang sebelum mengulanginya, semuanya akan baik-baik saja, mis. echo ${test:2}
hanya akan mengulang master
. Alternatifnya, Anda dapat menetapkannya lagi seperti yang sudah Anda usulkan:
branch=${test:2}
echo $branch
Ini akan mengulang master
, seperti yang Anda inginkan.
Saya akan menggunakan git-symbolic-ref
perintah di inti git. Jika Anda mengatakan git-symbolic-ref HEAD
, Anda akan mendapatkan nama cabang saat ini.
Memperluas jawaban Noufal Ibrahim, gunakan --short
bendera dengan git-symbolic-ref
, tidak perlu repot dengan sed
.
Saya telah menggunakan sesuatu seperti ini di pengait dan berfungsi dengan baik:
#!/bin/bash
branch=$(git symbolic-ref --short HEAD)
echo
echo "**** Running post-commit hook from branch $branch"
echo
Itu menghasilkan "**** Menjalankan post-commit hook dari master cabang"
Perhatikan bahwa git-symbolic-ref
hanya berfungsi jika Anda berada di repositori. Untungnya .git/HEAD
, sebagai sisa dari masa-masa awal Git, berisi referensi simbolis yang sama. Jika Anda ingin mendapatkan cabang aktif dari beberapa repositori git, tanpa melintasi direktori, Anda dapat menggunakan bash one-liner seperti ini:
for repo in */.git; do branch=$(cat $repo/HEAD); echo ${repo%/.git} : ${branch##*/}; done
Yang menghasilkan sesuatu seperti:
repo1 : master
repo2 : dev
repo3 : issue12
Jika Anda ingin melangkah lebih jauh, referensi lengkap terdapat di .git/HEAD
juga merupakan jalur relatif ke file yang berisi hash SHA-1 dari komit terakhir cabang.