git 推送详细,实体太大,由于 .git/objects/pack/

git push verbose, Entity Too Large, due to .git/objects/pack/

由于数据量过大,我无法 git 推送到远程。我最大的目录是 331MB(总共 525MB),但我的 .git 目录是 40GB,主要是由于 .git/objects/pack/

详细输出 (git push -v) 不是很详细(见下文),所以我不知道更多。

问题 1. git 推送是否有更详细的设置,可以帮助我查看具体失败的对象?

问题 2. 我的 .git/objects/pack 相对于我的总 code/file 大小是否异常大?如果是这样,我该如何减少它?

> git pull
> git push -v

Counting objects: 40, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (38/38), done.
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
fatal: The remote end hung up unexpectedly
Writing objects: 100% (40/40), 23.49 GiB | 219.65 MiB/s, done.
Total 40 (delta 23), reused 2 (delta 0)
fatal: The remote end hung up unexpectedly
Everything up-to-date

注意。我在 Ubuntu 16.04

上使用 git 2.7.4 和 bitbucket

Q1 - 这里就不多说了;您的存储库对于 bitbucket 来说太大了。

Q2 - 包文件包含数据库 - 即项目的 diffed/compressed 历史。由于很多原因,相对于您的工作树,它的大小可能会有很大差异。 (例如,有多少历史记录?有哪些文件?)也就是说,您的工作树和数据库看起来都很大,这让我觉得您正在存储大型二进制文件。 (图片。已编译的程序代码 - .jar、.war、.lib、.exe、...)

就其本身而言,git 不太擅长处理大型二进制文件。如果您要引入 .jar 或其他依赖库类型文件,请考虑使用构建工具来获取它们,而不是将它们存储在源代码管理中。如果您要存储真正需要成为源代码树一部分的二进制资产,请考虑使用 git lfs.

您可以使用 BFG Repo Cleaner 或 lfs-migrate 等工具重写您的存储库,使其使用 lfs。我都用过 - 有时一起使用,尽管有一些技巧可以让它们发挥得更好。各有利弊。

And/Or,您可以放弃部分或全部历史记录以保存 space。即使从一个新的 repo 开始,如果您有大量二进制资产,请使用 lfs 或找到一种不将它们存储在 git 中的方法,否则您很快就会 运行 再次遇到同样的问题。