-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Rebase to v2.47.0-rc1 #5187
Rebase to v2.47.0-rc1 #5187
Conversation
The new '--full-name-hash' option for 'git repack' is a simple pass-through to the underlying 'git pack-objects' subcommand. However, this subcommand may have other options and a temporary filename as part of the subcommand execution that may not be predictable or could change over time. The existing test_subcommand method requires an exact list of arguments for the subcommand. This is too rigid for our needs here, so create a new method, test_subcommand_flex. Use it to check that the --full-name-hash option is passing through. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Add a new environment variable to opt-in to the --full-name-hash option in 'git pack-objects'. This allows for extra testing of the feature without repeating all of the test scenarios. But this option isn't free. There are a few tests that change behavior with the variable enabled. First, there are a few tests that are very sensitive to certain delta bases being picked. These are both involving the generation of thin bundles and then counting their objects via 'git index-pack --fix-thin' which pulls the delta base into the new packfile. For these tests, disable the option as a decent long-term option. Second, there are two tests in t5616-partial-clone.sh that I believe are actually broken scenarios. While the client is set up to clone the 'promisor-server' repo via a treeless partial clone filter (tree:0), that filter does not translate to the 'server' repo. Thus, fetching from these repos causes the server to think that the client has all reachable trees and blobs from the commits advertised as 'haves'. This leads the server to providing a thin pack assuming those objects as delta bases. Changing the name-hash algorithm presents new delta bases and thus breaks the expectations of these tests. An alternative could be to set up 'server' as a promisor server with the correct filter enabled. This may also point out more issues with partial clone being set up as a remote-based filtering mechanism and not a repository-wide setting. For now, do the minimal change to make the test work by disabling the test variable. Signed-off-by: Derrick Stolee <stolee@gmail.com>
This also adds the '--full-name-hash' option introduced in the previous change and adds newlines to the synopsis. Signed-off-by: Derrick Stolee <stolee@gmail.com>
As custom options are added to 'git pack-objects' and 'git repack' to adjust how compression is done, use this new performance test script to demonstrate their effectiveness in performance and size. The recently-added --full-name-hash option swaps the default name-hash algorithm with one that attempts to uniformly distribute the hashes based on the full path name instead of the last 16 characters. This has a dramatic effect on full repacks for repositories with many versions of most paths. It can have a negative impact on cases such as pushing a single change. This can be seen by running pt5313 on the open source fluentui repository [1]. Most commits will have this kind of output for the thin and big pack cases, though certain commits (such as [2]) will have problematic thin pack size for other reasons. [1] https://github.com/microsoft/fluentui [2] a637a06df05360ce5ff21420803f64608226a875 Checked out at the parent of [2], I see the following statistics: Test this tree ------------------------------------------------------------------ 5313.2: thin pack 0.02(0.01+0.01) 5313.3: thin pack size 1.1K 5313.4: thin pack with --full-name-hash 0.02(0.01+0.00) 5313.5: thin pack size with --full-name-hash 3.0K 5313.6: big pack 1.65(3.35+0.24) 5313.7: big pack size 58.0M 5313.8: big pack with --full-name-hash 1.53(2.52+0.18) 5313.9: big pack size with --full-name-hash 57.6M 5313.10: repack 176.52(706.60+3.53) 5313.11: repack size 446.7K 5313.12: repack with --full-name-hash 37.47(134.18+3.06) 5313.13: repack size with --full-name-hash 183.1K Note that this demonstrates a 3x size _increase_ in the case that simulates a small "git push". The size change is neutral on the case of pushing the difference between HEAD and HEAD~1000. However, the full repack case is both faster and more efficient. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Add a new test-tool helper, name-hash, to output the value of the name-hash algorithms for the input list of strings, one per line. Since the name-hash values can be stored in the .bitmap files, it is important that these hash functions do not change across Git versions. Add a simple test to t5310-pack-bitmaps.sh to provide some testing of the current values. Due to how these functions are implemented, it would be difficult to change them without disturbing these values. Create a performance test that uses test_size to demonstrate how collisions occur for these hash algorithms. This test helps inform someone as to the behavior of the name-hash algorithms for their repo based on the paths at HEAD. My copy of the Git repository shows modest statistics around the collisions of the default name-hash algorithm: Test this tree ----------------------------------------------------------------- 5314.1: paths at head 4.5K 5314.2: number of distinct name-hashes 4.1K 5314.3: number of distinct full-name-hashes 4.5K 5314.4: maximum multiplicity of name-hashes 13 5314.5: maximum multiplicity of fullname-hashes 1 Here, the maximum collision multiplicity is 13, but around 10% of paths have a collision with another path. In a more interesting example, the microsoft/fluentui [1] repo had these statistics at time of committing: Test this tree ----------------------------------------------------------------- 5314.1: paths at head 19.6K 5314.2: number of distinct name-hashes 8.2K 5314.3: number of distinct full-name-hashes 19.6K 5314.4: maximum multiplicity of name-hashes 279 5314.5: maximum multiplicity of fullname-hashes 1 [1] https://github.com/microsoft/fluentui That demonstrates that of the nearly twenty thousand path names, they are assigned around eight thousand distinct values. 279 paths are assigned to a single value, leading the packing algorithm to sort objects from those paths together, by size. In this repository, no collisions occur for the full-name-hash algorithm. In a more extreme example, an internal monorepo had a much worse collision rate: Test this tree ----------------------------------------------------------------- 5314.1: paths at head 221.6K 5314.2: number of distinct name-hashes 72.0K 5314.3: number of distinct full-name-hashes 221.6K 5314.4: maximum multiplicity of name-hashes 14.4K 5314.5: maximum multiplicity of fullname-hashes 2 Even in this repository with many more paths at HEAD, the collision rate was low and the maximum number of paths being grouped into a single bucket by the full-path-name algorithm was two. Signed-off-by: Derrick Stolee <stolee@gmail.com>
In anticipation of a few planned applications, introduce the most basic form of a path-walk API. It currently assumes that there are no UNINTERESTING objects, and does not include any complicated filters. It calls a function pointer on groups of tree and blob objects as grouped by path. This only includes objects the first time they are discovered, so an object that appears at multiple paths will not be included in two batches. There are many future adaptations that could be made, but they are left for future updates when consumers are ready to take advantage of those features. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Add some tests based on the current behavior, doing interesting checks for different sets of branches, ranges, and the --boundary option. This sets a baseline for the behavior and we can extend it as new options are introduced. Signed-off-by: Derrick Stolee <stolee@gmail.com>
This option is still under discussion on the Git mailing list. We still would like to have some real-world data, and the best way to get it is to get a Git for Windows release into users' hands so that they can test it. Nevertheless, without the official blessing of the Git maintainer, this optionis experimental, and we need to be clear about that. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This topic branch extends the protections introduced for Git GUI's CVE-2022-41953 to cover `gitk`, too. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
These fixes were necessary for Sverre Rabbelier's remote-hg to work, but for some magic reason they are not necessary for the current remote-hg. Makes you wonder how that one gets away with it. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This topic branch allows us to specify absolute paths without the drive prefix e.g. when cloning. Example: C:\Users\me> git clone https://github.com/git/git \upstream-git This will clone into a new directory C:\upstream-git, in line with how Windows interprets absolute paths. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This topic branch teaches `git clean` to respect NTFS junctions and Unix bind mounts: it will now stop at those boundaries. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
In MSYS2, we have two Python interpreters at our disposal, so we can include the Python stuff in the build. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This topic vendors in mimalloc v2.0.9, a fast allocator that allows Git for Windows to perform efficiently. Switch Git for Windows to using mimalloc instead of nedmalloc
…eband-config Config option to disable side-band-64k for transport
Make sure `errno` is set when socket operations fail
…ymlinks Do resolve symlinks in `getcwd()`
mingw: fix fatal error working on mapped network drives on Windows
…g-curl clink.pl: fix MSVC compile script to handle libcurl-d.lib
…nction Handle `git add <file>` where <file> traverses an NTFS junction
Allow running Git directly from `C:\Program Files\Git\mingw64\bin\git.exe`
…st-effort Introduce and use the new "best effort" strategy for Secure Channel revoke checking
…-in-vs/master ci: avoid d/f conflict in vs/master
This topic branch allows `add -p` and `add -i` with a large number of files. It is kind of a hack that was never really meant to be upstreamed. Let's see if we can do better in the built-in `add -p`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
git add -i: handle CR/LF line endings in the interactive input
Rationalize line endings for scissors-cleanup
…xtra_info t/t0014: fix: eliminate additional lines from trace
This merges the current version of the patch that tries to address Git GUI's problems with intent-to-add files. This patch will likely be improved substantially before it is merged into Git GUI's main branch, but we want to have _something_ resembling a fix already in Git for Windows v2.29.0. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…e-and-headless Include Windows-specific maintenance and headless-git
Even if CMake is not the canonical way to build Git for Windows, but CMake support merely exists in Git to support building Git for Windows using Visual Studio, we should include `headless-git` in such a scenario when installing the binaries to a given location.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This was pull request git-for-windows#1645 from ZCube/master Support windows container. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
…ws#4527) With this patch, Git for Windows works as intended on mounted APFS volumes (where renaming read-only files would fail). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Specify symlink type in .gitattributes
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>
Handle Ctrl+C in Git Bash nicely Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
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 <johannes.schindelin@gmx.de>
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>
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>
…updates Start monitoring updates of Git for Windows' component in the open
Add a README.md for GitHub goodness. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
So... A couple of changes needed on top:
I have those changes locally, but unfortunately there is a serious new problem: t0610.47(ref transaction: many concurrent writers) consistently fails on Windows. I'll have to spend time figuring out how to address this. |
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.
While you work on the test failures, I will approve this version of the rebase. Looking forward to seeing what you discover about the concurrent write failures.
https://lore.kernel.org/git/Zv-HbT8qrM6IYKb4@pks.im/T/#m702741a2ccb1cddb45a5410ac762d236c1566b27 |
@rimrul great find, thanks! I wasn't able to keep up with the Git mailing list. |
4c46a6b
to
3903e5d
Compare
Range-diff relative to the original rebase to -rc1Note: This was run with
@derrickstolee I finally figured out how to work around the t0610.47(ref transaction: many concurrent writers) problem: 3903e5d @rimrul thanks to your timely PR comment, I also reported this work-around to the Git mailing list: https://lore.kernel.org/git/8718c5c4-1d0a-104b-eb39-6338ae9c5dbf@gmx.de/ |
Apparently not quite: win+VS test (6) still fails:
|
And win test (6) fails, too, with the same symptom. |
b3164a1
to
19c2260
Compare
I officially declare my inability to fix this t0610.47 failure before Git for Windows v2.47.0 is due. I've disabled the test case for now, which is also what the original author of that test case suggested. |
We tried quite a few things, but this is a failure introduced at the last -rc before v2.47.0 _and_ it only documents existing behavior as far as Windows is concerned (concurrent writes are a problem there with reftables). So let's punt and simply disable this test for now, to take the pressure off of v2.47.0. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
19c2260
to
49e3069
Compare
/git-artifacts The The |
/release The |
49e3069
into
git-for-windows:main
Range-diff relative to
1: 42c72f6 = 1: f4a21be gitk(Windows): avoid inadvertently calling executables in the worktree
2: 75259a3 = 2: 4d1fa2f t9350: point out that refs are not updated correctly
3: 2950204 = 3: 9c8ddeb transport-helper: add trailing --
4: f6a1087 = 4: 0388e0f remote-helper: check helper status after import/export
5: f577d4f = 5: a2fc5f4 mingw: demonstrate a problem with certain absolute paths
8: 3f57ab8 = 6: 19e2851 Always auto-gc after calling a fast-import transport
9: 4b660c2 = 7: 591248d mingw: allow absolute paths without drive prefix
7: bc5dcde = 8: 241c1df mingw: include the Python parts in the build
6: 932c431 = 9: a6c8bed clean: do not traverse mount points
11: 61f6465 = 10: dff182e win32/pthread: avoid name clashes with winpthread
10: 0c35494 = 11: 39566c5 clean: remove mount points when possible
12: a55ffbd = 12: 34ba44b git-compat-util: avoid redeclaring _DEFAULT_SOURCE
13: be7959f = 13: f603a03 Import the source code of mimalloc v2.1.2
14: 89248e7 = 14: 25f63e8 mimalloc: adjust for building inside Git
15: c9ca751 = 15: f699fda mimalloc: offer a build-time option to enable it
16: b3e07b9 = 16: cac1794 mimalloc: use "weak" random seed when statically linked
17: 260111b = 17: 6021bfb mingw: use mimalloc
18: 6965bc6 = 18: 8eeb5a0 transport: optionally disable side-band-64k
20: 8984fef = 19: 228a2ba mingw: make sure
errno
is set correctly when socket operations fail21: 53d32ae = 20: 65bfabd mingw: do resolve symlinks in
getcwd()
22: 7fb700b = 21: c08df14 mingw: fix fatal error working on mapped network drives on Windows
19: 8289990 = 22: e781529 mingw: demonstrate a
git add
issue with NTFS junctions23: b4fa6a6 = 23: c78ac59 clink.pl: fix MSVC compile script to handle libcurl-d.lib
24: 89be22f = 24: 64b04e8 mingw: ensure valid CTYPE
26: 977e2f0 = 25: ae71902 strbuf_realpath(): use platform-dependent API if available
25: cbbb7f6 = 26: 40e207d mingw: allow
git.exe
to be used instead of the "Git wrapper"28: c985261 = 27: b680f09 mingw: implement a platform-specific
strbuf_realpath()
29: 10567fe = 28: 1b42afc vcxproj: unclash project directories with build outputs
27: c5ffba6 = 29: 2e0c2ab mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory
32: 0a7c029 = 30: cfcc099 http: use new "best effort" strategy for Secure Channel revoke checking
30: cf6faf0 = 31: f1f23e4 t5505/t5516: allow running without
.git/branches/
in the templates31: 6a86813 = 32: dd2a525 t5505/t5516: fix white-space around redirectors
33: 6525eb8 = 33: 72487ea t3701: verify that we can add lots of files interactively
34: d79c625 = 34: 6288c4d git add -i: handle CR/LF line endings in the interactive input
35: 0446698 = 35: 4958dbf commit: accept "scissors" with CR/LF line endings
36: 5b5e5de = 36: abfefcf t0014: fix indentation
37: 1ca48ed = 37: 64d500c git-gui: accommodate for intent-to-add files
38: 0756a77 = 38: 526a67e clink.pl: fix libexpatd.lib link error when using MSVC
39: 5f048eb = 39: 980c640 Makefile: clean up .ilk files when MSVC=1
40: 6b9547e = 40: b3909cb vcbuild: add support for compiling Windows resource files
41: c9c34c3 = 41: 991b6bc config.mak.uname: add git.rc to MSVC builds
42: 84fd96a = 42: dd1e678 clink.pl: ignore no-stack-protector arg on MSVC=1 builds
43: 3a4cc66 = 43: 048c378 clink.pl: move default linker options for MSVC=1 builds
44: 79964ea = 44: af990b7 buildsystems: remove duplicate clause
45: 455cd80 = 45: c11788b vcxproj: handle resource files, too
46: 2f1c159 = 46: d9a9273 vcxproj: ignore -fno-stack-protector and -fno-common
47: c4431a6 = 47: 76ca105 vcxproj: handle GUI programs, too
48: 2210374 = 48: e24174d vcpkg_install: detect lack of Git
50: 19199f2 = 49: c848dd0 vcpkg_install: add comment regarding slow network connections
51: 820f045 = 50: 673ea43 vcxproj: support building Windows/ARM64 binaries
52: 182255b = 51: d7299cb vcbuild: install ARM64 dependencies when building ARM64 binaries
49: ead04e0 = 52: e581b8f cmake: install headless-git.
53: 06e20e7 = 53: a35125a vcbuild: add an option to install individual 'features'
54: b3b6334 = 54: a048ca2 cmake: allow building for Windows/ARM64
55: 8be6669 = 55: e3e5c93 ci(vs-build) also build Windows/ARM64 artifacts
56: 4b9eb75 = 56: 4ee6903 Add schannel to curl installation
57: f015e72 = 57: 33191e9 cmake(): allow setting HOST_CPU for cross-compilation
58: c4da4b2 = 58: 589c2ed mingw: allow for longer paths in
parse_interpreter()
63: 97bfd92 = 59: 17271de subtree: update
contrib/subtree
test
target59: 31c45b2 = 60: 1d39b88 compat/vcbuild: document preferred way to build in Visual Studio
60: 7425303 = 61: f3a8521 http: optionally send SSL client certificate
65: d052839 = 62: bd5a61a ci: run
contrib/subtree
tests in CI builds61: 9b96cc1 = 63: 3821d74 CMake: default Visual Studio generator has changed
62: 0d7a5df = 64: 6c8207b .gitignore: add Visual Studio CMakeSetting.json file
64: e19671a = 65: f3bd851 CMakeLists: add default "x64-windows" arch for Visual Studio
66: c80fe50 = 66: 134d2ad CMake: show Win32 and Generator_platform build-option values
70: f365901 = 67: 45da5f1 init: do parse all core.* settings early
67: 51f2c96 = 68: a559944 hash-object: demonstrate a >4GB/LLP64 problem
68: 26250d7 = 69: 7d65d13 write_object_file_literally(): use size_t
69: 0e2f164 ! 70: 22c171e object-file.c: use size_t for header lengths
72: 1660078 ! 71: 18a1d9e hash algorithms: use size_t for section lengths
71: 8c54e26 = 72: bc167c8 Enable the built-in FSMonitor as an experimental feature
73: c6506c2 = 73: 010e219 hash-object --stdin: verify that it works with >4GB/LLP64
74: 1df41f8 = 74: 5fd5556 hash-object: add another >4GB/LLP64 test case
75: 385fcc4 = 75: eae8966 setup: properly use "%(prefix)/" when in WSL
76: b6d1f32 = 76: 5c00a23 hash-object: add a >4GB/LLP64 test case using filtered input
77: a4d2995 = 77: 64dc42c compat/mingw.c: do not warn when failing to get owner
80: b18d107 = 78: 7486396 Add config option
windows.appendAtomically
78: 8f16ccb = 79: fe66c70 mingw: $env:TERM="xterm-256color" for newer OSes
79: f9b0c49 = 80: 278e737 winansi: check result and Buffer before using Name
81: a850019 = 81: cbd02d4 mingw: change core.fsyncObjectFiles = 1 by default
82: 37bc490 = 82: 72a3cfd vcxproj: allow building with
NO_PERL
again83: 4b37b41 = 83: c7f6953 vcxproj: require C11
84: 4f98a72 = 84: e681757 vcxproj: ignore the
-pedantic
option85: 12432c6 = 85: 6946087 vcxproj: include reftable when committing
.vcxproj
files86: 6503c82 = 86: caceb15 vcxproj: handle libreftable_test, too
87: 44cd22c = 87: 4243581 vcxproj: avoid escaping double quotes in the defines
88: accc435 = 88: 6c18069 ci: adjust Azure Pipeline for
runs_on_pool
89: 240dd56 = 89: e095e4c ci: stop linking the
prove
cache90: f50e8b0 = 90: a981ae8 ci: reinstate Azure Pipelines support
91: 62700f3 = 91: 727d268 azure-pipeline: drop the
GETTEXT_POISON
job92: 2976f8a = 92: ecc368b azure-pipeline: stop hard-coding
apt-get
calls93: c7a8171 = 93: ea10516 azure-pipeline: drop the code to write to/read from a file share
94: 48622b4 = 94: 190832c azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk
95: 09e3a1b = 95: 7d81f0b azure-pipeline: downcase the job name of the
Linux32
job96: 998692f = 96: 28d78a2 azure-pipeline: run static-analysis on jammy
97: 106ae5e = 97: c9f66c4 bswap.h: add support for built-in bswap functions
99: e05606d = 98: 6c1b605 config.mak.uname: add support for clangarm64
98: 5747657 = 99: 86c3000 MinGW: link as terminal server aware
100: 874decc = 100: a36a76c Fix Windows version resources
102: 6f04ab6 = 101: a99ced1 ci: create clangarm64-build.yml
103: 06e72a4 = 102: da2c993 status: fix for old-style submodules with commondir
101: 1bbe8cf = 103: 630c9ff http: optionally load libcurl lazily
106: 0850d0f = 104: f0ba8a2 http: support lazy-loading libcurl also on Windows
107: 9d0520d = 105: 1cc64e9 http: when loading libcurl lazily, allow for multiple SSL backends
104: 413fcfe = 106: b81567e windows: skip linking
git-<command>
for built-ins105: 6559f8c = 107: 3106f5f windows: fix Repository>Explore Working Copy
108: 126c854 = 108: 09bef5a mingw: do load libcurl dynamically by default
109: abde14f = 109: 93c275d Add a GitHub workflow to verify that Git/Scalar work in Nano Server
110: 162c2ec = 110: 5ac3aeb mingw: suggest
windows.appendAtomically
in more cases111: b7739dd = 111: 11c77e4 win32: use native ANSI sequence processing, if possible
112: dcb5075 = 112: 1687e53 git.rc: include winuser.h
113: baafe37 = 113: a533937 common-main.c: fflush stdout buffer upon exit
114: 0373585 ! 114: b01d5cb t5601/t7406(mingw): do run tests with symlink support
115: f8426a9 = 115: 26ba963 ci: work around a problem with HTTP/2 vs libcurl v8.10.0
118: 0ef4a4e = 116: 6ed5f62 pack-objects: add --full-name-hash option
116: 74a7247 = 117: ddf961b win32: ensure that
localtime_r()
is declared even in i686 builds117: bc45485 = 118: aaf6d53 Fallback to AppData if XDG_CONFIG_HOME is unset
139: 6ed4dbe = 119: 7442730 run-command: be helpful with Git LFS fails on Windows 7
119: 3f79411 = 120: 5cc3464 repack: test --full-name-hash option
120: e05e2cd = 121: 221be0e pack-objects: add GIT_TEST_FULL_NAME_HASH
121: c5297f2 = 122: 78dbc40 git-repack: update usage to match docs
122: a9be155 = 123: 4a37ccb p5313: add size comparison test
123: 385283b = 124: 18686eb test-tool: add helper for name-hash values
124: bd5a2db = 125: 82bb044 repack/pack-objects: mark
--full-name-hash
as experimental125: e5c11f5 = 126: 41e90b4 path-walk: introduce an object walk by path
126: 017e36a = 127: 65b5595 t6601: add helper for testing path-walk API
127: 3289262 = 128: 73ba4a8 path-walk: allow consumer to specify object types
128: a5f2805 = 129: 35d4207 path-walk: allow visiting tags
129: b6785fd = 130: 1b04296 revision: create mark_trees_uninteresting_dense()
130: d1e895f = 131: 9ce5da5 path-walk: add prune_all_uninteresting option
131: 8a73f51 = 132: aeae574 pack-objects: extract should_attempt_deltas()
132: bb182d9 = 133: 6f5880b pack-objects: add --path-walk option
133: f403cae = 134: 310e324 pack-objects: introduce GIT_TEST_PACK_PATH_WALK
134: 0aa7820 = 135: 18e3a55 repack: add --path-walk option
135: a004ba9 = 136: a10bc41 pack-objects: enable --path-walk via config
136: 6749045 = 137: 5b2135e scalar: enable path-walk during push via config
137: 3c063bb = 138: d832880 pack-objects: refactor path-walk delta phase
138: c599014 = 139: f49d804 pack-objects: thread the path-based compression
140: 30b5cf7 = 140: 067a6ef backfill: add builtin boilerplate
141: 19cbfed = 141: 17e488e backfill: basic functionality and tests
142: 34b077a = 142: 56d80aa backfill: add --batch-size= option
143: a05ddaa = 143: 13ea665 backfill: add --sparse option
144: 65ea334 = 144: fa6bb8c backfill: assume --sparse when sparse-checkout is enabled
145: f3d90f9 = 145: 8984fa7 backfill: mark it as experimental
146: c162f25 = 146: d1c3b61 survey: stub in new experimental 'git-survey' command
147: 25da397 = 147: f7b61d1 survey: add command line opts to select references
148: 30f822b = 148: bcccf3d survey: start pretty printing data in table form
149: 0c4bec0 = 149: 7d969b7 survey: add object count summary
150: 45bdbf0 = 150: 0e8de6d survey: summarize total sizes by object type
151: 6be5118 = 151: f7d3e95 survey: show progress during object walk
152: 62548a9 = 152: d701fb9 survey: add ability to track prioritized lists
153: 545bf8c = 153: a279cfc survey: add report of "largest" paths
154: afc60cf = 154: 35aee93 survey: add --top= option and config
155: bb6ebd1 = 155: 9df90e8 survey: clearly note the experimental nature in the output
156: 69522da = 156: 1bc2027 Win32: make FILETIME conversion functions public
157: 5b0c984 = 157: 190ad5f Win32: dirent.c: Move opendir down
158: f1662b8 = 158: 906efb1 mingw: make the dirent implementation pluggable
159: 7b4a13f = 159: f587985 Win32: make the lstat implementation pluggable
160: 8a07e6c = 160: e1f72b8 mingw: add infrastructure for read-only file system level caches
161: 7aa8425 = 161: 1710b32 mingw: add a cache below mingw's lstat and dirent implementations
162: cf70e90 = 162: bd64e8a fscache: load directories only once
163: c4473a9 = 163: abfa5b8 fscache: add key for GIT_TRACE_FSCACHE
164: 1b4f462 = 164: dfa162b fscache: remember not-found directories
165: eb91130 = 165: 969a7fa fscache: add a test for the dir-not-found optimization
166: 617c2d1 = 166: bb144d7 add: use preload-index and fscache for performance
167: 7678e5c = 167: d86ddce dir.c: make add_excludes aware of fscache during status
168: 4b39ba5 = 168: 3cbe5eb fscache: make fscache_enabled() public
169: 6ef3cc7 = 169: 5ddee41 dir.c: regression fix for add_excludes with fscache
170: 6346624 = 170: cd2cc2c fetch-pack.c: enable fscache for stats under .git/objects
171: c97a8dd = 171: 6f9a6ac checkout.c: enable fscache for checkout again
172: 4c3505c = 172: bff685b Enable the filesystem cache (fscache) in refresh_index().
173: 62a9ebc = 173: 5f6841b fscache: use FindFirstFileExW to avoid retrieving the short name
174: 8b379b1 = 174: 7c2407a status: disable and free fscache at the end of the status command
175: 7dfd5d4 = 175: 6ccfc7f fscache: add GIT_TEST_FSCACHE support
176: 9f0398d = 176: 4129718 fscache: add fscache hit statistics
177: 898a7b0 = 177: 61908a6 mem_pool: add GIT_TRACE_MEMPOOL support
178: be72b30 = 178: d199d45 fscache: fscache takes an initial size
179: 6325d20 = 179: 57c3489 fscache: update fscache to be thread specific instead of global
180: 34fe22c = 180: 4be363e fscache: teach fscache to use mempool
181: f085223 = 181: 5ab04fb fscache: make fscache_enable() thread safe
182: 1dda695 = 182: 2ce4c07 fscache: teach fscache to use NtQueryDirectoryFile
183: c2ff9e3 = 183: 16991c8 unpack-trees: enable fscache for sparse-checkout
184: 752e625 = 184: 3c1023b fscache: remember the reparse tag for each entry
185: 5effe01 = 185: 66de623 fscache: implement an FSCache-aware is_mount_point()
187: ab36404 = 186: 9178653 git-gui: provide question helper for retry fallback on Windows
186: 7335e91 = 187: b924477 clean: make use of FSCache
188: f9bcdc7 = 188: 9d9e902 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet
189: 8134f3d = 189: a0ac891 git-gui--askyesno: fix funny text wrapping
191: 18c726e = 190: d375ea2 gitk: Unicode file name support
190: 8694acf = 191: c7a8078 git-gui--askyesno: allow overriding the window title
193: b897abc = 192: 8be786c gitk: Use an external icon file on Windows
192: 9a4a9e2 = 193: 121ae0e git-gui--askyesno (mingw): use Git for Windows' icon, if available
194: fd6437d = 194: 831062c gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6
195: 2fabe46 = 195: 6be9636 gitk: make the "list references" default window width wider
196: f970a6f = 196: 2094052 pack-objects (mingw): demonstrate a segmentation fault with large deltas
197: e91062d = 197: 5085003 mingw: support long paths
198: f6d060b = 198: b5c8307 Win32: fix 'lstat("dir/")' with long paths
199: a78e081 = 199: 6680255 win32(long path support): leave drive-less absolute paths intact
202: d8d09ab = 200: 39c0088 mingw: Support
git_terminal_prompt
with more terminals203: 13aad84 = 201: 9f8bee9 compat/terminal.c: only use the Windows console if bash 'read -r' fails
204: b32df1e = 202: 00da3d0 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method
200: 42a535e = 203: e752356 compat/fsmonitor/fsm-*-win32: support long paths
201: 057f6d4 = 204: 1dec1c4 clean: suggest using
core.longPaths
if paths are too long to remove205: d792ed3 = 205: e971106 strbuf_readlink: don't call readlink twice if hint is the exact link size
206: a15c613 = 206: f5b42d4 strbuf_readlink: support link targets that exceed PATH_MAX
207: 6275390 = 207: 759618e lockfile.c: use is_dir_sep() instead of hardcoded '/' checks
208: 768c262 = 208: 3d51e3d Win32: don't call GetFileAttributes twice in mingw_lstat()
209: 86f1eae = 209: 3129777 Win32: implement stat() with symlink support
210: 22bf97f = 210: dc29e1a Win32: remove separate do_lstat() function
211: adc69e9 = 211: a38a3d3 Win32: let mingw_lstat() error early upon problems with reparse points
212: 49cc901 = 212: 9be9c3a mingw: teach fscache and dirent about symlinks
213: 9c27ec7 = 213: 00c33cf Win32: lstat(): return adequate stat.st_size for symlinks
214: e943c58 = 214: cdbefd8 Win32: factor out retry logic
215: b105378 = 215: b76865b Win32: change default of 'core.symlinks' to false
216: f0f022d = 216: 0aab789 Win32: add symlink-specific error codes
217: faa04b5 = 217: 1b5d98d Win32: mingw_unlink: support symlinks to directories
218: 8e50d25 = 218: 13f00f9 Win32: mingw_rename: support renaming symlinks
219: c720d21 = 219: fbd9aac Win32: mingw_chdir: change to symlink-resolved directory
220: a9938d0 = 220: ee29c5a Win32: implement readlink()
221: 92f6f6c = 221: 0841843 mingw: lstat: compute correct size for symlinks
222: f372e99 = 222: 4ba730d Win32: implement basic symlink() functionality (file symlinks only)
223: fd7535d = 223: 7872b88 Win32: symlink: add support for symlinks to directories
224: 6203204 = 224: 510badc mingw: try to create symlinks without elevated permissions
225: fcef52a = 225: 6c89038 mingw: emulate stat() a little more faithfully
226: 1917acd = 226: 14617f3 mingw: special-case index entries for symlinks with buggy size
227: f9e8663 = 227: d756acb mingw: introduce code to detect whether we're inside a Windows container
228: ae7ce1b = 228: 8425785 mingw: when running in a Windows container, try to rename() harder
229: e4d85dd = 229: b05e984 mingw: move the file_attr_to_st_mode() function definition
230: 8a7b14f = 230: 744ce6d mingw: Windows Docker volumes are not symbolic links
231: 2191e90 = 231: dc6ba01 mingw: work around rename() failing on a read-only file
232: 7a5d265 = 232: 12f0ea3 Win32: symlink: move phantom symlink creation to a separate function
233: 2c414ca = 233: 47c427a Introduce helper to create symlinks that knows about index_state
234: 880d387 = 234: e66f01a mingw: allow to specify the symlink type in .gitattributes
235: c30acd3 = 235: 2c62c09 Win32: symlink: add test for
symlink
attribute236: bf3bbc3 = 236: 93ea9b9 mingw: explicitly specify with which cmd to prefix the cmdline
237: b8dc8ab = 237: f40f3f5 mingw: when path_lookup() failed, try BusyBox
238: bf25de0 = 238: 260a12d test-lib: avoid unnecessary Perl invocation
239: 49ea6d6 = 239: de5a684 test-tool: learn to act as a drop-in replacement for
iconv
240: 0656ea5 = 240: 385ae19 tests(mingw): if
iconv
is unavailable, usetest-helper --iconv
241: cfebe5d = 241: 55c8c6f gitattributes: mark .png files as binary
242: eb3d3e6 = 242: aa1e445 tests: move test PNGs into t/lib-diff/
243: e9e724b = 243: c928445 tests: only override sort & find if there are usable ones in /usr/bin/
244: 2fcd9d9 = 244: 747d1af tests: use the correct path separator with BusyBox
245: 4e9c7a2 = 245: 54f6687 mingw: only use Bash-ism
builtin pwd -W
when available246: 3a0450e = 246: 9fd3a37 tests (mingw): remove Bash-specific pwd option
247: f3d15bb = 247: 46b9fa7 test-lib: add BUSYBOX prerequisite
248: 522f574 = 248: 31354e8 t5003: use binary file from t/lib-diff/
249: 709c8bc = 249: bd5ca8b t5532: workaround for BusyBox on Windows
250: 80230b3 = 250: 5fe6b0f t5605: special-case hardlink test for BusyBox-w32
251: dcd9dd4 = 251: 6a4bb55 t5813: allow for $PWD to be a Windows path
252: da3aba0 = 252: 25bdb82 t9200: skip tests when $PWD contains a colon
253: 4826cd4 = 253: cb33611 mingw: add a Makefile target to copy test artifacts
254: ce3085a = 254: 066af3c mingw: kill child processes in a gentler way
255: 6b8ce47 = 255: 2990afe mingw: optionally enable wsl compability file mode bits
257: b04f22e = 256: e0b23e7 mingw: really handle SIGINT
256: b95b626 = 257: 3881185 mingw: do not call xutftowcs_path in mingw_mktemp
258: 09a0526 = 258: 28c3e43 Partially un-revert "editor: save and reset terminal after calling EDITOR"
259: 35dcdd9 = 259: 75885fa Add a GitHub workflow to monitor component updates
260: eab4d9d = 260: ff41d3b reset: reinstate support for the deprecated --stdin option
261: c10b13c = 261: 3340122 fsmonitor: reintroduce core.useBuiltinFSMonitor
262: c5ea125 = 262: 147203e dependabot: help keeping GitHub Actions versions up to date
263: 1e3450a = 263: 9e6a091 Describe Git for Windows' architecture [no ci]
264: 2aebbed = 264: e155e47 Modify the Code of Conduct for Git for Windows
265: 8426302 = 265: 034b75a CONTRIBUTING.md: add guide for first-time contributors
266: f6204b6 = 266: 9db70a5 README.md: Add a Windows-specific preamble
267: 03bc833 = 267: 93ffaaf Add an issue template
268: cccb602 = 268: ecf272b Modify the GitHub Pull Request template (to reflect Git for Windows)
269: d081204 = 269: 1f01e8a .github: Add configuration for the Sentiment Bot
270: bbd23b4 = 270: c35f255 Document how $HOME is set on Windows
271: 418a02d = 271: a734359 SECURITY.md: document Git for Windows' policies
Only diff context changes this time around.