GitLab: 使用HTTPS克隆大型仓库失败

7

尝试通过https克隆大型仓库(~700MB)时,git会失败并显示以下错误:

c:\git-projects>git clone https://git.mycompany.de/fs.git
Cloning into 'fs'...
Username for 'https://git.mycompany.de': mwlo
Password for 'https://mwlo@git.mycompany.de':
efrror: RPC failed; result=22, HTTP code = 500
atal: The remote end hung up unexpectedly

通过ssh克隆工作:

c:\git-projects>git clone git@git.mycompany.de:fs.git
Cloning into 'fs'...
remote: Counting objects: 144564, done.
remote: Compressing objects: 100% (30842/30842), done.
remote: Total 144564 (delta 95360), reused 143746 (delta 94542)
Receiving objects: 100% (144564/144564), 601.34 MiB | 1.33 MiB/s, done.
Resolving deltas: 100% (95360/95360), done.
Checking out files: 100% (4649/4649), done.

用HTTPS克隆较小的代码库也是可行的:
c:\git-projects>git clone https://git.mycompany.de/git-test.git
Cloning into 'git-test'...
remote: Counting objects: 135, done.
remote: Compressing objects: 100% (129/129), done.
remote: Total 135 (delta 68), reused 0 (delta 0)
Receiving objects: 100% (135/135), 18.77 KiB | 0 bytes/s, done.
Resolving deltas: 100% (68/68), done.

我已经调整了一些参数,但没有成功:

/etc/nginx/nginx.conf
worker_processes  2; # have two cpu's
keepalive_timeout  120;
client_max_body_size 3072m;

/home/git/gitlab/config/gitlab.yml
## Git settings
  # CAUTION!
  # Use the default values unless you really know what you are doing
  git:
    bin_path: /usr/bin/git
    # Max size of a git object (e.g. a commit), in bytes
    # This value can be increased if you have very large commits
    max_size: 3221225472 # 3072.megabytes
    # Git timeout to read a commit, in seconds
    timeout: 120

我们希望使用git clone https,因为Visual Studio Git工具还没有实现ssh。
服务器上有两个进程,在一段时间后CPU负载达到100%,然后进程被终止。
git pack-objects --revs --all --stdout --progress --delta-base-offset 

问候,马可


System information
System:         Debian 6.0.7
Current User:   root
Using RVM:      no
Ruby Version:   1.9.3p392
Gem Version:    1.8.23
Bundler Version:1.3.5
Rake Version:   10.0.4

GitLab information
Version:        5.3.0
Revision:       148eade
Directory:      /home/git/gitlab
DB Adapter:     mysql2
URL:            https://git.mycompany.de
HTTP Clone URL: https://git.mycompany.de/some-project.git
SSH Clone URL:  git@git.mycompany.de:some-project.git
Using LDAP:     yes
Using Omniauth: no

GitLab Shell
Version:        1.4.0
Repositories:   /home/git/repositories/
Hooks:          /home/git/gitlab-shell/hooks/
Git:            /usr/bin/git

终止原因是什么?oom-killer?ulimit?还是其他什么? - Todd A. Jacobs
你的 tmp 区域和 RAM 大小是多少? - Arihant Godha
tmp 是 2GB,ulimit 是无限的,在 syslog 中没有被杀死的进程。 - mawl
2个回答

5
这是在3079问题中报道的:在GitLab服务器上克隆https需要大量资源(CPU,但主要是内存),目前(GitLab 5.x)适用于大型repo。
即使是GitLab 6.0也有像7ecebdd这样的提交,提到了克隆大型 repo 时出现超时的情况。
不过,我还没有在GitLab 6上进行测试(预计明天发布)。

我这几天会升级到6.0版本,看看它是否能解决问题。 - mawl
6.0.1 仍然存在相同的问题。现在它使用 unicorn 而不是 puma 运行,错误代码为 502。 - mawl
@mawl,我看到了这个switch(https://dev59.com/hWMl5IYBdhLWcg3wcmrD#18398991)。但是我没有看到6.0.1。我正在关注即将发布的6.1的提交。 - VonC
版本6.0是6.0.1(更新后请查看帮助页面) - mawl
@maestromani,你先尝试使用更新版本的GitLab了吗? - VonC
显示剩余2条评论

1
考虑为nginx实现一个分块插件,比如HttpChunkinModule
我个人没有部署上述内容,但是有一个类似问题的客户。
在他们的情况下,问题在客户端,我们需要指导开发人员使用以下方法修改本地git配置:
git config http.postBuffer 524288000 #设置为500MB
以上内容将简单地允许客户端进行更大的与git相关的http请求(我们在服务器端有足够的内存)。

如果您使用的是nginx > 1.3.8,那么就不再需要HttpChunkinModule了。http://wiki.nginx.org/HttpChunkinModule - spuder
当我向一个https服务器推送时,我遇到了同样的错误,这个修复方法解决了问题,谢谢。 - Ian Ozsvald

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