当我创建一个标签(轻量级或注释)并且不提供提交ID时,Git是否在创建标签时将标签记录为“时间点”?
或者它是否标记了我的分支中的最新提交,与该标记关联的“时间”是最近提交的时间?
标签是轻量级还是带注释的?
The docs说:
轻量级标记非常类似于不会更改的分支 - 它只是指向特定提交的指针。
因此,很明显,轻量级标记只指向提交。但是注释标签呢?文档清楚地说明了您可以使用带注释的标记执行的各种操作(包括添加消息,签名等),但如果它是指向提交的指针,则不指定。
答案 0 :(得分:3)
轻量级标记是记录对象SHA-1的引用。对象“应该”是一个提交,但git中的任何内容都不会强制执行此操作。因此,轻量级标签可以指向树或blob。
参考文献没有时间戳。 (ref的“reflog”,即每个更改对该引用所做的日志,确实有时间戳。这包括创建ref本身的条目。但是,reflog不需要存在任何特定的ref; reflog条目在可配置的时间后到期,默认为90天;并且由更新refs的程序决定它们也确保它们也更新reflog。所有git的内部命令都是;对于非git外部脚本,这取决于它们是否写得很好。)
带注释的标记由两个条目组成:引用 - 轻量级标记 - 以及类型为“tag”的底层git对象。如果你打印一个标签对象,你会在标签中看到一个时间戳:
$ git cat-file -p v2.5.0 | sed -e 's/@/ /' -e 7q
object a17c56c056d5fea0843b429132904c429a900229
type commit
tag v2.5.0
tagger Junio C Hamano <gitster pobox.com> 1438025401 -0700
Git 2.5
-----BEGIN PGP SIGNATURE-----
object
行给出了标记目标的SHA-1,type
行给出了该对象的类型。此应是提交或其他标记(即带注释的标记对象)。同样,没有什么能阻止它直接指向树或blob。
tagger
行显示创建标记的人员,以及标记器创建标记的时间(根据计算机和/或任何其他覆盖)。所以你在这里得到了一个标签创建时间戳。
请注意,标记的目标(轻量级或注释)只是您指定的SHA-1(默认HEAD)。当然,如果您在现有的带注释的标记对象上定位一个新的轻量级标记,那么您获得的基本上是一个带注释的标记(尽管它很奇怪,因为轻量级标记名refs/tags/name
)与tag
中的名称不匹配注释标记对象的{1}}行。
简短回答(如果不是太晚):是的,注释标签中有时间戳,这取决于它是否被注释。