git filter-branch --tree-filter不删除文件

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

我们的git存储库中有一个错误提交的文件。首先,我通过从How to find/identify large files/commits in Git history?运行以下命令找到了导致此问题的文件

$ git rev-list --objects --all \
> | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
> | awk '/^blob/ {print substr($0,6)}' \
> | cut --complement --characters=13-40 \
| sort --numeric-sort --key=2 \
> | cut --complement --characters=13-40 \
> | numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

结果6b82d8f18acd 716MiB MSSender/DebContainer.tar.tgz

然后,我使用git filter-branch --tree-filter "rm -f DebContainer.tar.tgz" HEAD --allhttps://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#The-Nuclear-Option:-filter-branch命令在所有分支中删除此文件。处理它时会创建一个gitrewrite文件夹并以相同的大小创建.git文件夹吗?我可能做错了什么?谢谢。

git git-filter-branch
1个回答
1
投票

git filter-branch documentation中记录了在重写历史记录后缩小存储库大小的过程。

某些引用仍可访问已删除的文件:

  • 引用filter-branch创建的备份
  • reflog参考

所以,要缩小.git文件夹,你必须摆脱这些引用:

  • 通过从重写的克隆创建一个新的克隆
  • 通过删除引用和垃圾收集回购内容: git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d git -c gc.reflogExpire=now gc --prune=all

注意: 需要将任何已修改的引用强制推送到原始存储库。 任何克隆此存储库的人都需要仔细更新它的存储库(每个本地分支的git pull --rebase应该是最好的选择)

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