2

尝试设置从 gerrit 到我的 github 存储库的复制。获取此堆栈跟踪:

[2011-09-20 00:11:58,470] 错误 com.google.gerrit.server.git.PushReplication:无法复制到 git@github.com:myuser/myrepo.git
org.eclipse.jgit.errors.TransportException:git @github.com:myuser/myrepo.git: Session.connect: java.net.SocketTimeoutException:
在 org.eclipse.jgit 的 org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:138)读取超时
。 transport.SshTransport.getSession(SshTransport.java:121)
在 org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.(TransportGitSsh.java:248)
在 org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147 ) )
在 com.google.gerrit.server.git.PushOp.listRemote(PushOp.java:358)
在 com.google.gerrit.server.git.PushOp.generateUpdates(PushOp.java:312)
在 com.google.gerrit.server.git.PushOp.pushVia(PushOp.java:258)
在 com.google.gerrit.server .git.PushOp.runImpl(PushOp.java:213)
在 com.google.gerrit.server.git.PushOp.run(PushOp.java:166)
在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java :441)在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask 的 java.util.concurrent.FutureTask.run(FutureTask.java:138)的
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 。访问$301(ScheduledThreadPoolExecutor.java:98)


在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
在 com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:324)
在 java.util.concurrent.ThreadPoolExecutor $Worker.runTask(ThreadPoolExecutor.java:886)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
在 java.lang.Thread.run(Thread.java:662)

原因:com.jcraft.jsch.JSchException:Session.connect:java.net.SocketTimeoutException:在 org.eclipse.jgit.transport
的 com.jcraft.jsch.Session.connect(Session.java:504)
处读取超时。 JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:128)

我的配置文件如下:

复制配置:

[remote "github"]
url = git@github.com:myuser/${name}.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
timeout = 5
replicationDelay = 0
authGroup = Administrators

安全配置:

[database]
    password = secret
[ssh]
    file = /home/gerrit2/.ssh/config

.ssh/配置:

Host github.com:
  IdentityFile ~/.ssh/id_rsa
  PreferredAuthentications publickey

我试着跑步

ssh -i etc/ssh_host_dsa_key git@github.com
ssh -i etc/ssh_host_rsa_key git@github.com
ssh -i ~/.ssh/id_rsa git@github.com
ssh -i ~/.ssh/id_dsa  git@github.com

并且能够“点击”github,因此可以导入密钥,不确定问题是什么,任何建议表示赞赏。

4

1 回答 1

0

正如异常名称SocketTimeoutException所说(及其文档详细信息):

表示套接字读取或接受发生超时的信号。

查看Gerrit 的 replication.config 的文档

远程.<名称>.timeout

在放弃和声明远程端没有响应之前等待网络读取或写入完成的秒数。如果为0,则没有超时,推送客户端无限期等待。

超时应该足够大,以便将对象大部分转移到另一侧。1 秒对于较大的项目可能太小了,尤其是在 WAN 链接上,而 10-30 秒是一个更合理的超时值。

默认为 0 秒,无限期等待。

您的值是 5 秒,您可以尝试使用更大的值。

(该问题仅与 JSch 间接相关 - JSchSession.connect(int)将简单地获取 timeout 参数并将其传递给它创建的 Socket。这提醒我,我应该记录这个超时对于 JSch 是哪个单位 - 秒或毫秒。)

于 2011-09-20T00:24:22.753 回答