2012-08-31 24 views
18

如何列出所有標記的標記名稱,標記日期和標記消息?列出git標記名稱,日期和消息

似乎git通過git log提交的顯示邏輯分離以及通過git tag提交的標記使得難以列出標記名稱,標記日期和標記消息。

我可以顯示標籤日期,姓名和使用git log --tags --show-notes --simplify-by-decoration --pretty="format:%ai %d %s"

我檢查http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/pretty-formats.txt但沒有看到任何選項來顯示標籤信息提交信息

我可以使用git tag -n5顯示標籤名稱和5行標籤消息

但要獲得所有這三個信息似乎需要超出我的能力粗糙的腳本。

回答

4

git show --tags至少會輸出關於您的標籤的所有相關信息。您可能能夠從那裏找到合適的--pretty=format:序列。

+7

這看起來像一個非常複雜的方式說'混帳顯示--tags',它的方式似乎不具有的格式是什麼作者需要的問題。 –

+0

@MichałPolitowski啊是的。 'git show --tags'會做同樣的事情。相應地編輯答案。 – Christopher

0

我不知道是否有一種方法來

列表標籤名稱,標籤日期和標籤信息僅使用Git的語法所有標籤

但是一個簡單的grep將做的工作:

git show --tags |grep "^tag " -A4

通知我指定的4線匹配後尾隨上下文的,因爲標準輸出顯示標籤名稱,標籤日期和標籤信息的每個上一條單獨的線。

如果您需要處理多標籤的消息,我寧願用管道給AWK這是稍微比較繁瑣:當標籤消息後無論是PGP

git show --tags |awk "/^tag /,/-----BEGIN PGP SIGNATURE-----|commit /" |egrep -v "^$" |sed -E "s/^-----BEGIN PGP SIGNATURE-----.*|^commit.*/-/"

這將作爲長SIGNATURE或提交消息,其中afaik都是可能的情況。然而,你可以很容易地修改最後的grep來覆蓋其他情況(如果有的話)。

+0

我使用自動創建的標記名(commit sha)創建了帶有Github發佈功能的標記。在該回購協議中,上述命令不起作用,我從grep和git show --tags的無用輸出中得不到輸出。不過謝謝你的想法! – AnneTheAgile

18

您想使用for-each-ref命令。不幸的是,它只比用戶友好的filter-branch

請注意,像標籤日期和標記器之類的信息僅適用於帶註釋的標籤。

下面是一個基本的原型。請注意,格式=可以是它自己的整個shell腳本,並且可能應取決於您希望輸出的複雜程度。他們有專門的標籤in the for-each-ref documentation

git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags 
+0

使用通過Github發行版創建的具有自動生成標記名稱的標記,它顯示來自相關提交的提交消息,而不是來自鍵入GUI的標記的消息。這表明Github沒有使用git tag -a,而是使用其他方法? – AnneTheAgile

+0

這聽起來像一個沒有註釋的標籤。那些只是存儲一個指向SHA的指針。 –

+0

似乎不支持的git-日誌格式選項,比如%<(N)的格式輸出 –

0

這毋寧是Andrew's響應,略有不同,但相關主題的跟進問題,一對夫婦的例子。

git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags

這適用於直接命令行很大。當我在〜/ .gitconfig中設置一個git別名時,它似乎沒有輸出相同的輸出。

當直接在命令行上調用時,我得到了。

包釋放-14.7.2星期三12月03日14時24分38秒2014 -0800 14.7.2:複製用於標籤包釋放-14.7.2
包釋放-14.7.3星期四14年12月4日: 14:55 2014 -0800 14.7.3:副本標籤封裝釋放-14.7.3
包釋放-14.7.4週五12月5日16點16分40秒2014 -0800 14.7.4:複製的標籤封裝釋放-14.7.4

當我調用一個git別名(taghist = for-each-ref --format =「%(refname:short)%(taggerdate)%(subject)%(body)」refs/tags ),我得到

package-release-14.7.2
package-release-14.7 0.3
包釋放 - 14.7.4

三哥

+1

使用\「而不是」,然後編輯這個提供如何做到這一點的一個別名的答案,因爲否則它不是」答案 –

+0

taghist = for-each-ref --format = \「%(refname:short)%(taggerdate)%(subject)%(body)\」refs/tags – San