From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Sixt <j6t@kdbg.org>,
Johannes Schindelin <johannes.schindelin@gmx.de>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: [PATCH v4 12/13] mingw: allow `git.exe` to be used instead of the "Git wrapper"
Date: Thu, 10 Sep 2026 06:05:26 +0000 [thread overview]
Message-ID: <e8115c158cad58f4a4d59d2572a2c3343c513460.1789020327.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2195.v4.git.1789020327.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
Git for Windows wants to add `git.exe` to the users' `PATH`, without
cluttering the latter with unnecessary executables such as `wish.exe`.
To that end, it invented the concept of its "Git wrapper", i.e. a tiny
executable located in `C:\Program Files\Git\cmd\git.exe` (originally a
CMD script) whose sole purpose is to set up a couple of environment
variables and then spawn the _actual_ `git.exe` (which nowadays lives in
`C:\Program Files\Git\mingw64\bin\git.exe` for 64-bit, and the obvious
equivalent for 32-bit installations).
Currently, the following environment variables are set unless already
initialized:
- `MSYSTEM`, to make sure that the MSYS2 Bash and the MSYS2 Perl
interpreter behave as expected, and
- `PLINK_PROTOCOL`, to force PuTTY's `plink.exe` to use the SSH
protocol instead of Telnet,
- `PATH`, to make sure that the `bin` folder in the user's home
directory, as well as the `/mingw64/bin` and the `/usr/bin`
directories are included. The trick here is that the `/mingw64/bin/`
and `/usr/bin/` directories are relative to the top-level installation
directory of Git for Windows (which the included Bash interprets as
`/`, i.e. as the MSYS pseudo root directory).
Using the absence of `MSYSTEM` as a tell-tale, we can detect in
`git.exe` whether these environment variables have been initialized
properly. Therefore we can call `C:\Program Files\Git\mingw64\bin\git`
in-place after this change, without having to call Git through the Git
wrapper.
Obviously, above-mentioned directories must be _prepended_ to the `PATH`
variable, otherwise we risk picking up executables from unrelated Git
installations. We do that by constructing the new `PATH` value from
scratch, appending `$HOME/bin` (if `HOME` is set), then the MSYS2 system
directories, and then appending the original `PATH`.
Side note: this modification of the `PATH` variable is independent of
the modification necessary to reach the executables and scripts in
`/mingw64/libexec/git-core/`, i.e. the `GIT_EXEC_PATH`. That
modification is still performed by Git, elsewhere, long after making the
changes described above.
While we _still_ cannot simply hard-link `mingw64\bin\git.exe` to `cmd`
(because the former depends on a couple of `.dll` files that are only in
`mingw64\bin`, i.e. calling `...\cmd\git.exe` would fail to load due to
missing dependencies), at least we can now avoid that extra process of
running the Git wrapper (which then has to wait for the spawned
`git.exe` to finish) by calling `...\mingw64\bin\git.exe` directly, via
its absolute path.
Testing this is in Git's test suite tricky: we set up a "new" MSYS
pseudo-root and copy the `git.exe` file into the appropriate location,
then verify that `MSYSTEM` is set properly, and also that the `PATH` is
modified so that scripts can be found in `$HOME/bin`, `/mingw64/bin/`
and `/usr/bin/`.
This addresses https://github.com/git-for-windows/git/issues/2283
Note: This keeps the same, hard-coded MSYSTEM platform support for CMake
as before, and introduces an `msystem' and `mingw-prefix` knob for Meson
(read: neither CMake nor Meson will automatically inherit the setting
from the current build environment).
Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
compat/mingw.c | 65 +++++++++++++++++++++++++++++
config.mak.uname | 8 +++-
contrib/buildsystems/CMakeLists.txt | 9 +++-
meson.build | 15 ++++++-
meson_options.txt | 4 ++
t/t0060-path-utils.sh | 30 +++++++++++++
6 files changed, 127 insertions(+), 4 deletions(-)
diff --git a/compat/mingw.c b/compat/mingw.c
index afdc1ef2db..563e6299bc 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -3134,6 +3134,45 @@ int xwcstoutf(char *utf, const wchar_t *wcs, size_t utflen)
return -1;
}
+#ifdef ENSURE_MSYSTEM_IS_SET
+#if !defined(RUNTIME_PREFIX) || !defined(HAVE_WPGMPTR) || !defined(MINGW_PREFIX)
+static size_t append_system_bin_dirs(char *path UNUSED, size_t size UNUSED)
+{
+ return 0;
+}
+#else
+static size_t append_system_bin_dirs(char *path, size_t size)
+{
+ char prefix[32768];
+ const char *slash;
+ size_t len = xwcstoutf(prefix, _wpgmptr, sizeof(prefix)), off = 0;
+
+ if (len == 0 || len >= sizeof(prefix) ||
+ !(slash = find_last_dir_sep(prefix)))
+ return 0;
+ /* strip trailing `git.exe` */
+ len = slash - prefix;
+
+ /* strip trailing `cmd` or `<mingw-prefix>\bin` or `bin` or `libexec\git-core` */
+ if (strip_suffix_mem(prefix, &len, "\\" MINGW_PREFIX "\\libexec\\git-core") ||
+ strip_suffix_mem(prefix, &len, "\\" MINGW_PREFIX "\\bin"))
+ off += xsnprintf(path + off, size - off,
+ "%.*s\\" MINGW_PREFIX "\\bin;", (int)len, prefix);
+ else if (strip_suffix_mem(prefix, &len, "\\cmd") ||
+ strip_suffix_mem(prefix, &len, "\\bin") ||
+ strip_suffix_mem(prefix, &len, "\\libexec\\git-core"))
+ off += xsnprintf(path + off, size - off,
+ "%.*s\\" MINGW_PREFIX "\\bin;", (int)len, prefix);
+ else
+ return 0;
+
+ off += xsnprintf(path + off, size - off,
+ "%.*s\\usr\\bin;", (int)len, prefix);
+ return off;
+}
+#endif
+#endif
+
static void setup_windows_environment(void)
{
char *tmp = getenv("TMPDIR");
@@ -3186,6 +3225,32 @@ static void setup_windows_environment(void)
setenv("HOME", tmp, 1);
}
+ if (!getenv("PLINK_PROTOCOL"))
+ setenv("PLINK_PROTOCOL", "ssh", 0);
+
+#ifdef ENSURE_MSYSTEM_IS_SET
+ if (!(tmp = getenv("MSYSTEM")) || !tmp[0]) {
+ const char *home = getenv("HOME"), *path = getenv("PATH");
+ char buf[32768];
+ size_t off = 0;
+
+ setenv("MSYSTEM", ENSURE_MSYSTEM_IS_SET, 1);
+
+ if (home)
+ off += xsnprintf(buf + off, sizeof(buf) - off,
+ "%s\\bin;", home);
+ off += append_system_bin_dirs(buf + off, sizeof(buf) - off);
+ if (path)
+ off += xsnprintf(buf + off, sizeof(buf) - off,
+ "%s", path);
+ else if (off > 0)
+ buf[off - 1] = '\0';
+ else
+ buf[0] = '\0';
+ setenv("PATH", buf, 1);
+ }
+#endif
+
if (!getenv("LC_ALL") && !getenv("LC_CTYPE") && !getenv("LANG"))
setenv("LC_CTYPE", "C.UTF-8", 1);
}
diff --git a/config.mak.uname b/config.mak.uname
index 2f7d445eb3..0b63be10b7 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -535,7 +535,9 @@ endif
compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/trace2_win32_process_info.o \
compat/win32/dirent.o
- COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
+ COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY \
+ -DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\"" \
+ -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE
# invalidcontinue.obj allows Git's source code to close the same file
# handle twice, or to access the osfhandle of an already-closed stdout
@@ -758,7 +760,9 @@ ifeq ($(uname_S),MINGW)
prefix = $(MINGW_PREFIX)
HOST_CPU = $(patsubst %-w64-mingw32,%,$(MINGW_CHOST))
BASIC_LDFLAGS += -Wl,--pic-executable
- COMPAT_CFLAGS += -DDETECT_MSYS_TTY
+ COMPAT_CFLAGS += -DDETECT_MSYS_TTY \
+ -DENSURE_MSYSTEM_IS_SET="\"$(MSYSTEM)\"" \
+ -DMINGW_PREFIX="\"$(patsubst /%,%,$(MINGW_PREFIX))\""
ifeq (MINGW32,$(MSYSTEM))
BASIC_LDFLAGS += -Wl,--large-address-aware
endif
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index a57c4b464f..7285bd9ac2 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -256,7 +256,14 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
_CONSOLE DETECT_MSYS_TTY STRIP_EXTENSION=".exe" NO_SYMLINK_HEAD UNRELIABLE_FSTAT
NOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0
OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP
- HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET HAVE_RTLGENRANDOM)
+ HAVE_WPGMPTR HAVE_RTLGENRANDOM)
+ if(CMAKE_GENERATOR_PLATFORM STREQUAL "x64")
+ add_compile_definitions(ENSURE_MSYSTEM_IS_SET="MINGW64" MINGW_PREFIX="mingw64")
+ elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "arm64")
+ add_compile_definitions(ENSURE_MSYSTEM_IS_SET="CLANGARM64" MINGW_PREFIX="clangarm64")
+ elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "x86")
+ add_compile_definitions(ENSURE_MSYSTEM_IS_SET="MINGW32" MINGW_PREFIX="mingw32")
+ endif()
list(APPEND compat_SOURCES
compat/mingw.c
compat/winansi.c
diff --git a/meson.build b/meson.build
index 7073d5844d..a8aba81e29 100644
--- a/meson.build
+++ b/meson.build
@@ -1318,7 +1318,6 @@ elif host_machine.system() == 'windows'
libgit_c_args += [
'-DDETECT_MSYS_TTY',
- '-DENSURE_MSYSTEM_IS_SET',
'-DNATIVE_CRLF',
'-DNOGDI',
'-DNO_POSIX_GOODIES',
@@ -1328,6 +1327,20 @@ elif host_machine.system() == 'windows'
'-D__USE_MINGW_ANSI_STDIO=0',
]
+ msystem = get_option('msystem')
+ if msystem != ''
+ mingw_prefix = get_option('mingw_prefix')
+ if mingw_prefix == ''
+ mingw_prefix = msystem.to_lower()
+ elif mingw_prefix.startswith('/')
+ mingw_prefix = mingw_prefix.substring(1)
+ endif
+ libgit_c_args += [
+ '-DENSURE_MSYSTEM_IS_SET="' + msystem + '"',
+ '-DMINGW_PREFIX="' + mingw_prefix + '"'
+ ]
+ endif
+
libgit_dependencies += compiler.find_library('ntdll')
libgit_include_directories += 'compat/win32'
if compiler.get_id() == 'msvc'
diff --git a/meson_options.txt b/meson_options.txt
index dc88f130d7..becf4689bf 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -21,6 +21,10 @@ option('runtime_prefix', type: 'boolean', value: false,
description: 'Resolve ancillary tooling and support files relative to the location of the runtime binary instead of hard-coding them into the binary.')
option('sane_tool_path', type: 'array', value: [],
description: 'An array of paths to pick up tools from in case the normal tools are broken or lacking.')
+option('msystem', type: 'string', value: '',
+ description: 'Fall-back on Windows when MSYSTEM is not set.')
+option('mingw_prefix', type: 'string', value: '',
+ description: 'Fall-back on Windows when MINGW_PREFIX is not set.')
# Build information compiled into Git and other parts like documentation.
option('build_date', type: 'string', value: '',
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 8545cdfab5..02906055d3 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -611,4 +611,34 @@ test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD '%(prefix)/ works'
test_cmp expect actual
'
+test_expect_success MINGW,RUNTIME_PREFIX 'MSYSTEM/PATH is adjusted if necessary' '
+ if test -z "$MINGW_PREFIX"
+ then
+ MINGW_PREFIX="/$(echo "${MSYSTEM:-MINGW64}" | tr A-Z a-z)"
+ fi &&
+ mkdir -p "$HOME"/bin pretend"$MINGW_PREFIX"/bin \
+ pretend"$MINGW_PREFIX"/libexec/git-core pretend/usr/bin &&
+ cp "$GIT_EXEC_PATH"/git.exe pretend"$MINGW_PREFIX"/bin/ &&
+ cp "$GIT_EXEC_PATH"/git.exe pretend"$MINGW_PREFIX"/libexec/git-core/ &&
+ # copy the .dll files, if any (happens when building via CMake)
+ if test -n "$(ls "$GIT_EXEC_PATH"/*.dll 2>/dev/null)"
+ then
+ cp "$GIT_EXEC_PATH"/*.dll pretend"$MINGW_PREFIX"/bin/ &&
+ cp "$GIT_EXEC_PATH"/*.dll pretend"$MINGW_PREFIX"/libexec/git-core/
+ fi &&
+ echo "env | grep MSYSTEM=" | write_script "$HOME"/bin/git-test-home &&
+ echo "echo ${MINGW_PREFIX#/}" | write_script pretend"$MINGW_PREFIX"/bin/git-test-bin &&
+ echo "echo usr" | write_script pretend/usr/bin/git-test-bin2 &&
+
+ (
+ MSYSTEM= &&
+ GIT_EXEC_PATH= &&
+ pretend"$MINGW_PREFIX"/libexec/git-core/git.exe test-home >actual &&
+ pretend"$MINGW_PREFIX"/libexec/git-core/git.exe test-bin >>actual &&
+ pretend"$MINGW_PREFIX"/bin/git.exe test-bin2 >>actual
+ ) &&
+ test_write_lines MSYSTEM=$MSYSTEM "${MINGW_PREFIX#/}" usr >expect &&
+ test_cmp expect actual
+'
+
test_done
--
gitgitgadget
next prev parent reply other threads:[~2026-09-10 6:05 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-05 14:26 [PATCH 00/12] Upstream some more Git for Windows' patches Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 01/12] mingw: include the Python parts in the build Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 02/12] mingw: stop hard-coding `CC = gcc` Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 03/12] mingw: drop the -D_USE_32BIT_TIME_T option Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 04/12] mingw: only use -Wl,--large-address-aware for 32-bit builds Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 05/12] mingw: avoid over-specifying `--pic-executable` Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 06/12] mingw: set the prefix and HOST_CPU as per MSYS2's settings Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 07/12] mingw: only enable the MSYS2-specific stuff when compiling in MSYS2 Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 08/12] mingw: rely on MSYS2's metadata instead of hard-coding it Johannes Schindelin via GitGitGadget
2026-08-05 17:29 ` Junio C Hamano
2026-08-06 12:50 ` Johannes Schindelin
2026-08-05 14:26 ` [PATCH 09/12] windows: skip linking `git-<command>` for built-ins Johannes Schindelin via GitGitGadget
2026-08-05 17:12 ` Junio C Hamano
2026-08-05 14:26 ` [PATCH 10/12] mingw: always define `ETC_*` for MSYS2 environments Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 11/12] mingw: ensure valid CTYPE Johannes Schindelin via GitGitGadget
2026-08-05 14:26 ` [PATCH 12/12] mingw: allow `git.exe` to be used instead of the "Git wrapper" Johannes Schindelin via GitGitGadget
2026-08-06 17:26 ` Junio C Hamano
2026-08-12 7:51 ` Johannes Schindelin
2026-08-12 14:27 ` Junio C Hamano
2026-08-12 7:52 ` [PATCH v2 00/12] Upstream some more Git for Windows' patches Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 01/12] mingw: include the Python parts in the build Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 02/12] mingw: stop hard-coding `CC = gcc` Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 03/12] mingw: drop the -D_USE_32BIT_TIME_T option Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 04/12] mingw: only use -Wl,--large-address-aware for 32-bit builds Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 05/12] mingw: avoid over-specifying `--pic-executable` Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 06/12] mingw: set the prefix and HOST_CPU as per MSYS2's settings Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 07/12] mingw: only enable the MSYS2-specific stuff when compiling in MSYS2 Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 08/12] mingw: rely on MSYS2's metadata instead of hard-coding it Johannes Schindelin via GitGitGadget
2026-08-15 13:44 ` Johannes Sixt
2026-08-31 18:59 ` Junio C Hamano
2026-09-09 18:56 ` Johannes Schindelin
2026-09-09 19:09 ` Johannes Schindelin
2026-08-12 7:52 ` [PATCH v2 09/12] windows: skip linking `git-<command>` for built-ins Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 10/12] mingw: always define `ETC_*` for MSYS2 environments Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 11/12] mingw: ensure valid CTYPE Johannes Schindelin via GitGitGadget
2026-08-12 7:52 ` [PATCH v2 12/12] mingw: allow `git.exe` to be used instead of the "Git wrapper" Johannes Schindelin via GitGitGadget
2026-08-15 14:10 ` [PATCH v2 00/12] Upstream some more Git for Windows' patches Johannes Sixt
2026-09-09 19:17 ` [PATCH v3 " Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 01/12] mingw: include the Python parts in the build Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 02/12] mingw: stop hard-coding `CC = gcc` Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 03/12] mingw: drop the -D_USE_32BIT_TIME_T option Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 04/12] mingw: only use -Wl,--large-address-aware for 32-bit builds Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 05/12] mingw: avoid over-specifying `--pic-executable` Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 06/12] mingw: set the prefix and HOST_CPU as per MSYS2's settings Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 07/12] mingw: only enable the MSYS2-specific stuff when compiling in MSYS2 Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 08/12] mingw: rely on MSYS2's metadata instead of hard-coding it Johannes Schindelin via GitGitGadget
2026-09-09 19:47 ` Johannes Sixt
2026-09-09 20:13 ` Johannes Schindelin
2026-09-09 21:17 ` Junio C Hamano
2026-09-09 19:17 ` [PATCH v3 09/12] windows: skip linking `git-<command>` for built-ins Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 10/12] mingw: always define `ETC_*` for MSYS2 environments Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 11/12] mingw: ensure valid CTYPE Johannes Schindelin via GitGitGadget
2026-09-09 19:17 ` [PATCH v3 12/12] mingw: allow `git.exe` to be used instead of the "Git wrapper" Johannes Schindelin via GitGitGadget
2026-09-09 19:41 ` Junio C Hamano
2026-09-10 6:05 ` [PATCH v4 00/13] Upstream some more Git for Windows' patches Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 01/13] mingw: include the Python parts in the build Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 02/13] mingw: stop hard-coding `CC = gcc` Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 03/13] mingw: drop the -D_USE_32BIT_TIME_T option Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 04/13] mingw: only use -Wl,--large-address-aware for 32-bit builds Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 05/13] mingw: avoid over-specifying `--pic-executable` Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 06/13] mingw: set the prefix and HOST_CPU as per MSYS2's settings Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 07/13] mingw: only enable the MSYS2-specific stuff when compiling in MSYS2 Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 08/13] mingw: rely on MSYS2's metadata instead of hard-coding it Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 09/13] windows: skip linking `git-<command>` for built-ins Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 10/13] mingw: always define `ETC_*` for MSYS2 environments Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` [PATCH v4 11/13] mingw: ensure valid CTYPE Johannes Schindelin via GitGitGadget
2026-09-10 6:05 ` Johannes Schindelin via GitGitGadget [this message]
2026-09-10 6:05 ` [PATCH v4 13/13] t0060: adjust the code style Johannes Schindelin via GitGitGadget
2026-09-10 12:51 ` [PATCH v4 00/13] Upstream some more Git for Windows' patches Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e8115c158cad58f4a4d59d2572a2c3343c513460.1789020327.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=johannes.schindelin@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.