错误:git-upload-pack因信号13而死亡

6

我有一个运行在Mac OS X 10.9.2上的GitLab服务器(版本为6.7.2),使用git 1.9.2。这个服务器上有两个仓库。其中一个可以成功克隆,但另一个失败了,提示:

$ git clone http://*/gamil/gamil.git
Cloning into 'gamil'...
remote: Counting objects: 426, done.
remote: Compressing objects: 100% (375/375), done.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

我在GitLab中检查了unicorn.stderr.log,发现

I, [2014-04-21T23:03:58.761225 #4929]  INFO -- : master process ready
I, [2014-04-21T23:03:58.764556 #4940]  INFO -- : worker=0 ready
I, [2014-04-21T23:03:58.766098 #4941]  INFO -- : worker=1 ready
error: git-upload-pack died of signal 13

这个错误是什么原因导致的?如何修复它?提前感谢!
编辑1:我检查了存储库:
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (426/426), done.

看起来一切都很好,但是无法克隆到本地计算机。

编辑2:

我已经更新了GitLab到6.8版,但没有运气。

编辑3:

我可以通过ssh协议克隆有问题的存储库。

$ git clone dongli@<...>:gamil
Cloning into 'gamil'...
remote: Counting objects: 426, done.
remote: Compressing objects: 100% (317/317), done.
remote: Total 426 (delta 89), reused 426 (delta 89)
Receiving objects: 100% (426/426), 821.19 KiB | 0 bytes/s, done.
Resolving deltas: 100% (89/89), done.
Checking connectivity... done.

编辑4:

我检查了 unicorn.rb 中的超时时间:

# nuke workers after 30 seconds instead of 60 seconds (the default)
timeout 300

以及 nginx 的配置:

# if a file, which is not found in the root folder is requested,
# then the proxy pass the request to the upsteam (gitlab unicorn)
location @gitlab {
  proxy_read_timeout 300; # Some requests take more than 30 seconds.
  proxy_connect_timeout 300; # Some requests take more than 30 seconds.
  proxy_redirect     off;

  proxy_set_header   X-Forwarded-Proto $scheme;
  proxy_set_header   Host              $http_host;
  proxy_set_header   X-Real-IP         $remote_addr;
  proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;

  proxy_pass http://gitlab;
}

编辑5

我已将代码库上传至GitHub,克隆操作正常:

$ git clone https://github.com/dongli/GAMIL.git 1
Cloning into '1'...
remote: Counting objects: 355, done.
remote: Compressing objects: 100% (308/308), done.
remote: Total 355 (delta 35), reused 355 (delta 35)
Receiving objects: 100% (355/355), 809.75 KiB | 244.00 KiB/s, done.
Resolving deltas: 100% (35/35), done.
Checking connectivity... done.

所以这个代码库是好的。

"fatal: The remote end hung up unexpectedly" - http://whatever.wherever.foo 由于某些原因关闭了连接。 - twalberg
我该如何诊断原因?实际上,服务器unicorn报告了错误:git-upload-pack死于13号信号 - Li Dong
只是一个猜测,但我觉得超时可能会导致连接中断。不过,这似乎有点不太可能。 - Michael
编辑unicorn.rb文件并将“timeout”增加到大于“30”的数值。 - Jason Sturges
1个回答

2

我通过查看/var/log/nginx/gitlab_error.log文件找到了我的问题所在,该日志文件中抱怨:

2014/04/27 17:25:21 [crit] 14331#0: *19 open() 
"/usr/local/var/run/nginx/proxy_temp/3/00/0000000003" failed (13: Permission denied)
while reading upstream, client: 123.113.33.131, server: *, request:
"POST /gamil/gamil.git/git-upload-pack HTTP/1.1", 
upstream: "http://unix:/Users/git/gitlab/tmp/sockets/gitlab.socket:/gamil/gamil.git/git-upload-pack", host: "*"

目录/usr/local/var的访问权限为。
drwx------    8 dongli  admin    272  4  1 14:55 var

所以我把它改成了

drwxr-x---    8 dongli  admin    272  4  1 14:55 var

然后错误最终消失了。

1
这很不可能是问题,特别是如果较小的存储库可以成功工作。 - Jason Sturges

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接