2013-01-17 251 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