Maven 发布插件和 Git 标记风格

问题描述 投票:0回答:2

Maven Release Plugin 在 Git 中执行轻量级或带注释的标签吗?(另外,如果默认为轻量级标签,它是否支持带注释的标签?)

例如,我可以使用以下任一方法手动标记项目:

git tag v1.0.0
#轻量级

或者,交替地,

git tag -a v1.0.0
#已注释

这些是非常不同类型的标签。第一个是轻量级的 Git 标签,第二个是带注释的 Git 标签。

注意:我知道

release:prepare
目标通过POM更改执行提交,这实际上模拟了带注释的标签,因为它将标签与新的特定提交联系在一起,但我的问题是带注释的标签是否是无论如何,结果。)

背景: Mavenized Java 项目上的 Maven 3.3.9 和 Git 2.7.4。在 Google 或 SO 中找到这个答案并不容易。

更新:Maven 发布插件的标签始终带有注释。不支持轻量级标签。请参阅下面的答案和我的评论来证实它。

git maven tagging release-management maven-release-plugin
2个回答
8
投票

虽然我没有找到关于这个问题的文档(也许它存在),但我进行了试运行。使用简单的 POM 创建本地 GIT 存储库并执行 Maven Release:prepare。当我在生成的标签上运行

git show $MYTAG
时,git 输出包含“Tagger”数据,这表明它是带注释的标签。

https://git-scm.com/book/en/v2/Git-Basics-Tagging

https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html


0
投票

带注释的标签报告

tag
git cat-file -t
,而轻量级标签报告
commit

Maven Release Plugin 版本 3.0.1 通过 Maven SCM 插件版本 2.0.0 支持两个 Git 提供程序实现

自从 2008 年 4 月 5 日maven-scm@fb97fde开始支持 Git 以来,这似乎就是事实。

虽然看似未指定,但默认的 SCM 提供程序实现似乎是与 SCM 提供程序 ID 匹配的实现,在本例中意味着 

git

(而不是

jgit
)。运行
mvn release:prepare
可以简单地证明,无论如何,
git
都是默认的提供程序实现。
具体来说,Release 插件默认运行以下命令:

~/foo $ mvn release:prepare --batch-mode ... [INFO] 12/17 prepare:scm-tag [INFO] Tagging release with the label foo-project-1.0... [INFO] Executing: /bin/sh -c cd '/.../maven-multi-module-demo' && 'git' 'tag' '-F' '/tmp/maven-scm-2066945070.commit' 'foo-project-1.0' [INFO] Working directory: /.../maven-multi-module-demo [INFO] Executing: /bin/sh -c cd '/.../maven-multi-module-demo' && 'git' 'push' 'file:///tmp/tmp.HoDbTO8Iel' 'refs/tags/foo-project-1.0'

注意 
git tag -F <file>

意味着

-a
选项;证人:
~/foo $ git cat-file -t foo-project-1.0
tag

很久以前,JGit 仅支持带注释的标签。从那时起,JGit 也学会了支持轻量级标签,但带注释的标签仍然是默认的,并且 Release 插件没有采取必要的步骤来利用轻量级标签,因此不可能创建轻量级标签。这是相当明智的:轻量级标签不适合此用例。

© www.soinside.com 2019 - 2024. All rights reserved.