filtrando otros files, respetando los cambios de nombre

Tengo un repository que efectivamente contiene un montón de diferentes modules. Me gustaría dividirlo en repositorys separados, manteniendo el historial de versiones de los files en esos repositorys.

Un enfoque simple para este problema implicaría simplemente clonar el repository y luego hacer algo como

git filter-branch \ --tree-filter $'find -type f \ | grep -vF <(echo "file1\nfile2\n...") -- --all \ | xargs rm' --prune-empty -- --all 

pero eso será (suponiendo que mi script no probado fue escrito correctamente) eliminar todos los files con los nombres dados.

Lo que realmente quiero hacer es recorrer el historial de confirmaciones, encontrar y eliminar files que no se hayan convertido en ninguno de esos files. Entonces, si file_a fue renombrado a file_b 14 commits ago, y (el actual) file_b se supone que es parte de este repository, esos viejos file_a 's también deberían mantenerse en el repository.

Esto debería extenderse en ambas direcciones; es decir, si hay otra twig en la que file_a nunca se renombró, realmente debería ser -err, en realidad eso es un poco ambiguo. La definición de file_a depende de una twig en particular. Lo que quiero (creo …) es especificar un set de blobs, por ej. HEAD:file_b , y hacer que el filter elimine todos los blobs que no son parte del historial de uno de esos blobs.