Soru Hangi yerel şubenin Git'te hangi uzak şubeyi izlediğini nasıl anlayabiliriz?


Hangi yerel şubenin Git'teki hangi uzak şubeyi izlediğini anlamanın bir yolu olup olmadığını bilmek istiyorum.

"Origin" adlı bir uzak sunucu kullanıyorum.


231
2017-08-27 01:04


Menşei


Yanlış ise beni düzeltin, 'varsayılan olarak sunucu yerine varsayılan olarak adlandırılan uzak bir dal değil mi? - Chris Halcrow


Cevaplar:


Kukla kopyasımın örneğini kullanarak Github.com'daki yukarı doğru Git deposundan kontrol ettim ...

$ 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)

Sonra aşağıdakileri yürütürsem:

$ 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 sonunda tekrar çalıştırın git remote show origin Komut tekrar aşağıdan aşağıya doğru aşağıya doğru bakacağım:

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master

197
2017-08-27 03:03



Yani bu, birkaç yerel şubeye sahip olmanıza rağmen kukladaki tüm uzak şubeleri takip edebileceğiniz anlamına geliyor. Komuta sonucunda gördüğünüz birçok "izlenen" işaret nedir? Yerel şube hangi "izlenen"? - PJ.
Uzak şubeler izlenir. git fetch veya git pull uzak şubelere yapılan güncellemeler klonlanmış depoda izlenecektir. Yerel şubeler, uzak şubelerin yerel şubeleridir ve böylelikle, uygun şubeler verildiğinde, uzak şubelere yapılan güncellemeler takip edilecek ve birleştirilecektir. Yerel şubeyi, oluşturulduğu şubeyi izlediğinden emin olmak için '-t' seçeneğini açıkça dahil ediyorum. Yerel bir şubenin başka bir yerel şubeyi de izleyebildiğini unutmayın, bu nedenle uzak bir şube olmak zorunda değildir. - Jeremy Bouse
@PJ: “track” teriminin Git'de iki farklı anlamı vardır. "İzlenen" satırları git remote show remote-namebakın “İzleme şubeleri” (uzak depolardan şubelerin anlık görüntüleri). "İle birleştirilen" satırları, bir “Upstream dalı” konfigürasyon (ile yapılmış --track/-t seçeneği git dalı veya git ödeme ve genellikle “izleme dalları” ile karıştırılır. - Chris Johnsen
"uzaktan izleme dalı"yukarıda belirtilen" izleme dalları "için güncel sözlük girişi. Doküman güncellendi 8b3f3f84. - ento


Tüm şubeler için:

git branch -avv

Sadece yerel şubeler için:

git branch -lvv

Yalnızca uzak şubeler için:

git branch -rvv

Tüm şubelerin yanı sıra yukarı akış şubesinin adını gösterir.


122
2018-02-14 16:02



Bu, en basit ve en eksiksiz cevaptır!
Git sürüm 1.7.7.5'te bu bana yerel şubeyi ve sha-1'i gösteriyor, ancak izlenen uzak dalı göstermiyor ... - mpontillo
Git sürüm 1.7.4.1 üzerinde çalışmam için ikinci 'v' uzaktan izleme dalını göstermek için gereklidir. - Peter Johnson
çıkışı azaltmak git branch -lvv sadece yerel şubeleri yukarı yönde göstermek faydalı olabilir - A B
^git branch -vv benim için çalışıyor... - notacouch


Jeremy Bouse gösterir Nasıl git remote show izleme bilgilerini görüntüler. Sadece insan tüketimi için bilgi istiyorsanız, bu yeterli olmalıdır.

Bilgileri otomatik bir bağlamda kullanmayı planlıyorsanız (ör. Bir komut dosyası), alt düzey (“sıhhi tesisat”) kullanmalısınız. git for-each-ref yerine.

% 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 öğrendim %(upstream) belirtmek Git 1.6.3. Git'in önceki sürümleriyle izleme bilgilerini git config branch.<name>.remote ve git config branch.<name>.merge (muhtemelen kullanarak git for-each-ref Her yerel şube adı için komutlar oluşturmak için).


52
2017-08-27 03:18



Cevaplarınızın çıktısı çok daha özlü ve takip edilmesi daha kolay, bu yüzden oylamayı kazanın :) - CubanX
Bunu daha az özlü hale getirmek için, ancak uzaktaki isimlerin yerel şube isimleriyle aynı olduğunu kontrol etmek için iyi bir yol sağlayın. git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n' - hobs


Belirli bir dal için kullanabilirsiniz git rev-parse ile @{u} veya @{upstream} şube adına sonek, ör .:

$  git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master

... veya kısaltılmış formu eklemek için --abbrev-ref

$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master

Genellikle kullanabilirsiniz branch@{upstream} bir taahhüt beklenen her yerde sözdizimi.


18
2018-05-01 09:18



+1 Cevabınız bana tam olarak ne istediğimi verdi: git rev-parse --symbolic-full-name HEAD vs. git rev-parse --symbolic-full-name HEAD@{u}, Teşekkürler! - Tino


Aşağıdaki kabuk betiğini kullanıyorum (adlandırılmış git-tracksMevcut şube tarafından izlenen uzak şube göstermek için):

#!/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 da belirtilen sözü kullanabilir git for-each-refAncak, doğrudan erişim, mevcut şube için çıktıyı filtrelemekten biraz daha basit buldum.


10
2018-01-21 14:26



Komut dosyasının en üstünde "set -e" kullanmayı düşünebilirsiniz. Bu, "|| $ exit" in tüm örneklerini kaldırmanıza izin verecek? aynı başarısızlık erken davranışını korurken. - John Whitley
@JohnWhitley: Teşekkürler, cevabımı düzenledim. biliyorum set -eama genellikle açık kontrole sadık kalıyorlar. Ama bu durumda, gerçekten daha iyi. - Ingo Karkat
Benim için çalışmıyor git version 1.9.4. Echos hiçbir şey :( - Ain


.git/config dosya ayrıca izleme şube bilgilerini 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/*

8
2017-10-11 12:59





git branch -vv

tam olarak ne istediğini gösterir. Yerel şubeleri, izledikleri ilgili uzak şube ile birlikte gösterir.


5
2018-05-07 07:50





Bu runleri [alias] .gitconfig dosyanızın bölümü:

show-tracking = !sh -c 'git ls-remote . |grep `git log -1 --grep="git-svn-id" --format=%H`|perl -pe "s/[[:alnum:]]+[[:space:]]//"'

2
2018-03-07 16:48