使用Maven发布插件时,git push失败

7

正在运行 git 版本 1.7 和 maven 3.0.3,以及 maven release 插件 2.4.2,并尝试运行以下命令:

mvn clean install release:clean release:prepare release:perform

我收到了以下错误:

[INFO] Checking in modified POMs...
[INFO] Executing: /bin/sh -c cd /home/foo-proj && git add -- pom.xml
[INFO] Working directory: /home/foo-proj
[INFO] Executing: /bin/sh -c cd /home/foo-proj && git status
[INFO] Working directory: /home/foo-proj
[INFO] Executing: /bin/sh -c cd /home/foo-proj && git commit --verbose -F /tmp/maven-scm-1966810637.commit pom.xml
[INFO] Working directory: /home/foo-proj
[INFO] Executing: /bin/sh -c cd /home/foo-proj && git symbolic-ref HEAD
[INFO] Working directory: /home/foo-proj
[INFO] Executing: /bin/sh -c cd /home/foo-proj && git push ssh://git.acmeco.com/gitroot/foo-proj.git master:master
[INFO] Working directory: /home/foo-proj
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:03.408s
[INFO] Finished at: Sat Jun 14 21:30:48 UTC 2014
[INFO] Final Memory: 13M/57M
[INFO] ------------------------------------------------------------------------    
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare    (default-cli) on project mikesbikes: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] To ssh://git.acmeco.com/gitroot/foo-proj.git
[ERROR] ! [rejected]        master -> master (non-fast-forward)
[ERROR] error: failed to push some refs to 'ssh://git.acmeco.com/gitroot/foo-proj.git'
[ERROR] To prevent you from losing history, non-fast-forward updates were rejected
[ERROR] Merge the remote changes before pushing again.  See the 'Note about
[ERROR] fast-forwards' section of 'git push --help' for details.
[ERROR] -> [Help 1]

尤其是这一行代码导致了问题:

git push ssh://git.acmeco.com/gitroot/foo-proj.git master:master

如果我只是手动执行git push,那么就没有问题,所以不确定master:master实际上意味着什么。
我已经彻底搜索了类似的在线问题,并且只有少数参考文献涉及到相同的问题,但没有解决方案。非常感谢您提供任何可能导致此问题的建议。
编辑:这是-e标志的输出:
error: failed to push some refs to 'ssh://git.acmeco.com/gitroot/proj-foo.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

    at   org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:285)
    at   org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:232)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    ... 19 more
Caused by: org.apache.maven.shared.release.scm.ReleaseScmCommandException: Unable to commit files
Provider message:
The git-push command failed.
Command output:
To ssh://git.acemco.com/gitroot/foo-proj.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://git.acmeco.com/gitroot/foo-proj.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:165)
    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins(AbstractScmCommitPhase.java:145)
    at org.apache.maven.shared.release.phase.ScmCommitPreparationPhase.runLogic(ScmCommitPreparationPhase.java:76)
    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.execute(AbstractScmCommitPhase.java:78)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:277)
    ... 22 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

尝试使用 -e 开关运行 Maven 并检查是否有关于该问题的其他输出。 - dertkw
刚刚使用 -e 选项编辑了输出,似乎没有太多暴露的内容。 - wittyhandle
我们在Bamboo构建中将提交推送到Stash的问题与您相同(在Linux上运行的构建)git版本为2.5.1,maven-release-plugin为2.5.2,maven 3.3.3。从我的开发人员机器上进行版本发布过程正常,但在Windows上使用git版本1.9.5.msysgit.0。以前我们在Bamboo上使用的是git 1.8.3.4,推送没有错误。 - David
错误信息意味着您正在尝试推送某些内容,但远程仓库具有您的本地副本尚未具备的提交,例如因为其他人在您之前进行了推送。在推送之前,您需要先拉取,将本地提交基于新的头重置。这纯粹是一个Git使用问题,与Maven无关。 - kriegaex
1个回答

0

你的主分支是否与远程分支保持同步?

此外,你可能想尝试将Git升级到稍微年轻一点的版本(比如说1.9.x),以及最新的Maven发布插件,目前是2.5.2

理论:

指定的错误似乎与Git有关:(尽管发布插件在Git方面声誉不佳)

[ERROR] To ssh://git.acmeco.com/gitroot/foo-proj.git
[ERROR] ! [rejected]        master -> master (non-fast-forward)
[ERROR] error: failed to push some refs to 'ssh://git.acmeco.com/gitroot/foo-proj.git'
[ERROR] To prevent you from losing history, non-fast-forward updates were rejected
[ERROR] Merge the remote changes before pushing again.  See the 'Note about
[ERROR] fast-forwards' section of 'git push --help' for details.
[ERROR] -> [Help 1]

这通常意味着潜在的冲突。

release:prepare阶段发生的是更新Pom文件(使用新版本)并提交一个新的提交。(er... committed? 这里似乎有点小问题)

那么如果远程主分支也修改了这些行,您将无法正常推送。这也可以解释之后手动运行该行的事实,因为Maven有很大可能会回滚更改。

所以我倾向于将错误归咎于Git方面。 但请注意,我不能排除release:plugin,因为它有时非常笨拙,甚至可能尝试推送完全错误的内容!如果是这种情况,很抱歉您无能为力。


我们在使用最新的git版本2.5.1、maven-release-plugin 2.5.2和maven 3.3.3(在Linux上运行)时,与Bamboo构建将提交推送到Stash存在相同的问题。从我的开发者机器上使用git版本1.9.5.msysgit.0在Windows上进行发布过程正常。以前我们在Bamboo上使用git 1.8.3.4,推送没有错误。现在尝试使用-DpushChanges=false或-DdryRun=true禁用推送。 - David
1
抱歉,之前没有看到你的评论。就这个问题而言,我在我的工作场所也遇到了同样的问题,我不得不将我的开发者机器锁定在Git 1.9上,因为Maven Release插件似乎无法处理更高版本的Git。 - Aurélien Thieriot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接