Rsync、Git大代码库

3

我想在本地机器上克隆一个Git仓库,但它说"malloc failed",因为仓库太大了。

有人知道我可以使用哪个精确的rsync命令来复制目录吗?或者还有其他什么方法可以克隆大型仓库吗?

我尝试过rsync,但是它给了我以下错误:

Invalid command: 'rsync --server --sender -v . username/dir.git'
  You appear to be using ssh to clone a git:// URL.
  Make sure your core.gitProxy config option and the
  GIT_PROXY_COMMAND environment variable are NOT set.
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [receiver=2.6.8]

当我尝试使用git clone时,出现以下错误:

remote: Counting objects: 52708, done.
remote: Compressing objects: 100% (52188/52188), done.
fatal: Out of memory, malloc failed (tried to allocate 1471836719 bytes)
fatal: index-pack failed

请在执行git clone命令前,尝试先执行git config --global http.postBuffer 524288000命令,详情请见https://dev59.com/e2w15IYBdhLWcg3wFHtZ#6849424。 - VonC
@VonC - 你不应该先问使用的是哪个协议吗?如果使用 ssh / git,那么这个设置就不重要了吧? - manojlds
你真的使用 rsync 克隆它吗? :? - KingCrunch
不行,git config --global http.postBuffer 524288000 没有起作用。:( 我已经编辑了我的问题以澄清我得到的错误。谢谢! - Chris Hansen
只是出于好奇,这个代码库有多大? - Nic
@lanojlds:没错,我假设是基于HTTP的克隆。而且无论如何,malloc的大小都是我建议的postBuffer大小的三倍! - VonC
3个回答

2

只需使用更新的 git 版本即可。新版本可以处理此问题。 或者,如果您已经使用新版本,请将 git config core.bigFileThreshold 设置为较小的大小。


我不知道那个特定的设置。+1 - VonC

0

如果你有一个非常大的文件,我认为除了尝试从仓库中删除它之外,你没有其他选择,假设:

  • 你可以访问远程服务器
  • 没有其他人成功克隆它(因为这将改变历史记录,在此过程中可能会导致现有克隆体在将来的拉取过程中出现问题)。

请参阅《Pro Git 书中的“从每个提交中移除文件”一节

git filter-branch --tree-filter 'rm -f bigFile' -- --all

同时也请查看《Git filter-branch 缩小代码库清单》章节git filter-branch


我认为你不能使用远程存储库来做那件事(Naissa 正在尝试创建本地克隆)。而且你怎么会认为没有人能够克隆这个存储库呢? - Christopher Creutzig
1
@Christopher:让我认为没有人能够克隆那个仓库的原因是当我最初回答这个问题时,已经是凌晨了。 - VonC

0

尝试使用ulimit允许git进程使用更多的内存。

  • ulimit -m XXX
  • ulimit -v YYY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接