After looking at the feedback I rerolled a few things, in particular the --submodule_prefix option that existed to give a submodule context about where it had been invoked from. People didn't seem to like the idea of exposing this to the users (yet anyways) so I removed it as an option and instead have it being passed to a child process via an environment variable GIT_INTERNAL_SUBMODULE_PREFIX. This way we don't have to support anything to external users at the moment. Also fixed a bug (and added a test) for the -z options as pointed out by Jeff King. Brandon Williams (3): submodules: make submodule-prefix option an envvar ls-files: optionally recurse into submodules ls-files: add pathspec matching for submodules Documentation/git-ls-files.txt | 7 +- builtin/ls-files.c | 173 ++++++++++++++++++++------- cache.h | 1 + dir.c | 46 +++++++- dir.h | 4 + environment.c | 1 + t/t3007-ls-files-recurse-submodules.sh | 209 +++++++++++++++++++++++++++++++++ 7 files changed, 398 insertions(+), 43 deletions(-) create mode 100755 t/t3007-ls-files-recurse-submodules.sh -- 2.8.0.rc3.226.g39d4020