我在BitBucket上有一个超过4GB的GIT存储库。
我无法使用普通的GIT命令克隆存储库,因为它失败了(看起来它工作了很长时间但后来又回滚)。 我也无法从BitBucket界面下载存储库作为zip:
Feature unavailable This repository is too large for us to generate a download.
有没有办法逐步下载GIT存储库?
如果您不需要提取整个历史记录,则可以指定要克隆的修订数
git clone <repo_url> --depth=1
当然,如果您的存储库中有一个特别大的文件,这可能没有用
一种可能的技术就是克隆一个分支。然后你可以稍后再拉。做git clone [url_of_remote] --branch [branch_name] --single-branch
。
大型存储库似乎是git的主要弱点。你可以在http://www.sitepoint.com/managing-huge-repositories-with-git/上读到这个。本文提到了一个名为git-annex的git扩展,它可以帮助处理大文件。在https://git-annex.branchable.com/查看。它有助于git管理文件而无需将文件检入git。免责声明,我自己从未尝试过。
How do I clone a large Git repository on an unreliable connection?的一些解决方案也可能会有所帮助。
编辑:既然你只是想要文件,你可以尝试git archive
。你会使用类似的语法
git archive --remote=ssh://[email protected]/username/reponame.git --format=tar --output="file.tar" master
我试图在我的AWS Codecommit帐户上测试一个回购,但它似乎不允许它。 BitBucket上的某个人可能会测试。请注意,在Windows上,您需要使用zip而不是tar,这一切都必须通过ssh连接而不是https来完成。
在git archive
阅读更多关于http://git-scm.com/docs/git-archive的信息
对我来说,完美的帮助,就像在这个答案中描述的那样:https://stackoverflow.com/a/22317479/6332374,但由于大回购,有一点改进:
首先:
git config --global core.compression 0
然后,克隆你的回购的一部分:
git clone --depth 1 <repo_URI>
现在“休息”
git fetch --unshallow
但这里有诀窍。当你有一个大回购有时你必须多次执行该步骤。所以...再次,
git fetch --unshallow
等等。
尝试多次。可能你会看到,每次执行'unshallow'时,你会在错误发生前得到越来越多的对象。
最后,只是为了确定。
git pull --all
我使用这种方法fatal: early EOF fatal: index-pack failed让它工作
但只有在我设置SSL之后 - 这种方法仍无法通过HTTP工作。
BitBucket的支持非常有用,并指出了我的方向。
BitBucket应该有一种方法来构建存档,即使对于Git 2.13.x / 2.14的大型回购(2017年第3季度)
参见commit 867e40f(2017年4月30日),commit ebdfa29(2017年4月27日),commit 4cdf3f9,commit af95749,commit 3c78fd8,commit c061a14和commit 758c1f9,Rene Scharfe。
(Junio C Hamano -- gitster
--于2017年5月16日在commit f085834合并)
archive-zip
:支持大于4GB的文件为大文件写一个
zip64
扩展信息额外字段作为其本地标题的一部分,并作为其中心目录标题的一部分。 在这种情况下,还要写一个zip64
版本的数据描述符。如果我们正在流式传输,那么在编写标头时我们不知道压缩的大小。如果我们运气不好,Deflate最终可能会使文件更大而不是更小。 在本例中,为大小为2GB或更大的文件写一个本地
zip64
头是安全的。两个大小都需要包含在本地
zip64
头中,但目录的额外字段必须仅包含32位的0xffffffff
值的等效值。
1)您最初可以下载仅具有最新提交修订版(深度= 1)的单个分支,这将显着减少要下载的repo的大小,并且仍然允许您处理代码库:
git clone --depth <Number> <repository> --branch <branch name> --single-branch
例:
git clone --depth 1 https://github.com/dundermifflin/dwightsecrets.git --branch scranton --single-branch
2)稍后您可以获得所有提交(在此之后您的repo将处于与git clone之后相同的状态):
git fetch --unshallow
或者如果它仍然太多,只获得最后25次提交:
git fetch --depth=25
其他方式:git clone
不可恢复,但你可以先在第三方服务器上git clone
,然后通过http / ftp下载完整的repo,这实际上是可恢复的。
您只能克隆第一个提交,然后克隆第二个提交...等。如果两次提交之间的差异不是很大,那么拉动会更容易。你可以从这个answer看到更多的细节。