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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

145 M=.git/objects/pack/

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

GIT考虑了所有这些因素,所以我希望存储库要小得多。为什么...这么大?

我做过:

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

要回答多少文件/提交,我有19个分支,每个大约40个文件。287提交,使用:

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

它不应该用10兆字节来存储这方面的信息。

提问于
用户回答回答于

最近,我将错误的远程存储库放入本地存储库(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
用户回答回答于

我使用的一些脚本:

Git-FATFILE

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

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

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中的信息(包括所有来自reflgs的信息)。小心使用。

扫码关注云+社区