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

标签 java git maven-2 github maven-release-plugin

我正在尝试运行 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.xml 的 SCM 部分:

<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 show origin 的结果:

$ 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)

最佳答案

我遇到了同样的问题,我追踪到 git 需要密码,但 Maven 无法指定适当的密码,所以进程基本上挂起。请注意,此问题仅限于 Windows。

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

SSH_AUTH_SOCK=/tmp/ssh-LhiYjP7924/agent.7924; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2792; export SSH_AGENT_PID;
echo Agent pid 2792;

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

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

然后,您需要为您的特定 key 文件添加密码。通常,如果您为您的项目发出类似 git fetch origin master 之类的命令,您将收到类似以下的密码提示:Enter 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-agent 将关闭,因此当您重新登录或重新启动计算机时,您需要重复这些步骤。我的理解是,出于安全原因,您的密码存储在内存中,而不是持久化到磁盘中。

关于java - Maven - 将代码发布到 GitHub 时出错(推送后挂起),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3243755/

相关文章:

java - 方法上可以加注解吗

java - 目标相当于 base16().decode(String)

git - 为什么我必须使用 "git commit -a"而不仅仅是 "git commit"?

java - 多模块maven项目

pdf - 使用 Maven 维护用户文档

xml - maven spring - 找不到元素 'beans'的声明

java - 无法实例化可遍历解析器类 org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver

java - HashMap键值问题

git - 将 master merge 到 branch 和将 branch merge 到 master 有什么区别?

git - 随机标签应用于每个git commit