去年,我的日常风投工作从Subversion转向了Git,现在我仍在努力把握“Git思维”的精髓。
最近困扰我的一个问题是“轻量级”、带注释的标签和签名标签。在所有实际应用中,带注释的标签都优于轻量级标签,这似乎是被普遍接受的,但我发现为什么会出现这种情况的解释似乎总是归结为“因为最佳实践”或“因为它们不同”。不幸的是,如果不知道为什么这是最佳实践,或者这些差异与我的Git使用有什么关系,这些都是非常不令人满意的论点。
当我第一次切换到Git时,轻量级标签似乎是自切片面包以来最好的东西;我可以指向一个提交并说“那是1.0”。我很难理解一个标签怎么可能需要更多,但我当然不能相信Git专家们随意地喜欢带注释的标签!那么,这些喧嚣是关于什么的呢?
(附加提示:为什么我需要在标签上签名?)
EDIT
我已经成功地相信带注释的标签是一件好事——知道谁在什么时候做了标记是很重要的!作为后续,关于好的标记注释有什么建议吗?无论是git标记-am“标记1.0”1.0,还是尝试总结提交日志,因为之前的标记感觉像是丢失了策略。
我发现了轻量级标签的一个很好的用途——在GitHub上创建一个版本。
我们确实发布了我们的软件,我们有必要的提交,我们只是没有费心去维护GitHub上的“发布”部分。当我们注意到这一点时,我们意识到我们也想添加一些以前的版本,并为它们提供正确的旧发布日期。
如果我们只是在旧提交上创建一个带注释的标记,GitHub将从标记对象中获取发布日期。相反,当我们为这个旧的提交创建了一个轻量级标记时,发布版开始显示正确的(旧的)日期。
来源@ GitHub帮助,“关于发布”
似乎也可以为带注释的提交指定你想要的日期,但在我看来并不那么简单:
https://www.kernel.org/pub/software/scm/git/docs/git-tag.html#_on_backdating_tags
对我来说,重要的区别是轻量级标签没有时间戳。假设你添加了几个轻量级标签:
git tag v1
git tag v2
git tag v3
然后,也许稍后,你想要最后添加轻量级标签。没有办法做到这一点。“git描述”和“git标签”都不会按时间顺序给出最后一个轻量级标签。"git tag -l"可以返回它们的全部或按lex顺序排序,但不能按日期/时间排序。"git describe——tags"将返回"v1",这肯定不是最后添加的标签。
另一方面,如果你添加带注释的标签:
git tag v1 -m v1
git tag v2 -m v1
git tag v3 -m v1
你总是可以得到每个标签的时间戳,“git describe”肯定会返回“v3”,这是最后添加的标签。