gitlab:git clone https with big repos失败

时间:2013-07-24 06:25:57

标签: git git-clone gitlab

当尝试通过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,因为git的visual studio工具仍然没有实现ssh。

在服务器上有两个进程,一段时间后CPU负载变为100%,然后进程终止。

git pack-objects --revs --all --stdout --progress --delta-base-offset 

问候,Marco


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

2 个答案:

答案 0 :(得分:5)

这在issue 3079中报告:https克隆需要GitLab服务器上的大量资源(CPU,但主要是内存),以及当前(GitLab 5.x)大型回购。

即使GitLab 6.0附带commits like 7ecebdd,也会在克隆大型回购时提及超时。

我还没有用GitLab 6进行测试(明天会发布)。

答案 1 :(得分:1)

考虑为nginx实现一个分块插件,例如HttpChunkinModule

我个人没有部署上述内容,但有一个类似问题的客户。

在他们的情况下,问题是在客户端,我们需要指示开发人员使用以下调整到他们的本地git配置:

git config http.postBuffer 524288000 #Set to 500MB

以上只会在客户端允许更大的与git相关的http请求(我们在服务器端有足够的内存)。