gitlab: no funciona el clon de git https con repos grandes

Al intentar clonar un repository grande (~ 700MB) sobre https, git falla con:

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 

clonar sobre ssh funciona:

 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. 

Clonar repositorys más pequeños con https también funciona:

 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. 

Ya he modificado algunos parameters pero sin éxito:

 /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 (eg 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 

Nos gustaría utilizar git clone https, ya que las herramientas de Visual Studio para git aún no han implementado ssh.

En el server hay dos processs, la carga de la CPU va al 100% después de un time, luego los processs finalizan.

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

Saludos, 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 

Esto se informa en el número 3079 : la clonación de https requiere una gran cantidad de resources (CPU, pero principalmente memory) en el server de GitLab, y actualmente (GitLab 5.x) grandes repositorys.

Incluso GitLab 6.0 viene con confirmaciones como 7ecebdd , mencionando times de espera al clonar repo grande .

No he probado con GitLab 6, sin embargo (que debería lanzarse mañana).

Considere implementar un plugin de fragmentación para nginx, como HttpChunkinModule .

Personalmente no he implementado lo anterior, pero tengo un cliente con problemas similares.

En su caso, el problema está en el lado del cliente, donde debemos instruir a los desarrolladores para que utilicen el siguiente ajuste en su configuration de git local:

git config http.postBuffer 524288000 # Set a 500 MB

Lo anterior simplemente permitirá peticiones HTTP más grandes relacionadas con git en el lado del cliente (tenemos mucha memory en el lado del server).