繁体   English   中英

使用Maven-release-plugin时,为什么不只从本地存储库中检测scm信息?

[英]When using maven-release-plugin, why not just detect scm info from local repo?

据我所知,要使用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:协议和服务器的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进行定义被指定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM