Git depomdaki tüm etiketleri oluşturuldukları tarihe göre nasıl listeleyebilirim?


128

Sistemimdeki tüm etiketleri oluşturuldukları tarihe göre listelemek için bir yola ihtiyacım var, ancak bu verileri git-log aracılığıyla alabileceğimden emin değilim. Fikirler?


2
Oluşturma tarihleri sırasına göre tüm etiketlerin listesini almak istediğinizi mi söylüyorsunuz ?
lithuak

3
Bilginize (1.) Bu soru , AÇIKLANAN etiketleri tarihe göre listelemek içindir. (2.) LIGHTWEIGHT etiketlerini tarihe göre listelemek için buraya gidin . (3.) Git'in hafif ve açıklamalı etiketleri arasındaki farkın ne olduğuna dair faydalı bir hatırlatma için buraya gidin .
Trevor Boyd Smith

@TrevorBoydSmith: Bu pek doğru değil. Fark tarafından tüm etiketler ki (2) listelerini olduğu tarih işlemek ait taahhüt etiketli bu sayfayı sırala çözümler verir, oysa tarih etiketli (gerçi sadece açıklamalı etiketleri, git yapmaz çünkü mağaza tarih hafif etiketleri için etiketlenmiş).
David P

Yanıtlar:


174

Etiket oluşturma tarihine göre sıralama, açıklamalı ve hafif etiketlerle çalışır:

git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags

12
Muhteşem. git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tagstam olarak ihtiyacım olanı yaptım. Teşekkürler!
Jon Ursenbach

21
Hafif etiketler için çalışan @DrorCohen tarafından geliştirilen bir çözüm: stackoverflow.com/questions/6900328/… . Kolay başvuru için buraya yapıştırın: git log --tags - basitleştirin-dekorasyon --pretty = "format:% ai% d"
Gilead

5
Kullanabilir miyim %(contents)gerekirse ek açıklamada eklemek, örneğingit for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
Tim Diggins

7
Ya da biraz daha temiz:git for-each-ref --sort=taggerdate --format '%(tag)'
Barış Wanschers

4
--sort=creatordatehem açıklamalı hem de açıklamasız etiketler için çalışır, ancak --sort=taggerdateyalnızca açıklamalı etiketlerle çalışıyor gibi görünüyor. kullanılarak test edildigit version 2.16.3
austinheiman

56

Git 2.8 (Mart 2016), 1.4.4'e (Ekim 2006) kadar uzanan başka bir seçeneği belgeliyor .
See commit e914ef0 (05 Ocak 2016), Eric Wong ( ele828) .
(Göre Birleştirilmiş - Junio Cı Hamano gitster- içinde 108cb77 tamamlama 2016, 20 Ara)

Yeniyi görün Documentation/git-for-each-ref.txt

Kaydetme ve etiketleme nesneleri için, özel creatordateve creator alanlar , nesne türüne bağlı olarak committerveya taggeralanlarından uygun tarihe veya ad-e-posta-tarih dizisine karşılık gelir .
Bunlar, açıklamalı ve hafif etiketlerin bir karışımı üzerinde çalışmak için tasarlanmıştır .

Yani kullanmak creatordateetiketlerle çalışır:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
sort -n | awk '{ print $4, $3; }' 

Veya:

git tag --sort=-creatordate 

