GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan nama cabang git saat ini menjadi variabel dalam skrip Shell?

* 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.


Linux
  1. Bagaimana Cara Mendapatkan Nama Distribusi Dan Nomor Versi Dalam Script Shell Sederhana?

  2. Bagaimana Cara Mendapatkan Alamat Ip Eksternal Dalam Script Shell?

  3. Bagaimana Cara Melewati Argumen Baris Perintah Menjadi Skrip Shell?

  1. Bagaimana cara menyimpan perintah dalam variabel dalam skrip Shell?

  2. Bagaimana cara mendapatkan nama pengguna di Makefile?

  3. Bagaimana cara mendapatkan PYTHONPATH di shell?

  1. Bagaimana cara mendapatkan kode keluar dari proses pemijahan di skrip Shell yang diharapkan?

  2. Bagaimana cara mendapatkan sistem operasi saat ini di MSBuild?

  3. Bagaimana saya bisa mendapatkan nama distribusi dan nomor versi dalam skrip shell sederhana?