Particularly when calling Git from applications, such as Visual Studio, it is important that stdin/stdout/stderr are closed properly. However, when spawning processes on Windows, those handles must be marked as inheritable if we want to use them, but that flag is a global flag and may very well be used by other spawned processes which then do not know to close those handles. As a workaround, introduce handling for the environment variables GIT_REDIRECT_STD* to read/write from/to named pipes instead (conceptually similar to Unix sockets, for you Linux folks). These do not need to be marked as inheritable, as the process can simply open the named pipe. No global flags. No problems. This feature was introduced as an experimental feature into Git for Windows v2.11.0(2) and has been tested ever since. I feel it is well-tested enough that it can be integrated into core Git. Once it has been reviewed enough, I will gladly remove the "experimental" adjectives and warnings. Johannes Schindelin (3): mingw: add experimental feature to redirect standard handles mingw: special-case GIT_REDIRECT_STDERR=2>&1 mingw: document the experimental standard handle redirection Documentation/git.txt | 17 +++++++++++++++ compat/mingw.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ t/t0001-init.sh | 12 +++++++++++ 3 files changed, 87 insertions(+) base-commit: cb5918aa0d50f50e83787f65c2ddc3dcb10159fe Published-As: https://github.com/dscho/git/releases/tag/redirect-std-handles-v1 Fetch-It-Via: git fetch https://github.com/dscho/git redirect-std-handles-v1 -- 2.15.0.windows.1