Git的clean
和smudge
过滤器可用于在存储库中存储不同于工作树中的表示。追溯应用清洁过滤器,我可以运行Git过滤器分支 - 索引过滤器重新应用“干净”过滤器
git filter-branch --tree-filter /the/script.sh -- --all
在脚本倒是那些需要进行重新clean
编辑文件。不幸的是,这很慢,因为它正在更新每个提交的整个工作树。有没有办法在--index-filter
内重新使用清洁过滤器?
Git的clean
和smudge
过滤器可用于在存储库中存储不同于工作树中的表示。追溯应用清洁过滤器,我可以运行Git过滤器分支 - 索引过滤器重新应用“干净”过滤器
git filter-branch --tree-filter /the/script.sh -- --all
在脚本倒是那些需要进行重新clean
编辑文件。不幸的是,这很慢,因为它正在更新每个提交的整个工作树。有没有办法在--index-filter
内重新使用清洁过滤器?
是:在你的索引过滤器,做git checkout -- path/to/file
,有你的方式使用它,并再次
要重新清洁高效而不触及文件系统,我过滤的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
。