Yanıtlar:
Çok porselen bir komut, komut dosyası için bunu istiyorsanız iyi değil:
git branch -vv # doubly verbose!
Git 1.8.3 ile yukarı akış dalının mavi renkte görüntülendiğini unutmayın (bkz. " Git'te bu dal izleme (varsa) nedir? ")
Temiz çıktı istiyorsanız, arcresu'nun cevabına bakın - bu cevabı yazdığım sırada var olmadığına inanmadığım bir porselen komutu kullanıyor, bu yüzden biraz daha özlü ve sadece birleştirme değil, rebase için yapılandırılmış dallarla çalışıyor.
git remote show origin
'Orijini' uzaktan kumandanızın adı ne olursa olsun değiştirin.
git remote show
komutun aslında uzak repoya bağlanması ... ve bu nedenle çevrimdışı olursanız veya herhangi bir nedenle repoya bağlanamıyorsanız başarısız olur ...
git remote show -n origin
Çevrimdışı olsanız bile bazı bilgileri almak için kullanabilirsiniz . Gönderen git uzaktan belgeler : "; önbelleğe bilgiler yerine kullanılır -n seçeneği ile uzaktan kafaları <name> ilk git ls-uzaktan ile sorgulanan değildir."
git remote show | xargs git remote show -n
Tüm uzaktan kumandalar için birleşik izleme bilgilerini görüntülemek için koşabilirsiniz .
İçin man sayfasına bakarsanız git-rev-parse
, aşağıdaki sözdiziminin açıklandığını göreceksiniz:
<branchname>@{upstream}
, örneğinmaster@{upstream}
,@{u}
@{upstream}
Şube adının soneki (kısa form<branchname>@{u}
), şube adı ile belirtilen şubenin üzerine oluşturulacağı dalı ifade eder. Eksik bir şube adı varsayılan olarak geçerli olanın adıdır.
Bu nedenle dalın yukarı akışını bulmak için master
şunları yaparsınız:
git rev-parse --abbrev-ref master@{upstream}
# => origin/master
Her dal için bilgileri yazdırmak için aşağıdakileri yapabilirsiniz:
while read branch; do
upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
if [[ $? == 0 ]]; then
echo $branch tracks $upstream
else
echo $branch has no upstream configured
fi
done < <(git for-each-ref --format='%(refname:short)' refs/heads/*)
# Output:
# master tracks origin/master
# ...
Bu, ref'leri ayrıştırmaktan ve manuel yapılandırmadan daha temizdir.
done < <(git for-each-ref --format='%(refname:short)' refs/heads/**)
not edin .
git rev-parse --abbrev-ref HEAD@{upstream}
mevcut şube için iyi çalışıyor gibi görünüyor. Ayrıca güzel bir git takma adı yapar.
while
Döngü sözdizimi bana biraz garip görünüyor. Sadece git for-each-ref ... | while read branch; do ...
FIFO'ya ihtiyaç duymayan ve yazılan komutlarla aynı sırada çalışan kullanabilirsiniz .
git for-each-ref --format='%(refname:short) tracks %(upstream:short)' refs/heads/*
Kubi'nin cevabına bir alternatif .git/config
, yerel depo yapılandırmasını gösteren dosyaya bir göz atmaktır :
cat .git/config
git config --get-regex branch
git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
her yerel şube için bir satır gösterecektir. Bir izleme dalı şöyle görünecektir:
master <- origin/master
Takip etmeyen biri şöyle görünecektir:
test <-
git branch -vv
. 🙏
git config --global alias.track 'for-each-ref --format='\''%(refname:short) <- %(upstream:short)'\'' refs/heads'
İçin geçerli dalı, burada iki iyi seçeneklerdir:
% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline
veya
% git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
origin/mainline
Bu cevap da burada tekrar olarak işaretlenmiş oldu biraz farklı bir soru (yanlış) için,.
git for-each-ref --shell --format='%(refname:short) %(upstream:short)' refs/heads
.
Mevcut dal için ayrıca git checkout
(herhangi bir dal olmadan) diyebilirsiniz . Bu, geçerli şube için varsa izleme bilgilerini gösteren yan etkilere sahip bir işlemdir.
$ git checkout
Your branch is up-to-date with 'origin/master'.
git checkout .
, ki bu hayır-op değil.
Bu takma adı kullanıyorum
git config --global alias.track '!f() { ([ $# -eq 2 ] && ( echo "Setting tracking for branch " $1 " -> " $2;git branch --set-upstream $1 $2; ) || ( git for-each-ref --format="local: %(refname:short) <--sync--> remote: %(upstream:short)" refs/heads && echo --Remotes && git remote -v)); }; f'
sonra
git track
Olivier Refalo'nun cevabına dayanarak
if [ $# -eq 2 ]
then
echo "Setting tracking for branch " $1 " -> " $2
git branch --set-upstream $1 $2
else
echo "-- Local --"
git for-each-ref --shell --format="[ %(upstream:short) != '' ] && echo -e '\t%(refname:short) <--> %(upstream:short)'" refs/heads | sh
echo "-- Remote --"
REMOTES=$(git remote -v)
if [ "$REMOTES" != '' ]
then
echo $REMOTES
fi
fi
Yalnızca iz yapılandırılmış yerel ayarları gösterir.
Yolunuza git-track adlı bir betik üzerine yazın, bir git track komutu alacaksınız
Https://github.com/albfan/git-showupstream adresinde daha ayrıntılı bir sürüm
git config --get-regexp "branch\.$current_branch\.remote"
size izlenmekte olan uzaktan kumandanın adını verecektir
git config --get-regexp "branch\.$current_branch\.merge"
size izlenmekte olan uzak dalın adını verecektir.
$ Current_branch yerine mevcut şubenizin adını koymanız gerekir. Bunu dinamik olarakgit rev-parse --abbrev-ref HEAD
Aşağıdaki mini komut dosyası bunları birleştirir. Dosya adlı bir dosyaya yapıştırın git-tracking
, yürütülebilir yapın ve yolunuzda olduğundan emin olun.
o zaman söyleyebilirsin
$ git tracking
<current_branch_name>-><remote_repo_name>/<remote_branch_name>
uzak dal adının yerel dal adınızdan farklı olabileceğini unutmayın (genellikle olmasa da). Örneğin:
$git tracking
xxx_xls_xslx_thing -> origin/totally_bogus
kodda da görebileceğiniz gibi, bunun anahtarı git yapılandırmadan veri çıkarmaktır. Ben sadece gereksiz verileri temizlemek için sed kullanın.
#!/bin/sh
current_branch=$(git rev-parse --abbrev-ref HEAD)
remote=$(git config --get-regexp "branch\.$current_branch\.remote" | sed -e "s/^.* //")
remote_branch=$(git config --get-regexp "branch\.$current_branch\.merge" | \
sed -e "s/^.* //" -e "s/refs\/.*\///")
echo "$current_branch -> $remote/$remote_branch"