我希望计算出提交时间与标记该提交时间之间的时间差。
这是我目前所拥有的,但是我认为这是正确字段的提交日期为空。
git for-each-ref --format='%(taggerdate) : %(committerdate) : %(refname)' --sort=-taggerdate --count=10 refs/tags
我猜我只是在看标签,虽然我做错了。在理想情况下,它会显示时间之间的差异,但如果不可能的话,我可以在之后这样做。
最佳答案
The git for-each-ref
documentation有点误导:
For commit and tag objects, the special
creatordate
andcreator
fields will correspond to the appropriate date or name-email-date tuple from thecommitter
ortagger
fields depending on the object type. These are intended for working on a mix of annotated and lightweight tags.
这确实按照记录的方式工作:%(creatordate)
从这些带注释的标签的 tagger
字段中获取日期。但是,它似乎暗示对于带注释的标记,Git 可能会检查相应的提交:如果不是,它如何获得提交者
?
事实上,for-each-ref
永远不会直接查看注释标签的目标对象。 committer
字段的提及特定于 lightweight 标记,它指向提交,1 而不是带注释的标记对象。幸运的是,有一个格式指令表示“间接查看”,实际上:只需在指令前加上 *
.2
因此答案是:
git for-each-ref \
--format='%(taggerdate) : %(*committerdate) : %(refname)' \
--sort=-taggerdate --count=10 refs/tags
1轻量级标签可以直接指向树或 Blob ;目前尚不清楚在这种情况下会发生什么。可能展开是空的。
2请注意,这只会间接一次,因此如果带注释的标签的目标是另一个标签(或者是树或 blob),则不会有提交者日期字段。要真正使其可靠,您可能应该使用一些 shell 脚本并使用 ^{}
或 ^{commit}
后缀解析标记名称。 (这两者之间的区别在于,如果最终目标对象是树或 blob,^{commit}
将失败,而 ^{}
将会成功,找到那棵树或 blob 对象。)
关于git - 我怎样才能计算出 git 标签和原始提交之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39958722/