2016-10-10 39 views
4

我正在計算提交時間和提交時間之間的時間差。如何解決git標籤和原始提交之間的時間差

這是我迄今爲止但是committerdate,我認爲這是正確的字段是null。

git for-each-ref --format='%(taggerdate) : %(committerdate) : %(refname)' --sort=-taggerdate --count=10 refs/tags 

在猜測我期待僅在標籤,雖然我不能得到它的權利。在一個理想的世界裏,它會顯示時間之間的差異,但是如果不可能的話,我可以在之後做到這一點。

+0

標籤...一個輕量級的一個或註釋的一? (https://git-scm.com/book/en/v2/Git-Basics-Tagging#Annotated-Tags) – VonC

+0

這些是通過團隊城市設置的註釋標籤 – John

回答

3

The git for-each-ref documentation是一種誤導:

對於提交和標籤的對象,特殊creatordatecreator領域將根據對應於相應的日期或名稱,電子郵件最新的元組從committertagger領域對象類型。這些旨在用於混合使用註釋和輕量級標籤。

這的確如文件所述工作:%(creatordate)從這些註釋標記的tagger字段獲取日期。但是,似乎意味着對於帶註釋的標籤,Git可能會檢查相應的提交:如果沒有,它將如何獲得committer

實際上,for-each-ref從未在註釋標籤的目標對象上看起來直接committer字段的提及特定於輕量級標籤,其指向提交,而不是標註的標籤對象。幸運的是,有一個格式指令表示「間接尋找」,因爲它只是:簡單地在*前綴該指令。

因此,回答是:

git for-each-ref \ 
    --format='%(taggerdate) : %(*committerdate) : %(refname)' \ 
    --sort=-taggerdate --count=10 refs/tags 

輕型標籤可以直接指向樹木或小圓塊;目前還不清楚在這種情況下會發生什麼。可能擴張是空的。

請注意,這只是indirects 一次,因此,如果註釋標籤的目標是另一個標籤(或者是一棵樹或BLOB),也不會有的提交日期字段。要真正實現這種可靠性,您可能應該使用一些shell腳本,並使用^{}^{commit}後綴來解析標記名稱。 (這兩者之間的區別是,^{commit}失敗如果最終的目標對象是一棵樹或斑點,而^{}會成功,發現樹或Blob對象。)

+0

完美謝謝 – John

相關問題