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兆字节来存储关于这方面的信息。
发布于 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
发布于 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的所有信息)。请谨慎使用。
发布于 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中的内容。
https://stackoverflow.com/questions/1029969
复制相似问题