Saya menggunakan perintah berikut untuk mencari tahu apakah ada cabang git lokalbranch-name
di repositori saya. Apakah ini benar? Apakah ada cara yang lebih baik?
Harap dicatat bahwa saya melakukan ini di dalam skrip. Untuk alasan ini saya ingin menggunakan perintah pipa ledeng jika memungkinkan.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Manoj Govindan
sumber
sumber
git branch | grep -w <branch-name>
. Oke, ini perintah porselen, tapi saya tidak bisa membayangkan penggunaan khusus ini akan berubah secara signifikan di masa depan untuk membuat cuplikan ini tidak dapat digunakan ...git rev-parse --verify <branch_name>
memverifikasi juga referensi lain seperti tag dan melakukan hash, jadi meskipun mungkin lebih cocok untuk apa yang Anda butuhkan itu akan mengembalikan positif palsu jika Anda hanya tertarik pada cabang.Jawaban:
Sejauh yang saya tahu, itulah cara terbaik untuk melakukannya dalam sebuah skrip. Saya tidak yakin ada banyak lagi yang perlu ditambahkan, tetapi mungkin ada satu jawaban yang hanya mengatakan "Perintah itu melakukan semua yang Anda inginkan" :)
Satu-satunya hal yang Anda perlu berhati-hati adalah bahwa nama cabang dapat memiliki karakter yang mengejutkan di dalamnya, sehingga Anda mungkin ingin mengutip
<branch-name>
.sumber
<branch-name>
. FWIW Saya menggunakan ini dalam skrip kain. Saya akan ingat untuk mengutip variabel.Ketika saya mencari 'git check apakah ada cabang' di mesin pencari, halaman ini adalah yang pertama saya lihat.
Saya mendapatkan apa yang saya inginkan, tetapi saya ingin memberikan jawaban yang diperbarui karena pos aslinya berasal dari 2011.
Ini pada dasarnya sama dengan jawaban yang diterima, tetapi Anda tidak perlu mengetikkan "referensi / kepala /"
sumber
git rev-parse --verify
hanya memberi tahu Anda jika objek seperti itu ada di repo (yaitu akan mengembalikan 0 untuk nilai apa pun<branch_name>
yang diterjemahkan ke objek jenis apa pun di repo). Itu tidak memberi tahu Anda apakah objek itu cabang atau tidak.Hampir sampai.
Biarkan saja
--verify
dan--quiet
dan Anda mendapatkan hash jika cabang ada atau tidak ada jika tidak.Tetapkan ke variabel dan periksa string kosong.
sumber
Saya pikir Anda bisa menggunakannya di
git show-branch
sini.Jadi, $? == 0 akan menunjukkan bahwa cabang ada dan Anda tidak perlu menggali saluran ref / head / sama sekali. Selama Anda tidak lolos
-r
ke show-branch, itu hanya akan beroperasi di cabang lokal.sumber
git show-branch
adalah perintah porselen . Seperti yang telah saya katakan dalam pertanyaan saya, saya lebih suka tidak menggunakan perintah porselen dalam skrip jika ada persamaan pipa ledeng. Lihat kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
ataugit show-branch refs/remotes/origin/[branch]
.Saya merekomendasikan
git show-ref --quiet refs/heads/$name
.--quiet
berarti tidak ada output, yang bagus karena Anda dapat dengan bersih memeriksa status keluar.refs/heads/$name
membatasi cabang lokal dan mencocokkan nama lengkap (jikadev
tidak cocokdevelop
)Penggunaan dalam skrip:
sumber
Untuk digunakan dalam skrip:
Ini akan keluar
0
jika dan hanya jika<branch-name>
ada sebagai cabang lokal.Contoh:
sumber
Pada skrip batch windows agak berbeda,
sumber
Sebut saja
git is_localbranch
(Anda perlu menambahkan alias di.gitconfig
).Pemakaian:
Sumber:
sumber
Hasil ulasan pada 'Edit yang Disarankan' untuk 'Pembaruan' pada pertanyaan awal adalah 'Seharusnya ditulis sebagai komentar atau jawaban', jadi saya mempostingnya di sini:
Cara lain yang diusulkan tidak hanya akan memverifikasi cabang tetapi referensi dengan nama tersebut @jhuynh .
Masalah dengan 'Pembaruan' pada pertanyaan awal menjelaskan:
Mari kita asumsikan dan periksa bahwa 'master.000' hanya sebuah tag, cabang lokal seperti itu tidak ada, grep mengembalikan satu entri yang merupakan tag. Masih rev-parse akan mengembalikan 0 jika referensi ada, bahkan jika cabang lokal seperti itu tidak ada. Ini adalah kecocokan yang salah, persis seperti yang disebutkan oleh @ paul-s
sumber
sumber
Ya, ada satu.
Lihat https://git-scm.com/docs/git-rev-parse di mana Anda dapat menemukan kumpulan argumen dan fungsinya.
sumber
Baik
git show-ref
ataugit rev-parse
bekerja pada kasus saya.Saya berakhir dengan ini
Anda dapat melakukannya juga dengan file skrip
sumber
Jika Anda bisa memasukkan grep.
sumber
grep
sebagai metacharacter.abc
akan cocok jika ada cabang yang dipanggilabcdef
.Untuk digunakan dalam skrip, saya merekomendasikan perintah berikut:
Perhatikan bahwa
<repo_url>
hanya bisa menjadi "." untuk menentukan repo lokal jika Anda berada di dalam struktur direktori, jalur ke repo lokal, atau alamat repo jarak jauh.Perintah mengembalikan 0 jika
<branch_name>
tidak ada 1 jika ada.sumber
kemudian periksa nilai kembali adalah 0 atau 1.
sumber