2015-09-23 31 views
5

Büyük bir proje için, on deposu, kontrol dallarına (yerel, uzak veya etiketler) ilişkin bir komut dosyası var ve her depoda her birinin geçerli olan şubesi var.Birden fazla etiketle yapılmış işlemde son uyarısı göster

Geçerli depoda hangi şube veya etiketin teslim alındığını görüntülemek için git branch kullanıyorum. Bu, çoğu durumda, aynı taahhütte birden fazla etiketin bulunduğu yer dışında, bu işlemde bulunanların rastgele bir etiketinin yazdırılmasıyla sonuçlanır.

Bunu nasıl düzeltebilirim? Bunu farklı bir şekilde uygulamalı mıyım?

Örnek

for repo in ... 
do 
    cd repo 
    git checkout $1 || git checkout $2 || git checkout $3 .... 
    git branch ##(to verify what happened) 
done 

Yani, ALL6 ile git branch görüntüler Ben özellikle kasada istendi yerine ALL7 ait ALL6 taahhüt ben ./checkoutAll feat1 origin/feat1 tags/ALL7 koşmak ama ALL7 etiketi aynı olduğunu varsayalım.

DÜZENLEME: Aşağıdaki resim, insanlar bana yardım etmeye çalışıyor yardımcı olmaktır

enter image description here Yani

, ı olanlar git checkout tags/V9.00.00.ALL.04 sonra git branch görüntüler rastgele etiketi (* detached from ..) işletiyorsunuz Bu örnekte 7 tane var. En son görüntülemenin bir yolu var mı? ya da en azından ben onu (ALL7 ALL9 ile aynı olsa bile) kontrol etmesini istediğimi görüntülüyor mu?

cevap

3

Bu etiketleri nerede göstermek istediğiniz belli değil, ama size yardımcı olmaya çalışalım. ikimiz de bizde olduğu baskı olarak eşleştirebiliriz Şimdi

git show-ref --tags --dereference 

: en Tüm etiketleri bulalım, sonra

git rev-parse HEAD 

:

Birincisi, mevcut şube son işlemek karmasını bulalım/ne istediğini göster. Örneğin: bir etiket göz attığınızda

git show-ref --tags --dereference | awk '/'$(git rev-parse HEAD)' refs\/tags\// { print $2 }' | tr '\n' ' ' 
+0

, bu irade sadece gösteri etiketleri kullanın

$ git tag --points-at TAG # (or HEAD) 

tüm sembolik ref görmek için bu Mevcut işlem için oluşturuldu. OP'nin istediği bu olduğundan emin değilim. – jweyrich

+0

vay harika, cevabınızı çalışmadan önce soruyu düzenledim. – thahgr

1

Hayır, hiçbir yolu yoktur: git her zaman bir dalda olduğunuzu düşünmez; Tek bir taahhütte bulunursanız, örn. Bir etiketi inceleyerek, bir dalda değilsiniz ve bu durumda, hangi şubede olduğunuzu söyleyemezsiniz.

Farkında olduğum kadarıyla, git dalı, eğer varsa, geçerli dalın adını her zaman yazdırmalıdır.

2

, genellikle bir "başsız" kasada ile sona erecek ve git branch diyecekler:

SHA_HEAD=$(git rev-parse HEAD) 
ALL_TAGS=$(git show-ref --tags --dereference) 
echo "$ALL_TAGS" | awk '/'$SHA_HEAD' refs\/tags\// { print $2 }' | tr '\n' ' ' 

Ya bir tek poşetine

$ git branch 
* (detached from TAG) 

Bu etiketin hangi dalda "açık" olduğunu öğrenmek isterseniz, etiketli ref'inizin repo'nuzda bilinen herhangi bir dalın atası olup olmadığını kontrol edebilirsiniz.etiket yerleştirildi sonra herhangi sayıda dal oluşturulmuş olabilir gibi genellikle birden adayları alacak

$ git branch --contains TAG # (or HEAD) 

kullanın. Hangisinin "hangisi" olduğuna karar vermek size kalmış.

Eğer tüm etiketler geçerli çıkış ref kullanım işaret görmek istiyorsanız

: Elbette

$ git log --oneline --decorate -1