无法通过ssh推送到远程git repo,卡在“写入对象:11%" [英] Cannot push to remote git repo over ssh, stuck at "Writing objects: 11%"

查看:177
本文介绍了无法通过ssh推送到远程git repo,卡在“写入对象:11%"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了一个问题,即编写对象"时尝试执行git push会挂起.这不是Windows和git-daemon在我其他地方看到的常见情况.这是Linux到Linux,使用ssh.在客户端和服务器上,git版本均为1.7.8.6.

我尝试执行以下操作:

  • 创建一个本地空仓库并推送至该仓库-可以正常工作
  • 从本地存储库拉到本地存储库-正常工作
  • 将远程存储库克隆到本地计算机上-可以正常工作
  • 服务器和客户端存储库上的
  • git fsck git gc
  • 推送到预先存在的远程回购-将写入对象挂起为11%
  • 创建一个空的远程仓库并推送到该仓库-将写入对象挂在2%处

我可以设置一个env变量使git产生调试消息.那里没什么用.

我已经在IRC中与人们进行了详尽的交谈,并且我尝试使用它进行谷歌搜索.我们无处可去.这里有人可以帮助我找出问题所在吗?

谢谢!

更新:根据某人的建议,我做了一个 strace -F ,它被卡在子进程的select()上.我会提供整个跟踪,但是stackexchange没有上载的方法.无论如何,这是相关的部分:

  [pid 14414] getsockopt(3,SOL_SOCKET,SO_RCVBUF,[87872],[4])= 0 ^ M[pid 14414] select(7,[3 4],[3],NULL,NULL)= 2(输入[4],输出[3])^ M[pid 14414] read(4,<未完成...> ^ M[pid 14433]< ...写入恢复>)= 8192 ^ M[pid 14433] write(1,"\ 262 \ 36 \ 237 \ 265 \ 234 \ n \ 332W \ 26 \ 271. \ 250 \ 271W \ 34 \ 250N \ 34 * \ 341 \ 247R \ 21 \ 177 \\ Dq\ 23 \ 27 \ 211 \ 270 \ 25"...,8192)= 8192 ^ M[pid 14433] write(1,"Y \ 343} z \ 367 \ 31y \ 321)\ 254 \ 236na \ 274 \ 347 * \ 253 \ 247 \ 264d \ 25 \ 213 \ 364 \ 243 \ 331 \ 242 \ 236\ 3222U3 \ 246"...,8192<未完成...> ^ M[pid 14414]< ...已恢复读取>"t \ 277 \ 177 \ 276 \ 361 \ 377 \ 327U \ 361Re \ f \ 347 \ 300 \ 27 \ 3 \ 255} E \ 363 \ 2277 \ 312p \ 356F \ 335U \ 345 \ 336 \ 250 \ 273"...,16384)= 16384 ^ M[pid 14414] write(3,"\ 210y \ r \ 202 \ 303` \ 222m \ 216 \ 177x \ 354 \ 216Y \ 322n \ 232l \ 273 \ 237 \ 214 \ 352 \ 32 \ r \ 261r \ 311 \ 347\ 356 \ 236 \ 26"...,16432)= 16432 ^ M[pid 14414] getsockopt(3,SOL_SOCKET,SO_RCVBUF,[87872],[4])= 0 ^ M[pid 14414] select(7,[3],[3],NULL,NULL)= 1(出[3])^ M[pid 14414] write(3,"\ v \ 267 \ 355 \ 33 \ 257 \ 332 \ 330 \ 326 \ 233 \ 260; \ 223 \ 212z \ 333 \ 213 \ 21'1 \ 20 \ 7 \ 366 \"f \ 253 \ 373 \ 0059 \ 24 \ 206C4"...,5504)= 5504 ^ M[pid 14414] getsockopt(3,SOL_SOCKET,SO_RCVBUF,[87872],[4])= 0 ^ M[pid 14414] select(7,[3],[],NULL,NULL<未完成...> ^ M[pid 14433]< ...写入恢复>)=?ERESTARTSYS(如果设置了SA_RESTART,则重新启动)^ M[pid 14433]-SIGALRM {si_signo = SIGALRM,si_code = SI_KERNEL,si_value = {int = 1,ptr = 0x1}} --- ^ M[pid 14433] rt_sigreturn()= 1 ^ M[pid 14433] write(1,"Y \ 343} z \ 367 \ 31y \ 321)\ 254 \ 236na \ 274 \ 347 * \ 253 \ 247 \ 264d \ 25 \ 213 \ 364 \ 243 \ 331 \ 242 \ 236\ 3222U3 \ 246"...,8192)=吗?ERESTARTSYS(如果设置了SA_RESTART,则重新启动)^ M[pid 14433]-SIGALRM {si_signo = SIGALRM,si_code = SI_KERNEL,si_value = {int = 1,ptr = 0x1}} --- ^ M[pid 14433] rt_sigreturn()= 1 ^ M[pid 14433] write(1,"Y \ 343} z \ 367 \ 31y \ 321)\ 254 \ 236na \ 274 \ 347 * \ 253 \ 247 \ 264d \ 25 \ 213 \ 364 \ 243 \ 331 \ 242 \ 236\ 3222U3 \ 246"...,8192)=吗?ERESTARTSYS(如果设置了SA_RESTART,则重新启动)^ M[pid 14433]-SIGALRM {si_signo = SIGALRM,si_code = SI_KERNEL,si_value = {int = 1,ptr = 0x1}} --- ^ M[pid 14433] rt_sigreturn()= 1 ^ M[pid 14433] write(1,"Y \ 343} z \ 367 \ 31y \ 321)\ 254 \ 236na \ 274 \ 347 * \ 253 \ 247 \ 264d \ 25 \ 213 \ 364 \ 243 \ 331 \ 242 \ 236\ 3222U3 \ 246"...,8192)=吗?ERESTARTSYS(如果设置了SA_RESTART,则重新启动)^ M[pid 14433]-SIGALRM {si_signo = SIGALRM,si_code = SI_KERNEL,si_value = {int = 1,ptr = 0x1}} --- ^ M[pid 14433] rt_sigreturn()= 1 ^ M 

