Maven - 将代码发布到 GitHub 时出错(推送后挂起)

我试图跑动目标,它在推动后挂起。任何想法,我可能做错了什么?mvn release:prepare

[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD SUCCESSFUL
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 8 seconds
[INFO] [INFO] Finished at: Tue Jul 13 23:54:59 PDT 2010
[INFO] [INFO] Final Memory: 55M/294M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] Checking in modified POMs...
[INFO] Executing: cmd.exe /X /C "git add -- pom.xml"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git status"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git commit --verbose -F C:\Users\TAYLOR~1\AppData\Local\Temp\maven-scm-1932347225.commit pom.xml"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git symbolic-ref HEAD"
[INFO] Working directory: C:\development\taylor\my-app
[INFO] Executing: cmd.exe /X /C "git push git@github.com:tleese22/my-app.git master:master"
[INFO] Working directory: C:\development\taylor\my-app
>>>> hangs here <<<<

以下是我的pom的SCM部分.xml:

<scm>
    <connection>scm:git:git://github.com/tleese22/my-app.git</connection>
    <developerConnection>scm:git:git@github.com:tleese22/my-app.git</developerConnection>
    <url>http://github.com/tleese22/my-app</url>
</scm>

...

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.0</version>
</plugin>

以下是我的.git/config:

[core]
    repositoryformatversion = 0
    filemode = true
    logallrefupdates = true
    bare = false
[branch "master"]
    remote = origin
    merge = refs/heads/master
[remote "origin"]
    url = git@github.com:tleese22/my-app.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = git@github.com:tleese22/my-app.git

以下是 git 显示原点的结果:

$ git remote show origin
Enter passphrase for key '/c/Users/Taylor Leese/.ssh/id_rsa':
* remote origin
  Fetch URL: git@github.com:tleese22/my-app.git
  Push  URL: git@github.com:tleese22/my-app.git
  HEAD branch: master
  Remote branches:
    gh-pages new (next fetch will store in remotes/origin)
    master   new (next fetch will store in remotes/origin)
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

$ git status
# On branch master
nothing to commit (working directory clean)

答案 1

我遇到了同样的问题,我将其追溯到git需要密码的事实,但是Maven没有办法指定适当的密码,因此该过程基本上挂起了。请注意,此问题仅限于 Windows。

解决方案是运行 ssh-agent。这可以在 中找到。运行它后,它会输出一些需要设置的环境变量。例如:C:\Program Files (x86)\Git\bin\

SSH_AUTH_SOCK=/tmp/ssh-LhiYjP7924/agent.7924;出口SSH_AUTH_SOCK;
SSH_AGENT_PID=2792;出口SSH_AGENT_PID;
回声代理 pid 2792;

因此,您需要将这些放在您的环境中:

C:\> set SSH_AUTH_SOCK=/tmp/ssh-LhiYjP7924/agent.7924
C:\> set SSH_AGENT_PID=2792

然后,您需要为特定密钥文件添加密码。通常,如果您为项目发出了类似命令的命令,您将收到一个密码提示,例如:--这是您需要向代理注册的文件。因此,该命令是:git fetch origin masterEnter passphrase for key '/c/Users/Anthony Whitford/.ssh/id_rsa'

C:\> ssh-add "/c/Users/Anthony Whitford/.ssh/id_rsa"

它会提示您输入密码,因此请输入密码。您应该会看到一条消息。现在,代理知道密码,因此系统不会再提示您指定它。Identity added

如果您有多个命令提示符实例,请确保每个命令提示符都设置了相应的SSH_AUTH_SOCK和SSH_AGENT_PID环境变量。您可以通过运行类似命令来验证这是否有效,如果您没有收到提示输入密码,则它正在工作!ssh -v git@github.com

请注意,注销时,ssh 代理将关闭,因此当您重新登录或重新启动计算机时,您将需要重复这些步骤。我的理解是,出于安全原因,您的密码存储在内存中,而不是持久保存到磁盘中。


答案 2

目标始终在非交互模式下运行,因此您无法在推送到远程存储库时输入 git 正在等待的 ssh 密码。您可以使用SSH代理来管理它,但是如果此问题仅在发布过程中出现,则还有另一种解决方案:在本地准备发布,然后推送标记。mvn release:prepare

为此,您必须使用参数附带的maven-release-plugin的2.1 +版本。pushChanges

mvn -DpushChanges=false release:prepare 

顺便说一句,您的标签被创建到您的本地GIT存储库中,然后您可以使用命令像往常一样将其推送到远程存储库。git push

此方法对 Eclipse 用户很有用,因为 Eclipse 附带了一个嵌入式 ssh 代理,但 maven 在执行 release:prepare 时不会使用此代理,即使在使用 eGit 时也是如此。


推荐