2010-02-24 4 views
30

Aynı işlemde birden çok etiket içeren bir veri havuzum var. Örneğin:Geçerli işlemde etiketler nasıl alınır

commit #3 <--- TAG1/TAG2/TAG3 

    | 

commit #2 <--- TAG4/ TAG5 

    | 

commit #1 <--- TAG6/ TAG7 

işlemediğim hangi etiketlerin belirli üzerinde olduğunu öğrenmek istiyorum. etiketler 1-7 Görüntülenen

git checkout <commit 1> 
git tag --contains 

: Ben 1 işlemek kontrol Örneğin, ben etiketi 6 ve etiket denedim 7.

almak istiyorum.

sadece etiket 6 görüntülenir.

Bunu Git'te yapmanın en uygun yolu nedir?

cevap

3

Bu ideal, ama belki de yararlı değildir:

 
$ git log -n 1 --decorate --pretty=oneline 

İstediğiniz tam olarak ne elde etmek formatı ile etrafında oynayabilir. William'ın Yanıta

+0

Bilgileriniz için teşekkürler, benim repo'm 300'den fazla farklı var. Benim için çok zor 300 kez "Q" tuşuna basın. – Shawn

+0

@Shawn Q ... –

+0

düğmesine basmaya gerek yok Herhangi bir şeyi görüntülemek için git günlüğünü her kullandığımda, günlük görüntüleme modundan çıkmak için q düğmesine basmam gerekiyor. Aynı – Shawn

17

Bazı iyileştirmeler:

git config --global alias.tags 'log -n1 --pretty=format:%h%d' 

çıktı şuna benzer: hala geliyor beri

~$ git tags 
7e5eb8f (HEAD, origin/next, origin/master, origin/HEAD, master) 
~$ git tags HEAD~6 
e923eae (tag: v1.7.0) 
+1

'a baktığınızdan emin değilsiniz bu harika bir ipucu – cmcginty

+0

Bu çıkışı noktalama işareti olmadan düz bir listeye dönüştürmek için sed/tr/grep komutları eklemeye çalışıyorum. Böyle bir 'git log' komutunu doğrudan yapılandırabilirim ama kaçış beni bir git config takma ismine koyduğumda beni öldürüyor. İşte benim günlük komutum: git log -n1 --pretty = "format:% d" | sed "s /,/\ n/g" | grep etiketi | sed "s/tag: \ |) // g" –

+0

Otomatik komut dosyalarının (örn. etiketleri isteminize dahil edilmesi) daha uygun bir çözümle daha kullanışlı hale getirmek için bunu geliştirdim ... –

18

belki git Bu soru sorulmuştur beri bazı seçenekler eklenmiş etti sanırım, ama google'da hayli yüksek olarak, bu şekilde güzel bir şekilde çalıştığını düşündüğümü düşündüm:

Veya HEAD'u, istediğiniz herhangi bir geçerli taahhüt referansıyla değiştirin. BAŞ aksi herhangi etiketleri ve baskı hiçbir şey içeriyorsa olsun diye

Bu bir yeni satır yazdırılır, ayrılmış etiket listesi:

TAG6 
TAG7 

Ve tabii diğer çeşitli kabuğu ile güzel birçok yol vardır Bu çıktıyı biçimlendirdikten sonra biçimlendirebileceğiniz araçlar ...

+1

Mükemmel çalışıyor. Sadece neden ihtiyacın var? Kılavuzdan, '-l ', args olmadan, argüman olmadan" tag "ile aynı olan tüm etiketleri listeler. –

+0

@cirosantilli oops, kılavuzu yeterince dikkatlice okumadım. Her ne kadar '-l' kelimesini eklemeyi sevdiğimi düşünürsem de, '--contains' bayrağını unutursam yeni bir etiket eklemeye son vermemi sağlıyor. – arcticmac

+6

Bu, yanlış çıktı verir. Verilen işlemi 'içeren' olan tüm etiketleri gösterir, yani önceki erişilebilir gönderilere uygulanan etiketler de dahildir. Asıl soru, bu eski etiketleri istemediğini, yalnızca 'mevcut' etiketlerini vermediğini söylüyor. –

3

@ JoshLee'nin cevabı, yalnızca çıktıları yalnızca etiketlere (dallara değil, HEAD'e) yönlendiren ve 'tag:' sözcüğünü çeviren bir ayrıntıdır. dekoratif noktalama işaretleri. Bu (örneğin sizin istemi koyun) Geçerli etiketlerini bulmak için ihtiyacı olan bir şeyi scripting kullanışlıdır:

git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g" 

Örnek çıkışı:

$ git log -n 1 --decorate=short 
commit a9313...c7f2 (HEAD, tag: v1.0.1, tag: uat, mybranch) 
... 
$ git log -n1 --pretty="format:%d" | sed "s/, /\n/g" | grep tag: | sed "s/tag: \|)//g" 
v1.0.1 
uat 
3

Bu HEAD taahhüt id görüntüler aynı zamanda, tam olarak KAFA'da olduğu gibi, herhangi bir şube veya herhangi bir etiket gibi.

git reflog --decorate -1 

Örnek çıktı: tamamlanma için

484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) [email protected]{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD 
55

(Ciro Santili cevap sayesinde), git-tag bunu yapmaz seçeneği de --points-tam Shawn soran ne var.Jonathan Hartley git-tag --contains onun yorumunda belirtildiği gibi

git tag -l --points-at HEAD 

Ayrıca ileri koymak etiketleri listelemek için etkisi yoktur taahhüt.

+0

Burada en iyi cevap budur. Karmaşık bir komut satırı gerekmez, ancak yalnızca etiket adını verir. –

+0

Tam olarak ihtiyacım olan şey, teşekkürler. –