由于部署问题,我们试图将git存储库缩小到500 to以下。
为了实现这一点,我们创建了一个新的分支,将所有旧的图像、视频和字体移到AWS S3中。
我可以很容易地获得git diff --name-only --diff-filter=D master -- public/assets/的文件列表。
现在,我已经尝试对每个文件运行BFG-回购清洁剂 1.14.0。但我有400个文件,需要很长时间才能单独删除每个文件(在我编写这个文件时仍在运行)。
git diff --name-only --diff-filter=D master -- public/assets/ | xargs -i basename '{}' | xargs -i bfg --delete-files '{}'
因为每个文件都是不同的,所以我不能像在使用bfg回购清洁器从多个分支删除多个文件中建议的那样使用glob模式。
我试图用逗号分隔每个文件,但这导致BFG-回购清洁剂告诉我:
BFG中止:没有参考更新-没有发现脏提交?
是否有一种方法可以向 BFG-回购清洁剂 提供多个文件,而不使用glob模式?
PS。我尝试使用多个文件的命令是:git diff --name-only --diff-filter=D master -- public/assets/ | xargs -i basename '{}' | sed -z 's/\n/,/g;s/,$/\n/' | xargs -i bfg --delete-files '{}' && git reflog expire --expire=now --all && git gc --prune=now --aggressive
PPS。bfg命令作为一个简单的bash脚本在我的路径上使用java -jar /tools/BFG-repo-cleaner/bfg-1.14.0.jar "$@"
发布于 2021-12-17 00:26:38
但是我有400个文件,每个文件都需要很长的时间才能分别删除。
这就是为什么要使用的工具(基于python的)是newren/git-filter-repo (参见安装)。
这样,您就可以为该工具提供一个文件,其中包含文件列表:
git filter-repo --paths-from-file <filename> --invert-paths来自文献资料
类似地,您可以使用
--paths-from-file删除许多文件。 例如,您可以运行git filter-repo --analyze来获取报告,查看一个例如.git/filter-repo/analysis/path-deleted-sizes.txt,然后将所有文件名复制到一个文件中,比如/tmp/files-i-dont-want-anymore.txt,然后运行: git过滤器-回购-反转路径\-路径-从文件/tmp/文件-i-不想要-任何更.git 把它们全部删除。
https://stackoverflow.com/questions/70387071
复制相似问题