首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的git库这么大?

为什么我的git库这么大?
EN

Stack Overflow用户
提问于 2009-06-22 23:52:09
回答 12查看 102.4K关注 0票数 156

145M =.git/对象/包/

我编写了一个脚本,在从每个分支的尖端向后返回之前,将每个提交和提交的差异大小相加。我得到了129MB,这是没有压缩的,也没有考虑分支之间相同的文件和分支之间的共同历史记录。

Git将所有这些都考虑在内,所以我认为存储库要小得多。那么为什么.git会这么大呢?

我已经做到了:

git fsck --full
git gc --prune=today --aggressive
git repack

为了回答有多少个文件/提交,我有19个分支,每个分支大约40个文件。287个提交,使用以下命令找到:

git log --oneline --all|wc -l

它不应该花费10兆字节来存储关于这方面的信息。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-06-24 04:40:35

我最近把错误的远程存储库放入了本地存储库(git remote add ...git remote update)。删除不需要的远程引用、分支和标记后,我仍然有1.4 had (!)我的存储库中浪费的空间。我只能通过用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
票数 70
EN

Stack Overflow用户

发布于 2013-01-15 09:52:36

我使用的一些脚本:

git-fatfiles文件

git rev-list --all --objects | \
    sed -n $(git rev-list --objects --all | \
    cut -f1 -d' ' | \
    git cat-file --batch-check | \
    grep blob | \
    sort -n -k 3 | \
    tail -n40 | \
    while read hash type size; do 
         echo -n "-e s/$hash/$size/p ";
    done) | \
    sort -n -k1
...
89076 images/screenshots/properties.png
103472 images/screenshots/signals.png
9434202 video/parasite-intro.avi

如果需要更多行,请参阅相邻答案中的Perl版本:https://stackoverflow.com/a/45366030/266720

video/parasite.avi-消除(适用于git):

git filter-branch -f  --index-filter \
    'git rm --force --cached --ignore-unmatch video/parasite-intro.avi' \
     -- --all
rm -Rf .git/refs/original && \
    git reflog expire --expire=now --all && \
    git gc --aggressive && \
    git prune

注意:第二个脚本旨在从Git中完全删除信息(包括来自reflogs的所有信息)。请谨慎使用。

票数 168
EN

Stack Overflow用户

发布于 2009-06-24 05:54:06

git gc已经做了一个git repack,所以除非你要向它传递一些特殊的选项,否则手动重新打包是没有意义的。

第一步是查看大部分空间是否(通常情况下是这样)是您的对象数据库。

git count-objects -v

这应该会给出一个报告,说明您的存储库中有多少未打包的对象,它们占用了多少空间,您有多少打包文件,以及它们占用了多少空间。

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

如果你有一个很大的包,你想知道是什么占用了空间,那么你可以列出组成包的对象以及它们是如何存储的。

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

请注意,verify-pack接受一个索引文件,而不是包文件本身。这给出了包中每个物体的报告,它的真实大小和包的大小,以及关于它是否被‘剥离’的信息,如果是的话,增量链的起源。

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

从这个输出中,您将能够使用git show命令查看任何对象的内容,尽管不可能确切地看到该对象在存储库的提交历史记录中被引用的位置。如果您需要这样做,请尝试this question中的内容。

票数 69
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1029969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档