11

我在“写入对象”时尝试执行 git push 时遇到问题。这不是我在其他地方看到的 Windows 和 git-daemon 的常见场景。这是 Linux 到 Linux,使用 ssh。在客户端和服务器上,git 版本都是 1.7.8.6。

我尝试过执行以下操作:

  • 创建一个本地空仓库并推送到该仓库——工作正常
  • 从本地仓库拉到本地仓库——工作正常
  • 将远程仓库克隆到本地机器——工作正常
  • git fsckgit gc在服务器和客户端回购
  • 推送到预先存在的远程仓库——将写入对象挂在 11%
  • 创建空的远程仓库并推送到该仓库——将写入对象挂在 2%

我可以设置一个环境变量来使 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 (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
4

2 回答 2

7

问题是 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

于 2012-05-29T22:22:44.307 回答
0

服务器有什么事情吗?我的第一个猜测是空间问题。

之后,我会检查 inode (df -i)。

于 2012-05-24T16:02:50.490 回答