我是The BFG的开发人员,我很高兴您发现它有用且快速。使 BFG 如此快速的部分特殊原因在于它是路径无关的 - 所以你不能直接说类似--delete /root/test/a.txt
. 我正在考虑为依赖路径的操作添加一些支持,但我不希望它对性能产生不利影响。
清理仓库时的关键问题是:在这两个选项中,您要实现什么目标:
从您的问题来看,听起来您唯一的目标是第一个目标,即减少 Git 存储库的大小。如果/root/test/a.txt
它相当小 - 即大小与您存储库中的其他合法文件相当 - 您不能真正使用--strip-blobs-bigger-than X
它来摆脱它,因为它会删除太多其他常规文件。但如果是这种情况,我会放松一下,放手——与整个回购相比,它不会花费你太多的存储空间。
如果/root/test/a.txt
大到足以打扰您,您可能只是--strip-blobs-bigger-than X
用来摆脱它 - 请记住,BFG 保护您当前提交中的所有文件(如果您使用,甚至可以保护更多分支--protect-blobs-from <refs>
) - 您当前正在使用的合法大文件不会被触动。
如果你真的想摆脱这个可怜的无害文件,但又不想过滤大小,有两个 BFG 支持的选项:
利用--delete-folders test
...这将删除整个文件夹/root/test/
(以及所有其他名为“test”的文件夹),但不会删除/root/test2/
. /root/test/
如果您想保留其他东西,则没有多大用处。
利用--strip-blobs-with-ids <blob-ids-file>
...您必须查找曾经存在的所有 Git blob-id /root/test/a.txt
,您可以使用以下 git 命令来完成:
git log --format=%H -- /root/test/a.txt | xargs -IcommitId git rev-parse commitId:/root/test/a.txt