Cleaning GIt历史记录不会缩小文件夹大小

问题描述 投票:0回答:1

我正在用历史上的许多大型tarball清理本地git repo。我执行了以下步骤:

  1. 列出回购中的所有tarball文件
FILE_LIST=`git rev-list master | while read rev; do git ls-tree -lr $rev  | cut -c54- | sed 's/^ +//g;'; done | grep <tarball name> | awk '{print $2}' | sort | uniq | tr '\n' ' '`
  1. 将其标记为删除
git filter-branch --tag-name-filter cat --index-filter "git rm -r --cached --ignore-unmatch $FILE_LIST" --prune-empty -f -- --all
  1. 垃圾收集
rm -rf .git/refs/original/ && git reflog expire --expire=now --all && git gc --aggressive --prune=now
git push origin --force --all && git push origin --force --tags

通过这样做,我大大减少了本地仓库的大小。但是,经过上述步骤,当我从源头获得干净的克隆文件时,克隆存储库的大小并没有减少,但通过验证以下那些大压缩包已经消失了

FILE_LIST=`git rev-list master | while read rev; do git ls-tree -lr $rev  | cut -c54- | sed 's/^ +//g;'; done | grep <tarball name> | awk '{print $2}' | sort | uniq | tr '\n' ' '`

我在克隆的仓库中再次进行了垃圾收集步骤,大小没有减小。

任何人都知道如何减少原始服务器上的repo大小?预先感谢。

git history
1个回答
0
投票
git rev-list --all --objects |                                # catalog of everything
git cat-file --batch-check='%(objectname) %(objectsize) %(rest)' |  # sha, size, name
awk '$2>limit{print $1}' limit=$((1*1024*1024))'             # just the oversize ones 

将告诉您回购中最大的对象。找到介绍它们的提交只是通过

进行搜索
git log --all --raw --no-abbrev --pretty=format:%H \
| awk 'NF==1 { commit=$1 } NF!=1 { print commit,$4 }'

用于匹配您的大对象,将大id写入文件并通过原始日志从文件中进行grep -Ff处理将向您显示哪些提交引入了哪个大对象。弄清楚其余的,我留给你。

© www.soinside.com 2019 - 2024. All rights reserved.