如何使用标准SSH语法为Maven Release插件指定Git remote的URL?

时间:2015-01-27 10:05:22

标签: java git maven ssh

直接针对具体问题

如果我使用pom.xml

中的路径指定“完全限定”的SSH地址
<scm>
  <developerConnection>scm:git:username@hostname:/absolute/path/to/repo.git</developerConnection>
</scm>

并在像

这样的命令中使用它
mvn --batch-mode release:prepare -Dtag=whatever -DreleaseVersion=3.0 -DdevelopmentVersion=4.0-SNAPSHOT

然后我得到像

这样的错误
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project maven_dependencies: Unable to tag SCM
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] fatal: 'hostname/absolute/path/to/repo.git' does not appear to be a git repository
[ERROR] fatal: Could not read from remote repository.

注意: hostname中的/absolute/path/to/repo.gitpom.xml之间的分号在错误输出中消失了!

其他细节

绝对与相对路径

实际上,我可以在SSH URL中使用带有非绝对路径的Git(相对于usernname的主目录)。例如,使用

scm:git:username@hostname:path/to/repo.git

而不是

scm:git:username@hostname:/home/username/path/to/repo.git

完美无缺。

官方文档

我已经为Git阅读了official Maven Release documentation,因为标准的类似SSH的URL至少在相对路径的情况下已经起作用,我故意忽略了它奇怪的URL规范:

scm:git:ssh://username@hostname[:port]/~/path/to/repository

反叛并忽略此语法的原因是无法暗示相对于用户主页的路径(如果路径不以/开头,则默认情况下SSH会执行此操作)。此外,标准类似SSH的:之后的冒号hostnamehostname和路径(端口号)之间的分隔符!

这意味着必须为Maven Release插件专门重新格式化SSH的Git URL - 真是令人头疼!

0 个答案:

没有答案