Rebase shears/maint: 7 conflict(s) (1 skipped, 6 resolved) (#26357326252)#195
Open
gitforwindowshelper[bot] wants to merge 309 commits into
Open
Rebase shears/maint: 7 conflict(s) (1 skipped, 6 resolved) (#26357326252)#195gitforwindowshelper[bot] wants to merge 309 commits into
gitforwindowshelper[bot] wants to merge 309 commits into
Conversation
This adds support for a new http.sslAutoClientCert config value. In cURL 7.77 or later the schannel backend does not automatically send client certificates from the Windows Certificate Store anymore. This config value is only used if http.sslBackend is set to "schannel", and can be used to opt in to the old behavior and force cURL to send client certificates. This fixes git-for-windows#3292 Signed-off-by: Pascal Muller <pascalmuller@gmail.com>
Because `git subtree` (unlike most other `contrib` modules) is included as part of the standard release of Git for Windows, its stability should be verified as consistently as it is for the rest of git. By including the `git subtree` tests in the CI workflow, these tests are as much of a gate to merging and indicator of stability as the standard test suite. Signed-off-by: Victoria Dye <vdye@github.com>
Ensure key CMake option values are part of the CMake output to facilitate user support when tool updates impact the wider CMake actions, particularly ongoing 'improvements' in Visual Studio. These CMake displays perform the same function as the build-options.txt provided in the main Git for Windows. CMake is already chatty. The setting of CMAKE_EXPORT_COMPILE_COMMANDS is also reported. Include the environment's CMAKE_EXPORT_COMPILE_COMMANDS value which may have been propogated to CMake's internal value. Testing the CMAKE_EXPORT_COMPILE_COMMANDS processing can be difficult in the Visual Studio environment, as it may be cached in many places. The 'environment' may include the OS, the user shell, CMake's own environment, along with the Visual Studio presets and caches. See previous commit for arefacts that need removing for a clean test. Signed-off-by: Philip Oakley <philipoakley@iee.email>
To verify that the `clean` side of the `clean`/`smudge` filter code is correct with regards to LLP64 (read: to ensure that `size_t` is used instead of `unsigned long`), here is a test case using a trivial filter, specifically _not_ writing anything to the object store to limit the scope of the test case. As in previous commits, the `big` file from previous test cases is reused if available, to save setup time, otherwise re-generated. Signed-off-by: Philip Oakley <philipoakley@iee.email> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In the case of Git for Windows (say, in a Git Bash window) running in a Windows Subsystem for Linux (WSL) directory, the GetNamedSecurityInfoW() call in is_path_owned_By_current_side() returns an error code other than ERROR_SUCCESS. This is consistent behavior across this boundary. In these cases, the owner would always be different because the WSL owner is a different entity than the Windows user. The change here is to suppress the error message that looks like this: error: failed to get owner for '//wsl.localhost/...' (1) Before this change, this warning happens for every Git command, regardless of whether the directory is marked with safe.directory. Signed-off-by: Derrick Stolee <derrickstolee@github.com>
For Windows builds >= 15063 set $env:TERM to "xterm-256color" instead of "cygwin" because they have a more capable console system that supports this. Also set $env:COLORTERM="truecolor" if unset. $env:TERM is initialized so that ANSI colors in color.c work, see 29a3963 (Win32: patch Windows environment on startup, 2012-01-15). See git-for-windows#3629 regarding problems caused by always setting $env:TERM="cygwin". This is the same heuristic used by the Cygwin runtime. Signed-off-by: Rafael Kitover <rkitover@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
NtQueryObject under Wine can return a success but fill out no name. In those situations, Wine will set Buffer to NULL, and set result to the sizeof(OBJECT_NAME_INFORMATION). Running a command such as echo "$(git.exe --version 2>/dev/null)" will crash due to a NULL pointer dereference when the code attempts to null terminate the buffer, although, weirdly, removing the subshell or redirecting stdout to a file will not trigger the crash. Code has been added to also check Buffer and Length to ensure the check is as robust as possible due to the current behavior being fragile at best, and could potentially change in the future This code is based on the behavior of NtQueryObject under wine and reactos. Signed-off-by: Christopher Degawa <ccom@randomderp.com>
Atomic append on windows is only supported on local disk files, and it may cause errors in other situations, e.g. network file system. If that is the case, this config option should be used to turn atomic append off. Co-Authored-By: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: 孙卓识 <sunzhuoshi@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
From the documentation of said setting: This boolean will enable fsync() when writing object files. This is a total waste of time and effort on a filesystem that orders data writes properly, but can be useful for filesystems that do not use journalling (traditional UNIX filesystems) or that only journal metadata and not file contents (OS X’s HFS+, or Linux ext3 with "data=writeback"). The most common file system on Windows (NTFS) does not guarantee that order, therefore a sudden loss of power (or any other event causing an unclean shutdown) would cause corrupt files (i.e. files filled with NULs). Therefore we need to change the default. Note that the documentation makes it sound as if this causes really bad performance. In reality, writing loose objects is something that is done only rarely, and only a handful of files at a time. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Whith Windows 2000, Microsoft introduced a flag to the PE header to mark executables as "terminal server aware". Windows terminal servers provide a redirected Windows directory and redirected registry hives when launching legacy applications without this flag set. Since we do not use any INI files in the Windows directory and don't write to the registry, we don't need this additional preparation. Telling the OS that we don't need this should provide slightly improved startup times in terminal server environments. When building for supported Windows Versions with MSVC the /TSAWARE linker flag is automatically set, but MinGW requires us to set the --tsaware flag manually. This partially addresses git-for-windows#3935. Signed-off-by: Matthias Aßhauer <mha1993@live.de>
Add FileVersion, which is a required field As not all required fields were present, none were being included Fixes git-for-windows#4090 Signed-off-by: Kiel Hurley <kielhurley@gmail.com>
This is no longer true in general, not with supporting Clang out of the box. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This option was added in fa93bb2 (MinGW: Fix stat definitions to work with MinGW runtime version 4.0, 2013-09-11), i.e. a _long_ time ago. So long, in fact, that it still targeted MinGW. But we switched to mingw-w64 in 2015, which seems not to share the problem, and therefore does not require a fix. Even worse: This flag is incompatible with UCRT64, which we are about to support by way of upstreaming `mingw-w64-git` to the MSYS2 project, see msys2/MINGW-packages#26470 for details. So let's send that option into its well-deserved retirement. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
That option only matters there, and is in fact only really understood in those builds; UCRT64 versions of GCC, for example, do not know what to do with that option. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In bf2d5d8 (Don't let ld strip relocations, 2016-01-16) (picked from git-for-windows@6a237925bf10), Git for Windows introduced the `-Wl,-pic-executable` flag, specifying the exact entry point via `-e`. This required discerning between i686 and x86_64 code because the former required the symbol to be prefixed with an underscore, the latter did not. As per https://sourceware.org/bugzilla/show_bug.cgi?id=10865, the specified symbols are already the default, though. So let's drop the overly-specific definition. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
MSYS2 already defines a couple of helpful environment variables, and we can use those to infer the installation location as well as the CPU. No need for hard-coding ;-) Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The tell-tale is the presence of the `MSYSTEM` value while compiling, of course. In that case, we want to ensure that `MSYSTEM` is set when running `git.exe`, and also enable the magic MSYS2 tty detection. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In f9b7573 (repository: free fields before overwriting them, 2017-09-05), Git was taught to release memory before overwriting it, but 357a03e (repository.c: move env-related setup code back to environment.c, 2018-03-03) changed the code so that it would not _always_ be overwritten. As a consequence, the `commondir` attribute would point to already-free()d memory. This seems not to cause problems in core Git, but there are add-on patches in Git for Windows where the `commondir` attribute is subsequently used and causing invalid memory accesses e.g. in setups containing old-style submodules (i.e. the ones with a `.git` directory within theirs worktrees) that have `commondir` configured. This fixes git-for-windows#4083. Signed-off-by: Andrey Zabavnikov <zabavnikov@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
It is merely a historical wart that, say, `git-commit` exists in the `libexec/git-core/` directory, a tribute to the original idea to let Git be essentially a bunch of Unix shell scripts revolving around very few "plumbing" (AKA low-level) commands. Git has evolved a lot from there. These days, most of Git's functionality is contained within the `git` executable, in the form of "built-in" commands. To accommodate for scripts that use the "dashed" form of Git commands, even today, Git provides hard-links that make the `git` executable available as, say, `git-commit`, just in case that an old script has not been updated to invoke `git commit`. Those hard-links do not come cheap: they take about half a minute for every build of Git on Windows, they are mistaken for taking up huge amounts of space by some Windows Explorer versions that do not understand hard-links, and therefore many a "bug" report had to be addressed. The "dashed form" has been officially deprecated in Git version 1.5.4, which was released on February 2nd, 2008, i.e. a very long time ago. This deprecation was never finalized by skipping these hard-links, but we can start the process now, in Git for Windows. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Merge this early to resolve merge conflicts early. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
When building with `make MSVC=1 DEBUG=1`, link to `libexpatd.lib` rather than `libexpat.lib`. It appears that the `vcpkg` package for "libexpat" has changed and now creates `libexpatd.lib` for debug mode builds. Previously, both debug and release builds created a ".lib" with the same basename. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Create a wrapper for the Windows Resource Compiler (RC.EXE) for use by the MSVC=1 builds. This is similar to the CL.EXE and LIB.EXE wrappers used for the MSVC=1 builds. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Teach MSVC=1 builds to depend on the `git.rc` file so that the resulting executables have Windows-style resources and version number information within them. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
This compile-time option allows to ask Git to load libcurl dynamically at runtime. Together with a follow-up patch that optionally overrides the file name depending on the `http.sslBackend` setting, this kicks open the door for installing multiple libcurl flavors side by side, and load the one corresponding to the (runtime-)configured SSL/TLS backend. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
MSYS2 defines some helpful environment variables, e.g. `MSYSTEM`. There is code in Git for Windows to ensure that that `MSYSTEM` variable is set, hard-coding a default. However, the existing solution jumps through hoops to reconstruct the proper default, and is even incomplete doing so, as we found out when we extended it to support CLANGARM64. This is absolutely unnecessary because there is already a perfectly valid `MSYSTEM` value we can use at build time. This is even true when building the MINGW32 variant on a MINGW64 system because `makepkg-mingw` will override the `MSYSTEM` value as per the `MINGW_ARCH` array. The same is equally true for the `/mingw64`, `/mingw32` and `/clangarm64` prefix: those values are already available via the `MINGW_PREFIX` environment variable, and we just need to pass that setting through. Only when `MINGW_PREFIX` is not set (as is the case in Git for Windows' minimal SDK, where only `MSYSTEM` is guaranteed to be set correctly), we use as fall-back the top-level directory whose name is the down-cased value of the `MSYSTEM` variable. Incidentally, this also broadens the support to all the configurations supported by the MSYS2 project, i.e. clang64 & ucrt64, too. Note: This keeps the same, hard-coded MSYSTEM platform support for CMake as before, but drops it for Meson (because it is unclear how Meson could do this in a more flexible manner). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A change between versions 2.4.1 and 2.6.0 of the MSYS2 runtime modified how Cygwin's runtime (and hence Git for Windows' MSYS2 runtime derivative) handles locales: d16a56306d (Consolidate wctomb/mbtowc calls for POSIX-1.2008, 2016-07-20). An unintended side-effect is that "cold-calling" into the POSIX emulation will start with a locale based on the current code page, something that Git for Windows is very ill-prepared for, as it expects to be able to pass a command-line containing non-ASCII characters to the shell without having those characters munged. One symptom of this behavior: when `git clone` or `git fetch` shell out to call `git-upload-pack` with a path that contains non-ASCII characters, the shell tried to interpret the entire command-line (including command-line parameters) as executable path, which obviously must fail. This fixes git-for-windows#1036 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Ignore the `-fno-stack-protector` compiler argument when building with MSVC. This will be used in a later commit that needs to build a Win32 GUI app. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
This implements the Windows-specific support code, because everything is slightly different on Windows, even loading shared libraries. Note: I specifically do _not_ use the code from `compat/win32/lazyload.h` here because that code is optimized for loading individual functions from various system DLLs, while we specifically want to load _many_ functions from _one_ DLL here, and distinctly not a system DLL (we expect libcurl to be located outside `C:\Windows\system32`, something `INIT_PROC_ADDR` refuses to work with). Also, the `curl_easy_getinfo()`/`curl_easy_setopt()` functions are declared as vararg functions, which `lazyload.h` cannot handle. Finally, we are about to optionally override the exact file name that is to be loaded, which is a goal contrary to `lazyload.h`'s design. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Special-casing even more configurations simply does not make sense. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Previously, we did not install any handler for Ctrl+C, but now we really want to because the MSYS2 runtime learned the trick to call the ConsoleCtrlHandler when Ctrl+C was pressed. With this, hitting Ctrl+C while `git log` is running will only terminate the Git process, but not the pager. This finally matches the behavior on Linux and on macOS. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This patch introduces support to set special NTFS attributes that are interpreted by the Windows Subsystem for Linux as file mode bits, UID and GID. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Rather than using private IFTTT Applets that send mails to this maintainer whenever a new version of a Git for Windows component was released, let's use the power of GitHub workflows to make this process publicly visible. This workflow monitors the Atom/RSS feeds, and opens a ticket whenever a new version was released. Note: Bash sometimes releases multiple patched versions within a few minutes of each other (i.e. 5.1p1 through 5.1p4, 5.0p15 and 5.0p16). The MSYS2 runtime also has a similar system. We can address those patches as a group, so we shouldn't get multiple issues about them. Note further: We're not acting on newlib releases, OpenSSL alphas, Perl release candidates or non-stable Perl releases. There's no need to open issues about them. Co-authored-by: Matthias Aßhauer <mha1993@live.de> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Git for Windows accepts pull requests; Core Git does not. Therefore we need to adjust the template (because it only matches core Git's project management style, not ours). Also: direct Git for Windows enhancements to their contributions page, space out the text for easy reading, and clarify that the mailing list is plain text, not HTML. Signed-off-by: Philip Oakley <philipoakley@iee.org> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…ITOR" In e3f7e01 (Revert "editor: save and reset terminal after calling EDITOR", 2021-11-22), we reverted the commit wholesale where the terminal state would be saved and restored before/after calling an editor. The reverted commit was intended to fix a problem with Windows Terminal where simply calling `vi` would cause problems afterwards. To fix the problem addressed by the revert, but _still_ keep the problem with Windows Terminal fixed, let's revert the revert, with a twist: we restrict the save/restore _specifically_ to the case where `vi` (or `vim`) is called, and do not do the same for any other editor. This should still catch the majority of the cases, and will bridge the time until the original patch is re-done in a way that addresses all concerns. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Handle Ctrl+C in Git Bash nicely Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The `--stdin` option was a well-established paradigm in other commands, therefore we implemented it in `git reset` for use by Visual Studio. Unfortunately, upstream Git decided that it is time to introduce `--pathspec-from-file` instead. To keep backwards-compatibility for some grace period, we therefore reinstate the `--stdin` option on top of the `--pathspec-from-file` option, but mark it firmly as deprecated. Helped-by: Victoria Dye <vdye@github.com> Helped-by: Matthew John Cheetham <mjcheetham@outlook.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Reintroduce the 'core.useBuiltinFSMonitor' config setting (originally added in 0a756b2 (fsmonitor: config settings are repository-specific, 2021-03-05)) after its removal from the upstream version of FSMonitor. Upstream, the 'core.useBuiltinFSMonitor' setting was rendered obsolete by "overloading" the 'core.fsmonitor' setting to take a boolean value. However, several applications (e.g., 'scalar') utilize the original config setting, so it should be preserved for a deprecation period before complete removal: * if 'core.fsmonitor' is a boolean, the user is correctly using the new config syntax; do not use 'core.useBuiltinFSMonitor'. * if 'core.fsmonitor' is unspecified, use 'core.useBuiltinFSMonitor'. * if 'core.fsmonitor' is a path, override and use the builtin FSMonitor if 'core.useBuiltinFSMonitor' is 'true'; otherwise, use the FSMonitor hook indicated by the path. Additionally, for this deprecation period, advise users to switch to using 'core.fsmonitor' to specify their use of the builtin FSMonitor. Signed-off-by: Victoria Dye <vdye@github.com>
See https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot#enabling-dependabot-version-updates-for-actions for details. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This is the recommended way on GitHub to describe policies revolving around security issues and about supported versions. Helped-by: Sven Strickroth <email@cs-ware.de> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In this time and age, AI is everywhere. However, it's sometimes not very easy to use. For green-field projects it works quite a bit better than for existing legacy projects. And Git's source code is _quite_ as legacy code as they come... 😁 Now, the only way how AI can be used efficiently with legacy code is by providing enough information by way of prompt context for the AI to have a chance to make any sense of the code. The structure and the architecture is, after all, not designed for AI, but rather the opposite: By virtue of having grown organically over two decades, there is no design that AI coding models would readily grasp. So here is a document that describes all kinds of aspects about this project. The idea is to help AI by providing information that it does not have ingrained in its weights. The idea is to provide information that a human prompter might take for granted, but no coding model will have been trained on specifically. Assisted-by: Claude Opus 4.5 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…opment This adds an extensive section about resolving merge conflicts during rebases, which happens quite often in Git for Windows' day-to-day. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A fix for calling `vim` in Windows Terminal caused a regression and was reverted. We partially un-revert this, to get the fix again. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…opment AGENTS.md: add upstream contribution and worktree guidance Add sections covering the GitGitGadget workflow for contributing to upstream Git, commit message conventions specific to the upstream project, how to manage patch series with dependencies (branch thickets), effective worktree usage including --update-refs for history rewrites, and techniques for analyzing merge-structured topic branches with git replay. These learnings come from a session contributing the safe.bareRepository test preparation patches via GitGitGadget. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Assisted-by: Claude Opus 4.6
This topic branch re-adds the deprecated --stdin/-z options to `git reset`. Those patches were overridden by a different set of options in the upstream Git project before we could propose `--stdin`. We offered this in MinGit to applications that wanted a safer way to pass lots of pathspecs to Git, and these applications will need to be adjusted. Instead of `--stdin`, `--pathspec-from-file=-` should be used, and instead of `-z`, `--pathspec-file-nul`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…opment AGENTS.md: document rebase, staging, and log -L tricks for AI agents Add practical recipes for three workflows that are particularly useful when AI agents work with Git: Non-interactive "interactive" rebases using `sed -i 1ib` as a sequence editor to insert a `break` command, then editing the todo file directly via the path from `git rev-parse --git-path rebase-merge/git-rebase-todo`. This avoids the impossible task of driving an interactive editor from an AI agent. Scripted hunk staging via `printf '%s\n' s y q | git add -p`, which feeds predictable keystrokes to the add-patch protocol to stage individual hunks without human interaction. The `git log -L <start>,+<count>:<file>` trick for finding which commit last touched specific lines, enabling an `hg absorb`-like workflow where the agent can identify the right fixup! target surgically rather than grepping through full diffs. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Assisted-by: Claude Opus 4.6
Originally introduced as `core.useBuiltinFSMonitor` in Git for Windows and developed, improved and stabilized there, the built-in FSMonitor only made it into upstream Git (after unnecessarily long hemming and hawing and throwing overly perfectionist style review sticks into the spokes) as `core.fsmonitor = true`. In Git for Windows, with this topic branch, we re-introduce the now-obsolete config setting, with warnings suggesting to existing users how to switch to the new config setting, with the intention to ultimately drop the patch at some stage. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…opment AGENTS.md: add pre-commit checklist for lint checks Bundle the existing ASCII-only, 80-column, and whitespace validation recipes into a "pre-commit checklist" block that agents should run before every commit. The individual recipes already existed in the Coding Conventions section but were presented as reference material rather than as an actionable workflow step. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Assisted-by: Claude Opus 4.6
…updates Start monitoring updates of Git for Windows' component in the open
This was marked as a temporary work-around in 4538ee6 (ci: work around a problem with HTTP/2 vs libcurl v8.10.0 (git-for-windows#5165), 2024-09-24), to help CI builds pass even on macOS. The faulty libcurl version has hence been replaced with plenty of fixed ones, therefore this work-around is no longer necessary. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…opment AGENTS: document learnings from split-index + fsmonitor investigation While investigating a CI failure in the `linux-TEST-vars` job caused by the interaction between the `pt/fsmonitor-linux` and `hn/git-checkout-m-with-stash` topics in `seen`, several debugging techniques proved essential and were not previously documented. The investigation required bisecting the first-parent history of `seen` while temporarily merging the fsmonitor topic at each step. This revealed that `GIT_TEST_SPLIT_INDEX=yes` corrupts the bisect machinery's own index operations unless it is unset before cleanup checkouts. It also revealed that `fprintf(stderr, ...)` instrumentation in Git's C code is swallowed by the test framework, making Trace2 the correct instrumentation approach. A key insight was that the bug appeared Linux-specific only because `linux-TEST-vars` is the sole CI job setting `GIT_TEST_SPLIT_INDEX=yes`; there is no macOS or Windows equivalent. The actual root cause (the `index.skipHash=true` + split-index interaction producing a null `base_oid` in the shared index) is platform-independent. Add four documentation sections capturing these learnings: bisecting `seen` interactions, reproducing with exact CI variables, verifying CI platform coverage before concluding platform-specificity, and using Trace2 for instrumentation inside the test framework. Assisted-by: Claude Opus 4.6 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Add a README.md for GitHub goodness. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This was a preparatory commit for the path-walk API, which has since been upstreamed into v2.54.0. During the merging-rebase, the code changes this commit introduced were already present in the new base, leaving it empty. Drop it. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…it-for-windows#6198) AI-assisted contributions are a reality of open source in 2025 and beyond. Contributors will use AI tools, and that includes the maintainers themselves. Over recent months, I have found AI increasingly useful for the kind of menial, tedious work that does not require much creativity but is highly boring when done by hand: resolving merge conflicts during merging-rebases, chasing down CI failures across platforms, adapting downstream patches to upstream API changes. To that end, I would like to have an `AGENTS.md` file in the code base that helps any LLM to understand the context of the project. A secondary goal of this is to preemptively help outside contributors. The risk is not AI usage per se, but low-quality AI slop: contributions where the human hits "accept" without sufficient context being available to the model (and without proper review by the human, we've all been there), resulting in changes that miss conventions, break patterns, or misunderstand the project's architecture. Git's source code is about as legacy as they come, having grown organically over two decades with no design that AI coding models would readily grasp from a narrow code sample alone. This `AGENTS.md` is designed to raise the floor on AI-assisted contributions by providing enough context that even when a human contributor fails to steer carefully, the model has the information it needs to produce something reasonable. It documents the repository structure, build process, test conventions, the object model and ODB internals, debugging techniques (Trace2, instrumenting tests, bisecting failures), the merging-rebase workflow, conflict resolution patterns, coding conventions (ASCII only, 80 columns, tabs), commit message expectations, and the GitGitGadget contribution workflow. This is information that a human might take for granted, but no coding model will have been trained on specifically. Similar `AGENTS.md` files have recently been added to other repositories in the Git for Windows project: [MINGW-packages](git-for-windows/MINGW-packages#194), [git-for-windows.github.io](git-for-windows/git-for-windows.github.io#88) and [msys2-runtime](git-for-windows/msys2-runtime@1e0ff37).
Over time, as upstream Git absorbs fixes and features that originated in or were carried by Git for Windows, downstream patches accumulate that are no longer needed. The steady stream of merged PRs makes this virtually inevitable. This PR collects fixup! commits to drop three such patches during the next autosquash rebase. The HTTP/2 workaround in `t5551` was a temporary fix for a libcurl v8.10.0 regression on macOS CI runners. The faulty libcurl has long been superseded by fixed versions, making it unnecessary. The `unix-socket: avoid leak when initialization fails` patch changed `return -1` to `goto fail` in `unix_stream_connect()` so cleanup would run when `unix_sockaddr_init()` failed. Upstream fixed the same leak more surgically in c5fe29f (unix-socket: fix memory leak when chdir(3p) fails, 2025-01-30) by having `unix_sockaddr_init()` call `FREE_AND_NULL(ctx->orig_dir)` before returning, making the downstream caller-side fix redundant. The `revision: create mark_trees_uninteresting_dense()` commit was a preparatory patch for the path-walk API. That API has since been upstreamed, and this commit became empty during the merging-rebase because its changes were already in the new base.
This corresponds to gitgitgadget#2097.
…erver Bump actions/checkout from v5 to v6 and git-for-windows/setup-git-for-windows-sdk from v1 to v2. Both bumps are Node.js 20 to Node.js 24 runtime migrations with no functional changes to the actions themselves. checkout v6 moves persisted credentials to `` instead of `.git/config`, which does not affect this workflow since no subsequent steps rely on the credential location. The setup-sdk v2 provisions the same minimal SDK as v1. Risk: very low. The only precondition is a recent Actions Runner, which github.com-hosted runners already satisfy. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
When building with `make DEVELOPER=1` we explicitly pass "-std=gnu99" to
the compiler so that we don't start leaning on features exposed by more
recent versions of the C standard. Unfortunately though, glibc 2.43
started to use type-generic expressions. This works alright with GCC,
but when compiling with Clang this leads to errors:
$ make DEVELOPER=1 CC=clang
CC daemon.o
In file included from daemon.c:3:
./git-compat-util.h:344:11: error: '_Generic' is a C11 extension [-Werror,-Wc11-extensions]
344 | return !!strchr(path, '/');
| ^
/usr/include/string.h:265:3: note: expanded from macro 'strchr'
265 | __glibc_const_generic (S, const char *, strchr (S, C))
| ^
/usr/include/x86_64-linux-gnu/sys/cdefs.h:838:3: note: expanded from macro '__glibc_const_generic'
838 | _Generic (0 ? (PTR) : (void *) 1, \
| ^
In theory, the `__glibc_const_generic` macro does have feature gating:
#if !defined __cplusplus \
&& (__GNUC_PREREQ (4, 9) \
|| __glibc_has_extension (c_generic_selections) \
|| (!defined __GNUC__ && defined __STDC_VERSION__ \
&& __STDC_VERSION__ >= 201112L))
# define __HAVE_GENERIC_SELECTION 1
#else
# define __HAVE_GENERIC_SELECTION 0
#endif
But this feature gating isn't effective because `_has_extension()` will
always evaluate to true as C generics _are_ available as a language
extension to GNU C99 when using Clang. This would have been different if
`_has_feature()` was used instead, in which case it would have properly
evaluated to `false`.
Unfortunately, there is no easy way for us to work around the warning.
We cannot define `__HAVE_GENERIC_SELECTION` ourselves as that would lead
to a redefinition, and given that the conditions are or'd together we
cannot disable any of those, either.
Instead, work around the issue by not using -std=gnu99 with Clang when
using the Makefile and by disabling warnings about C11 extensions when
using Meson. This isn't ideal, but we at least retain the ability to
detect the (mis-)use of features from newer standards with GCC.
An alternative to this might be to simply bump the required C standard
to C11, which is 15 years old by now and should have support on most
platforms out there. But some more esoteric platforms may not have it.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…windows#6220) This includes gitgitgadget#2097 and a `fixup!` for a workflow that is not upstream (Nano Server).
…indows#6233) The `linux-{asan-ubsan,sha256,reftable}` jobs run inside `ubuntu:rolling`, which now resolves to Ubuntu 26.04 with glibc 2.43; that pulls `_Generic` into `<sys/cdefs.h>` and breaks our `-std=gnu99 -Werror` Clang builds. Concrete failure: https://github.com/git-for-windows/git/actions/runs/25390480083/job/74463338845. Picking up Patrick Steinhardt's fix from https://lore.kernel.org/git/20260505-b4-pks-ci-tolerate-glibc-generic-v1-1-5786386fe512@pks.im/ ahead of its upstream merge so the GfW CI goes green again. The diff conflicts with `fe5704a3695c "mimalloc: offer a build-time option to enable it"`, which wraps the affected `config.mak.dev` block in `ifndef USE_MIMALLOC`; the resolution preserves that wrap on the `gcc6`-only branch surviving Patrick's patch. `meson.build` auto-merged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Workflow run
Rebase Summary: maint
From: 126291e800 (build: tolerate use of _Generic from glibc 2.43 with Clang (git-for-windows#6233), 2026-05-08) (81fe37b3dd..126291e800)
Resolved: eb61d7a (mingw: include the Python parts in the build, 2015-02-16)
kept NO_PYTHON= line; dropped obsolete USE_NED_ALLOCATOR block removed upstream
Range-diff
1: eb61d7a ! 1: 0ab8cfc mingw: include the Python parts in the build
Resolved: fe5704a (mimalloc: offer a build-time option to enable it, 2019-06-24)
dropped nedmalloc references (removed upstream) while keeping mimalloc build-system plumbing
Range-diff
1: fe5704a ! 1: 121ab70 mimalloc: offer a build-time option to enable it
Resolved: 6a29c2d (mingw: use mimalloc, 2019-06-24)
resolved trivial context conflict by keeping USE_MIMALLOC = YesPlease addition
Range-diff
1: 6a29c2d ! 1: 3c89e71 mingw: use mimalloc
Resolved: df9f03e (mingw: rely on MSYS2's metadata instead of hard-coding it, 2025-11-21)
resolved by combining upstream's removal of USE_NED_ALLOCATOR with the patch's platform-specific ENSURE_MSYSTEM_IS_SET and MINGW_PREFIX defines
Range-diff
1: df9f03e ! 1: 0d36457 mingw: rely on MSYS2's metadata instead of hard-coding it
Resolved: 3167997 (mingw: add a cache below mingw's lstat and dirent implementations, 2013-10-01)
resolved by keeping upstream's nedmalloc removal while adding compat/win32/fscache.c from the patch
Range-diff
1: 3167997 ! 1: 5131aa2 mingw: add a cache below mingw's lstat and dirent implementations
Resolved: 40dcbcf (mingw: optionally enable wsl compability file mode bits, 2023-06-07)
kept compat/win32/wsl.c addition, dropped compat/nedmalloc/nedmalloc.c since nedmalloc was removed upstream
Range-diff
1: 40dcbcf ! 1: 3213350 mingw: optionally enable wsl compability file mode bits
Skipped: 58ac8b1 (maintenance(geometric): avoid deadlocks on Windows 10 (git-for-windows#6215), 2026-04-28)
Upstream equivalent: 69ed0e3 (mingw: optionally use legacy (non-POSIX) delete semantics, 2026-05-07)
Range-diff
1: 58ac8b1 ! 1: 69ed0e3 maintenance(geometric): avoid deadlocks on Windows 10 (maintenance(geometric): avoid deadlocks on Windows 10 git#6215)
To: 7f0bae3025 (build: tolerate use of _Generic from glibc 2.43 with Clang (git-for-windows#6233), 2026-05-08) (16fc05b7be..7f0bae3025)
Statistics
Range-diff (click to expand)
1: 3274ae3 = 1: f2a30fd sideband: mask control characters
2: 0462ca5 = 2: 76d4a6d sideband: introduce an "escape hatch" to allow control characters
3: f207802 = 3: 1c21674 ci(dockerized): reduce the PID limit for private repositories
4: 8c8e102 = 4: 5ee0f7a sideband: do allow ANSI color sequences by default
7: 3415b43 = 5: 6d46ee9 unix-socket: avoid leak when initialization fails
5: 00ede0d = 6: 92c3711 mingw: skip symlink type auto-detection for network share targets
6: 3fdd1ff = 7: ccdeb1f Merge branch 'fix-ci'
8: 390b530 = 8: 9aff7c0 Merge branch 'disallow-control-characters-in-sideband-channel'
9: edca4c6 = 9: 9102770 Merge branch 'prevent-accidental-ntlm-exfiltration-via-symlinks'
10: 62adce4 = 10: ba0b3d8 grep: prevent
^$false match at end of file11: 7d28d16 = 11: ee06354 Merge branch 'v2.53.0.windows.3'
12: 7687dac = 12: 4749c2d Merge branch 'fixes-from-the-git-mailing-list'
13: eb61d7a < -: ---------- mingw: include the Python parts in the build
17: e7c4434 = 13: b670498 t9350: point out that refs are not updated correctly
19: a21a7a2 = 14: a210f0b transport-helper: add trailing --
21: 991ee76 = 15: 2961c66 remote-helper: check helper status after import/export
22: 85268e0 = 16: e8480d0 clean: do not traverse mount points
24: 05d54b0 = 17: 1135f75 Always auto-gc after calling a fast-import transport
25: 3ea5f7a = 18: be43260 mingw: prevent regressions with "drive-less" absolute paths
26: a5918a7 = 19: 7d22abb clean: remove mount points when possible
-: ---------- > 20: 0ab8cfc mingw: include the Python parts in the build
14: fe44ba7 = 21: 56aa50c win32/pthread: avoid name clashes with winpthread
15: 3cdd671 = 22: 1a3c9af git-compat-util: avoid redeclaring _DEFAULT_SOURCE
16: d67535b = 23: dd1ccb7 Import the source code of mimalloc v2.2.7
18: 417747b = 24: dc74aaf mimalloc: adjust for building inside Git
20: fe5704a ! 25: 121ab70 mimalloc: offer a build-time option to enable it
23: 6a29c2d ! 26: 3c89e71 mingw: use mimalloc
28: f5b513d = 27: 4d8dfa1 vcpkg_install: detect lack of Git
29: 6d42a10 = 28: 62507d6 vcpkg_install: add comment regarding slow network connections
30: 998daa7 = 29: 3221830 vcbuild: install ARM64 dependencies when building ARM64 binaries
31: 72e9d1e = 30: a5be05e vcbuild: add an option to install individual 'features'
32: cd21147 = 31: 2978ae1 cmake: allow building for Windows/ARM64
34: 0ec6c45 ! 32: 89894cf ci(vs-build) also build Windows/ARM64 artifacts
@@ .github/workflows/main.yml: jobs: + group: vs-build-${{ github.ref }}-${{ matrix.arch }} cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 @@ .github/workflows/main.yml: jobs: - uses: microsoft/setup-msbuild@v2 + uses: microsoft/setup-msbuild@v3 - name: copy dlls to root shell: cmd - run: compat�cbuild�cpkg_copy_dlls.bat release @@ .github/workflows/main.yml: jobs: env: @@ .github/workflows/main.yml: jobs: - name: upload tracked files and build artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v7 with: - name: vs-artifacts + name: vs-artifacts-${{ matrix.arch }} @@ .github/workflows/main.yml: jobs: name: win+VS test @@ .github/workflows/main.yml: jobs: - name: download tracked files and build artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 with: - name: vs-artifacts + name: vs-artifacts-x6437: dad2636 = 33: 318a303 Add schannel to curl installation
47: 8f64f0b = 34: 79b13ae hash-object: demonstrate a >4GB/LLP64 problem
48: 56570fa = 35: 961fb11 cmake(): allow setting HOST_CPU for cross-compilation
49: ae5f782 = 36: bd97849 object-file.c: use size_t for header lengths
50: 6fe34e4 = 37: a990e8e CMake: default Visual Studio generator has changed
51: d7810fc = 38: 906a395 hash algorithms: use size_t for section lengths
33: b3ca408 = 39: 6f29d9f mingw: demonstrate a
git addissue with NTFS junctions52: 3f54362 = 40: f289e58 .gitignore: add Visual Studio CMakeSetting.json file
53: 39b6525 = 41: 66e980c hash-object --stdin: verify that it works with >4GB/LLP64
35: 5ab3d0c = 42: ff7a6cb t5505/t5516: allow running without
.git/branches/in the templates36: 6055f9b = 43: 33f1fd9 strbuf_realpath(): use platform-dependent API if available
38: c1f2d53 = 44: da3acf2 http: use new "best effort" strategy for Secure Channel revoke checking
54: 430ee58 = 45: e3c9fa8 subtree: update
contrib/subtreetesttarget55: 0df5aa0 = 46: 96225ce CMakeLists: add default "x64-windows" arch for Visual Studio
56: b289cb7 = 47: 26388a9 hash-object: add another >4GB/LLP64 test case
57: 9afac8d = 48: 9d292bc setup: properly use "%(prefix)/" when in WSL
58: 236f7a9 = 49: da2707a Add config option
windows.appendAtomically39: a2cb1cd = 50: 8e54a2f t5505/t5516: fix white-space around redirectors
59: a86140e = 51: c251c5b MinGW: link as terminal server aware
27: f44c173 = 52: ca0e2bb transport: optionally disable side-band-64k
40: 63241cf = 53: 3e7ad86 mingw: fix fatal error working on mapped network drives on Windows
41: b6464dc = 54: c7c40ea clink.pl: fix MSVC compile script to handle libcurl-d.lib
42: ab2a1ba = 55: f8c6ba1 mingw: implement a platform-specific
strbuf_realpath()43: b914a04 = 56: b6cf311 t3701: verify that we can add lots of files interactively
44: 6b36218 = 57: b0671eb commit: accept "scissors" with CR/LF line endings
45: 83ec9c2 = 58: af5782d t0014: fix indentation
46: ecc65b3 = 59: ba59264 git-gui: accommodate for intent-to-add files
60: dd172a9 = 60: a738aa0 mingw: allow for longer paths in
parse_interpreter()61: 38db771 = 61: 85a4d20 compat/vcbuild: document preferred way to build in Visual Studio
62: c5edd54 = 62: 089b51a http: optionally send SSL client certificate
63: b988e69 = 63: 2d482a1 ci: run
contrib/subtreetests in CI builds64: c0fedda = 64: e969a14 CMake: show Win32 and Generator_platform build-option values
65: 4238648 = 65: 115f60b hash-object: add a >4GB/LLP64 test case using filtered input
66: f0975a6 = 66: 4040f8a compat/mingw.c: do not warn when failing to get owner
67: 6d35a86 = 67: 674683d mingw: $env:TERM="xterm-256color" for newer OSes
68: 12506a8 = 68: 92c9c0a winansi: check result and Buffer before using Name
69: f058d3c = 69: 1cfd268 mingw: change core.fsyncObjectFiles = 1 by default
70: 83c13c3 = 70: 0083260 Fix Windows version resources
71: 0818084 = 71: 9715ce4 windows: skip linking
git-<command>for built-ins72: 0ee4c75 = 72: 16a01c7 mingw: stop hard-coding
CC = gcc73: 75bad99 = 73: a9acbc0 mingw: drop the -D_USE_32BIT_TIME_T option
74: ca38850 = 74: 0acac52 mingw: only use -Wl,--large-address-aware for 32-bit builds
75: 074859b = 75: 2156e8d mingw: avoid over-specifying
--pic-executable76: 218d179 = 76: 7005824 mingw: set the prefix and HOST_CPU as per MSYS2's settings
77: 08222da = 77: 39bb5aa mingw: only enable the MSYS2-specific stuff when compiling in MSYS2
92: 5f81752 = 78: 90921ae status: fix for old-style submodules with commondir
78: df9f03e ! 79: 0d36457 mingw: rely on MSYS2's metadata instead of hard-coding it
79: f333f0f = 80: cdf214a mingw: always define
ETC_*for MSYS2 environments80: a097f61 = 81: 3d305a3 max_tree_depth: lower it for clang builds in general on Windows
81: c1de0af = 82: 073ea76 mingw: ensure valid CTYPE
82: cf124bd = 83: c61a2f2 mingw: allow
git.exeto be used instead of the "Git wrapper"83: f1c351c = 84: 3f99718 mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory
84: 7f9f7b9 = 85: aa46ee7 Merge branch 'dscho-avoid-d-f-conflict-in-vs-master'
85: fd1088b = 86: 642d83c clink.pl: fix libexpatd.lib link error when using MSVC
86: a5686e4 = 87: dec27b1 Makefile: clean up .ilk files when MSVC=1
87: 9ffd46f = 88: 01b98a1 vcbuild: add support for compiling Windows resource files
88: c3eae2e = 89: 110b951 config.mak.uname: add git.rc to MSVC builds
89: a879ea5 = 90: 289d5df clink.pl: ignore no-stack-protector arg on MSVC=1 builds
97: 52c0536 = 91: ccbdeb7 http: optionally load libcurl lazily
90: 0bcdce9 = 92: daf288a clink.pl: move default linker options for MSVC=1 builds
99: e291432 = 93: fa6a935 http: support lazy-loading libcurl also on Windows
93: 5386412 = 94: f5ac556 ci: work around a problem with HTTP/2 vs libcurl v8.10.0
91: a506d62 = 95: 4601068 cmake: install headless-git.
101: 8dbe31a = 96: 3dc0bdc http: when loading libcurl lazily, allow for multiple SSL backends
94: 1e10377 = 97: e37b0cd revision: create mark_trees_uninteresting_dense()
103: 08af2fc = 98: ab61323 git.rc: include winuser.h
104: 52d4116 = 99: 9d96996 mingw: do load libcurl dynamically by default
105: ad471d0 = 100: 48e8342 Add a GitHub workflow to verify that Git/Scalar work in Nano Server
106: b3c9707 = 101: 2204397 mingw: suggest
windows.appendAtomicallyin more cases107: 1b7b146 = 102: 377964c win32: use native ANSI sequence processing, if possible
108: 3e8b6f1 = 103: 98e374f common-main.c: fflush stdout buffer upon exit
109: b1955b4 = 104: fce0d56 t5601/t7406(mingw): do run tests with symlink support
110: 6c98ef7 = 105: 2905d52 win32: ensure that
localtime_r()is declared even in i686 builds111: 56a1deb = 106: 9bc44bb Fallback to AppData if XDG_CONFIG_HOME is unset
112: 7c656f3 = 107: 308d4fe run-command: be helpful with Git LFS fails on Windows 7
95: 47653ef = 108: 4a85566 survey: stub in new experimental 'git-survey' command
96: 6b7f7b1 = 109: 36cd7be survey: add command line opts to select references
98: cdf6081 = 110: 7214d7c survey: start pretty printing data in table form
132: 9bc31c1 = 111: f05a846 Merge 'remote-hg-prerequisites' into HEAD
100: 3f3a91b = 112: 639de83 survey: add object count summary
115: 3203a5c = 113: c4dbd9e t5563: verify that NTLM authentication works
133: b2fa140 = 114: 7631ebd Merge branch 'drive-prefix'
102: 4096b83 = 115: c556e08 survey: summarize total sizes by object type
118: e3e0345 = 116: 92c7cb7 http: disallow NTLM authentication by default
134: 7f130aa = 117: 3603d1c Merge branch 'dont-clean-junctions'
113: 722177e = 118: baf8517 survey: show progress during object walk
114: e00d893 = 119: 37fc6c6 mingw: make sure
errnois set correctly when socket operations fail121: 8f740e0 = 120: 33388cf http: warn if might have failed because of NTLM
135: a9d5ecc = 121: 600e98f Merge branch 'msys2-python'
116: f529c33 = 122: 7e3729d survey: add ability to track prioritized lists
117: 62db9f4 = 123: 26c54f8 compat/mingw: handle WSA errors in strerror
124: fa2dbd0 = 124: b060978 credential: advertise NTLM suppression and allow helpers to re-enable
137: c3aa116 = 125: 611aeec Update mimalloc to v2.2.7 (Update mimalloc to v2.2.7 git#6048)
119: b659b2a = 126: e17e902 survey: add report of "largest" paths
120: 51d8c18 = 127: 287f9e9 compat/mingw: drop outdated comment
136: 7f0f061 = 128: 74ffa9c http: extract http_reauth_prepare() from retry paths
139: 3538929 = 129: c13662e Merge pull request Config option to disable side-band-64k for transport git#2375 from assarbad/reintroduce-sideband-config
122: 1e942bb = 130: 369cfcb survey: add --top= option and config
123: fd325b2 = 131: 81b3e71 t0301: actually test credential-cache on Windows
138: 579159e = 132: 583be9c http: attempt Negotiate auth in http.emptyAuth=auto mode
141: 5071daf = 133: bbd6fbf Merge pull request mingw: fix fatal error working on mapped network drives on Windows git#2488 from bmueller84/master
125: 65915bf = 134: c1a2e32 survey: clearly note the experimental nature in the output
126: ffa5ab2 = 135: 8851f62 credential-cache: handle ECONNREFUSED gracefully
127: 3ee0fd5 = 136: d68d59d reftable: do make sure to use custom allocators
128: 12b561d = 137: 7a9b523 check-whitespace: avoid alerts about upstream commits
129: dbd653b = 138: b690ca8 t/t5571-prep-push-hook.sh: Add test with writing to stderr
130: 9cf6271 = 139: ad72f66 dir: do not traverse mount points
131: 9da0b5e = 140: f1b3635 win32: thread-utils: handle multi-socket systems
140: e3c938b = 141: be8db9e t5563: add tests for http.emptyAuth with Negotiate
142: fda52e5 = 142: 6e3d307 Merge pull request clink.pl: fix MSVC compile script to handle libcurl-d.lib git#2501 from jeffhostetler/clink-debug-curl
143: 255f5e7 = 143: 7f31cfb Merge pull request Handle
git add <file>where <file> traverses an NTFS junction git#2504 from dscho/access-repo-via-junction144: 117e03c = 144: 824d580 Merge pull request Introduce and use the new "best effort" strategy for Secure Channel revoke checking git#2535 from dscho/schannel-revoke-best-effort
145: 1f118db = 145: 2ccc38c Merge pull request ci: avoid d/f conflict in vs/master git#2618 from dscho/avoid-d/f-conflict-in-vs/master
146: f7e56fc = 146: 70c2108 Merge 'add-p-many-files'
147: 07d61db = 147: d5abe86 Merge pull request Rationalize line endings for scissors-cleanup git#2714 from lbonanomi/crlf-scissors
148: 1e570ff = 148: e6b0fe7 Merge pull request t/t0014: fix: eliminate additional lines from trace git#2655 from jglathe/jg/t0014_trace_extra_info
149: 35eae91 = 149: a699cb0 Merge 'git-gui/js/intent-to-add'
150: 6965d2d = 150: b83da17 Merge pull request Vcpkg Install: detect lack of working Git, and note possible vcpkg time outs git#2351 from PhilipOakley/vcpkg-tip
151: a161a52 = 151: 145c607 Merge pull request Windows arm64 support git#2915 from dennisameling/windows-arm64-support
152: 0a99240 = 152: a2f7597 Merge pull request cmake(): allow setting HOST_CPU for cross-compilation git#3327 from dennisameling/fix-host-cpu
153: 9a0a78c = 153: 04c60b3 Merge pull request mingw: allow for longer paths in
parse_interpreter()git#3165 from dscho/increase-allowed-length-of-interpreter-path154: 7932e12 = 154: 9773d98 Merge pull request Let the documentation reflect that there is no vs/master anymore git#3220 from dscho/there-is-no-vs/master-anymore
155: c691619 = 155: 4594f08 Merge pull request http: Add support for enabling automatic sending of SSL client certificate git#3293 from pascalmuller/http-support-automatically-sending-client-certificate
156: 49b6bac = 156: 634c1f7 Merge pull request Add
contrib/subtreetest execution to CI builds git#3349 from vdye/feature/ci-subtree-tests157: 0a44024 = 157: 57709f0 Merge pull request Make Git for Windows start builds in modern Visual Studio git#3306 from PhilipOakley/vs-sln
158: 34ddcfb = 158: bc22715 Merge pull request Begin
unsigned long->size_tconversion to support large files on Windows git#3533 from PhilipOakley/hashliteral_t159: 716a08f = 159: 4b16472 Merge pull request Various fixes around
safe.directorygit#3791: Various fixes aroundsafe.directory160: 8b55d34 = 160: a172896 Merge pull request mingw: set $env:TERM=xterm-256color for newer OSes git#3751 from rkitover/native-term
161: 312edc9 = 161: 459a52c Merge pull request winansi: check result before using Name for pty git#3875 from 1480c1/wine/detect_msys_tty
162: 6df11e5 = 162: df64477 Merge branch 'optionally-dont-append-atomically-on-windows'
163: 7bff5cf = 163: ba70359 Merge branch 'fsync-object-files-always'
164: 0d669dd = 164: d825771 Merge pull request MinGW: link as terminal server aware git#3942 from rimrul/mingw-tsaware
165: 5ab1362 = 165: becf411 Fix Windows version resources (Fix Windows version resources git#4092)
166: 6bb2e41 = 166: 4a3f4b5 Fix global repository field not being cleared (Fix global repository field not being cleared git#4083)
167: 41bbbf6 = 167: c22096c Skip linking the "dashed"
git-<command>s for built-ins (Skip linking the "dashed"git-<command>s for built-ins git#4252)168: 17f179a = 168: c52576e Add full
mingw-w64-git(i.e. regular MSYS2 ecosystem) support (Add fullmingw-w64-git(i.e. regular MSYS2 ecosystem) support git#5971)169: a782590 = 169: c15e97e Merge pull request Allow running Git directly from
C:\Program Files\Git\mingw64\bin\git.exegit#2506 from dscho/issue-2283170: 8eda6a9 = 170: 8dc4d2b Merge pull request Include Windows-specific maintenance and headless-git git#2974 from derrickstolee/maintenance-and-headless
171: 66fbdb8 = 171: 31f7b47 ARM64: Embed manifest properly (ARM64: Embed manifest properly git#4718)
172: 20b5512 = 172: d075fd2 Lazy load libcurl, allowing for an SSL/TLS backend-specific libcurl (Lazy load libcurl, allowing for an SSL/TLS backend-specific libcurl git#4410)
173: a9dad84 = 173: f75e8fc Merge branch 'nano-server'
174: 331f8d6 = 174: 5c3c95d Additional error checks for issuing the windows.appendAtomically warning (Additional error checks for issuing the windows.appendAtomically warning git#4528)
175: 49f4e7a = 175: 2e02b7a win32: use native ANSI sequence processing, if possible (win32: use native ANSI sequence processing, if possible git#4700)
176: 4a163f4 = 176: 71219ad common-main.c: fflush stdout buffer when exit (common-main.c: fflush stdout buffer when exit git#4901)
177: 4aca1e2 = 177: 39ecaa5 Merge branch 'run-t5601-and-t7406-with-symlinks-on-windows-10'
178: 480c80a = 178: c176382 Merge branch 'Fix-i686-build-with-GCC-v14'
179: 4546b94 = 179: 5c5fd5d Merge branch 'Fallback-to-AppData-if-XDG-CONFIG-HOME-is-unset'
180: 878b964 = 180: b6cb6e3 Merge branch 'run-command-be-helpful-when-Git-LFS-fails-on-Windows-7'
181: 2fe158a = 181: 591e805 pack-objects: create new name-hash algorithm (pack-objects: create new name-hash algorithm git#5157)
182: a88c485 = 182: e8d8ea8 Add path walk API and its use in 'git pack-objects' (Add path walk API and its use in 'git pack-objects' git#5171)
183: ac93a8a = 183: f647e4c Add experimental 'git survey' builtin (Add experimental 'git survey' builtin git#5174)
184: e0d91b9 = 184: d096f42 credential-cache: handle ECONNREFUSED gracefully (credential-cache: handle ECONNREFUSED gracefully git#5329)
185: c668ccd = 185: 172841f Merge branch 'reftable-vs-custom-allocators'
186: 1ba95c4 = 186: 894cff3 Merge branch 'check-whitespace-only-downstream'
187: 61e9376 = 187: ebc4123 t/t5571-prep-push-hook.sh: Add test with writing to stderr (t/t5571-prep-push-hook.sh: Add test with writing to stderr git#6063)
188: 8db1e10 = 188: dce4bdf Merge branch 'disallow-ntlm-auth-by-default'
189: 0e06c1d = 189: 7de45ed Don't traverse mount points in
remove_dir_recurse()(Don't traverse mount points inremove_dir_recurse()git#6151)190: df35587 = 190: 957920f Detect number of cores better on multi-socket systems (Detect number of cores better on multi-socket systems git#6108)
191: 9e799d3 = 191: 425e085 http: fix emptyAuth=auto for Negotiate/SPNEGO (http: fix emptyAuth=auto for Negotiate/SPNEGO git#6170)
192: 53da437 = 192: 89a4f3a Merge branch 'ready-for-upstream'
193: 4e992ed = 193: 11e851e ci(macos): skip the
git p4tests194: 07f9b4e = 194: 006b117 ci(macos): skip the
git p4tests (ci(macos): skip thegit p4tests git#5954)195: fc27d53 = 195: 786f2fe Win32: make FILETIME conversion functions public
196: 73c3fad = 196: 89d01be Win32: dirent.c: Move opendir down
197: 68e5344 = 197: 51a7aab mingw: make the dirent implementation pluggable
203: 682cfd5 = 198: 3e89e28 git-gui--askyesno: fix funny text wrapping
198: bee2a75 = 199: 0ad08ab Win32: make the lstat implementation pluggable
205: 33c3173 = 200: 46839ca git-gui--askyesno (mingw): use Git for Windows' icon, if available
199: 51736b2 = 201: 6771ca3 mingw: add infrastructure for read-only file system level caches
207: 057c84c = 202: 8843a7b Merge branch 'git-gui-askyesno'
200: 3167997 ! 203: 5131aa2 mingw: add a cache below mingw's lstat and dirent implementations
201: 43ec30e = 204: a1f729e fscache: load directories only once
202: e7b3a2c = 205: 00a18c8 fscache: add key for GIT_TRACE_FSCACHE
204: f865c7c = 206: 5d7f5d2 fscache: remember not-found directories
206: 066afb5 = 207: dc50d87 fscache: add a test for the dir-not-found optimization
208: 6d30b7e = 208: 682aedd add: use preload-index and fscache for performance
209: 6f1b0e8 = 209: fa4f98e dir.c: make add_excludes aware of fscache during status
210: 0046bea = 210: 0347205 fscache: make fscache_enabled() public
211: aba3b3b = 211: 3338fee dir.c: regression fix for add_excludes with fscache
212: e4bc62d = 212: fbd6258 fetch-pack.c: enable fscache for stats under .git/objects
213: 0b68195 = 213: bc98a3f checkout.c: enable fscache for checkout again
214: 65c7726 = 214: 234bc91 Enable the filesystem cache (fscache) in refresh_index().
215: 8756c0a = 215: 12f3e62 fscache: use FindFirstFileExW to avoid retrieving the short name
216: 2795619 = 216: 7c0c669 fscache: add GIT_TEST_FSCACHE support
217: accc3b0 = 217: 53b4350 fscache: add fscache hit statistics
218: b2dbe31 = 218: a81fe9e unpack-trees: enable fscache for sparse-checkout
219: 62cf57b = 219: e4f56c9 status: disable and free fscache at the end of the status command
220: 32c5e52 = 220: 174c0cb mem_pool: add GIT_TRACE_MEMPOOL support
221: 6378e39 = 221: 1003a5e fscache: fscache takes an initial size
222: 332003f = 222: d5fd5e2 fscache: update fscache to be thread specific instead of global
223: 952e433 = 223: 40c706e fscache: teach fscache to use mempool
224: 932d3b2 = 224: 56a4aa2 fscache: make fscache_enable() thread safe
225: bc199d2 = 225: 7f13be7 fscache: teach fscache to use NtQueryDirectoryFile
226: 135b2cf = 226: b8a2482 fscache: remember the reparse tag for each entry
227: 80f9f76 = 227: ac9d883 Merge branch 'fscache'
228: fcaf4cc = 228: 9c3a934 fscache: implement an FSCache-aware is_mount_point()
229: 9e7af57 = 229: e0d0c1b Merge pull request status: disable and free fscache at the end of the status command git#1909 from benpeart/free-fscache-after-status-gfw
230: 7591eeb = 230: 6c9a243 clean: make use of FSCache
231: 5a0705a = 231: 3a9e019 Merge remote-tracking branch 'benpeart/fscache-per-thread-gfw'
232: 2de9933 = 232: e443ba9 Merge branch 'dont-clean-junctions-fscache'
233: 1163e1f = 233: e86bb73 pack-objects (mingw): demonstrate a segmentation fault with large deltas
234: 994b318 ! 234: 3adebc3 mingw: support long paths
235: 23721ec = 235: e2d7b47 win32(long path support): leave drive-less absolute paths intact
236: 7373203 = 236: 850ef6d compat/fsmonitor/fsm-*-win32: support long paths
237: 7f13315 = 237: 82676e5 clean: suggest using
core.longPathsif paths are too long to remove238: 650c6e2 = 238: 68af0ba mingw: Support
git_terminal_promptwith more terminals239: 56cc21f = 239: 67b7b4d compat/terminal.c: only use the Windows console if bash 'read -r' fails
240: 48c7707 = 240: 4e9d2ee mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method
248: fcdead2 = 241: 35e7bde mingw: introduce code to detect whether we're inside a Windows container
250: f019e94 = 242: 7387d17 mingw: when running in a Windows container, try to rename() harder
252: 948807d = 243: 51199a4 mingw: move the file_attr_to_st_mode() function definition
241: 3f22655 = 244: 57372e0 Win32: symlink: move phantom symlink creation to a separate function
254: c6d8161 = 245: 545b9c5 mingw: Windows Docker volumes are not symbolic links
242: 3394e01 = 246: 4c959cf Introduce helper to create symlinks that knows about index_state
256: 79b811d = 247: 2341967 mingw: work around rename() failing on a read-only file
243: 82cf690 = 248: 4cdc9c3 mingw: allow to specify the symlink type in .gitattributes
244: 24f1828 = 249: dd7b7ff Win32: symlink: add test for
symlinkattribute245: 21dab4c = 250: 88efae8 mingw: explicitly specify with which cmd to prefix the cmdline
246: 7da099e = 251: 8783098 mingw: when path_lookup() failed, try BusyBox
247: 5b2f2b8 = 252: 5ba9af3 test-tool: learn to act as a drop-in replacement for
iconv249: b33b515 = 253: 1476e0c tests(mingw): if
iconvis unavailable, usetest-helper --iconv251: 06acf32 = 254: e354476 gitattributes: mark .png files as binary
253: 15d2203 = 255: 8081d4c tests: move test PNGs into t/lib-diff/
255: b28a90d = 256: 22d27dd tests: only override sort & find if there are usable ones in /usr/bin/
257: 8699090 = 257: 0db4ebf tests: use the correct path separator with BusyBox
258: 452cc00 = 258: bbbe29a mingw: only use Bash-ism
builtin pwd -Wwhen available259: bb2194f = 259: 424d8a2 tests (mingw): remove Bash-specific pwd option
260: 6e73f85 = 260: 01ff47b test-lib: add BUSYBOX prerequisite
261: d7ed9c9 = 261: f46fc7d t5003: use binary file from t/lib-diff/
262: 89ede41 = 262: bf4d0e0 t5532: workaround for BusyBox on Windows
263: 343213a = 263: 568f848 t5605: special-case hardlink test for BusyBox-w32
264: f9da0b5 = 264: d579d20 t5813: allow for $PWD to be a Windows path
265: e05631f = 265: 6f7b75f t9200: skip tests when $PWD contains a colon
276: 9bda540 = 266: ef04ba1 Merge branch 'gitk-and-git-gui-patches'
278: 1d3631a = 267: a7c4473 Merge branch 'long-paths'
280: 8127adf = 268: 926564a Merge branch 'msys2'
273: beb773c = 269: 5e1a5fe Describe Git for Windows' architecture
282: 00848ca = 270: e0e29ed Merge 'docker-volumes-are-no-symlinks'
275: 8c0db9a = 271: a80b626 Modify the Code of Conduct for Git for Windows
284: 6dfd499 = 272: 46290f4 mingw: try resetting the read-only bit if rename fails (Reset READONLY if rename fails git#4527)
277: 1cbd77d = 273: d19c1c1 CONTRIBUTING.md: add guide for first-time contributors
286: b25ee84 = 274: 389ee94 Merge pull request Specify symlink type in .gitattributes git#1897 from piscisaureus/symlink-attr
279: 2a827be = 275: a78612f README.md: Add a Windows-specific preamble
266: 41814b8 = 276: 0e5c452 mingw: kill child processes in a gentler way
267: 40dcbcf ! 277: 3213350 mingw: optionally enable wsl compability file mode bits
287: 8970d31 = 278: f4ae20b Merge branch 'busybox-w32'
281: a959dd0 = 279: 74b83e8 Add an issue template
268: d8b4bb2 = 280: c84c346 mingw: really handle SIGINT
288: afb697b = 281: 8e80f33 Merge branch 'wsl-file-mode-bits'
272: 0110fc9 = 282: 4781361 Add a GitHub workflow to monitor component updates
283: d4cc54f = 283: a5d98f2 Modify the GitHub Pull Request template (to reflect Git for Windows)
269: 0a0670a = 284: aad989a Partially un-revert "editor: save and reset terminal after calling EDITOR"
289: 1b3b2af = 285: 27b8455 Merge pull request Handle Ctrl+C in Git Bash nicely git#1170 from dscho/mingw-kill-process
270: e527f47 = 286: b483d61 reset: reinstate support for the deprecated --stdin option
271: 80096a9 = 287: 54da7a9 fsmonitor: reintroduce core.useBuiltinFSMonitor
274: b3921c2 = 288: b5ae314 dependabot: help keeping GitHub Actions versions up to date
285: 53fa513 = 289: 44bd506 SECURITY.md: document Git for Windows' policies
290: 10aa5b3 = 290: 38d435c Merge branch 'un-revert-editor-save-and-reset'
291: c9c345b = 291: 5e31e6a Merge branch 'phase-out-reset-stdin'
292: 9c69e9f = 292: 0d4bc7a Merge branch 'deprecate-core.useBuiltinFSMonitor'
293: e217681 = 293: d821c61 Merge pull request Start monitoring updates of Git for Windows' components in the open git#2837 from dscho/monitor-component-updates
294: 2b8a3ab = 294: 1137b60 Merge 'readme' into HEAD
295: 0d2fdc1 < -: ---------- ci: bump microsoft/setup-msbuild from v2 to v3
296: 5d719b3 < -: ---------- ci: bump actions/{upload,download}-artifact to v7 and v8
297: bfbe0db < -: ---------- ci: bump actions/github-script from v8 to v9
298: 5694ca1 < -: ---------- ci: bump actions/checkout from v5 to v6
299: cd920e9 = 295: cfbeb75 Add an AGENTS.md file to help with AI-assisted debugging/development
300: b6ee11c = 296: 836a541 fixup! Add an AGENTS.md file to help with AI-assisted debugging/development
301: 448b5cf = 297: bd30517 fixup! Add an AGENTS.md file to help with AI-assisted debugging/development
302: 497ffcd = 298: f7c9c24 fixup! Add an AGENTS.md file to help with AI-assisted debugging/development
303: 46a110b = 299: 2d44cd4 fixup! Add an AGENTS.md file to help with AI-assisted debugging/development
304: 63f8b95 = 300: da2eabf fixup! Add an AGENTS.md file to help with AI-assisted debugging/development
305: 40750f8 = 301: de66b68 Add an AGENTS.md file to help with AI-assisted debugging/development (Add an AGENTS.md file to help with AI-assisted debugging/development git#6198)
306: 39ba52a = 302: 67e5992 fixup! ci: work around a problem with HTTP/2 vs libcurl v8.10.0
307: c340e33 = 303: 9f226a4 fixup! revision: create mark_trees_uninteresting_dense()
308: d5b8d9b = 304: e40fd7c Drop obsolete downstream patches (Drop obsolete downstream patches git#6208)
309: 97508e9 < -: ---------- mingw: optionally use legacy (non-POSIX) delete semantics
310: 12ebd5c < -: ---------- maintenance(geometric): do release the
.idxfiles before repacking311: 58ac8b1 < -: ---------- maintenance(geometric): avoid deadlocks on Windows 10 (maintenance(geometric): avoid deadlocks on Windows 10 git#6215)
312: c6e8df1 < -: ---------- ci: bump git-for-windows/setup-git-for-windows-sdk from v1 to v2
313: b9ccb66 < -: ---------- l10n: bump mshick/add-pr-comment from v2 to v3
314: 3893744 = 305: d12be60 Merge branch 'pr-2097'
315: b797f03 = 306: 6977813 fixup! Add a GitHub workflow to verify that Git/Scalar work in Nano Server
316: 01883ac = 307: 1fb4dd6 Update GitHub Actions versions used in the GitHub workflows (Update GitHub Actions versions used in the GitHub workflows git#6220)
317: 74c3ea9 ! 308: 8d386f5 build: tolerate use of _Generic from glibc 2.43 with Clang
318: 126291e = 309: 7f0bae3 build: tolerate use of _Generic from glibc 2.43 with Clang (build: tolerate use of _Generic from glibc 2.43 with Clang git#6233)