-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Clean-up Git for Windows' topic branches a little #4243
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Seems that we'll have to merge #4245 first, then I have to re-do this PR branch. |
This workflow needs to be triggered manually, and it offers to specify a couple input parameters. But none of them are required. Make that explicit. Signed-off-by: Johannes Schindelin <[email protected]>
…vision We cannot just check out the current revision: The user might have overridden `REPOSITORY` and `REF` via the workflow dispatch. Signed-off-by: Johannes Schindelin <[email protected]>
Git's regular Makefile mentions that HOST_CPU should be defined when cross-compiling Git: https://github.com/git-for-windows/git/blob/37796bca76ef4180c39ee508ca3e42c0777ba444/Makefile#L438-L439 This is then used to set the GIT_HOST_CPU variable when compiling Git: https://github.com/git-for-windows/git/blob/37796bca76ef4180c39ee508ca3e42c0777ba444/Makefile#L1337-L1341 Then, when the user runs `git version --build-options`, it returns that value: https://github.com/git-for-windows/git/blob/37796bca76ef4180c39ee508ca3e42c0777ba444/help.c#L658 This commit adds the same functionality to the CMake configuration. Users can now set -DHOST_CPU= to set the target architecture. Signed-off-by: Dennis Ameling <[email protected]>
This simplifies the workflow dramatically, as well as accelerating it because the Action recently learned to use the partial clone/parallel checkout features of Git. Note that we have to reinstate that `/usr/bin/git` hack (a shell script that simply redirects to `/mingw64/bin/git.exe`) in the `pkg` job manually, since we no longer cache the `build-installers` artifact _after_ installing that hack in `bundle-artifacts`. Signed-off-by: Johannes Schindelin <[email protected]>
This is needed for the next commit, where we add HOST_CPU to the CMake invocation. Signed-off-by: Johannes Schindelin <[email protected]>
This is needed for the next change, where we add HOST_CPU support to the CMake definition. Signed-off-by: Johannes Schindelin <[email protected]>
The intention of this change is to align with how the top-level git `Makefile` defines its own test target (which also internally calls `$(MAKE) -C t/ all`). This change also ensures the consistency of `make -C contrib/subtree test` with other testing in CI executions (which rely on `$DEFAULT_TEST_TARGET` being defined as `prove`). Signed-off-by: Victoria Dye <[email protected]>
As mentioned in the Makefile and CMakeLists.txt: "When cross-compiling, define HOST_CPU as the canonical name of the CPU on which the built Git will run (for instance "x86_64")" This commit sets the HOST_CPU variable since Git for Windows arm64 is cross-compiled from an amd64 host. Signed-off-by: Dennis Ameling <[email protected]>
We now have a GitHub Action to download and cache Azure Pipelines artifacts (such as the `vcpkg` artifacts), hiding gnarly internals, and also providing some robustness against network glitches. Let's use it. Signed-off-by: Johannes Schindelin <[email protected]>
As reported in newren/git-filter-repo#225, it looks like 99 bytes is not really sufficient to represent e.g. the full path to Python when installed via Windows Store (and this path is used in the hasb bang line when installing scripts via `pip`). Let's increase it to what is probably the maximum sensible path size: MAX_PATH. This makes `parse_interpreter()` in line with what `lookup_prog()` handles. Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Vilius Šumskas <[email protected]>
We used to have that `make vcxproj` hack, but a hack it is. In the meantime, we have a much cleaner solution: using CMake, either explicitly, or even more conveniently via Visual Studio's built-in CMake support (simply open Git's top-level directory via File>Open>Folder...). Let's let the `README` reflect this. Signed-off-by: Johannes Schindelin <[email protected]>
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 <[email protected]>
Correct some wording and inform users regarding the Visual Studio changes (from V16.6) to the default generator. Subsequent commits ensure that Git for Windows can be directly opened in modern Visual Studio without needing special configuration of the CMakeLists settings. It appeares that internally Visual Studio creates it's own version of the .sln file (etc.) for extension tools that expect them. The large number of references below document the shifting of Visual Studio default and CMake setting options. refs: https://docs.microsoft.com/en-us/search/?scope=C%2B%2B&view=msvc-150&terms=Ninja 1. https://docs.microsoft.com/en-us/cpp/linux/cmake-linux-configure?view=msvc-160 (note the linux bit) "In Visual Studio 2019 version 16.6 or later ***, Ninja is the default generator for configurations targeting a remote system or WSL. For more information, see this post on the C++ Team Blog [https://devblogs.microsoft.com/cppblog/linux-development-with-visual-studio-first-class-support-for-gdbserver-improved-build-times-with-ninja-and-updates-to-the-connection-manager/]. For more information about these settings, see CMakeSettings.json reference [https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-160]." 2. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160 "CMake supports two files that allow users to specify common configure, build, and test options and share them with others: CMakePresets.json and CMakeUserPresets.json." " Both files are supported in Visual Studio 2019 version 16.10 or later. ***" 3. https://devblogs.microsoft.com/cppblog/linux-development-with-visual-studio-first-class-support-for-gdbserver-improved-build-times-with-ninja-and-updates-to-the-connection-manager/ " Ninja has been the default generator (underlying build system) for CMake configurations targeting Windows for some time***, but in Visual Studio 2019 version 16.6 Preview 3*** we added support for Ninja on Linux." 4. https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-160 " `generator`: specifies CMake generator to use for this configuration. May be one of: Visual Studio 2019 only: Visual Studio 16 2019 Visual Studio 16 2019 Win64 Visual Studio 16 2019 ARM Visual Studio 2017 and later: Visual Studio 15 2017 Visual Studio 15 2017 Win64 Visual Studio 15 2017 ARM Visual Studio 14 2015 Visual Studio 14 2015 Win64 Visual Studio 14 2015 ARM Unix Makefiles Ninja Because Ninja is designed for fast build speeds instead of flexibility and function, it is set as the default. However, some CMake projects may be unable to correctly build using Ninja. If this occurs, you can instruct CMake to generate Visual Studio projects instead. To specify a Visual Studio generator in Visual Studio 2017, open the settings editor from the main menu by choosing CMake | Change CMake Settings. Delete "Ninja" and type "V". This activates IntelliSense, which enables you to choose the generator you want." "To specify a Visual Studio generator in Visual Studio 2019, right-click on the CMakeLists.txt file in Solution Explorer and choose CMake Settings for project > Show Advanced Settings > CMake Generator. When the active configuration specifies a Visual Studio generator, by default MSBuild.exe is invoked with` -m -v:minimal` arguments." 5. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#enable-cmakepresetsjson-integration-in-visual-studio-2019 "Enable CMakePresets.json integration in Visual Studio 2019 CMakePresets.json integration isn't enabled by default in Visual Studio 2019. You can enable it for all CMake projects in Tools > Options > CMake > General: (tick a box)" ... see more. 6. https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-140 (whichever v140 is..) "CMake projects are supported in Visual Studio 2017 and later." 7. https://docs.microsoft.com/en-us/cpp/overview/what-s-new-for-cpp-2017?view=msvc-150 "Support added for the CMake Ninja generator." 8. https://docs.microsoft.com/en-us/cpp/overview/what-s-new-for-cpp-2017?view=msvc-150#cmake-support-via-open-folder "CMake support via Open Folder Visual Studio 2017 introduces support for using CMake projects without converting to MSBuild project files (.vcxproj). For more information, see CMake projects in Visual Studio[https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio?view=msvc-150]. Opening CMake projects with Open Folder automatically configures the environment for C++ editing, building, and debugging." ... +more! 9. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#supported-cmake-and-cmakepresetsjson-versions "Visual Studio reads and evaluates CMakePresets.json and CMakeUserPresets.json itself and doesn't invoke CMake directly with the --preset option. So, CMake version 3.20 or later isn't strictly required when you're building with CMakePresets.json inside Visual Studio. We recommend using CMake version 3.14 or later." 10. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#enable-cmakepresetsjson-integration-in-visual-studio-2019 "If you don't want to enable CMakePresets.json integration for all CMake projects, you can enable CMakePresets.json integration for a single CMake project by adding a CMakePresets.json file to the root of the open folder. You must close and reopen the folder in Visual Studio to activate the integration. 11. https://docs.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-160#default-configure-presets ***(doesn't actually say which version..) "Default Configure Presets If no CMakePresets.json or CMakeUserPresets.json file exists, or if CMakePresets.json or CMakeUserPresets.json is invalid, Visual Studio will fall back*** on the following default Configure Presets: Windows example JSON { "name": "windows-default", "displayName": "Windows x64 Debug", "description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type", "generator": "Ninja", "binaryDir": "${sourceDir}/out/build/${presetName}", "architecture": { "value": "x64", "strategy": "external" }, "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}" }, "vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } } }, " Signed-off-by: Philip Oakley <[email protected]>
The CMakeSettings.json file is tool generated. Developers may track it should they provide additional settings. Signed-off-by: Philip Oakley <[email protected]>
In Git-for-Windows, work on using ARM64 has progressed. The commit 2d94b77 (cmake: allow building for Windows/ARM64, 2020-12-04) failed to notice that /compat/vcbuild/vcpkg_install.bat will default to using the "x64-windows" architecture for the vcpkg installation if not set, but CMake is not told of this default. Commit 635b6d9 (vcbuild: install ARM64 dependencies when building ARM64 binaries, 2020-01-31) later updated vcpkg_install.bat to accept an arch (%1) parameter, but retained the default. This default is neccessary for the use case where the project directory is opened directly in Visual Studio, which will find and build a CMakeLists.txt file without any parameters, thus expecting use of the default setting. Also Visual studio will generate internal .sln solution and .vcxproj project files needed for some extension tools. Inform users of the additional .sln/.vcxproj generation. ** How to test: rm -rf '.vs' # remove old visual studio settings rm -rf 'compat/vcbuild/vcpkg' # remove any vcpkg downloads rm -rf 'contrib/buildsystems/out' # remove builds & CMake artifacts with a fresh Visual Studio Community Edition, File>>Open>>(git *folder*) to load the project (which will take some time!). check for successful compilation. The implicit .sln (etc.) are in the hidden .vs directory created by Visual Studio. Signed-off-by: Philip Oakley <[email protected]>
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 <[email protected]>
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 <[email protected]>
In Git for Windows, `has_symlinks` is set to 0 by default. Therefore, we need to parse the config setting `core.symlinks` to know if it has been set to `true`. In `git init`, we must do that before copying the templates because they might contain symbolic links. Even if the support for symbolic links on Windows has not made it to upstream Git yet, we really should make sure that all the `core.*` settings are parsed before proceeding, as they might very well change the behavior of `git init` in a way the user intended. This fixes git-for-windows#3414 Signed-off-by: Johannes Schindelin <[email protected]>
On LLP64 systems, such as Windows, the size of `long`, `int`, etc. is only 32 bits (for backward compatibility). Git's use of `unsigned long` for file memory sizes in many places, rather than size_t, limits the handling of large files on LLP64 systems (commonly given as `>4GB`). Provide a minimum test for handling a >4GB file. The `hash-object` command, with the `--literally` and without `-w` option avoids writing the object, either loose or packed. This avoids the code paths hitting the `bigFileThreshold` config test code, the zlib code, and the pack code. Subsequent patches will walk the test's call chain, converting types to `size_t` (which is larger in LLP64 data models) where appropriate. Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
The previous commit adds a test that demonstrates a problem in the `hash-object --literally` command, manifesting in an unnecessary file size limit on systems using the LLP64 data model (which includes Windows). Walking the affected code path is `cmd_hash_object()` >> `hash_fd()` >> `hash_literally()` >> `hash_object_file_literally()`. The function `hash_object_file_literally()` is the first with a file length parameter (via a mem buffer). This commit changes the type of that parameter to the LLP64 compatible `size_t` type. There are no other uses of the function. The `strbuf` type is already `size_t` compatible. Note: The hash-object test does not yet pass. Subsequent commits will continue to walk the call tree's lower level functions to identify further fixes. Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Continue walking the code path for the >4GB `hash-object --literally` test. The `hash_object_file_literally()` function internally uses both `hash_object_file()` and `write_object_file_prepare()`. Both function signatures use `unsigned long` rather than `size_t` for the mem buffer sizes. Use `size_t` instead, for LLP64 compatibility. While at it, convert those function's object's header buffer length to `size_t` for consistency. The value is already upcast to `uintmax_t` for print format compatibility. Note: The hash-object test still does not pass. A subsequent commit continues to walk the call tree's lower level hash functions to identify further fixes. Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Continue walking the code path for the >4GB `hash-object --literally` test to the hash algorithm step for LLP64 systems. This patch lets the SHA1DC code use `size_t`, making it compatible with LLP64 data models (as used e.g. by Windows). The interested reader of this patch will note that we adjust the signature of the `git_SHA1DCUpdate()` function without updating _any_ call site. This certainly puzzled at least one reviewer already, so here is an explanation: This function is never called directly, but always via the macro `platform_SHA1_Update`, which is usually called via the macro `git_SHA1_Update`. However, we never call `git_SHA1_Update()` directly in `struct git_hash_algo`. Instead, we call `git_hash_sha1_update()`, which is defined thusly: static void git_hash_sha1_update(git_hash_ctx *ctx, const void *data, size_t len) { git_SHA1_Update(&ctx->sha1, data, len); } i.e. it contains an implicit downcast from `size_t` to `unsigned long` (before this here patch). With this patch, there is no downcast anymore. With this patch, finally, the t1007-hash-object.sh "files over 4GB hash literally" test case is fixed. Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Just like the `hash-object --literally` code path, the `--stdin` code path also needs to use `size_t` instead of `unsigned long` to represent memory sizes, otherwise it would cause problems on platforms using the LLP64 data model (such as Windows). To limit the scope of the test case, the object is explicitly not written to the object store, nor are any filters applied. The `big` file from the previous test case is reused to save setup time; To avoid relying on that side effect, it is generated if it does not exist (e.g. when running via `sh t1007-*.sh --long --run=1,41`). Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
To complement the `--stdin` and `--literally` test cases that verify that we can hash files larger than 4GB on 64-bit platforms using the LLP64 data model, here is a test case that exercises `hash-object` _without_ any options. Just as before, we use the `big` file from the previous test case if it exists to save on setup time, otherwise generate it. Signed-off-by: Philip Oakley <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
Signed-off-by: Derrick Stolee <[email protected]>
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 <[email protected]>
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 <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
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 <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
The sentiment bot will help detect when things get too heated. Hopefully. Signed-off-by: Johannes Schindelin <[email protected]>
These are Git for Windows' Git GUI and gitk patches. We will have to decide at some point what to do about them, but that's a little lower priority (as Git GUI seems to be unmaintained for the time being, and the gitk maintainer keeps a very low profile on the Git mailing list, too). Signed-off-by: Johannes Schindelin <[email protected]>
Git documentation refers to $HOME and $XDG_CONFIG_HOME often, but does not specify how or where these values come from on Windows where neither is set by default. The new documentation reflects the behavior of setup_windows_environment() in compat/mingw.c. Signed-off-by: Alejandro Barreto <[email protected]>
This is the recommended way on GitHub to describe policies revolving around security issues and about supported versions. Signed-off-by: Johannes Schindelin <[email protected]>
…dvice clean: suggest using `core.longPaths` if paths are too long to remove
This was pull request git-for-windows#1645 from ZCube/master Support windows container. Signed-off-by: Johannes Schindelin <[email protected]>
Specify symlink type in .gitattributes
Signed-off-by: Johannes Schindelin <[email protected]>
Handle Ctrl+C in Git Bash nicely Signed-off-by: Johannes Schindelin <[email protected]>
Switch to batched fsync by default
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 <[email protected]>
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 <[email protected]>
Previously, we interpolated paths in config variables that start with a forward-slash as relative to the runtime prefix. This was not portable and has been replaced with `%(prefix)/`. Let's warn users when they use the now-deprecated form. Signed-off-by: Johannes Schindelin <[email protected]>
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 <[email protected]>
…updates Start monitoring updates of Git for Windows' component in the open
Add a README.md for GitHub goodness. Signed-off-by: Johannes Schindelin <[email protected]>
@derrickstolee I now did that. Please have a look. While at it, I also moved the re-introduction of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good, thanks!
Now that the v2.39.1 dust has settled, let's re-arrange a couple of topics, and re-base the branch thicket onto the cherry-picked fixes c6ab913 and 37537d6 that made it into Git for Windows v2.39.1 but not into Git v2.39.1.
Note: the result of this PR is intentionally tree-same, i.e. it is not supposed to introduce any new file changes that had not been there before.
Also note: the mimalloc patches (including the two preparatory patches
win32/pthread: avoid name clashes with winpthread
andgit-compat-util: avoid redeclaring _DEFAULT_SOURCE
) look as if they were dropped in the range-diff; They were not dropped, in fact, but replaced with newer versions via #4211.Lastly, including the patches to address cURL deprecation errors required some context changes.
Range-diff relative to `main`
1: eb749d2 < -: ------------ fixup! Merge pull request Switch Git for Windows to using mimalloc instead of nedmalloc #4013 from dscho/mimalloc
262: 6d54c6b ! 1: 6956015 http-push: prefer CURLOPT_UPLOAD to CURLOPT_PUT
263: ee08d7b ! 2: fe7e44e http: prefer CURLOPT_SEEKFUNCTION to CURLOPT_IOCTLFUNCTION
264: de848e3 ! 3: 6c065f7 http: support CURLOPT_PROTOCOLS_STR
8: fd03d86 = 4: 5ef19b6 windows: ignore empty
PATH
elements9: 8368ffd = 5: 9121f5c is_Cygwin: avoid
exec
ing anything10: 42b272c = 6: 15ea119 Move is_ functions to the beginning
11: 1ea4132 = 7: 24f3f58 Move the
_which
function (almost) to the top12: 5de016e = 8: 2dd8454 Work around Tcl's default
PATH
lookup15: e9d0ee2 = 9: f0d07dd t9350: point out that refs are not updated correctly
16: 81f82f5 = 10: eaf2326 transport-helper: add trailing --
17: cebf600 = 11: 5d6481a remote-helper: check helper status after import/export
18: 942f42f = 12: 4a9ad8b mingw: demonstrate a problem with certain absolute paths
19: 3dc57ce = 13: 8919340 gitk: prevent overly long command lines
22: c6f63b4 = 14: d100ed4 Always auto-gc after calling a fast-import transport
23: 092d476 = 15: bf4e3fc mingw: allow absolute paths without drive prefix
24: 39665ad = 16: ee73ee3 mingw: change core.fsyncObjectFiles = 1 by default
21: 03391e8 = 17: ed43e86 mingw: include the Python parts in the build
2: e60e2a7 = 18: 2384d02 win32/pthread: avoid name clashes with winpthread
3: 2a31976 = 19: 1750da6 git-compat-util: avoid redeclaring _DEFAULT_SOURCE
4: 174615b = 20: 65a3e96 Import the source code of mimalloc v2.0.9
5: e90043c = 21: 8a69e1c mimalloc: adjust for building inside Git
6: 3d225d4 < -: ------------ mimalloc: offer a build-time option to enable it
20: 5f09b3c = 22: d737a5f clean: do not traverse mount points
138: 71d9208 = 23: 4a6bd4b mimalloc: offer a build-time option to enable it
25: f4fbf19 = 24: b01bd62 gitk: Escape file paths before piping to git log
26: 1ed0461 = 25: 62954e1 clean: remove mount points when possible
29: 16c8fb6 = 26: 7d8228f mingw: demonstrate a
git add
issue with NTFS junctions7: e86d22c = 27: 1dd4bba mingw: use mimalloc
13: 5a3c843 (upstream: 37537d6) < -: ------------ attr: adjust a mismatched data type
14: 3b75334 (upstream: c6ab913) < -: ------------ fsck: document the new
gitattributes
message IDs27: b74c43d = 28: 3207284 Config option to disable side-band-64k for transport
35: dcae8ac = 29: a9aadca mingw: make sure
errno
is set correctly when socket operations fail36: fbbe4b5 = 30: cf8ebeb mingw: do resolve symlinks in
getcwd()
37: a790e8b = 31: e0aed23 mingw: fix fatal error working on mapped network drives on Windows
38: 8e901f1 = 32: 8457885 clink.pl: fix MSVC compile script to handle libcurl-d.lib
32: c339ecb = 33: ef56d2e vcxproj: unclash project directories with build outputs
28: 594ca32 = 34: 0cd3a89 mingw: ensure valid CTYPE
40: 3b801d4 = 35: 828c9f8 t5505/t5516: allow running without
.git/branches/
in the templates30: 45e73e1 = 36: 7ecd143 mingw: allow
git.exe
to be used instead of the "Git wrapper"31: 991301b = 37: 59dff16 strbuf_realpath(): use platform-dependent API if available
41: 7354e69 = 38: 8bb50a1 t5505/t5516: fix white-space around redirectors
33: 492f691 = 39: 84dac4b mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory
34: 42ea09a = 40: e43973f http: use new "best effort" strategy for Secure Channel revoke checking
39: cb2da8b = 41: c4d21fb mingw: implement a platform-specific
strbuf_realpath()
42: 6c40630 = 42: 7d71411 Allow
add -p
andadd -i
with a large number of files44: 911f647 = 43: f6b0abd t3701: verify that we can add lots of files interactively
45: 7995367 = 44: 485d36c git add -i: handle CR/LF line endings in the interactive input
46: a9b1655 = 45: a5f0bdd commit: accept "scissors" with CR/LF line endings
47: 8bcc106 = 46: 7745577 t0014: fix indentation
48: 1630ae2 = 47: 41735ca git-gui: accommodate for intent-to-add files
43: f2481ee = 48: 46ae884 clink.pl: fix libexpatd.lib link error when using MSVC
49: 78fb694 = 49: 05efe82 Makefile: clean up .ilk files when MSVC=1
50: a596037 = 50: b1c486c vcbuild: add support for compiling Windows resource files
51: 1706d5b = 51: aa95ce2 config.mak.uname: add git.rc to MSVC builds
52: 78b1857 = 52: e243178 clink.pl: ignore no-stack-protector arg on MSVC=1 builds
53: e99b47d = 53: 62022ec clink.pl: move default linker options for MSVC=1 builds
54: 9bd366d = 54: 4f0ff06 buildsystems: remove duplicate clause
55: 719d577 = 55: df6cc61 vcxproj: handle resource files, too
57: 3442e14 = 56: f6454e8 vcxproj: ignore -fno-stack-protector and -fno-common
59: d58aa79 = 57: 6677efa vcxproj: handle GUI programs, too
61: 9ad610a = 58: 640626e win32: add a helper to run
git.exe
without a foreground window63: 6eeb025 = 59: 15f6309 git maintenance: avoid console window in scheduled tasks on Windows
56: fca5df5 = 60: 0139897 vcpkg_install: detect lack of Git
58: 163e375 = 61: 9be5a20 vcpkg_install: add comment regarding slow network connections
60: cefd8f5 = 62: 53abd5f vcxproj: support building Windows/ARM64 binaries
62: 34cef15 = 63: a22cc2b vcbuild: install ARM64 dependencies when building ARM64 binaries
73: 972d837 = 64: a2f3ca0 vcbuild: add an option to install individual 'features'
75: c757a9e = 65: 18ae03e cmake: allow building for Windows/ARM64
77: 74679e7 = 66: c8be050 ci(vs-build) also build Windows/ARM64 artifacts
79: d034ac2 = 67: e24188a Add schannel to curl installation
64: 318ad3d = 68: 466fabf Add a GitHub workflow to generate Git for Windows' Pacman package
65: a3116b3 = 69: bd02e76 git-artifacts: if GPG secrets are available, use them
66: b835e92 = 70: ab500f7 git-artifacts: also code-sign, if configured via the secrets
67: 6bc46f4 = 71: 8920a9f git-artifacts: also build the installer
68: 4314103 = 72: f95f018 git-artifacts: also build portable, mingit and mingit-busybox
69: 8b53cd0 = 73: 1517d16 git-artifacts: also build 32-bit versions
70: 2bd540f = 74: 4dd354b git-artifacts: also build the nuget package
71: 9fa55c6 = 75: 061cb59 git-artifacts: allow restricting which artifacts are built
72: 24b3abe = 76: 1707476 git-artifacts: allow specifying repo/ref via workflow_dispatch
74: 1868ef5 = 77: 05b1547 git-artifacts: cache the build-installers artifact
76: cf571e4 = 78: 147eaec git-artifacts: use the cached build-installers instead of makepkg-git
78: 6b04a02 = 79: ec2d71f git-artifacts: add ARM64 artifacts
86: e863b1e = 80: cbaf8cd git-artifacts: add workaround for GCM Core on ARM64
80: 5c223e6 = 81: 9c0c553 git-artifacts(arm64): avoid hard-linking the dashed built-ins
81: fb01e62 = 82: bdf89f2 git-artifacts: use a narrower
PATH
82: 363035b = 83: 9989dd9 git-artifacts: fix BUILD_ONLY handling for ARM64
83: d2efeab = 84: 52e4773 git-artifacts: extend the
SKIP
logic to handlepkg
andbuild-arm64
84: 69efc71 = 85: da9623d git-artifacts: mark all inputs as "not required"
85: cc975e3 = 86: 53ff636 git-artifacts(build-arm64): build artifacts using the intended Git revision
87: c5ed015 = 87: d28652d cmake(): allow setting HOST_CPU for cross-compilation
88: febd954 = 88: e64e637 git-artifacts: use the
setup-git-for-windows-sdk
Action89: 102c299 = 89: 0780c6f ci(): add HOST_CPU to CMake command
92: bd131b2 = 90: 838b167 subtree: update
contrib/subtree
test
target95: 029348b = 91: cb0861b ci(vs-build): download the vcpkg artifacts using a dedicated Action
96: 3d7a8ed = 92: eb73e47 mingw: allow for longer paths in
parse_interpreter()
97: b88a439 = 93: e1fc4bb compat/vcbuild: document preferred way to build in Visual Studio
98: 0ccc1e3 ! 94: 84faf80 http: optionally send SSL client certificate
90: e08a784 = 95: 1a1618b CMake: default Visual Studio generator has changed
91: f06b2be = 96: 1438211 .gitignore: add Visual Studio CMakeSetting.json file
93: 3c10558 = 97: 8950f87 CMakeLists: add default "x64-windows" arch for Visual Studio
94: 31f2195 = 98: 89ea0bd fsmonitor: reintroduce core.useBuiltinFSMonitor
99: 3cd850c = 99: 9a6f668 ci: run
contrib/subtree
tests in CI builds100: 677b209 = 100: 1790274 CMake: show Win32 and Generator_platform build-option values
101: 9734bc7 = 101: 0030b13 init: do parse all core.* settings early
102: a2f6369 = 102: 527096e Enable the built-in FSMonitor as an experimental feature
103: ba255eb = 103: deb0510 hash-object: demonstrate a >4GB/LLP64 problem
104: b1a6529 = 104: 8dfe78d hash_object_file_literally(): use size_t
105: eb57df1 = 105: c7254ba object-file.c: use size_t for header lengths
106: c2129f4 = 106: 659853a hash algorithms: use size_t for section lengths
107: 8fb6b60 = 107: 2f0aa65 hash-object --stdin: verify that it works with >4GB/LLP64
108: 6dfc114 = 108: 98e366a hash-object: add another >4GB/LLP64 test case
109: d38618c = 109: 1d4de54 setup: properly use "%(prefix)/" when in WSL
110: de49b9e = 110: 6ec3d44 hash-object: add a >4GB/LLP64 test case using filtered input
111: 63d85c2 = 111: 4474954 compat/mingw.c: do not warn when failing to get owner
112: 232e78d = 112: 2620f18 mingw: $env:TERM="xterm-256color" for newer OSes
113: 98d736c = 113: 3c8df08 winansi: check result and Buffer before using Name
115: 6821b1b = 114: 2a5d240 vcxproj: allow building with
NO_PERL
again116: 23a5b80 = 115: e6d402c vcxproj: require C11
117: 4cbf48c = 116: 021f02a vcxproj: ignore the
-pedantic
option118: ce51c4b = 117: 26c6f16 vcxproj: include reftable when committing
.vcxproj
files119: 4b53100 = 118: 0946acb vcxproj: handle libreftable_test, too
120: eef0909 = 119: 467b9f9 vcxproj: avoid escaping double quotes in the defines
121: 0e640bd = 120: 6c4f41f ci: adjust Azure Pipeline for
runs_on_pool
122: 5c7ae16 = 121: d71342d ci: stop linking the
prove
cache123: 351e738 = 122: e246b18 ci: reinstate Azure Pipelines support
114: e4ff2e1 = 123: ccc5c79 Add config option
windows.appendAtomically
124: 3ec7a9d = 124: f72ee05 azure-pipeline: drop the
GETTEXT_POISON
job125: 3da72b6 = 125: 4ba2597 azure-pipeline: stop hard-coding
apt-get
calls126: d8abffa = 126: 8ed8cd1 azure-pipeline: drop the code to write to/read from a file share
127: 678a6f6 = 127: caa9689 azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk
128: 907dee9 = 128: a350114 azure-pipeline: downcase the job name of the
Linux32
job142: 6c59151 = 129: a1c00e2 bswap.h: add support for built-in bswap functions
129: 227d366 = 130: adc21db azure-pipeline: run static-analysis on jammy
130: 9c39bf8 < -: ------------ win32/pthread: avoid name clashes with winpthread
131: ce57e9d < -: ------------ git-compat-util: avoid redeclaring _DEFAULT_SOURCE
132: bf85ce4 < -: ------------ Import the source code of mimalloc
133: 3cdcee1 < -: ------------ mimalloc: allow running in Windows Nano Server containers
134: b773e72 < -: ------------ mimalloc: adjust for building inside Git
135: ee710ee < -: ------------ mimalloc: avoid
%z
format136: a6af047 < -: ------------ mimalloc: avoid having to link to
psapi
just for mimalloc137: e8bf98e < -: ------------ mimalloc: avoid having to link to
bcrypt
just for mimalloc139: 7405e25 < -: ------------ mimalloc: make MIMALLOC_SHOW_STATS work with redirected
stderr
140: 8951c39 = 131: 1880cc8 MinGW: link as terminal server aware
141: 247b10b < -: ------------ mingw: use mimalloc
144: 0ce7524 = 132: 15b487a Fix Windows version resources
143: d46dd39 = 133: 4a37349 config.mak.uname: add support for clangarm64
145: 5dd7d76 = 134: 31274a9 ci: create clangarm64-build.yml
167: bd960da = 135: 359516f status: fix for old-style submodules with commondir
168: 8d7f3dc = 136: 4970d0d Win32: make FILETIME conversion functions public
169: 6a084f6 = 137: a84d412 Win32: dirent.c: Move opendir down
170: 458b902 = 138: a5433ec mingw: make the dirent implementation pluggable
171: 025130f = 139: b551ecd Win32: make the lstat implementation pluggable
172: f498642 = 140: 5613f97 add infrastructure for read-only file system level caches
173: 9a9ef74 = 141: ca6230f mingw: add a cache below mingw's lstat and dirent implementations
174: c789371 = 142: 9f07f82 fscache: load directories only once
175: 10bc0ac = 143: edd3a96 fscache: add key for GIT_TRACE_FSCACHE
176: ae0d457 = 144: 8b63ea4 fscache: remember not-found directories
177: 625859a = 145: ef9f9fa fscache: add a test for the dir-not-found optimization
178: 25642ca = 146: 251c384 add: use preload-index and fscache for performance
179: 5abfb17 = 147: e83748b dir.c: make add_excludes aware of fscache during status
180: 96ac7d6 = 148: 7a5f0bf fscache: make fscache_enabled() public
181: 178bf80 = 149: 36cf5dd dir.c: regression fix for add_excludes with fscache
182: dd4482c = 150: 219cad8 fetch-pack.c: enable fscache for stats under .git/objects
183: e736803 = 151: c0abae4 checkout.c: enable fscache for checkout again
184: aa316c8 = 152: 61c6c74 Enable the filesystem cache (fscache) in refresh_index().
185: cc33eea = 153: 8d75738 fscache: use FindFirstFileExW to avoid retrieving the short name
186: 4503be0 = 154: ea9419e status: disable and free fscache at the end of the status command
187: 348b6bf = 155: 4305bab fscache: add GIT_TEST_FSCACHE support
188: 529fdf7 = 156: 84e8a14 fscache: add fscache hit statistics
189: 28df33a = 157: 38e5aa4 mem_pool: add GIT_TRACE_MEMPOOL support
190: 589dd91 = 158: acb0209 fscache: fscache takes an initial size
191: 86a31e0 = 159: 8732ce5 fscache: update fscache to be thread specific instead of global
192: cb29c86 = 160: a5b5a2c fscache: teach fscache to use mempool
193: 23aeb81 = 161: f815cb8 fscache: make fscache_enable() thread safe
194: dee7495 = 162: 47fe54b fscache: teach fscache to use NtQueryDirectoryFile
195: 954dd4a = 163: 28aa0f5 unpack-trees: enable fscache for sparse-checkout
196: d79c547 = 164: a96ee10 fscache: remember the reparse tag for each entry
197: 8882fc7 = 165: 5a92395 fscache: implement an FSCache-aware is_mount_point()
146: 4ac0857 = 166: 765d841 git-gui: provide question helper for retry fallback on Windows
198: ddfc775 = 167: ecf57a5 clean: make use of FSCache
147: 7aa73cf = 168: d03d928 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet
152: e2d5a38 = 169: e0d0124 gitk: Unicode file name support
148: 3982c6f = 170: 84baf6a git-gui--askyesno: fix funny text wrapping
153: ecb9750 = 171: 4a7f027 gitk: Use an external icon file on Windows
149: 404d76d = 172: 9dc0acc git-gui--askyesno: allow overriding the window title
154: 45c1b86 = 173: 2cd1144 gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6
150: a49623a = 174: 5518dc5 respect core.hooksPath, falling back to .git/hooks
151: c8cad21 = 175: 4dc776e git-gui--askyesno (mingw): use Git for Windows' icon, if available
155: e4f4a34 = 176: 94831db gitk: make the "list references" default window width wider
199: 700b0a4 = 177: 31b22bf pack-objects (mingw): demonstrate a segmentation fault with large deltas
200: 1dd46b0 = 178: 62baca8 mingw: support long paths
201: 684d8af = 179: 10c4db7 Win32: fix 'lstat("dir/")' with long paths
209: 1c21b98 = 180: 9e8564b compat/fsmonitor/fsm-*-win32: support long paths
202: 6f59661 = 181: e2aca2e mingw: Support
git_terminal_prompt
with more terminals203: 36a4872 = 182: ba4b3eb compat/terminal.c: only use the Windows console if bash 'read -r' fails
204: da59309 = 183: 49da6b2 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method
205: 860df69 = 184: ed14296 Unbreak interactive GPG prompt upon signing
206: 188e93e = 185: d67d637 strbuf_readlink: don't call readlink twice if hint is the exact link size
207: abe36db = 186: a01b6ee strbuf_readlink: support link targets that exceed PATH_MAX
208: cea7f4c = 187: bfc421a lockfile.c: use is_dir_sep() instead of hardcoded '/' checks
211: 2413b6c = 188: a7eaa4c Win32: don't call GetFileAttributes twice in mingw_lstat()
212: 559a3db = 189: 1e79445 Win32: implement stat() with symlink support
213: 09304ec = 190: 0417dee Win32: remove separate do_lstat() function
210: 4bc3e07 = 191: 8a8ab79 clean: suggest using
core.longPaths
if paths are too long to remove214: 54e128e = 192: 056f729 Win32: let mingw_lstat() error early upon problems with reparse points
215: 0cfafc2 = 193: 72c004d mingw: teach fscache and dirent about symlinks
216: 92750eb = 194: 144d893 Win32: lstat(): return adequate stat.st_size for symlinks
217: 89ccc03 = 195: cc8b363 Win32: factor out retry logic
218: b668a81 = 196: 342b2e7 Win32: change default of 'core.symlinks' to false
219: 2ce7fd0 = 197: e97f14f Win32: add symlink-specific error codes
220: 4d1b34b = 198: a955f55 Win32: mingw_unlink: support symlinks to directories
221: fc30cf9 = 199: 0c502d4 Win32: mingw_rename: support renaming symlinks
222: 67176a5 = 200: 2fb69ef Win32: mingw_chdir: change to symlink-resolved directory
223: 9d2e46b = 201: ac27177 Win32: implement readlink()
224: ea6c7dd = 202: 591b4e6 mingw: lstat: compute correct size for symlinks
225: 2bacac4 = 203: cf406a2 Win32: implement basic symlink() functionality (file symlinks only)
226: e1e6cd1 = 204: 87e8e1f Win32: symlink: add support for symlinks to directories
227: c579749 = 205: 9661265 mingw: try to create symlinks without elevated permissions
228: 08801bc = 206: a65bb78 mingw: emulate stat() a little more faithfully
229: bfe212a = 207: 867057c mingw: special-case index entries for symlinks with buggy size
235: 2fdad18 = 208: 5d0a37d mingw: introduce code to detect whether we're inside a Windows container
230: 9fa53dc = 209: 12a55ec Win32: symlink: move phantom symlink creation to a separate function
237: cb11fdc = 210: 457e3eb mingw: when running in a Windows container, try to rename() harder
231: fdb4cad = 211: 6b49a75 Introduce helper to create symlinks that knows about index_state
239: 48889b2 = 212: 82c900d mingw: move the file_attr_to_st_mode() function definition
232: b4cb448 = 213: 8e28f1a mingw: allow to specify the symlink type in .gitattributes
241: d5144ce = 214: ed318d0 mingw: Windows Docker volumes are not symbolic links
233: a960df7 = 215: e724f21 Win32: symlink: add test for
symlink
attribute234: b040e8e = 216: 4ac10db mingw: explicitly specify with which cmd to prefix the cmdline
236: 5466252 = 217: 1ec1f70 mingw: when path_lookup() failed, try BusyBox
238: ac97db2 = 218: a0eae16 test-lib: avoid unnecessary Perl invocation
240: 2113589 = 219: e95626f tests: replace mingw_test_cmp with a helper in C
242: bc3d3ab = 220: 9e11cb3 test-tool: learn to act as a drop-in replacement for
iconv
243: 0c909eb = 221: 8a19962 tests(mingw): if
iconv
is unavailable, usetest-helper --iconv
244: ab9f437 = 222: bfddb75 gitattributes: mark .png files as binary
245: 9f2babb = 223: 9df8964 tests: move test PNGs into t/lib-diff/
246: 93dda77 = 224: aafffc2 tests: only override sort & find if there are usable ones in /usr/bin/
247: f13b646 = 225: db9b000 tests: use the correct path separator with BusyBox
248: e498501 = 226: 785b241 mingw: only use Bash-ism
builtin pwd -W
when available249: 479577b = 227: 4e5fe84 tests (mingw): remove Bash-specific pwd option
250: 017d3e0 = 228: 21f6d2b test-lib: add BUSYBOX prerequisite
251: 7b339ab = 229: 7827b28 t0021: use Windows path when appropriate
252: 4a33ff1 = 230: e356e9c t5003: use binary file from t/lib-diff/
253: 4f84df7 = 231: 835e787 t5532: workaround for BusyBox on Windows
254: af59092 = 232: 57f7551 t5605: special-case hardlink test for BusyBox-w32
255: 5be343f = 233: 1242e7e t5813: allow for $PWD to be a Windows path
256: 388093d = 234: bd54239 t9200: skip tests when $PWD contains a colon
259: e412431 = 235: 116b3bc mingw: add a Makefile target to copy test artifacts
257: 7f006f1 = 236: 7934e4e mingw: kill child processes in a gentler way
258: 49dc0b9 = 237: e658365 mingw: do not call xutftowcs_path in mingw_mktemp
260: 31a7626 = 238: 6490705 mingw: really handle SIGINT
261: 048b598 = 239: c40770e Partially un-revert "editor: save and reset terminal after calling EDITOR"
156: d45e369 = 240: f2ff01e reset: reinstate support for the deprecated --stdin option
157: af2c4c0 = 241: 6ef8277 Modify the Code of Conduct for Git for Windows
158: b7298d9 = 242: aa12e6b CONTRIBUTING.md: add guide for first-time contributors
159: 02f5296 = 243: 3f10eca README.md: Add a Windows-specific preamble
160: ff79eb4 = 244: 444bc22 Add an issue template
161: 2bfa378 = 245: 48b313c Modify the GitHub Pull Request template (to reflect Git for Windows)
162: f146746 = 246: 5dddc3b .github: Add configuration for the Sentiment Bot
163: eee1123 = 247: c22f193 Document how $HOME is set on Windows
164: c1c71e2 = 248: 2d78bca mingw: deprecate old-style runtime-prefix handling in interpolate_path()
165: 7939584 = 249: 9608fb1 Add a GitHub workflow to monitor component updates
166: 2f345a0 = 250: ec7f8a0 SECURITY.md: document Git for Windows' policies