为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的git存储库这么大?

为什么我的git存储库这么大?

Git
慕仙森 2019-08-30 11:02:16
为什么我的git存储库这么大?145M = .git / objects / pack /我编写了一个脚本来添加每个提交和提交的差异大小,然后再从每个分支的尖端向后移动。我得到129MB,没有压缩,没有分支机构的相同文件和分支机构之间的共同历史记录。Git考虑了所有这些因素,所以我期望更小的存储库。那么为什么.git这么大?我弄完了:git fsck --fullgit gc --prune=today --aggressivegit repack要回答有多少文件/提交,我有19个分支,每个文件大约有40个文件。287次提交,发现使用:git log --oneline --all|wc -l它不应该使用10兆字节来存储有关此信息。
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

我最近把错误的远程存储库拉到了本地(git remote add ...和git remote update)。删除不需要的远程引用,分支和标签后,我的存储库中仍然有1.4GB(!)的浪费空间。我只能通过克隆来摆脱它git clone file:///path/to/repository。请注意,file://克隆本地存储库时会产生一些差异 - 只会复制引用的对象,而不是整个目录结构。


编辑:这是Ian的一个班轮,用于重新创建新回购中的所有分支:


d1=#original repo

d2=#new repo (must already exist)

cd $d1

for b in $(git branch | cut -c 3-)

do

    git checkout $b

    x=$(git rev-parse HEAD)

    cd $d2

    git checkout -b $b $x

    cd $d1

done


查看完整回答
反对 回复 2019-08-30
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

git gc已经做了git repack所以没有任何意义在手动重新包装,除非你要传递一些特殊的选项。


第一步是查看大多数空间(通常情况下)是否是对象数据库。


git count-objects -v

这应该会报告存储库中有多少个解压缩的对象,它们占用了多少空间,有多少包文件以及它们占用了多少空间。


理想情况下,在重新打包之后,您将没有解压缩的对象和一个打包文件,但是当前分支不能直接引用的某些对象仍然存在和解压缩是完全正常的。


如果您有一个大包装并且想知道占用空间的是什么,那么您可以列出构成包装的对象以及它们的存储方式。


git verify-pack -v .git/objects/pack/pack-*.idx

请注意,verify-pack它采用索引文件而不是包文件本身。这给出了包中每个对象的报告,它的真实大小和包装大小,以及关于它是否已经“完整”的信息,如果是,那么三角链的起源。


要查看存储库中是否存在任何异常大的对象,您可以在第四列的第三列(例如| sort -k3n)上以数字方式对输出进行排序。


通过此输出,您将能够使用该git show命令查看任何对象的内容,尽管无法准确查看引用该对象的存储库的提交历史记录中的位置。如果您需要这样做,请尝试这个问题。


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 906 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信