Saya ingin tahu apakah ada cara untuk mengetahui cabang lokal mana yang melacak cabang jarak jauh di Git.
Saya menggunakan satu server jauh, yang bernama "asal".
Saya ingin tahu apakah ada cara untuk mengetahui cabang lokal mana yang melacak cabang jarak jauh di Git.
Saya menggunakan satu server jauh, yang bernama "asal".
Jawaban:
Menggunakan contoh salinan Puppet saya yang diperiksa dari repositori Git hulu di Github.com ...
$ git remote show origin
* remote origin
Fetch URL: git://github.com/reductivelabs/puppet.git
Push URL: git://github.com/reductivelabs/puppet.git
HEAD branch: master
Remote branches:
0.24.x tracked
0.25.x tracked
2.6.x tracked
master tracked
next tracked
primordial-ooze tracked
reins-on-a-horse tracked
testing tracked
testing-17-march tracked
testing-18-march tracked
testing-2-april tracked
testing-2-april-midday tracked
testing-20-march tracked
testing-21-march tracked
testing-24-march tracked
testing-26-march tracked
testing-29-march tracked
testing-31-march tracked
testing-5-april tracked
testing-9-april tracked
testing4268 tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Maka jika saya mengeksekusi berikut:
$ git checkout -b local_2.6 -t origin/2.6.x
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'
Dan akhirnya jalankan kembali git remote show origin
perintah itu kemudian saya akan melihat berikut ini di dekat bagian bawah:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
atau git 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:
git branch -avv
Hanya untuk cabang lokal:
git branch -lvv
Hanya untuk cabang jarak jauh:
git branch -rvv
menampilkan semua cabang serta nama cabang hulu.
git branch -lvv
show hanya cabang lokal dengan hulu mungkin berguna
git 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
.
% 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-ref
belajar %(upstream)
token Git 1.6.3 . Dengan versi Git yang lebih lama Anda harus mengekstrak informasi pelacakan dengan git config branch.<name>.remote
dan git config branch.<name>.merge
(mungkin menggunakan git for-each-ref
untuk membangun perintah untuk setiap nama cabang lokal).
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:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
... atau untuk formulir yang disingkat, tambahkan --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
Anda biasanya dapat menggunakan branch@{upstream}
sintaksis di mana pun komit diharapkan.
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:
#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}
echo "${remote:?}/${remoteBranch:?}"
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.
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 sebagai
[remote "Hub"]
url = ssh://xxxx/tmp/Hub
fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
remote = Hub
merge = refs/heads/develop
[branch "Dev1"]
remote = Test
merge = refs/heads/Dev1
[remote "Test"]
url = ssh://xxxx/tmp/gittesting/Dev1GIT
fetch = +refs/heads/*:refs/remotes/Test/*
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").
Coba git branch
dengan opsi :
-r
List or delete (if used with -d) the remote-tracking branches.
-a
List both remote-tracking branches and local branches.
Kalau tidak, periksa .git/config
.