The general rule to maintaining blame history is to make a separate move commit first before any edits. It has been my experience that this allows git blame to work without the need for the -C option. So in the case of splitting the file up into new files, this can be done in two commits:
- Duplicate the original to the new destinations, making sure to delete the original
- Remove the extra sections from the duplicated files
In the example provided, this would be:
cp a.php b.php mv a.php c.php git add a.php b.php c.php git commit vim b.php # delete everything but 1 function vim c.php # delete the 1 function git add b.php c.php git commit