我一直在使用BFG Repo-Cleaner工具,目的是通过从目录层次结构中的多个位置删除(临时/大型)文件来清理git repo的历史记录...
即/root/test/a.txt /root/test2/a.txt
现在,我想删除“ test / a.txt”的所有引用,但保留/test2/a.txt的版本。
有什么方法可以使用BFG彻底删除它吗?(如https://help.github.com/articles/remove-sensitive-data所述)
由于回购历史悠久(提交10K),因此BFG确实比我到目前为止看到的其他方法快很多...
我是BFG的开发人员,很高兴您发现它实用且快速。使BFG如此之快的特殊调味料的一部分是,它与路径无关-因此您不能直接说类似的东西--delete /root/test/a.txt
。我正在考虑为基于路径的操作添加一些支持,但是我不希望它对性能产生不利影响。
清理存储库时的关键问题是:在以下两个选项中,您要实现什么目标:
从您的问题看来,您的唯一目标是减少Git存储库大小的第一个目标。If/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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句