Yanıtlar:
Kukla kopyamın örneğini kullanarak, Github.com'daki memba Git deposuna baktım ...
$ 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)
O zaman aşağıdakileri uygularsam:
$ 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'
Ve nihayet git remote show origin
komutu tekrar çalıştırın, sonra aşağıya doğru aşağıdakini göreceğim:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
veya git pull
uzak dallarda yapılan güncellemeler klonlanmış deponuzda izlenir. Yerel şubeler aynen öyledir, uzak şubelerin yerel şubeleri ve dolayısıyla uzak şubelere yapılan güncellemeler izlenecek ve uygun komut verildiğinde birleştirilecektir. Yerel şubeyi oluşturduğu şubeyi takip etmesi için yerel şubeyi yaparken açıkça '-t' seçeneğini ekliyorum. Yerel bir şubenin başka bir yerel şubeyi de takip edebileceğini unutmayın, bu nedenle uzak bir şube olmak zorunda değildir.
git remote show remote-name
bakın “izleme dalları” (uzaktan depolardan şube anlık). “Birlikte birleştirme” çizgileri, “yukarı akış dalı” yapılandırmasına sahip yerel dalları ifade eder ( git dalı veya git ödeme--track
/ -t
seçeneğiyle yapılan ve bu nedenle genellikle “izleme dalları” ile karıştırılır).
Tüm şubeler için:
git branch -avv
Sadece yerel şubeler için:
git branch -lvv
Yalnızca uzak dallar için:
git branch -rvv
tüm şubelerin yanı sıra akış yukarı dalın adını da gösterir.
git branch -lvv
gösterisini azaltmak için sadece yukarı yönlü yerel şubeler yararlı olabilir
git branch -vv
benim için çalışıyor ...
Jeremy Bouse , izleme bilgilerinin nasıl git remote show
görüntülendiğini gösterir . Sadece insan tüketimi için bilgi istiyorsanız bu yeterli olacaktır.
Bilgileri otomatik bir bağlamda (örneğin bir senaryo) kullanmayı planlıyorsanız, git for-each-ref
bunun yerine alt seviyeyi (“tesisat”) kullanmanız gerekir.
% 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
git for-each-ref
Öğrenilen %(upstream)
içinde belirteci Git 1.6.3 . Git'in önceki sürümlerinde, izleme bilgilerini git config branch.<name>.remote
ve ile çıkartmanız gerekecektir git config branch.<name>.merge
(muhtemelen git for-each-ref
her yerel dal adı için komutlar oluşturmak için).
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Belirli bir dal için kullanabilirsiniz git rev-parse
ile @{u}
veya @{upstream}
şube adı, örneğin üzerine soneki:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
... veya kısaltılmış form için --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
Genellikle bir branch@{upstream}
sözdiziminin beklendiği yerde kullanabilirsiniz .
git rev-parse --symbolic-full-name HEAD
vs. git rev-parse --symbolic-full-name HEAD@{u}
, teşekkürler!
git-tracks
Geçerli dal tarafından izlenen uzak dalı göstermek için aşağıdaki kabuk komut dosyasını (adlandırılmış ) kullanıyorum:
#!/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:?}"
Bu, belirtilenleri de kullanabilir git for-each-ref
, ancak doğrudan erişimi, geçerli dalın çıkışını filtrelemekten biraz daha basit buldum.
set -e
, ama genellikle açık denetime sadık kal. Ancak bu durumda, gerçekten daha iyi.
git version 1.9.4
. Echos hiçbir şey :(
.git/config
dosya ayrıca izleme şubesi bilgilerini de sağlayacaktır.
[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/*
Yerel şubelerin bir listesine etki eden bir döngü içindeki her bir yerel şube için (varsa) karşılık gelen uzak şubeyi bulmam gerekiyordu. Aşağıdakileri kullanarak sona erdi:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Bu, karşılık gelen uzak bir dalı ("someremote / somebranch") olmayan yerel dallar için hiçbir şey (boş bir dize) çıkarmaz.
git branch
Seçeneklerle deneyin :
-r
List or delete (if used with -d) the remote-tracking branches.
-a
List both remote-tracking branches and local branches.
Aksi takdirde, inceleyin .git/config
.