如何下载大型Git存储库?

问题描述 投票:16回答:7

我在BitBucket上有一个超过4GB的GIT存储库。

我无法使用普通的GIT命令克隆存储库,因为它失败了(看起来它工作了很长时间但后来又回滚)。 我也无法从BitBucket界面下载存储库作为zip:

Feature unavailable This repository is too large for us to generate a download.

有没有办法逐步下载GIT存储库?

git bitbucket
7个回答
12
投票

如果您不需要提取整个历史记录,则可以指定要克隆的修订数

git clone <repo_url> --depth=1

当然,如果您的存储库中有一个特别大的文件,这可能没有用


4
投票

一种可能的技术就是克隆一个分支。然后你可以稍后再拉。做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的信息


3
投票

对我来说,完美的帮助,就像在这个答案中描述的那样: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


1
投票

我使用这种方法fatal: early EOF fatal: index-pack failed让它工作

但只有在我设置SSL之后 - 这种方法仍无法通过HTTP工作。

BitBucket的支持非常有用,并指出了我的方向。


1
投票

BitBucket应该有一种方法来构建存档,即使对于Git 2.13.x / 2.14的大型回购(2017年第3季度)

参见commit 867e40f(2017年4月30日),commit ebdfa29(2017年4月27日),commit 4cdf3f9commit af95749commit 3c78fd8commit c061a14commit 758c1f9Rene Scharfe。 (Junio C Hamano -- gitster --于2017年5月16日在commit f085834合并)

archive-zip:支持大于4GB的文件

为大文件写一个zip64扩展信息额外字段作为其本地标题的一部分,并作为其中心目录标题的一部分。 在这种情况下,还要写一个zip64版本的数据描述符。

如果我们正在流式传输,那么在编写标头时我们不知道压缩的大小。如果我们运气不好,Deflate最终可能会使文件更大而不是更小。 在本例中,为大小为2GB或更大的文件写一个本地zip64头是安全的。

两个大小都需要包含在本地zip64头中,但目录的额外字段必须仅包含32位的0xffffffff值的等效值。


1
投票

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,这实际上是可恢复的。


0
投票

您只能克隆第一个提交,然后克隆第二个提交...等。如果两次提交之间的差异不是很大,那么拉动会更容易。你可以从这个answer看到更多的细节。

© www.soinside.com 2019 - 2024. All rights reserved.