Git filter-branch –index-filter vuelve a aplicar el filter "limpio"

Los filters clean y smudge Git se pueden usar para almacenar una representación diferente en el repository que en el tree de trabajo. Para aplicar un filter limpio retroactivamente, puedo ejecutar

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

donde el script toca los files que necesitan ser revisados. Desafortunadamente, esto es bastante lento porque está actualizando todo el tree de trabajo para cada confirmación. ¿Hay alguna manera de volver a aplicar el filter limpio dentro de un --index-filter ?

Sí: en su filter de índice, haga la git checkout -- path/to/file , haga lo que git checkout -- path/to/file , y vuelva a git add

Para volver a limpiar de manera eficiente sin tocar el sistema de files, filtre la salida de git ls-files -s para que coincida con los files que quería volver a limpiar, luego

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

para crear un nuevo object para la representación limpia. Suministro todos estos objects nuevos (formateados para que coincidan con la salida de git ls-files -s ) a git update-index --index-info . Mi filter realiza la optimization adicional de almacenar en caching la traducción de blobs antiguos a blobs nuevos (limpios) para que cualquier blob determinado solo se limpie una vez. Ver git fat index-filter para la implementación completa.