解决方案

问题是ssh中的错误.最近的版本损坏了某些内容,并且在进行大量传输时停滞了.有一种解决方法.

解决方法是在sshd_config中设置"TcpRcvBufPoll no".

http://forums.gentoo.org/viewtopic-t-925044-start-0-postdays-0-postorder-asc-highlight-.html

http://forums.gentoo.org/viewtopic-p-7036250.html

I'm having a problem where trying to do a git push hangs up while "Writing objects". This is not the common scenario of Windows and git-daemon that I have seen answered elsewhere. This is Linux to Linux, using ssh. On both the client and server, git version is 1.7.8.6.

I've tried doing the following:

  • Create a local empty repo and push to that -- works fine
  • Pull from local repo to local repo -- works fine
  • Clone the remote repo to the local machine -- works fine
  • git fsck and git gc on both server and client repos
  • Push to pre-existing remote repo -- hangs writing objects at 11%
  • Create empty remote repo and push to that -- hangs writing objects at 2%

There's an env variable I can set to make git produce debug messages. Nothing useful there.

I've talked to people at length in IRC about this, and I've tried googling it. We're getting nowhere. Can anyone here help me figure out what's going wrong?

Thanks!

UPDATE: Based on someone's suggestion, I did an strace -F, and it gets stuck on a select() in a child process. I'd provide the whole trace, but stackexchange doesn't have a way to upload. Anyhow, here's the relevant section:

[pid 14414] getsockopt(3, SOL_SOCKET, SO_RCVBUF, [87872], [4]) = 0^M
[pid 14414] select(7, [3 4], [3], NULL, NULL) = 2 (in [4], out [3])^M
[pid 14414] read(4,  <unfinished ...>^M
[pid 14433] <... write resumed> )       = 8192^M
[pid 14433] write(1, "\262\36\237\265\234\n\332W\26\271.\250\271W\34\250N\34*\341\247R\21\177\\Dq\23\27\211\270\25"..., 8192) = 8192^M
[pid 14433] write(1, "Y\343}z\367\31y\321)\254\236na\274\347*\253\247\264d\25\213\364\243\331\242\236\3222U3\246"..., 8192 <unfinished ...>^M
[pid 14414] <... read resumed> "t\277\177\276\361\377\327U\361Re\f\347\300\27\3\255}E\363\2277\312p\356F\335U\345\336\250\273"..., 16384) = 16384^M
[pid 14414] write(3, "\210y\r\202\303`\222m\216\177x \354\216Y\322n\232l\273\237\214\352\32\r\261r\311\347\356\236\26"..., 16432) = 16432^M
[pid 14414] getsockopt(3, SOL_SOCKET, SO_RCVBUF, [87872], [4]) = 0^M
[pid 14414] select(7, [3], [3], NULL, NULL) = 1 (out [3])^M
[pid 14414] write(3, "\v\267\355\33\257\332\330\326\233\260;\223\212z\333\213\21'1\20\7\366\"f\253\373\0059\24\206C4"..., 5504) = 5504^M
[pid 14414] getsockopt(3, SOL_SOCKET, SO_RCVBUF, [87872], [4]) = 0^M
[pid 14414] select(7, [3], [], NULL, NULL <unfinished ...>^M
[pid 14433] <... write resumed> )       = ? ERESTARTSYS (To be restarted if SA_RESTART is set)^M
[pid 14433] --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL, si_value={int=1, ptr=0x1}} ---^M
[pid 14433] rt_sigreturn()              = 1^M
[pid 14433] write(1, "Y\343}z\367\31y\321)\254\236na\274\347*\253\247\264d\25\213\364\243\331\242\236\3222U3\246"..., 8192) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)^M
[pid 14433] --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL, si_value={int=1, ptr=0x1}} ---^M
[pid 14433] rt_sigreturn()              = 1^M
[pid 14433] write(1, "Y\343}z\367\31y\321)\254\236na\274\347*\253\247\264d\25\213\364\243\331\242\236\3222U3\246"..., 8192) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)^M
[pid 14433] --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL, si_value={int=1, ptr=0x1}} ---^M
[pid 14433] rt_sigreturn()              = 1^M
[pid 14433] write(1, "Y\343}z\367\31y\321)\254\236na\274\347*\253\247\264d\25\213\364\243\331\242\236\3222U3\246"..., 8192) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)^M
[pid 14433] --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL, si_value={int=1, ptr=0x1}} ---^M
[pid 14433] rt_sigreturn()              = 1^M

解决方案

The problem was a bug in ssh. A recent version broke something, and it stalls out during large transfers. There is a work-around.

The fix is to set "TcpRcvBufPoll no" in sshd_config.

http://forums.gentoo.org/viewtopic-t-925044-start-0-postdays-0-postorder-asc-highlight-.html

http://forums.gentoo.org/viewtopic-p-7036250.html

这篇关于无法通过ssh推送到远程git repo,卡在“写入对象:11%"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