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替換成要拉取的遠程分支名就可以了。