2013-01-17 196 views
0

Git的cleansmudge过滤器可用于在存储库中存储不同于工作树中的表示。追溯应用清洁过滤器,我可以运行Git过滤器分支 - 索引过滤器重新应用“干净”过滤器

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

在脚本倒是那些需要进行重新clean编辑文件。不幸的是,这很慢,因为它正在更新每个提交的整个工作树。有没有办法在--index-filter内重新使用清洁过滤器?

回答

1

是:在你的索引过滤器,做git checkout -- path/to/file,有你的方式使用它,并再次

0

要重新清洁高效而不触及文件系统,我过滤的git ls-files -s输出匹配这些文件git add它我想要重新清洁,然后

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

为清洁表示创建一个新对象。我将所有这些新对象(重新格式化以匹配git ls-files -s的输出)提供给git update-index --index-info。我的过滤器进一步优化了从旧斑点到新(已清理)斑点的翻译缓存,以便任何给定斑点仅被清理一次。完整实现请参见git fat index-filter