git - 我怎样才能计算出 git 标签和原始提交之间的时间差

标签 git git-tag

我希望计算出提交时间与标记该提交时间之间的时间差。

这是我目前所拥有的,但是我认为这是正确字段的提交日期为空。

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 and creator fields will correspond to the appropriate date or name-email-date tuple from the committer or tagger 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/

相关文章:

git - 撤消 Git 中已推送到远程仓库的特定提交

git - 如何将 git 分支从 Gitlab check out 到 Android Studio

linux - 在 GitHub 之前,开发者是如何共享 git repos 的?

git - 应用标签触发构建

git - 可以进行 git submodule update 来获取子模块中的标签吗?

git - Teamcity - 成功构建后创建 git 标签

git svn 命令在克隆 svn 存储库的过程中崩溃。如何解决这个问题?

git - 如何git标记所有子模块?

git - 确定最新收到的 git 标签

git - GitVersion 的 +semver 命令如何工作?