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
。