2013-07-24 112 views
6

當試圖克隆大量回購(〜700MB)通過https,git的失敗:gitlab:混帳克隆HTTPS大回購失敗

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

克隆通過SSH工作:

c:\git-projects>git clone [email protected]: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 

問候,馬科


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: [email protected]: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 
+0

由什麼終止? OOM殺手?的ulimit?還有別的嗎? –

+0

你的tmp區域和RAM的大小是多少? –

+0

tmp是2GB,ulimit是無限制的,在系統日誌中沒有殺死進程 – mawl

回答

5

這在issue 3079報道:HTTPS克隆要求GitLab服務器上的大量資源(CPU,但主要是存儲器),和當前(GitLab 5.x)大回購。

甚至GitLab 6.0自帶commits like 7ecebdd,提到克隆時超時回購。

我還沒有用GitLab 6進行過測試,但是(明天應該發佈)。

+0

我今天會更新到6.0,讓我們看看它是否帶來修復。 – mawl

+0

6.0.1具有相同的問題。現在它運行與獨角獸不是美洲獅,錯誤代碼是502. – mawl

+0

@mawl我見過那個開關(http://stackoverflow.com/a/18398991/6309)。但是我沒有看到6.0.1。我按照即將到來的6.1提交。 – VonC

1

考慮爲nginx實現一個分塊插件,如HttpChunkinModule

我個人還沒有部署上述,但有一個類似的問題客戶。

在他們的情況下,問題是在客戶端,我們需要指導開發者使用以下的調整,以當地混帳配置:

混帳配置http.postBuffer 524288000#設置爲500MB

上面只會在客戶端允許更大的git相關http請求(我們在服務器端有足夠的內存)。

+0

如果您使用nginx> 1.3.8,則不再需要HttpChunkinModule http://wiki.nginx.org/HttpChunkinModule – spuder

+0

推送到https服務器時發生同樣的錯誤,此修復程序解決了此問題,謝謝。 –