簡體   English   中英

我如何計算git標簽和原始提交之間的時差

[英]How can I work out time difference between git tag and the original commit

我想找出提交時間和標記提交時間之間的時間差。

這是我到目前為止,但我認為這是正確的字段的committerdate是null。

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

我猜我只看標簽,但我無法做到。 在一個理想的世界中,它會顯示時間之間的差異,但如果不可能,我可以在之后做到這一點。

git for-each-ref文檔有點誤導:

對於提交和標記對象,特殊的creatordatecreator字段將對應於committertagger字段中的相應日期或名稱 - 電子郵件日期元組,具體取決於對象類型。 這些用於處理帶注釋和輕量級標簽的混合。

這完全按照記錄的方式工作: %(creatordate)從這些帶注釋的標簽的tagger字段中獲取日期。 但是,它似乎意味着對於帶注釋的標記,Git可能會檢查相應的提交:如果沒有,它將如何獲得committer

實際上, for-each-ref從不直接查看帶注釋標簽的目標對象。 該的提committer字段是特定於輕量級的標簽,以提交這一點,而不是注釋標記對象1。 幸運的是,有一個格式指令說“間接看”,因為它是:只需在指令前添加* 2

因此答案是:

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

1輕量級標簽可以直接指向樹木或斑點; 目前還不清楚在這種情況下會發生什么。 可能擴張是空的。

2請注意,這只是間接一次 ,因此如果帶注釋的標記的目標是另一個標記(或者是樹或blob),則不會有提交者日期字段。 要真正使其可靠,您可能應該使用一些shell腳本並使用^{}^{commit}后綴解析標記名稱。 (這兩者之間的區別在於,如果最終目標對象是樹或blob, ^{commit}失敗 ,而^{}將成功,找到該樹或blob對象。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM