I don't quite understand. `GIT_CHECKOUT_FORCE` will checkout `master` (or the specified branch), but possibly the target commit for the submodule contains completely different files, so the initial checkout would be a total waste of IO. Or did I miss something?

> allow the caller to override it

Cloning recursively should be fully automated, just like `git clone --recursive`, the caller shouldn't have to override anything.