Maven Release Plugin是否在Git中执行轻量级或带注解的标记?(另外,如果默认为轻量级标签,是否支持带注解的标签?)
例如,我可以手工标记一个项目,使用:git tag v1.0.0
#轻量级
或者,可选地,git tag -a v1.0.0
#带注解
这些是非常不同类型的标签。第一个是轻量级的Git标签,第二个是带注解的Git标签。
(**注意:**我知道release:prepare
目标执行带有POM更改的提交,这实际上 * 模拟了一个带注解的标签,因为它将标签绑定到一个新的特定提交 *,但我的问题是,无论如何,带注解的标签是否是结果。
**背景:**Maven 3.3.9和Git 2.7.4在一个Mavenized Java项目上。在Google或SO上找到这个答案并不容易。
更新:Maven Release Plugin的标签始终带注解。不支持轻量级标记。请看下面的答案和我的评论来证实它。
2条答案
按热度按时间fhity93d1#
虽然我没有找到关于这个问题的文档(也许它存在于那里),但我做了一个试验。用一个简单的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
cqoc49vn2#
带注解的标记报告
git cat-file -t
的tag
,而轻量级标记报告commit
。Maven Release Plugin版本3.0.1通过Maven SCM Plugin版本2.0.0支持two Git provider implementations:
jgit
,使用Eclipse JGit,supports both annotated and lightweight tags。git
,它委托给提供的Git可执行文件(git
或git.exe
),它自然支持带注解的和轻量级的标记。从
maven-scm@fb97fde
,2008-04-05中的the inception of Git support开始,这似乎是正确的。虽然看起来没有指定,但默认的SCM提供程序实现似乎是与SCM提供程序ID匹配的实现,在本例中表示
git
(而不是jgit
)。运行mvn release:prepare
可以简单地证明git
是默认的提供程序实现。具体来说,Release插件默认运行以下命令:
请注意,
git tag -F <file>
意味着-a
选项;见证人:很久以前,JGit只支持带注解的标签。从那时起,JGit也学会了支持轻量级标签,但带注解的标签仍然是默认的,并且Release插件没有采取必要的步骤来利用轻量级标签,因此不可能创建轻量级标签。这是相当明智的:轻量级标记不适合这种使用情况。