[精讚] [會員登入]
130

[GITLAB] 解決git使用http/https clone或pull時在大小達1G時的斷線問題

git clone大專案時出現RPC failed; curl 18 transfer closed with outstanding read data remaining的錯誤,如何解決?

分享此文連結 //n.sfs.tw/16335

分享連結 [GITLAB] 解決git使用http/https clone或pull時在大小達1G時的斷線問題@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-01-21 12:01:05 最後編修
2024-01-21 03:08:45 By 張○○
 

事情是這樣的,我建了一個gitlab,平時就把寫的程式丟上去。

今天有一個移機的需求,這個專案很大,大約有10G的大小。

每當我在git pull 或是 clone 這個專案的時候,就出現了錯誤,如下面的橘色文字

# git pull http://example.com/myname/project.git
Username for 'http://example.com': myname
Password for 'http://myname@example.com':<打入密碼>
remote: Enumerating objects: 89044, done.
remote: Counting objects: 100% (632/632), done.
remote: Compressing objects: 100% (631/631), done.
Receiving objects:  5% (5245/89044), 0.60 GiB | 10.08 MiB/s  <== 這個會一直跳動直到出錯
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
error: 2803 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

當我試著去搜尋這個錯誤的解決方法時我得到以下的建議[1][2][3[4]]

git config --global http.postBuffer 524288000

git config --global http.version HTTP/1.1

git clone repo_url --depth 1

git fetch --unshallow

git config --global core.compression 0

echo 1 > /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal

export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1

git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
git config --global pack.window "0"

以上指令都是沒效的,浪費了不少時間,最後還得把設定清掉並重開機:

查看設定

$ git config --global -l

移除單一設定

$ git config --global --unset pack.threads

移除群組設定

$ git config --global --remove-section pack

或直接編輯設定檔,這個檔在git 的根目錄上。

$ vi .gitconfig

 

經過幾次嘗試,我發現這個錯誤總是發生在接收大小約為1G的時候出錯,於是我想錯誤的原因會不會是出現在 gitlab 身上而不是我的伺服器本身?

其實這個問題以前也有出現過一次,那時急於下載駝鳥的解決方法就是改用 ssh,只是他很麻煩得上傳公鑰。這次想真正的解決問題。

於是開始搜尋有關 gitlab 1G的限制設定問題,就找到官網有一個表格[5]:

裡面有一個參數 Maximum site size 1 GB ,而且下面還有加註 The maximum size of your Pages site depends on the maximum artifact size, which is part of GitLab CI/CD.

似乎這就是我的目標:要修改這個參數,網路上沒有找到修改的方法,只能看官網的說明去修改這個參數上 Artifacts maximum size (compressed)

調整了全域和專案中的 Artifacts maximum size 都改成30G結果還是一樣,在下載到 1G 時就斷線。

這其間還研究了 GITLAB本身看有沒有隱藏的設定,無果。

經過我多次嘗式,後來我在

Admin Area-> Settings -> CI/CD -> Package file size limits

中找到下面欄位,把他改成約3G大小,再重試

Maximum Terraform Module package file size in bytes

Generic package file size in bytes

<沒有填,但是不確定是不是本來就沒有還是不小心刪了?>

本來想說填個3g看會不在3g的地方停止,沒想到重試竟然就成功了:

remote: Enumerating objects: 89044, done.
remote: Counting objects: 100% (632/632), done.
remote: Compressing objects: 100% (631/631), done.
remote: Total 89044 (delta 3), reused 609 (delta 1), pack-reused 88412
Receiving objects: 100% (89044/89044), 10.83 GiB | 10.65 MiB/s, done.
Resolving deltas: 100% (26302/26302), done.
From http://example/yourname/project
 * branch                HEAD       -> FETCH_HEAD
Updating files: 100% (64660/64660), done.

我的確不能理解為什麼設成3 G竟然能傳超過3G的大小?

可能和上面的Artifacts maximum size 也有關係,這次就懶得做實驗了。

ps:網頁上修改 gitlab 參數不必重啟 gitlab。

 

參考資料

[1] https://blog.csdn.net/yihuajack/article/details/103650588

[2] https://stackoverflow.com/questions/48200429/not-able-to-clone-large-repo-code-on-git

[3] https://stackoverflow.com/questions/26286155/pull-large-repository-more-than-1gb-size-over-http-fail

[4] https://confluence.atlassian.com/bitbucketserverkb/git-clone-fails-fatal-the-remote-end-hung-up-unexpectedly-fatal-early-eof-fatal-index-pack-failed-779171803.html

[5] https://docs.gitlab.com/ee/user/gitlab_com/

 

 

END

你可能感興趣的文章

超強姓名音譯網站 超級強,符合我所有需求

移除google 的頁庫存檔--移除在google中保存的網頁資料 我的網頁或文件被google保存了,但我不想給別人下載要怎麼做?

台灣佳光(台數科)、群健有線寬頻使用心得 我的台灣佳光(已改名台數科)、群健有線(TBC)'、中華電光世代ADSL、企業專線寬頻使用心得(台中)

常用1200字簡體字 為了加速正簡互換的效能,我針對常見的簡體字做了挑選,花了六個小時,整理出最常用的1200個簡體中文字及正體中文字對照

[GITLAB] 解決git使用http/https clone或pull時在大小達1G時的斷線問題 git clone大專案時出現RPC failed; curl 18 transfer closed with outstanding read data remaining的錯誤,如何解決?

來自網路的爬蟲分析 分析最近來自網路上的爬蟲

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

為什麼要重造輪子? 什麼輪子?造什麼輪子?我為什麼要重造輪子?

詭異的創業思維 創業的思維中,有多少銀彈,有多少技術,有多少人脈,有多少時間等等,每個都要考慮進去,以熱忱建立的關係脆弱的像蘇打餅乾一樣..

APACHE的記錄檔格式 LogFormat 語法 在APACHE中有定義一些記錄的語法模版 在 /etc/httpd/conf/httpd.conf 中: LogForm

[CodeIgniter 3] 資料庫的使用方法整理1/2 --Select的使用 [CodeIgniter 3] 資料庫的使用方法整理:Select的使用