Git clone 大文件時報錯:Out of memory

Git在clone遠程大文件時,報錯Out of memory。意思是說clone的文件太大了,超出了限制,具體錯誤如下:

remote: Counting objects: 13847, done.
remote: error: Out of memory, malloc failed (tried to allocate 168827801 bytes)
remote: error: failed to read object e0f64433172d27df0609902b36accefc08b2e932 at offset 50780215 from ./objects/pack/pack-b65cc75a8685ba3c75207208eca4df10186ccd36.pack
remote: fatal: packed object e0f64433172d27df0609902b36accefc08b2e932 (stored in ./objects/pack/pack-b65cc75a8685ba3c75207208eca4df10186ccd36.pack) is corrupt
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

解決方案:

git config --global core.compression 0

git clone --depth 1 項目地址

以上就可以正常clone遠程項目到本地了。但是這裏還有一個問題:depth 用於指定clone的深度,當爲1時表示只clone最近一次commit。項目小了就可以解決前面說的文件過大導致的Out of memory。但這隻會把默認的分支clone下來,其它分支無法顯示。所以當使用git pul --all的時候無法獲取到遠程分支,使用git branch -r 也無法看到遠程分支。

解決方案:

方案1:

找到項目的 .git/config 

將原文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/ReactiveX/rxjs
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master

修改成:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/ReactiveX/rxjs
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

方案2:

拉取其它分支的時候使用如下命令:

 git clone --depth 1 遠程項目地址
 git remote set-branches origin 'remote_branch_name'
 git fetch --depth 1 origin remote_branch_name
 git checkout remote_branch_name
 

將remote_branch_name替換成要拉取的遠程分支名就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章