Jadi apakah ini berarti Anda dapat melacak semua cabang terpencil di boneka meskipun Anda memiliki beberapa cabang lokal. Apa artinya banyak tanda "terlacak" yang Anda lihat di hasil perintah? "dilacak" oleh cabang mana?
PJ.
Cabang-cabang jarak jauh dilacak sehingga jika Anda melakukan git fetchatau git pullmemperbarui cabang-cabang jarak jauh akan dilacak dalam repositori yang dikloning. Cabang lokal hanya itu, cabang lokal dari cabang jarak jauh dan dengan demikian pembaruan ke cabang jarak jauh akan dilacak dan digabungkan ketika perintah yang tepat untuk melakukannya diberikan. Saya secara eksplisit menyertakan opsi '-t' saat membuat cabang lokal untuk memastikannya melacak cabang dari mana asalnya. Ingat cabang lokal juga dapat melacak cabang lokal lainnya sehingga tidak harus menjadi cabang jarak jauh.
Jeremy Bouse
5
@ PJ: Istilah "track" memiliki dua arti berbeda di Git. Garis "dilacak" git remote show remote-namemengacu pada "pelacakan cabang" (snapshot cabang dari repositori jarak jauh). Baris "penggabungan dengan" merujuk ke cabang lokal yang memiliki konfigurasi "cabang hulu" (dibuat dengan opsi --track/ git branch atau git checkout dan karenanya sering bingung dengan "tracking branch "). -t
Chris Johnsen
" cabang pelacakan jarak jauh " adalah entri glosari terkini untuk "cabang pelacakan" yang disebutkan di atas. Doc telah diperbarui di 8b3f3f84 .
Sejauh ini, inilah jawaban yang paling sederhana dan paling lengkap!
6
Pada git versi 1.7.7.5 ini menunjukkan kepada saya cabang lokal dan sha-1 menunjuk ke sana, tetapi tidak menunjukkan cabang jarak jauh yang dilacak ...
mpontillo
Bekerja untuk saya di git versi 1.7.4.1 'v' kedua diperlukan untuk memperlihatkan cabang pelacakan jarak jauh.
Peter Johnson
4
untuk mengurangi output git branch -lvvshow hanya cabang lokal dengan hulu mungkin berguna
Jika Anda berencana untuk menggunakan informasi dalam konteks otomatis (misalnya skrip), Anda harus menggunakan level bawah ("plumbing") git for-each-ref.
% git remote show origin
* remote origin
⋮
Local branches configured for 'git pull':
master merges with remote master
pu merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu
The git for-each-refbelajar %(upstream)token Git 1.6.3 . Dengan versi Git yang lebih lama Anda harus mengekstrak informasi pelacakan dengan git config branch.<name>.remotedan git config branch.<name>.merge(mungkin menggunakan git for-each-refuntuk membangun perintah untuk setiap nama cabang lokal).
Output jawaban Anda jauh lebih ringkas dan lebih mudah diikuti, sehingga Anda mendapatkan suara yang lebih baik :)
CubanX
Untuk membuatnya kurang ringkas, tetapi berikan cara yang bagus untuk memeriksa secara visual bahwa nama jarak jauh sama dengan nama cabang lokal, git gotcha umum: dalam bashgit for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
hobs
19
Untuk cabang tertentu, Anda dapat menggunakan git rev-parsedengan @{u}atau @{upstream}akhiran pada nama cabang, misalnya:
+1 Jawaban Anda memberi saya persis apa yang saya butuhkan: git rev-parse --symbolic-full-name HEADvs. git rev-parse --symbolic-full-name HEAD@{u}, terima kasih!
Tino
10
Saya menggunakan skrip shell berikut (bernama git-tracks) untuk menampilkan cabang jauh yang dilacak oleh cabang saat ini:
Ini juga bisa menggunakan yang disebutkan git for-each-ref, tetapi saya menemukan akses langsung agak lebih sederhana daripada memfilter output untuk cabang saat ini.
Anda dapat mempertimbangkan untuk menggunakan "set -e" di bagian atas skrip. Itu akan memungkinkan Anda untuk menghapus semua contoh "|| keluar $?" sambil mempertahankan perilaku gagal-awal yang sama.
John Whitley
@ JohnWhitley: Terima kasih, saya sudah mengedit jawaban saya. Saya tahu set -e, tetapi biasanya menempel pada pemeriksaan eksplisit. Tetapi dalam kasus ini, ini benar-benar lebih baik.
Ingo Karkat
Tidak bekerja untukku git version 1.9.4. Echos nothing :(
Ain
8
.git/config File juga akan memberikan info cabang pelacakan sebagai
Saya perlu menemukan cabang jarak jauh yang sesuai (jika ada) untuk setiap cabang lokal dalam satu lingkaran yang bekerja pada daftar cabang lokal. Saya akhirnya menggunakan yang berikut ini:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Ini tidak akan menghasilkan apa-apa (string kosong) untuk cabang lokal yang tidak memiliki cabang jarak jauh yang sesuai ("someremote / somebranch").
Jawaban:
Menggunakan contoh salinan Puppet saya yang diperiksa dari repositori Git hulu di Github.com ...
Maka jika saya mengeksekusi berikut:
Dan akhirnya jalankan kembali
git remote show origin
perintah itu kemudian saya akan melihat berikut ini di dekat bagian bawah:sumber
git fetch
ataugit pull
memperbarui cabang-cabang jarak jauh akan dilacak dalam repositori yang dikloning. Cabang lokal hanya itu, cabang lokal dari cabang jarak jauh dan dengan demikian pembaruan ke cabang jarak jauh akan dilacak dan digabungkan ketika perintah yang tepat untuk melakukannya diberikan. Saya secara eksplisit menyertakan opsi '-t' saat membuat cabang lokal untuk memastikannya melacak cabang dari mana asalnya. Ingat cabang lokal juga dapat melacak cabang lokal lainnya sehingga tidak harus menjadi cabang jarak jauh.git remote show remote-name
mengacu pada "pelacakan cabang" (snapshot cabang dari repositori jarak jauh). Baris "penggabungan dengan" merujuk ke cabang lokal yang memiliki konfigurasi "cabang hulu" (dibuat dengan opsi--track
/ git branch atau git checkout dan karenanya sering bingung dengan "tracking branch ").-t
Untuk semua cabang:
Hanya untuk cabang lokal:
Hanya untuk cabang jarak jauh:
menampilkan semua cabang serta nama cabang hulu.
sumber
git branch -lvv
show hanya cabang lokal dengan hulu mungkin bergunagit branch -vv
bekerja untuk saya ...Jeremy Bouse menggambarkan cara
git remote show
menampilkan informasi pelacakan . Itu harus cukup jika Anda hanya ingin informasi untuk konsumsi manusia.Jika Anda berencana untuk menggunakan informasi dalam konteks otomatis (misalnya skrip), Anda harus menggunakan level bawah ("plumbing")
git for-each-ref
.The
git for-each-ref
belajar%(upstream)
token Git 1.6.3 . Dengan versi Git yang lebih lama Anda harus mengekstrak informasi pelacakan dengangit config branch.<name>.remote
dangit config branch.<name>.merge
(mungkin menggunakangit for-each-ref
untuk membangun perintah untuk setiap nama cabang lokal).sumber
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Untuk cabang tertentu, Anda dapat menggunakan
git rev-parse
dengan@{u}
atau@{upstream}
akhiran pada nama cabang, misalnya:... atau untuk formulir yang disingkat, tambahkan
--abbrev-ref
Anda biasanya dapat menggunakan
branch@{upstream}
sintaksis di mana pun komit diharapkan.sumber
git rev-parse --symbolic-full-name HEAD
vs.git rev-parse --symbolic-full-name HEAD@{u}
, terima kasih!Saya menggunakan skrip shell berikut (bernama
git-tracks
) untuk menampilkan cabang jauh yang dilacak oleh cabang saat ini:Ini juga bisa menggunakan yang disebutkan
git for-each-ref
, tetapi saya menemukan akses langsung agak lebih sederhana daripada memfilter output untuk cabang saat ini.sumber
set -e
, tetapi biasanya menempel pada pemeriksaan eksplisit. Tetapi dalam kasus ini, ini benar-benar lebih baik.git version 1.9.4
. Echos nothing :(.git/config
File juga akan memberikan info cabang pelacakan sebagaisumber
menunjukkan dengan tepat apa yang Anda minta. Ini menunjukkan cabang lokal bersama dengan cabang jarak jauh yang sesuai yang mereka lacak.
sumber
Tambahkan rune ini ke
[alias]
bagian file .gitconfig Anda:sumber
Saya perlu menemukan cabang jarak jauh yang sesuai (jika ada) untuk setiap cabang lokal dalam satu lingkaran yang bekerja pada daftar cabang lokal. Saya akhirnya menggunakan yang berikut ini:
Ini tidak akan menghasilkan apa-apa (string kosong) untuk cabang lokal yang tidak memiliki cabang jarak jauh yang sesuai ("someremote / somebranch").
sumber
Coba
git branch
dengan opsi :Kalau tidak, periksa
.git/config
.sumber