There's nothing built in for this (probably there should be—it would be a way to work around the case-insensitive vs case-sensitive host file system issues).
At the bottom level, you would in general not want to do this at all. The reason is that git doesn't store files by file name. Instead, it stores data by content. It turns all data—whether that's some actual file contents (which git calls a "blob"), or a "commit", or either of the other two internal data structures—into a unique SHA-1 value.
The part of interest here is one of the other two data structures, the "tree". (The last one is the "annotated tag", or sometimes just "tag", but plain "tag" can be confused with the lightweight tag that lives outside the repository object database.) It's the tree that provides the names for each blob within a commit.
You can view the process by which files, trees, and commits are entered into a git repository in section 9.2 of the Git Book.
What git needs here, but does not have, is some simple and convenient way to modify the mappings between "names in the tree objects inside the repository" and "names in the file system on the host holding the work directory". This can be done, in both directions. The Git Book link above shows how you could do it "on the way in" (to take local files and give them tree names that differ from their on-disk names). It's less painful—but still not painless—to do it "on the way out". In particular, you can set up what git calls "sparse checkout" mode to avoid checking most stuff out; then you can use git show
to extract individual files under different names:
git show HEAD:path/to/foo > different-name
if necessary.
If there were some way to set up the mapping, you could do something like:
cp mappings/windows-map > .git/info/filemap # NOTE: I MADE THIS UP
(where mappings/windows-map
would say that repo-name _config.yml
should be turned into working-file-name not-for-use-on-windows/_config.yml
, for instance). That would even let you edit the file and commit it, reversing the mapping. But there isn't, so you can't.