【问题标题】:Cleaning GIt history does not shrink the folder size清理 GIt 历史记录不会缩小文件夹大小
【发布时间】:2019-10-23 20:19:16
【问题描述】:

我正在清理一个本地 git repo,历史上有很多大的 tarball。我做了以下步骤:

  1. 列出 repo 中的所有 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
  1. 推送
git push origin --force --all && git push origin --force --tags

通过这样做,我显着减少了本地 repo 的大小。但是,当我经过上述步骤从源站得到一个干净的克隆时,克隆的 repo 的大小并没有减少,但是通过验证,那些大的 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' ' '`

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

有人知道我可以如何减少原始服务器上的 repo 大小吗?提前致谢。

【问题讨论】:

  • 我已经编辑了您的问题,因此命令被格式化为代码。您可以考虑使用反斜杠来编辑带有续行的命令,这样就可以在不滚动到一边的情况下阅读它们。
  • 您好 Saurabh,我可以理解远程 repo 的大小在您发布的线程中没有减少,因为远程服务器也需要进行垃圾收集。但我的情况不同,我在清理和推送之后从遥控器做了一个新的克隆。我不希望这个克隆的大小在没有垃圾收集的情况下减少。但经过另一次垃圾回收后,这个克隆的大小并没有减少一个字节,奇怪的是我在历史上也找不到那些大的 tarball。我想知道哪个占用了这么多空间。
  • 顺便说一句,我使用 du -h 命令测量 repo 目录大小。
  • 您可能想查看此stackoverflow.com/questions/8185276/find-size-of-git-repo 以了解 repo 大小

标签: git history


【解决方案1】:
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 

会告诉你 repo 中最大的对象。找到引入它们的提交是一个寻找的问题

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

为了匹配您的大对象,将大 id 写入文件,然后通过原始日志grep -Ffing 将向您显示哪些提交引入了哪个大对象。剩下的事情我就交给你了。

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 2012-08-10
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多