v2 of the series tackles the problem slightly differently than v1 did, and in a less invasive way in my opinion. v1 also didn't fix everything. v2 introduces a way to pass a 'prefix' that is respected by a git process. This allows the git child processes (which operate on submodules) to have the super_prefix (the path from the root of the superproject to the submodule) and the prefix (path from the root of the superproject to the directory in which the original command was launched). With these two pieces of information the child process can correctly handle pathspec matching as well as correctly formatting their output with relative paths. In order to pass the prefix to a child I made a new env var since the existing GIT_PREFIX isn't respected. I'm not sure this is the best method so I'm open to ideas on the best way to convey this information to a child process. Brandon Williams (4): grep: fix help text typo setup: allow for prefix to be passed to git commands grep: fix bug when recursing with relative pathspec ls-files: fix bug when recursing with relative pathspec builtin/grep.c | 41 +++++++++++-------- builtin/ls-files.c | 41 ++++++++++--------- cache.h | 1 + git.c | 2 - setup.c | 6 +++ t/t3007-ls-files-recurse-submodules.sh | 39 ++++++++++++++++++ t/t7814-grep-recurse-submodules.sh | 75 ++++++++++++++++++++++++++++++++++ 7 files changed, 167 insertions(+), 38 deletions(-) -- 2.12.0.367.g23dc2f6d3c-goog