使用maven-release-plugin时,为什么不从本地repo中检测scm信息呢?

据我所知,为了使用maven-release-plugin,你必须将scm部分放入你的POM文件中.例如.:

<scm>
    <connection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</connection>
    <developerConnection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</developerConnection>
    <url>ssh://hg@bitbucket.org/my_account/my_project</url>
    <tag>HEAD</tag>
</scm>

我知道这些数据用于确定要标记的内容以及推送更改的位置.但是,如果您克隆/签出了代码,那么这些信息是否已经可用?我正在努力解决这个概念,我需要告诉maven它需要标记什么代码,至少在理论上,只要问Git / HG / SVN / CVS它正在处理什么代码.我怀疑我在细节上遗漏了什么,但我不确定是什么.是否可以更改maven-release-plugin代码以将其作为一项要求删除,或者至少使自动检测成为默认值?如果没有,有人可以提供一些关于为什么不起作用的背景?

最佳答案 首先,GIT和Subversion可以使用不同的SCM URI进行读写和只读访问.

这就是不同的< connection>和< developerConnection> URI应该捕获.第一个是保证读访问的URI.第二个是保证写访问的URI.

通常来自已检出的存储库,无法推断规范URI.

例如,我可能通过svn:protocol和服务器的IP地址在内部检查Subversion存储库,但外部贡献者需要使用https://和主机名.

或者甚至使用GIT存储库,在Github上,您对不同的访问机制有不同的URI,例如:

> https://github.com/stephenc/eaio-uuid.git(使用用户名/密码或OAuth进行读写)
> git@github.com:stenhenc / eaio-uuid.git(使用SSH私钥识别进行读写)
> git://github.com/stephenc/eaio-uuid.git(匿名只读)

没关系,你可能已经检查了git://github.com/zznate/eaio-uuid.git或克隆了本地签出,换句话说,你的本地git仓库可能是“上游”的东西../eaio- uuid-from-nate而不是git@github.com:stenhenc / eaio-uuid.git

我同意对于某些SCM工具,您可以自动检测…例如,如果您知道源是从中检出的,例如, AccuRev,你应该可以假设它的细节……直到你点击Subversion或GIT或CVS或其他代码模块检查到AccuRev工作区(真实故事),以便可以更新被拉入的标签.

简而言之,检测代码必须确保您没有同时使用两个SCM系统以确定哪个是主SCM …而另一个SCM甚至可能不会将标记文件留在磁盘上嗅出(AccuRev,例如,不…因此我选择了它)

唯一安全的方法是要求pom定义,至少是SCM系统,以及那些无法可靠地推断URI的SCM系统(想想CVS,Subversion,GIT,HG,实际上大多数都需要URI)被指定.

点赞