作成された日付ごとにGitリポジトリ内のすべてのタグを一覧表示するにはどうすればよいですか?


128

システム内のすべてのタグを作成日までにリストする方法が必要ですが、そのデータをgit-logから取得できるかどうかはわかりません。アイデア?


2
すべてのタグのリストを作成日に取得したいということですか?
lithuak

3
FYI (1) この質問は、日付による注釈付きのタグをリストするためです。(2.)日付ごとにLIGHTWEIGHTタグを一覧表示するには、こちらアクセスしてください(3)は、注釈付きのタグ対Gitリポジトリの軽量の違いは何であるかの有用なリマインダーについては、こちらを参照してください
Trevor Boyd Smith、

@TrevorBoydSmith:それはまったく正しくありません。違いは、すべてのタグは、(2)の一覧です日付コミットのがコミットタグ付けされたこのページは、ソートによって解決できます一方、日付タグ付けを(ただしのみが注釈付きのタグのために、Gitがないので、店の日は軽量のタグをタグ付き)。
デビッドP

回答:


174

タグの作成日によるソートは、注釈付きの軽量タグで機能します。

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

12
驚くばかり。git for-each-ref --format="%(taggerdate): %(refname)" --sort=-taggerdate --count=10 refs/tagsまさに私が必要とすることをしました。ありがとう!
Jon Ursenbach、2011年

21
軽量タグで機能する@DrorCohenによるソリューション:stackoverflow.com/questions/6900328/…。簡単に参照できるようにここに貼り付けます:git log --tags --simplify-by-decoration --pretty = "format:%ai%d"
Gilead

5
%(contents)必要に応じて、注釈を追加するために使用できます。例git for-each-ref --sort='*authordate' --format='%(taggerdate:short) | %(tag) | %(contents)' refs/tags
Tim Diggins、2013年

7
または少しgit for-each-ref --sort=taggerdate --format '%(tag)'
すっきりとして

4
--sort=creatordate--sort=taggerdate注釈付きタグと注釈なしタグの両方で機能しますが、注釈付きタグでのみ機能するようです。テスト済みgit version 2.16.3
オースティンハイマン、

56

Git 2.8(2016年3月)には、git 1.4.4(Oct2006)に遡る別のオプションが記載されてます。Eric Wong()によるcommit e914ef0(05 Jan 2016)を
参照してください。(合併によりJunio C浜野- -108cb77コミットし、2016年1月20日)をele828
gitster

新しいを見る Documentation/git-for-each-ref.txt

commitおよびtagオブジェクトの場合、special creatordateおよびcreator fieldsは、オブジェクトタイプに応じて、committeror taggerフィールドの適切な日付またはname-email-dateタプルに対応します。
これらは、注釈付きタグと軽量タグの組み合わせで作業することを目的としています

したがってcreatordate、タグを使用して動作します:

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

または:

git tag --sort=-creatordate 

フォームrc-XYZWのバージョン文字列の順序でgitタグを並べ替える方法」で詳しく説明しているように、並べ替え順序をに追加できますgit tag(Git 2.0以降2014年6月)。

そのソート順には、フィールド名(リストされているgit for-each-ref taggerdateが含まれます。これにより、以下のgit tag --sort=taggerdateようになり ます以下のDarVarで説明
。例として、git/gitリポジトリではv2.10.0最後にタグをリストします。

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

デフォルトの順序ではありません(git tag):

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

どうもありがとう。なぜいくつかの日付が空だったのかと思っていました。私はすでに軽量タグを疑っていました。おかげでタグを再作成する必要がないのはうれしいですcreatordate
exhuma 2017

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

(日付フィールドなしの)からの素晴らしい出力:

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

依存関係とストライプ化された線形コミット(タグ付けや分岐/マージなどの重要なイベントのみ)の完全な履歴を表示するには:

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

怠惰な人々のために:git log --tags --simplify-by-decoration --pretty="format:%ci %d" | grep "tag:"そしてそれは私にとって最もうまくいきます。
Mateusz 2015年

1
これは、タグが作成された日付ではなく、コミット日付順になっていることに注意してください。Josh Leeからの(現在の)最高評価の回答は、タグが作成された日付順になっています。
Nathanial Woolls 2016

13
git tag --sort=-taggerdate

マニュアルページによると、「接頭辞-値の降順でソートします。」

git tagはと同じ並べ替えキーを使用しgit-for-each-refます。ここにキーが文書化されています。


1
これはおそらく質問に基づいて最も正しいです。可能なソートフィールドの概要を示すドキュメントへのリンクは次のとおり
scm.com

「taggerdate」が空であるため、この応答では軽量タグは考慮されません。「creatordate」を含む他の応答はより正確です。
モルフック

13

このワンライナーは、手間をかけずに日付とタグを表示します。

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

出力:

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

デフォルトでのタグのソート方法が気に入らない場合--sort=creatordateは、たとえばオプションを使用して日付でソートできます。詳細については、VonCの回答を参照してください。


この素晴らしい方法は、日付でそれらをソートするためにバインドされていますか?上昇?下降?
Motti Shneor

11

注釈付きタグと軽量タグをまとめて、コミット日付に基づいて並べ替えるには、次のようにします。

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

このコマンドは、すべてのタグと関連するコミットオブジェクトIDを時系列で一覧表示します。


少し難読化しました。...注釈付きタグでは、「committerdate」は空ですが、軽量タグでは「taggerdate」は空です。したがって、回避策として、「* committerdate」は、Gitが軽量のときに元のコミットオブジェクトから日付を逆参照するようにGitに指示しています。...
ingyhere

代わりに「creatordate」を使用すると、実質的に同じことを行うはずです。
ingyhere

7

Gitを使用 version 2.10.0.windows.1

git tag --sort=taggerdate


5

以下はコミットに依存しているため、コミットの日付情報が含まれているかどうかは関係ありません。

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

上記のジョシュ・リーによる答えは、注文を正確にするためにタグの日付に依存しています。


末尾のコマンドtacがわからない-に変更される可能性がありますmore。とにかくあなたのコマンドはうまくいきました-ありがとう!
デビッドH


3

前述のメソッドに基づいて、リストに実際のタグの日付も表示したかったので、使用中のバージョンは次のとおりです。

git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(creatordate:short) %(refname) %(*objectname) %(objectname)' refs/tags | sort -n | awk '{ print $3, $5, $4 }'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.