Git filter-branch --index-filter重新应用“clean”过滤器

时间:2013-01-17 02:40:35

标签: performance git

Git的cleansmudge过滤器可用于在存储库中存储与工作树中不同的表示形式。为了追溯应用干净的过滤器,我可以运行

git filter-branch --tree-filter /the/script.sh -- --all

脚本触及那些需要重新clean ed的文件。不幸的是,这是相当慢的,因为它正在为每次提交更新整个工作树。有没有办法在--index-filter

中重新应用清洁过滤器

2 个答案:

答案 0 :(得分:1)

是的:在您的索引过滤器中,执行git checkout -- path/to/file,使用它,再次git add

答案 1 :(得分:0)

要在不触及文件系统的情况下有效地重新清理,我过滤了git ls-files -s的输出以匹配我想要重新清理的文件,然后

git cat-file blob BLOB_TO_RECLEAN | my-clean-filter | git hash-object -w

为清理后的表示创建新对象。我将所有这些新对象(重新格式化以匹配git ls-files -s的输出)提供给git update-index --index-info。我的过滤器进一步优化了从旧blob到新(清理)blob的转换缓存,以便任何给定的blob只清理一次。有关完整的实施,请参阅git fat index-filter