Git 过滤器分支 --索引过滤器重新应用"clean"过滤器



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

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

其中脚本涉及那些需要重新clean编辑的文件。不幸的是,这相当慢,因为它正在为每次提交更新整个工作树。有没有办法在--index-filter中重新应用干净的过滤器?

是:在索引过滤器中,执行git checkout -- path/to/file,按自己的方式执行,然后再执行git add

为了在不接触文件系统的情况下高效地重新清理,我过滤了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

最新更新