5

据我所知,为了使用 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 代码以将其作为要求删除,或者至少将自动检测设为默认值?如果没有,有人可以提供一些关于为什么这不起作用的背景信息吗?

4

1 回答 1

4

一方面,GIT 和 Subversion 可以有不同的 SCM URI 用于读写和只读访问。

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

很多时候,无法从签出的存储库中推断出规范的 URI。

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

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

  • https://github.com/stephenc/eaio-uuid.git(使用用户名/密码或 OAuth 进行读写)
  • git@github.com:stephenc/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:stephenc/eaio-uuid.git

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

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

唯一安全的方法是要求 pom 至少定义 SCM 系统,并且对于那些无法可靠推断 URI 的 SCM 系统(想想 CVS、Subversion、GIT、HG,实际上它们中的大多数)需要 URI被指定。

于 2013-02-04T11:55:27.503 回答