" Git etiketleri rc-XYZW biçimindeki sürüm dizesine göre nasıl sıralanır? " Bölümünde ayrıntılarıyla anlattığım gibi , bir sıralama düzeni ekleyebilirsiniz git tag(Git 2.0 Haziran 2014'ten beri).

Bu sıralama düzeni, alan adı olarak (listelenmiş git for-each-ref) taggerdate içerir . Bu izin verir git tag --sort=taggerdate( aşağıda DarVar tarafından bahsedilmiştir ) Örnek olarak,
git/git repo o listeler v2.10.0son etiketi:

v2.9.1
v2.9.2
v2.9.3
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.10.0

Varsayılan sıra git tagşunları yapmaz ( ):

v2.1.2
v2.1.3
v2.1.4
v2.10.0
v2.10.0-rc0
v2.10.0-rc1
v2.10.0-rc2
v2.2.0

Çok teşekkürler. Neden bazı tarihlerin boş olduğunu merak ediyordum. Zaten hafif etiketlerden şüpheleniyordum. Sayesinde etiketleri yeniden oluşturmam gerekmediğine sevindim creatordate!
exhuma

35
git log --tags --simplify-by-decoration --pretty="format:%ci %d"

Ayrıca (tarih alanı olmadan) güzel çıktı:

git log --tags --decorate --simplify-by-decoration --oneline

Bağımlılıklar ve çizgili doğrusal işlemlerle tam geçmişi görmek için (yalnızca etiketleme ve dallanma / birleştirme gibi önemli olaylar):

git log --graph --decorate --simplify-by-decoration --oneline --all

Tembel insanlar için: git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"ve benim için en iyisi bu.
Mateusz

1
Bunun etiketlerin oluşturulduğu tarihe göre değil, taahhüt tarihine göre sıralandığına dikkat edin. Josh Lee'nin (şu anda) en çok oy alan yanıtı, etiketin oluşturulduğu tarihe göre sıralanır.
Nathanial Woolls

13
git tag --sort=-taggerdate

Man sayfasına göre, "Önek - değerin azalan sırasına göre sıralamak için."

git taggit-for-each-refAnahtarların belgelendiği yer olan aynı sıralama anahtarlarını kullanır .


1
Bu muhtemelen soruya göre en doğru olanıdır. Olası sıralama alanlarını özetleyen dokümanların bağlantısı: git-scm.com/docs/git-for-each-ref
prasanthv

Bu yanıt, boş "taggerdate" içerdiklerinden hafif etiketleri dikkate almaz. "Creatordate" ile verilen diğer yanıtlar daha doğrudur.
morhook

13

Bu tek satırlık program, tarihleri ​​ve etiketleri sorunsuz bir şekilde görüntüler.

git tag --format='%(creatordate:short)%09%(refname:strip=2)'

Çıktı:

2015-04-01  storaged-2.0.0
2015-06-11  storaged-2.1.0
2015-08-06  storaged-2.1.1
...

Etiketlerin varsayılan olarak nasıl sıralandığından hoşlanmıyorsanız --sort=creatordate, örneğin seçeneğiyle tarihe göre sıralayabilirsiniz . Daha fazla ayrıntı için VonC yanıtına bakın.


Bu güzel yöntem onları tarihe göre sıralamak zorunda mı? artan? Azalan?
Motti Shneor

11

Ek açıklamalı etiketlerin ve hafif etiketlerin tamamlanma tarihine göre sıralanması için kullanıyorum:

git for-each-ref --format='%(*committerdate:raw)%(committerdate:raw) %(refname) %(*objectname) %(objectname)' refs/tags | \
  sort -n | awk '{ print $4, $3; }' 

Bu komut, her etiketi ve ilişkili commit nesnesi kimliğini kronolojik sırayla listeler.


Biraz şaşırttı. ... Ek açıklamalı etiketlerde 'committerdate' boşken hafif etiketlerde 'taggerdate' boştur. Dolayısıyla, geçici bir çözüm olarak '* committerdate' Git'e hafif olduğunda orijinal commit nesnesinden geriye referans tarihlerini söylüyor. ...
ingyhere

Bunun yerine 'creatordate'i kullanmak aynı şeyi etkili bir şekilde yapmalıdır.
ingyhere

7

Git ile version 2.10.0.windows.1

git tag --sort=taggerdate


5

Aşağıdakiler kaydetmeye dayanır, bu nedenle kaydetme ile tarih bilgisine sahip olup olmaması önemli değildir:

git log --tags --decorate --simplify-by-decoration|grep ^commit|grep tag|sed -e 's/^.*: //' -e 's/)$//' -e 's/,.*$//'|tac

Josh Lee'nin yukarıdaki cevabı, siparişin doğru olması için bir etiket tarihine dayanıyor.


Sondaki komutun ne olduğundan emin değilim tac- olarak değişebilir more. Her neyse, emriniz harika çalıştı - teşekkürler!
David H


3

Daha önce bahsedilen yöntemlere dayanarak, listedeki gerçek etiket tarihini de görmek istedim ve bu nedenle kullanımdaki sürümüm:

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.