¿Cómo mover la statement de function a otro file pero retener el historial de Git?

Estoy refactorizando un script PHP de un solo file para declarar funciones y classs en files separados. ¿Cómo se mueve un bloque de código de un file a otro pero se conserva el historial de Git para cada línea individual? Me gustaría la capacidad de utilizar al less git blame en el código. Comparar versiones anteriores también sería útil.

Tenga en count que no estoy interesado en soluciones 'alternativas' que requieran commands o indicadores adicionales (como --follow ) en el código para ver su historial 'anterior', por lo que la persona que visualiza el historial debería saber que el file necesita un tratamiento especial Estoy buscando una solución que escriba los metadatos necesarios para que los commands normales de git como blame , log , diff y tal 'solo funcionen' sin presentarles banderas o arguments adicionales.

He leído bastantes publicaciones buscando soluciones a problemas similares , pero ninguna que aborde el problema de la git blame de git blame en líneas individuales. Una solución que creo que funcionaría sería copyr el file y todo su historial , y luego trabajar fuera de eso. Sin embargo, esa pregunta sigue sin una respuesta satisfactoria.

Advertencia: esto supone que el historial de reescritura es aceptable. No use esto a less que sepa las implicaciones de reescribir el historial.

Para dividir un file en varios files mientras se mantiene el historial, use git filter-branch :

 git filter-branch --tree-filter 'if [ -f original.php ]; then echo part1.php part2.php part3.php | xargs -n 1 cp original.php; fi' HEAD 

A continuación, elimine las líneas que no desea de cada file (dejando solo las funciones y classs deseadas) y ¡confirme el resultado!