-
Notifications
You must be signed in to change notification settings - Fork 2.6k
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.48.0-rc0 #5315
Rebase to v2.48.0-rc0 #5315
Conversation
be5d150
to
a23491e
Compare
In anticipation of using the path-walk API to analyze tags or include them in a pack-file, add the ability to walk the tags that were included in the revision walk. Signed-off-by: Derrick Stolee <stolee@gmail.com>
The sparse tree walk algorithm was created in d5d2e93 (revision: implement sparse algorithm, 2019-01-16) and involves using the mark_trees_uninteresting_sparse() method. This method takes a repository and an oidset of tree IDs, some of which have the UNINTERESTING flag and some of which do not. Create a method that has an equivalent set of preconditions but uses a "dense" walk (recursively visits all reachable trees, as long as they have not previously been marked UNINTERESTING). This is an important difference from mark_tree_uninteresting(), which short-circuits if the given tree has the UNINTERESTING flag. A use of this method will be added in a later change, with a condition set whether the sparse or dense approach should be used. Signed-off-by: Derrick Stolee <stolee@gmail.com>
This option causes the path-walk API to act like the sparse tree-walk algorithm implemented by mark_trees_uninteresting_sparse() in list-objects.c. Starting from the commits marked as UNINTERESTING, their root trees and all objects reachable from those trees are UNINTERSTING, at least as we walk path-by-path. When we reach a path where all objects associated with that path are marked UNINTERESTING, then do no continue walking the children of that path. We need to be careful to pass the UNINTERESTING flag in a deep way on the UNINTERESTING objects before we start the path-walk, or else the depth-first search for the path-walk API may accidentally report some objects as interesting. Signed-off-by: Derrick Stolee <stolee@gmail.com>
This will be helpful in a future change. Signed-off-by: Derrick Stolee <stolee@gmail.com>
In order to more easily compute delta bases among objects that appear at the exact same path, add a --path-walk option to 'git pack-objects'. This option will use the path-walk API instead of the object walk given by the revision machinery. Since objects will be provided in batches representing a common path, those objects can be tested for delta bases immediately instead of waiting for a sort of the full object list by name-hash. This has multiple benefits, including avoiding collisions by name-hash. The objects marked as UNINTERESTING are included in these batches, so we are guaranteeing some locality to find good delta bases. After the individual passes are done on a per-path basis, the default name-hash is used to find other opportunistic delta bases that did not match exactly by the full path name. RFC TODO: It is important to note that this option is inherently incompatible with using a bitmap index. This walk probably also does not work with other advanced features, such as delta islands. Getting ahead of myself, this option compares well with --full-name-hash when the packfile is large enough, but also performs at least as well as the default in all cases that I've seen. RFC TODO: this should probably be recording the batch locations to another list so they could be processed in a second phase using threads. RFC TODO: list some examples of how this outperforms previous pack-objects strategies. (This is coming in later commits that include performance test changes.) Signed-off-by: Derrick Stolee <stolee@gmail.com>
There are many tests that validate whether 'git pack-objects' works as expected. Instead of duplicating these tests, add a new test environment variable, GIT_TEST_PACK_PATH_WALK, that implies --path-walk by default when specified. This was useful in testing the implementation of the --path-walk implementation, especially in conjunction with test such as: - t0411-clone-from-partial.sh : One test fetches from a repo that does not have the boundary objects. This causes the path-based walk to fail. Disable the variable for this test. - t5306-pack-nobase.sh : Similar to t0411, one test fetches from a repo without a boundary object. - t5310-pack-bitmaps.sh : One test compares the case when packing with bitmaps to the case when packing without them. Since we disable the test variable when writing bitmaps, this causes a difference in the object list (the --path-walk option adds an extra object). Specify --no-path-walk in both processes for the comparison. Another test checks for a specific delta base, but when computing dynamically without using bitmaps, the base object it too small to be considered in the delta calculations so no base is used. - t5316-pack-delta-depth.sh : This script cares about certain delta choices and their chain lengths. The --path-walk option changes how these chains are selected, and thus changes the results of this test. - t5322-pack-objects-sparse.sh : This demonstrates the effectiveness of the --sparse option and how it combines with --path-walk. - t5332-multi-pack-reuse.sh : This test verifies that the preferred pack is used for delta reuse when possible. The --path-walk option is not currently aware of the preferred pack at all, so finds a different delta base. - t7406-submodule-update.sh : When using the variable, the --depth option collides with the --path-walk feature, resulting in a warning message. Disable the variable so this warning does not appear. I want to call out one specific test change that is only temporary: - t5530-upload-pack-error.sh : One test cares specifically about an "unable to read" error message. Since the current implementation performs delta calculations within the path-walk API callback, a different "unable to get size" error message appears. When this is changed in a future refactoring, this test change can be reverted. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Since 'git pack-objects' supports a --path-walk option, allow passing it through in 'git repack'. This presents interesting testing opportunities for comparing the different repacking strategies against each other. Add the --path-walk option to the performance tests in p5313. For the microsoft/fluentui repo [1] checked out at a specific commit [2], the results are very interesting: Test this tree ------------------------------------------------------------------ 5313.2: thin pack 0.40(0.47+0.04) 5313.3: thin pack size 1.2M 5313.4: thin pack with --full-name-hash 0.09(0.10+0.04) 5313.5: thin pack size with --full-name-hash 22.8K 5313.6: thin pack with --path-walk 0.08(0.06+0.02) 5313.7: thin pack size with --path-walk 20.8K 5313.8: big pack 2.16(8.43+0.23) 5313.9: big pack size 17.7M 5313.10: big pack with --full-name-hash 1.42(3.06+0.21) 5313.11: big pack size with --full-name-hash 18.0M 5313.12: big pack with --path-walk 2.21(8.39+0.24) 5313.13: big pack size with --path-walk 17.8M 5313.14: repack 98.05(662.37+2.64) 5313.15: repack size 449.1K 5313.16: repack with --full-name-hash 33.95(129.44+2.63) 5313.17: repack size with --full-name-hash 182.9K 5313.18: repack with --path-walk 106.21(121.58+0.82) 5313.19: repack size with --path-walk 159.6K [1] https://github.com/microsoft/fluentui [2] e70848ebac1cd720875bccaa3026f4a9ed700e08 This repo suffers from having a lot of paths that collide in the name hash, so examining them in groups by path leads to better deltas. Also, in this case, the single-threaded implementation is competitive with the full repack. This is saving time diffing files that have significant differences from each other. A similar, but private, repo has even more extremes in the thin packs: Test this tree -------------------------------------------------------------- 5313.2: thin pack 2.39(2.91+0.10) 5313.3: thin pack size 4.5M 5313.4: thin pack with --full-name-hash 0.29(0.47+0.12) 5313.5: thin pack size with --full-name-hash 15.5K 5313.6: thin pack with --path-walk 0.35(0.31+0.04) 5313.7: thin pack size with --path-walk 14.2K Notice, however, that while the --full-name-hash version is working quite well in these cases for the thin pack, it does poorly for some other standard cases, such as this test on the Linux kernel repository: Test this tree -------------------------------------------------------------- 5313.2: thin pack 0.01(0.00+0.00) 5313.3: thin pack size 310 5313.4: thin pack with --full-name-hash 0.00(0.00+0.00) 5313.5: thin pack size with --full-name-hash 1.4K 5313.6: thin pack with --path-walk 0.00(0.00+0.00) 5313.7: thin pack size with --path-walk 310 Here, the --full-name-hash option does much worse than the default name hash, but the path-walk option does exactly as well. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Users may want to enable the --path-walk option for 'git pack-objects' by default, especially underneath commands like 'git push' or 'git repack'. This should be limited to client repositories, since the --path-walk option disables bitmap walks, so would be bad to include in Git servers when serving fetches and clones. There is potential that it may be helpful to consider when repacking the repository, to take advantage of improved deltas across historical versions of the same files. Much like how "pack.useSparse" was introduced and included in "feature.experimental" before being enabled by default, use the repository settings infrastructure to make the new "pack.usePathWalk" config enabled by "feature.experimental" and "feature.manyFiles". Signed-off-by: Derrick Stolee <stolee@gmail.com>
Repositories registered with Scalar are expected to be client-only repositories that are rather large. This means that they are more likely to be good candidates for using the --path-walk option when running 'git pack-objects', especially under the hood of 'git push'. Enable this config in Scalar repositories. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Previously, the --path-walk option to 'git pack-objects' would compute deltas inline with the path-walk logic. This would make the progress indicator look like it is taking a long time to enumerate objects, and then very quickly computed deltas. Instead of computing deltas on each region of objects organized by tree, store a list of regions corresponding to these groups. These can later be pulled from the list for delta compression before doing the "global" delta search. This presents a new progress indicator that can be used in tests to verify that this stage is happening. The current implementation is not integrated with threads, but could be done in a future update. Since we do not attempt to sort objects by size until after exploring all trees, we can remove the previous change to t5530 due to a different error message appearing first. Signed-off-by: Derrick Stolee <stolee@gmail.com>
In anticipation of implementing 'git backfill', populate the necessary files with the boilerplate of a new builtin. RFC TODO: When preparing this for a full implementation, make sure it is based on the newest standards introduced by [1]. [1] https://lore.kernel.org/git/xmqqjzfq2f0f.fsf@gitster.g/T/#m606036ea2e75a6d6819d6b5c90e729643b0ff7f7 [PATCH 1/3] builtin: add a repository parameter for builtin functions Signed-off-by: Derrick Stolee <stolee@gmail.com>
Adapting the implementation of ll_find_deltas(), create a threaded version of the --path-walk compression step in 'git pack-objects'. This involves adding a 'regions' member to the thread_params struct, allowing each thread to own a section of paths. We can simplify the way jobs are split because there is no value in extending the batch based on name-hash the way sections of the object entry array are attempted to be grouped. We re-use the 'list_size' and 'remaining' items for the purpose of borrowing work in progress from other "victim" threads when a thread has finished its batch of work more quickly. Using the Git repository as a test repo, the p5313 performance test shows that the resulting size of the repo is the same, but the threaded implementation gives gains of varying degrees depending on the number of objects being packed. (This was tested on a 16-core machine.) Test HEAD~1 HEAD ------------------------------------------------------------- 5313.6: thin pack with --path-walk 0.01 0.01 +0.0% 5313.7: thin pack size with --path-walk 475 475 +0.0% 5313.12: big pack with --path-walk 1.99 1.87 -6.0% 5313.13: big pack size with --path-walk 14.4M 14.3M -0.4% 5313.18: repack with --path-walk 98.14 41.46 -57.8% 5313.19: repack size with --path-walk 197.2M 197.3M +0.0% Signed-off-by: Derrick Stolee <stolee@gmail.com>
When adding tree objects, we are very careful to avoid adding the same tree object more than once. There was one small gap in that logic, though: when adding a root tree object. Two refs can easily share the same root tree object, and we should still not add it more than once. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
The default behavior of 'git backfill' is to fetch all missing blobs that are reachable from HEAD. Document and test this behavior. The implementation is a very simple use of the path-walk API, initializing the revision walk at HEAD to start the path-walk from all commits reachable from HEAD. Ignore the object arrays that correspond to tree entries, assuming that they are all present already. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Users may want to specify a minimum batch size for their needs. This is only a minimum: the path-walk API provides a list of OIDs that correspond to the same path, and thus it is optimal to allow delta compression across those objects in a single server request. We could consider limiting the request to have a maximum batch size in the future. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Start work on a new 'git survey' command to scan the repository for monorepo performance and scaling problems. The goal is to measure the various known "dimensions of scale" and serve as a foundation for adding additional measurements as we learn more about Git monorepo scaling problems. The initial goal is to complement the scanning and analysis performed by the GO-based 'git-sizer' (https://github.com/github/git-sizer) tool. It is hoped that by creating a builtin command, we may be able to take advantage of internal Git data structures and code that is not accessible from GO to gain further insight into potential scaling problems. Co-authored-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Jeff Hostetler <git@jeffhostetler.com> Signed-off-by: Derrick Stolee <stolee@gmail.com>
By default we will scan all references in "refs/heads/", "refs/tags/" and "refs/remotes/". Add command line opts let the use ask for all refs or a subset of them and to include a detached HEAD. Signed-off-by: Jeff Hostetler <git@jeffhostetler.com> Signed-off-by: Derrick Stolee <stolee@gmail.com>
When 'git survey' provides information to the user, this will be presented in one of two formats: plaintext and JSON. The JSON implementation will be delayed until the functionality is complete for the plaintext format. The most important parts of the plaintext format are headers specifying the different sections of the report and tables providing concreted data. Create a custom table data structure that allows specifying a list of strings for the row values. When printing the table, check each column for the maximum width so we can create a table of the correct size from the start. The table structure is designed to be flexible to the different kinds of output that will be implemented in future changes. Signed-off-by: Derrick Stolee <stolee@gmail.com>
At the moment, nothing is obvious about the reason for the use of the path-walk API, but this will become more prevelant in future iterations. For now, use the path-walk API to sum up the counts of each kind of object. For example, this is the reachable object summary output for my local repo: REACHABLE OBJECT SUMMARY ======================== Object Type | Count ------------+------- Tags | 1343 Commits | 179344 Trees | 314350 Blobs | 184030 Signed-off-by: Derrick Stolee <stolee@gmail.com>
Now that we have explored objects by count, we can expand that a bit more to summarize the data for the on-disk and inflated size of those objects. This information is helpful for diagnosing both why disk space (and perhaps clone or fetch times) is growing but also why certain operations are slow because the inflated size of the abstract objects that must be processed is so large. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
In future changes, we will make use of these methods. The intention is to keep track of the top contributors according to some metric. We don't want to store all of the entries and do a sort at the end, so track a constant-size table and remove rows that get pushed out depending on the chosen sorting algorithm. Co-authored-by: Jeff Hostetler <git@jeffhostetler.com> Signed-off-by; Jeff Hostetler <git@jeffhostetler.com> Signed-off-by: Derrick Stolee <stolee@gmail.com>
One way to significantly reduce the cost of a Git clone and later fetches is to use a blobless partial clone and combine that with a sparse-checkout that reduces the paths that need to be populated in the working directory. Not only does this reduce the cost of clones and fetches, the sparse-checkout reduces the number of objects needed to download from a promisor remote. However, history investigations can be expensie as computing blob diffs will trigger promisor remote requests for one object at a time. This can be avoided by downloading the blobs needed for the given sparse-checkout using 'git backfill' and its new '--sparse' mode, at a time that the user is willing to pay that extra cost. Note that this is distinctly different from the '--filter=sparse:<oid>' option, as this assumes that the partial clone has all reachable trees and we are using client-side logic to avoid downloading blobs outside of the sparse-checkout cone. This avoids the server-side cost of walking trees while also achieving a similar goal. It also downloads in batches based on similar path names, presenting a resumable download if things are interrupted. This augments the path-walk API to have a possibly-NULL 'pl' member that may point to a 'struct pattern_list'. This could be more general than the sparse-checkout definition at HEAD, but 'git backfill --sparse' is currently the only consumer. Be sure to test this in both cone mode and not cone mode. Cone mode has the benefit that the path-walk can skip certain paths once they would expand beyond the sparse-checkout. Signed-off-by: Derrick Stolee <stolee@gmail.com>
Since we are already walking our reachable objects using the path-walk API, let's now collect lists of the paths that contribute most to different metrics. Specifically, we care about * Number of versions. * Total size on disk. * Total inflated size (no delta or zlib compression). This information can be critical to discovering which parts of the repository are causing the most growth, especially on-disk size. Different packing strategies might help compress data more efficiently, but the toal inflated size is a representation of the raw size of all snapshots of those paths. Even when stored efficiently on disk, that size represents how much information must be processed to complete a command such as 'git blame'. Since the on-disk size is likely to be fragile, stop testing the exact output of 'git survey' and check that the correct set of headers is output. Signed-off-by: Derrick Stolee <stolee@gmail.com>
The previous change introduced the '--[no-]sparse' option for the 'git backfill' command, but did not assume it as enabled by default. However, this is likely the behavior that users will most often want to happen. Without this default, users with a small sparse-checkout may be confused when 'git backfill' downloads every version of every object in the full history. However, this is left as a separate change so this decision can be reviewed independently of the value of the '--[no-]sparse' option. Add a test of adding the '--sparse' option to a repo without sparse-checkout to make it clear that supplying it without a sparse-checkout is an error. Signed-off-by: Derrick Stolee <stolee@gmail.com>
The 'git survey' builtin provides several detail tables, such as "top files by on-disk size". The size of these tables defaults to 10, currently. Allow the user to specify this number via a new --top=<N> option or the new survey.top config key. Signed-off-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This fixes a bug in the implementation of `ps/mingw-rename` that prevented directories from being handled by the POSIX-compliant `SetFileInformationByHandle()` code path. 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>
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>
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 <alejandro.barreto@ni.com>
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 <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>
…dvice clean: suggest using `core.longPaths` if paths are too long to remove
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>
f5b84f0
to
874e988
Compare
Range-diff relative to latest force-push
Half a dozen CMake patches are required to make this work again. |
/git-artifacts The The |
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.
Range diffs and new cmake commits all looks good to me!
/release The |
874e988
into
git-for-windows:main
Range-diff relative to main
1: 5c8cfb9 = 1: f27e894 t9350: point out that refs are not updated correctly
2: bb78dfd = 2: 6291a9c transport-helper: add trailing --
5: e2e116a = 3: 246d452 gitk(Windows): avoid inadvertently calling executables in the worktree
8: 28669ef = 4: 928b74b mingw: include the Python parts in the build
11: d3370a9 = 5: e2d63e5 win32/pthread: avoid name clashes with winpthread
3: 40bbb20 = 6: 972a8ce remote-helper: check helper status after import/export
4: c1365f1 = 7: 9283464 mingw: demonstrate a problem with certain absolute paths
7: e357054 = 8: 9daf220 clean: do not traverse mount points
12: 6bddbec = 9: 850335d git-compat-util: avoid redeclaring _DEFAULT_SOURCE
6: 0ffc708 = 10: cc54629 Always auto-gc after calling a fast-import transport
9: a453ea2 = 11: abbe69b mingw: allow absolute paths without drive prefix
10: 7d1ae8f = 12: 4249561 clean: remove mount points when possible
13: 4725915 = 13: bead1b4 Import the source code of mimalloc v2.1.2
14: 9e370d8 = 14: 2e49e8e mimalloc: adjust for building inside Git
15: a4ec08c = 15: 3f61f35 mimalloc: offer a build-time option to enable it
16: 2c9b986 = 16: 2df9f24 mimalloc: use "weak" random seed when statically linked
17: 7ab713d = 17: f5dee0a mingw: use mimalloc
18: a8e5535 = 18: f1ed354 transport: optionally disable side-band-64k
19: f3916a0 = 19: bb909a6 mingw: make sure
errno
is set correctly when socket operations fail22: 3b63062 = 20: 5069cbb mingw: do resolve symlinks in
getcwd()
23: d898328 = 21: 7877c44 mingw: fix fatal error working on mapped network drives on Windows
24: cb062b1 = 22: 26ef7f2 clink.pl: fix MSVC compile script to handle libcurl-d.lib
25: 456ac58 = 23: 02fd6ac mingw: ensure valid CTYPE
20: 53bd507 = 24: 051ad0c mingw: demonstrate a
git add
issue with NTFS junctions26: e803c66 = 25: cbda9e7 mingw: allow
git.exe
to be used instead of the "Git wrapper"21: a93211c = 26: 666ddb0 strbuf_realpath(): use platform-dependent API if available
27: 31c97b6 = 27: b410471 mingw: ignore HOMEDRIVE/HOMEPATH if it points to Windows' system directory
29: 05eb5f5 = 28: 464879f mingw: implement a platform-specific
strbuf_realpath()
28: 2c50312 ! 29: a62c776 http: use new "best effort" strategy for Secure Channel revoke checking
30: 23f2d87 = 30: de8e303 vcxproj: unclash project directories with build outputs
31: d55b1b6 = 31: 6995f48 t5505/t5516: allow running without
.git/branches/
in the templates32: b80c258 = 32: 4860eaa t5505/t5516: fix white-space around redirectors
33: d276393 = 33: 303c42b t3701: verify that we can add lots of files interactively
34: 8f35920 = 34: 2a12948 git add -i: handle CR/LF line endings in the interactive input
35: bf7b3b6 = 35: 47a4dc2 commit: accept "scissors" with CR/LF line endings
36: a9bc204 = 36: 7068e74 t0014: fix indentation
38: 7f30b78 = 37: adbffc0 clink.pl: fix libexpatd.lib link error when using MSVC
39: 9dc2022 = 38: 5ebaabe Makefile: clean up .ilk files when MSVC=1
37: a5c5c3d = 39: 9cfb8af git-gui: accommodate for intent-to-add files
40: 12df0b7 = 40: 3786942 vcbuild: add support for compiling Windows resource files
41: bbc6fe8 = 41: def6b2c config.mak.uname: add git.rc to MSVC builds
42: 91c70e8 = 42: 9855a1a clink.pl: ignore no-stack-protector arg on MSVC=1 builds
43: 96b8bc9 = 43: 1be2e98 clink.pl: move default linker options for MSVC=1 builds
44: c8c4463 = 44: adb6516 buildsystems: remove duplicate clause
45: 9303fcb = 45: 0ce0360 vcxproj: handle resource files, too
46: b1ad8e8 = 46: cd4fa54 vcxproj: ignore -fno-stack-protector and -fno-common
47: 1919480 = 47: 47e926f vcxproj: handle GUI programs, too
48: 8b62f2e = 48: 48d634b cmake: install headless-git.
49: f321ca9 = 49: 767ea7a vcpkg_install: detect lack of Git
50: f315aff = 50: 797b057 vcpkg_install: add comment regarding slow network connections
51: c3e7756 = 51: 7a890c8 vcxproj: support building Windows/ARM64 binaries
52: 19d30f7 = 52: c6e7e04 vcbuild: install ARM64 dependencies when building ARM64 binaries
53: fe49458 = 53: 42a4de8 vcbuild: add an option to install individual 'features'
54: 7ec0269 ! 54: b5253ed cmake: allow building for Windows/ARM64
55: fea6ee3 = 55: 3fe9617 ci(vs-build) also build Windows/ARM64 artifacts
56: 3b37c55 = 56: 7229e6b Add schannel to curl installation
57: d006d65 = 57: b08ceed cmake(): allow setting HOST_CPU for cross-compilation
58: fd76ce1 ! 58: 3605e9e mingw: allow for longer paths in
parse_interpreter()
59: 21de89c = 59: 80f8927 compat/vcbuild: document preferred way to build in Visual Studio
60: 93d79ee ! 60: eb5a4c2 http: optionally send SSL client certificate
63: 583f668 = 61: 8d08b04 CMake: default Visual Studio generator has changed
61: c0c98a5 = 62: c6617dc subtree: update
contrib/subtree
test
target64: 63debc5 = 63: 243de9a .gitignore: add Visual Studio CMakeSetting.json file
62: d537e6c = 64: 93cc63e ci: run
contrib/subtree
tests in CI builds67: 591478a = 65: be7a83b hash-object: demonstrate a >4GB/LLP64 problem
68: 9623c9d = 66: 5e385ee write_object_file_literally(): use size_t
69: 4d26723 = 67: 7763825 object-file.c: use size_t for header lengths
70: 8839e60 = 68: c40cce2 hash algorithms: use size_t for section lengths
72: eb630eb = 69: 0266868 hash-object --stdin: verify that it works with >4GB/LLP64
65: 66e8e3e = 70: a4f9942 CMakeLists: add default "x64-windows" arch for Visual Studio
73: 5dfb2a2 = 71: 04f3f52 hash-object: add another >4GB/LLP64 test case
75: 58ab53f = 72: 393cd05 setup: properly use "%(prefix)/" when in WSL
66: 2047422 = 73: 007aa44 CMake: show Win32 and Generator_platform build-option values
71: 8ab656d = 74: fdb6e11 init: do parse all core.* settings early
74: 6634ac1 = 75: e876d15 hash-object: add a >4GB/LLP64 test case using filtered input
76: 59250a0 = 76: 4f50a50 compat/mingw.c: do not warn when failing to get owner
81: b750a5f = 77: 8523711 vcxproj: allow building with
NO_PERL
again82: c68eb37 = 78: 4163c01 vcxproj: require C11
83: 81e7c62 = 79: 2abe6f3 vcxproj: ignore the
-pedantic
option84: b7ed7c5 = 80: 53fcfbb vcxproj: include reftable when committing
.vcxproj
files85: e22fc0b = 81: 80291a1 vcxproj: handle libreftable_test, too
86: 1c3a6f9 = 82: f75ac66 vcxproj: avoid escaping double quotes in the defines
78: dc3d458 ! 83: 3b721e8 Add config option
windows.appendAtomically
87: 0f55e74 = 84: 60f3569 ci: adjust Azure Pipeline for
runs_on_pool
77: 7c4ff36 = 85: c0b742a mingw: $env:TERM="xterm-256color" for newer OSes
79: 1ddc09b = 86: c2c7e03 winansi: check result and Buffer before using Name
80: c9315d9 = 87: 2423212 mingw: change core.fsyncObjectFiles = 1 by default
88: c4c7782 = 88: f7fcdfe ci: stop linking the
prove
cache89: 1c42d58 = 89: 6678438 ci: reinstate Azure Pipelines support
90: 4bf5031 = 90: 96657e2 azure-pipeline: drop the
GETTEXT_POISON
job91: b4c9d13 = 91: a9af8be azure-pipeline: stop hard-coding
apt-get
calls92: 9939a9f = 92: 5cd8498 azure-pipeline: drop the code to write to/read from a file share
93: 224e010 = 93: e1bd570 azure-pipeline: use partial clone/parallel checkout to initialize minimal-sdk
94: 6a84be4 = 94: 60670ba azure-pipeline: downcase the job name of the
Linux32
job98: 0260c4c = 95: 77ded97 MinGW: link as terminal server aware
95: 41f82a8 = 96: c879d01 azure-pipeline: run static-analysis on jammy
99: f722e2a ! 97: 1acf162 Fix Windows version resources
96: ab7ef94 = 98: a98bbf6 bswap.h: add support for built-in bswap functions
97: 02be695 = 99: 3c78990 config.mak.uname: add support for clangarm64
100: c2361f8 = 100: e351ec8 ci: create clangarm64-build.yml
104: 2ca159e = 101: 7e9e7db http: optionally load libcurl lazily
105: 4bfc6a0 = 102: b8bf94e http: support lazy-loading libcurl also on Windows
106: 58317a8 = 103: 341c532 http: when loading libcurl lazily, allow for multiple SSL backends
101: 74740a3 = 104: 1f5d6b2 status: fix for old-style submodules with commondir
102: a1a82fc = 105: b3573d0 windows: skip linking
git-<command>
for built-ins103: d31ff6c = 106: ef57b5e windows: fix Repository>Explore Working Copy
107: 2cfe8fc = 107: 7347c83 mingw: do load libcurl dynamically by default
108: 70a07b0 = 108: 5792917 Add a GitHub workflow to verify that Git/Scalar work in Nano Server
109: 513b13e = 109: b367f70 mingw: suggest
windows.appendAtomically
in more cases110: 9e28d96 = 110: e79fd76 win32: use native ANSI sequence processing, if possible
117: 37c7e21 = 111: 793e990 ci: work around a problem with HTTP/2 vs libcurl v8.10.0
111: 729ed48 ! 112: ba44977 git.rc: include winuser.h
112: 910d494 = 113: 43041db common-main.c: fflush stdout buffer upon exit
113: 5d2bfee ! 114: a657db8 t5601/t7406(mingw): do run tests with symlink support
114: 262bebd = 115: 803664a win32: ensure that
localtime_r()
is declared even in i686 builds115: d6606cb = 116: facad06 Fallback to AppData if XDG_CONFIG_HOME is unset
116: 97819f5 = 117: c084e11 run-command: be helpful with Git LFS fails on Windows 7
118: 6489746 = 118: 45712e6 pack-objects: add --full-name-hash option
119: 0400635 = 119: 8c1ada6 repack: test --full-name-hash option
120: 32fbc51 = 120: 1b4cbdd pack-objects: add GIT_TEST_FULL_NAME_HASH
121: 5ec06b8 = 121: 97ac379 git-repack: update usage to match docs
122: 93b5259 = 122: ff70b3e p5313: add size comparison test
123: eb9f0d9 = 123: e9e1bd0 test-tool: add helper for name-hash values
124: f5cf8e5 = 124: d7f370c repack/pack-objects: mark
--full-name-hash
as experimental125: 4abe739 = 125: dd1838d path-walk: introduce an object walk by path
126: 483c73b = 126: 874b38a t6601: add helper for testing path-walk API
127: efea267 = 127: 8f8c632 path-walk: allow consumer to specify object types
128: 229cc68 = 128: 0fad4d9 path-walk: allow visiting tags
129: 6b02e8c = 129: b56ca2b revision: create mark_trees_uninteresting_dense()
130: 2bd12ae = 130: 610ef56 path-walk: add prune_all_uninteresting option
131: 7b0b966 = 131: 6a9854f pack-objects: extract should_attempt_deltas()
132: 4ae0c15 = 132: c6e586b pack-objects: add --path-walk option
133: e9acce7 ! 133: 4f17399 pack-objects: introduce GIT_TEST_PACK_PATH_WALK
134: 4e6ac7c = 134: 0eb669a repack: add --path-walk option
135: 6108ed4 = 135: b607fa3 pack-objects: enable --path-walk via config
136: cb1b10c = 136: 1336a47 scalar: enable path-walk during push via config
137: 11969a9 = 137: 5ef46ce pack-objects: refactor path-walk delta phase
138: db77bb9 = 138: 8d4b48c pack-objects: thread the path-based compression
139: 1df3d82 = 139: 5f654eb path-walk API: avoid adding a root tree more than once
140: 2f56089 = 140: fe44261 backfill: add builtin boilerplate
141: 976f964 = 141: 6b02fe5 backfill: basic functionality and tests
142: d9013cb = 142: b4524dd backfill: add --batch-size= option
143: 65ecbcd = 143: c87c850 backfill: add --sparse option
144: ad0d10b = 144: ac21d0e backfill: assume --sparse when sparse-checkout is enabled
145: f8f86c9 = 145: 53748c9 backfill: mark it as experimental
146: b5b22c9 ! 146: cd3bad1 survey: stub in new experimental 'git-survey' command
147: 5411a08 = 147: 3af26bf survey: add command line opts to select references
148: a2f2b04 = 148: 83e545c survey: start pretty printing data in table form
149: 47b2659 = 149: 4379037 survey: add object count summary
150: 8a45402 = 150: 2e67557 survey: summarize total sizes by object type
151: 22f09cd = 151: 5f8843d survey: show progress during object walk
152: 0c887c3 = 152: 6652358 survey: add ability to track prioritized lists
153: 3e1d3a4 = 153: 801907a survey: add report of "largest" paths
154: bd2cc14 = 154: 2829bce survey: add --top= option and config
155: 2050d48 = 155: ad946ea survey: clearly note the experimental nature in the output
156: dee6e10 = 156: 54b6207 path-walk: improve path-walk speed with many tags
157: 2b74f7c (upstream: ea34226) < -: ----------- Makefile: fix dependency for $(UNIT_TEST_DIR)/clar/clar.o
158: ac0b0e8 (upstream: 386d372) < -: ----------- mingw.c: Fix complier warnings for a 64 bit msvc
159: 3b31514 = 157: 67e1c3e Win32: make FILETIME conversion functions public
160: 0916d98 = 158: 955b331 Win32: dirent.c: Move opendir down
161: 078ca6f = 159: cbb36a9 mingw: make the dirent implementation pluggable
162: 7a9d04d = 160: 2c594a6 Win32: make the lstat implementation pluggable
163: b432ad2 = 161: 4ded0c7 mingw: add infrastructure for read-only file system level caches
164: fe287c9 = 162: b977619 mingw: add a cache below mingw's lstat and dirent implementations
165: 76af47d = 163: b694dd3 fscache: load directories only once
166: fba27d9 = 164: 28a7dad fscache: add key for GIT_TRACE_FSCACHE
167: 6c3fcc6 = 165: f4a91fe fscache: remember not-found directories
168: 5334827 = 166: 3476dc9 fscache: add a test for the dir-not-found optimization
169: 9a2ec4c = 167: 4b056df add: use preload-index and fscache for performance
170: d376cd2 = 168: 02d3b8b dir.c: make add_excludes aware of fscache during status
171: e7fb9d5 = 169: b561a4f fscache: make fscache_enabled() public
172: b648f3d = 170: b0eff6c dir.c: regression fix for add_excludes with fscache
173: 3ed426a = 171: bb65a96 fetch-pack.c: enable fscache for stats under .git/objects
174: 9edc43b = 172: 3caf5fb checkout.c: enable fscache for checkout again
175: ff7b5dc = 173: f82602b Enable the filesystem cache (fscache) in refresh_index().
176: 0769498 = 174: bfa3fab fscache: use FindFirstFileExW to avoid retrieving the short name
177: c03535e = 175: 3ddbf68 status: disable and free fscache at the end of the status command
178: 9e9c053 = 176: edcf782 fscache: add GIT_TEST_FSCACHE support
179: 43f88c4 = 177: ab4a727 fscache: add fscache hit statistics
180: 514aa16 = 178: 7ba0696 mem_pool: add GIT_TRACE_MEMPOOL support
181: 3e2f937 = 179: d612cd3 fscache: fscache takes an initial size
182: c17cce8 = 180: 373c237 fscache: update fscache to be thread specific instead of global
183: e19097e = 181: eeeb9ef fscache: teach fscache to use mempool
184: d7cf33d = 182: ac06831 fscache: make fscache_enable() thread safe
185: 8b23bf0 = 183: 3acef83 fscache: teach fscache to use NtQueryDirectoryFile
186: fb8d206 = 184: ed6013d unpack-trees: enable fscache for sparse-checkout
190: 2962efb = 185: 477f507 git-gui: provide question helper for retry fallback on Windows
191: a4c23dc = 186: 0f55b53 git gui: set GIT_ASKPASS=git-gui--askpass if not set yet
192: b1f11b8 = 187: 6d87ce9 git-gui--askyesno: fix funny text wrapping
187: 2e024ab = 188: 9b4b52a fscache: remember the reparse tag for each entry
194: d6f6e9b = 189: 030a786 git-gui--askyesno: allow overriding the window title
188: 03343ed = 190: 37e0a25 fscache: implement an FSCache-aware is_mount_point()
196: 0d4f495 = 191: 0103a67 git-gui--askyesno (mingw): use Git for Windows' icon, if available
189: d9f7c48 = 192: 462d6fc clean: make use of FSCache
193: 4685e5f = 193: 17e9a5f gitk: Unicode file name support
195: 528786d = 194: d465cce gitk: Use an external icon file on Windows
197: 74c8ff8 = 195: 72e5c65 gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6
198: 7726fb9 = 196: a581f71 gitk: make the "list references" default window width wider
199: 0d214ce = 197: d770fa7 pack-objects (mingw): demonstrate a segmentation fault with large deltas
200: e6f2707 ! 198: cc31a8d mingw: support long paths
201: ff963b4 ! 199: 8b1ae27 Win32: fix 'lstat("dir/")' with long paths
202: e3ce232 = 200: c31f805 win32(long path support): leave drive-less absolute paths intact
205: 69e60dd = 201: d9f328a mingw: Support
git_terminal_prompt
with more terminals206: 712ea9e = 202: 468e16b compat/terminal.c: only use the Windows console if bash 'read -r' fails
207: b084059 = 203: 4f44351 mingw (git_terminal_prompt): do fall back to CONIN$/CONOUT$ method
208: 5c4aa7d = 204: 6e9bf61 strbuf_readlink: don't call readlink twice if hint is the exact link size
209: 47f46b2 = 205: 8794dfb strbuf_readlink: support link targets that exceed PATH_MAX
210: c0d6f43 = 206: 2dd0de5 lockfile.c: use is_dir_sep() instead of hardcoded '/' checks
211: 3cee87d ! 207: c255aff Win32: don't call GetFileAttributes twice in mingw_lstat()
203: a6f588e = 208: 71a00a4 compat/fsmonitor/fsm-*-win32: support long paths
204: f418cfd = 209: 6baf71a clean: suggest using
core.longPaths
if paths are too long to remove212: 8c09f0b = 210: c1f4a9e Win32: implement stat() with symlink support
213: cfbbe6d = 211: 4c2860e Win32: remove separate do_lstat() function
214: 1adc244 = 212: 738f29f Win32: let mingw_lstat() error early upon problems with reparse points
215: 052c593 = 213: 97def5a mingw: teach fscache and dirent about symlinks
216: 16c30c4 = 214: f1bee41 Win32: lstat(): return adequate stat.st_size for symlinks
217: d430fe6 = 215: 9017c16 Win32: factor out retry logic
218: c153bde = 216: 7f8f1a8 Win32: change default of 'core.symlinks' to false
219: f4d71dd = 217: 363502c Win32: add symlink-specific error codes
220: 393164b = 218: 4c6b76e Win32: mingw_unlink: support symlinks to directories
221: b140540 ! 219: 71cd243 Win32: mingw_rename: support renaming symlinks
222: a6b988f = 220: f20e0c0 Win32: mingw_chdir: change to symlink-resolved directory
223: beccee0 = 221: 26cf10e Win32: implement readlink()
224: 99d1d87 = 222: 56342ad mingw: lstat: compute correct size for symlinks
225: 78ba988 = 223: 74e783a Win32: implement basic symlink() functionality (file symlinks only)
226: 6c4ce32 = 224: c1a7aef Win32: symlink: add support for symlinks to directories
227: 3903bbc = 225: b89202a mingw: try to create symlinks without elevated permissions
228: 37d8a03 = 226: bdf06c2 mingw: emulate stat() a little more faithfully
229: 721b645 = 227: a9bdb73 mingw: special-case index entries for symlinks with buggy size
230: 44d9078 = 228: b55a2a8 mingw: introduce code to detect whether we're inside a Windows container
231: 6729032 ! 229: 119b758 mingw: when running in a Windows container, try to rename() harder
232: 02332aa = 230: c5f5b96 mingw: move the file_attr_to_st_mode() function definition
233: 492cfa7 = 231: db1d045 mingw: Windows Docker volumes are not symbolic links
238: cf25bbc ! 232: 52abf30 mingw: work around rename() failing on a read-only file
234: 9847064 = 233: fc8b238 Win32: symlink: move phantom symlink creation to a separate function
235: 01be787 = 234: ac91977 Introduce helper to create symlinks that knows about index_state
236: 3704977 = 235: bea18e6 mingw: allow to specify the symlink type in .gitattributes
237: c2381fd = 236: 4c21896 Win32: symlink: add test for
symlink
attribute239: 2e1cfb8 = 237: f949963 mingw: explicitly specify with which cmd to prefix the cmdline
240: 8d1cd93 = 238: eb7ace5 mingw: when path_lookup() failed, try BusyBox
241: f13ebfb ! 239: 7a3f220 test-lib: avoid unnecessary Perl invocation
242: b7f932c = 240: 663e378 test-tool: learn to act as a drop-in replacement for
iconv
243: 4d1c8b1 = 241: 63afa40 tests(mingw): if
iconv
is unavailable, usetest-helper --iconv
244: 02cbbe7 = 242: dc15951 gitattributes: mark .png files as binary
245: d539e10 ! 243: ecf0bf3 tests: move test PNGs into t/lib-diff/
246: be5515e = 244: bd7faf9 tests: only override sort & find if there are usable ones in /usr/bin/
247: ac4b91a ! 245: ecddfbc tests: use the correct path separator with BusyBox
248: 7304ba5 = 246: 9c0a72c mingw: only use Bash-ism
builtin pwd -W
when available249: 3078bdb = 247: e29fac0 tests (mingw): remove Bash-specific pwd option
250: c42863a = 248: e2ef255 test-lib: add BUSYBOX prerequisite
251: 37cc59c = 249: 8f16041 t5003: use binary file from t/lib-diff/
252: cfb83ab = 250: 6b0159a t5532: workaround for BusyBox on Windows
253: 113706c = 251: c683717 t5605: special-case hardlink test for BusyBox-w32
254: 9afcac0 = 252: 809f953 t5813: allow for $PWD to be a Windows path
255: 0a64894 = 253: 56a44c8 t9200: skip tests when $PWD contains a colon
256: 228d139 = 254: c674d71 mingw: add a Makefile target to copy test artifacts
258: 16b12db = 255: c6e9e8c mingw: kill child processes in a gentler way
257: 5f5aad9 = 256: 3f1692d mingw: optionally enable wsl compability file mode bits
260: fd2663d = 257: fad419a mingw: really handle SIGINT
266: 8638ef4 = 258: a5d71ae Describe Git for Windows' architecture [no ci]
259: 9d6f549 = 259: 391fac8 mingw: do not call xutftowcs_path in mingw_mktemp
262: e59bd66 = 260: 310e7e6 Add a GitHub workflow to monitor component updates
267: ce425d1 = 261: 645d823 Modify the Code of Conduct for Git for Windows
261: d66d168 = 262: f5dae7c Partially un-revert "editor: save and reset terminal after calling EDITOR"
263: 0665635 = 263: 29bd6ac reset: reinstate support for the deprecated --stdin option
264: 5a344f0 = 264: c7df407 fsmonitor: reintroduce core.useBuiltinFSMonitor
265: 8299d91 = 265: 4fe21ad dependabot: help keeping GitHub Actions versions up to date
268: 969b198 = 266: ed1cc83 CONTRIBUTING.md: add guide for first-time contributors
269: 3946a5f = 267: 4b18613 README.md: Add a Windows-specific preamble
270: 4a8cf2f = 268: 37c910b Add an issue template
271: c169b69 = 269: daae9e5 Modify the GitHub Pull Request template (to reflect Git for Windows)
272: 4931518 = 270: 646ab40 Document how $HOME is set on Windows
273: bb1e874 = 271: 21b9ad2 SECURITY.md: document Git for Windows' policies
This is newly required by a more stringent test in upstream's t0450.