How to extract a single file with its history from a git repository
These steps show two less common interactions with git to extract a single file which is inside a subfolder from a git repository. These steps essentially reduce the repository to just the desired files and should performed on a copy of the original repository (1.).
First the repository is reduced to just the subfolder containing the files in question using
git filter-branch --subdirectory-filter (2.) which is a useful step by itself if just a subfolder needs to be extracted. This step moves the desired files to the top level of the repository.
Finally all remaining files are listed using
git ls, the files to keep are removed from that using
grep -v and the resulting list is passed to
git rm which is invoked by
git filter-branch --index-filter (3.). A bit convoluted but it does the trick.