Skip to content

Latest commit

 

History

History
318 lines (235 loc) · 13.6 KB

File metadata and controls

318 lines (235 loc) · 13.6 KB

Git v2.55 Release Notes

UI, Workflows & Features

  • Hook scripts defined via the configuration system can now be configured to run in parallel.

  • The userdiff driver for the Scheme language has been extended to cover other Lisp dialects.

  • Terminal control sequences coming over the sideband while talking to a remote repository are mostly disabled by default, except for ANSI color escape sequences.

  • "ort" merge backend improvements.

  • "git checkout -m another-branch" was invented to deal with local changes to paths that are different between the current and the new branch, but it gave only one chance to resolve conflicts. The command was taught to create a stash to save the local changes.

  • A new builtin "git format-rev" is introduced for pretty formatting one revision expression per line or commit object names found in running text.

  • "git history" learned "fixup" command.

  • The internal URL parsing logic has been made accessible via a new subcommand "git url-parse".

  • Misspelt proxy URL (e.g., httt://…​) did not trigger any warning or failure, which has been corrected.

  • Document the fact that .git/info/exclude is shared across worktrees linked to the same repository.

  • The command line parser for "git diff" learned a few options take only non-negative integers.

  • The graph output from commands like "git log --graph" can now be limited to a specified number of lanes, preventing overly wide output in repositories with many branches.

  • The fsmonitor daemon has been implemented for Linux.

  • "git cat-file --batch" learns an in-line command "mailmap" that lets the user toggle use of mailmap.

  • The "git pack-objects --path-walk" traversal has been integrated with several object filters, including blobless and sparse filters.

  • "git push" learned to take a "remote group" name to push to, which causes pushes to multiple places, just like "git fetch" would do.

  • The git-jump command (in contrib/) has been taught to automatically pick a mode (merge, diff, or ws) when invoked without arguments.

  • The documentation for push.default = simple has been clarified to better explain its behavior, making it clear that it pushes the current branch to a same-named branch on the remote, and detailing the upstream requirements for centralized workflows.

Performance, Internal Implementation, Development Support etc.

  • Promisor remote handling has been refactored and fixed in preparation for auto-configuration of advertised remotes.

  • Rust support is enabled by default (but still allows opting out) in some future version of Git.

  • Preparation of the xdiff/ codebase to work with Rust.

  • Use a larger buffer size in the code paths to ingest pack stream.

  • Refactor service routines in the ref subsystem backends.

  • Shrink wasted memory in Myers diff that does not account for common prefix and suffix removal.

  • Enable expensive tests to catch topics that may cause breakages on integration branches closer to their origin in the contributor PR builds.

  • "git merge-base" optimization.

  • The limit_list() function that is one of the core part of the revision traversal infrastructure has been optimized by replacing its use of linear list with priority queue.

  • In a lazy clone, "git cherry" and "git grep" often fetch necessary blob objects one by one from promisor remotes. It has been corrected to collect necessary object names and fetch them in bulk to gain reasonable performance.

  • The logic to determine that branches in an octopus merge are independent has been optimized.

  • The consistency checks for the files reference backend have been updated to skip lock files earlier, avoiding unnecessary parsing of intermediate files.

  • The negotiation tip options in "git fetch" have been reworked to allow requiring certain refs to be sent as "have" lines, and to restrict negotiation to a specific set of refs.

  • The repacking code has been refactored and compaction of MIDX layers have been implemented, and incremental strategy that does not require all-into-one repacking has been introduced.

  • ODB transaction interface is being reworked to explicitly handle object writes.

  • Add a new odb "in-memory" source that is meant to only hold tentative objects (like the virtual blob object that represents the working tree file used by "git blame").

  • Many uses of the_repository has been updated to use a more appropriate struct repository instance in setup.c codepath.

  • Revision traversal optimization.

  • Build update.

  • The logic to lazy-load trees from the commit-graph has been made more robust by falling back to reading the commit object when the commit-graph is no longer available.

  • The "name" argument in git_connect() and related functions has been converted to a "service" enum to improve type safety and clarify its purpose.

  • git restore --staged has been optimized to avoid unnecessarily expanding the sparse index when operating on paths within the sparse checkout definition, by handling sparse directory entries at the tree level.

  • "git stash -p" has been optimized by reusing cached index entries in its temporary index, avoiding unnecessary lstat() calls on unchanged files.

  • The check for non-stale commits in the priority queue used by paint_down_to_common and ahead_behind has been optimized by replacing an O(N) scan with an O(1) counter, yielding performance improvements in repositories with wide histories.

  • Reachability bitmap generation has been significantly optimized. By reordering tree traversal, caching object positions, and refining how pseudo-merge bitmaps are constructed, the performance of "git repack --write-midx-bitmaps" is improved, especially for large repositories and when using pseudo-merges.

  • Adding a decimal integer with strbuf_addf("%u") appears commonly; they have been optimized by using a custom formatter.

  • Formatting object name in full hexadecimal form has been optimized by using a new strbuf_add_oid_hex() helper function.

  • Encourage original authors to monitor the CI status.

Fixes since v2.54

  • Code clean-up to use the right instance of a repository instance in calls inside refs subsystem. (merge 57c590feb9 sp/refs-reduce-the-repository later to maint).

  • The check that implements the logic to see if an in-core cache-tree is fully ready to write out a tree object was broken, which has been corrected. (merge 521731213c dl/cache-tree-fully-valid-fix later to maint).

  • The test suite harness and many individual test scripts have been updated to work correctly when set -e is in effect, which helps detect misspelled test commands. (merge ffe8005b9d ps/test-set-e-clean later to maint).

  • Revert a recent change that introduced a regression to help mksh users.

  • Update various GitHub Actions versions.

  • Avoid hitting the pathname limit for socks proxy socket during the test..

  • To help Windows 10 installations, avoid removing files whose contents are still mmap()'ed.

  • The git backfill command now rejects revision-limiting options that are incompatible with its operation, uses standard documentation for revision ranges, and includes blobs from boundary commits by default to improve performance of subsequent operations. (merge a1ad4a0fca en/backfill-fixes-and-edges later to maint).

  • "git grep" update. (merge 9ff4b5ab1b rs/grep-column-only-match-fix later to maint).

  • Headers from glibc 2.43 when used with clang does not allow disabling C11 language features, causing build failures..

  • The http.emptyAuth=auto configuration now correctly attempts Negotiate authentication before falling back to manual credentials. This allows seamless Kerberos ticket-based authentication without requiring users to explicitly set http.emptyAuth=true. (merge 4919938d28 mc/http-emptyauth-negotiate-fix later to maint).

  • Ramifications of turning off commit-graph has been documented a bit more clearly. (merge 48c855bb8f kh/doc-commit-graph later to maint).

  • "git rebase --update-refs", when used with an rebase.instructionFormat with "%d" (describe) in it, tried to update local branch HEAD by mistake, which has been corrected. (merge 106b6885c7 ag/rebase-update-refs-limit-to-branches later to maint).

  • Tweak the way how sideband messages from remote are printed while we talk with a remote repository to avoid tickling terminal emulator glitches. (merge 31e8fcabd8 rs/sideband-clear-line-before-print later to maint).

  • The configuration variable submodule.fetchJobs was not read correctly, which has been corrected. (merge aa45a5902f sj/submodule-update-clone-config-fix later to maint).

  • Update code paths that assumed "unsigned long" was long enough for "size_t". (merge 7a094d68a2 js/objects-larger-than-4gb-on-windows later to maint).

  • Stop using unmaintained custom allocator in Windows build which was the last user of the code.

  • The computation to shorten the filenames shown in diffstat measured width of individual UTF-8 characters to add up, but forgot to take into account error cases (e.g., an invalid UTF-8 sequence, or a control character). (merge 09d86a3b98 en/diffstat-utf8-truncation-fix later to maint).

  • Some tests assume that bare repository accesses are by default allowed; rewrite some of them to avoid the assumption, rewrite others to explicitly set safe.bareRepository to allow them. (merge 985b38ca6c js/adjust-tests-to-explicitly-access-bare-repo later to maint).

  • Signing commit with custom encoding was passing the data to be signed at a wrong stage in the pipeline, which has been corrected. (merge 7735d7eee3 bc/sign-commit-with-custom-encoding later to maint).

  • Further update to the i18n alias support to avoid regressions.

  • "git fetch --deepen=<n>" in a full clone truncated the history to <n> commits deep, which has been corrected to be a no-op instead. (merge 2431f5e0e5 sp/shallow-deepen-on-non-shallow-repo-fix later to maint).

  • "git maintenance" that goes background did not use the lockfile to prevent multiple maintenance processes from running at the same time, which has been corrected. (merge 29364f1624 ps/maintenance-daemonize-lockfix later to maint).

  • Remove ineffective strbuf presizing that would have computed an allocation that would not have fit in the available memory anyway, or too small due to integer wraparound to cause immediate automatic growing. (merge a9ce8526dc jk/pretty-no-strbuf-presizing later to maint).

  • The HTTP walker misinterpreted the alternates file that gives an absolute path when the server URL does not have the final slash (i.e., "https://example.com" not "https://example.com/"). (merge b92387cd55 jk/dumb-http-alternate-fix later to maint).

  • "git bisect" now uses the selected terms (e.g., old/new) more consistently in its output. (merge cb55991825 jr/bisect-custom-terms-in-output later to maint).

  • Update GitLab CI jobs that exercise macOS. (merge 62319b49bb ps/gitlab-ci-macOS-improvements later to maint).

  • "Friday noon" asked in the morning on Sunday was parsed to be one day before the specified time, which has been corrected. (merge b809304101 ta/approxidate-noon-fix later to maint).

  • The GIT_WORK_TREE variable prepared to invoke the push-to-checkout hook was leaking into the environment even when there was no hook used and broke the default push-to-deploy (i.e., let "git checkout" update the working tree only when the working tree is clean). (merge 44d04e4426 ar/receive-pack-worktree-env later to maint).

  • A batch of documentation pages has been updated to use the modern synopsis style. (merge 2ef248ae45 ja/doc-synopsis-style-again later to maint).

  • The "promisor.quiet" configuration variable was not used from relevant submodules when commands like "grep --recurse-submodules" triggered a lazy fetch, which has been corrected. (merge fa1468a1f7 th/promisor-quiet-per-repo later to maint).

  • Other code cleanup, docfix, build fix, etc. (merge 80f4b802e9 ja/doc-difftool-synopsis-style later to maint). (merge b96490241e jc/doc-timestamps-in-stat later to maint). (merge ef85286e51 ss/t7004-unhide-git-failures later to maint). (merge 7584d10bc2 mf/format-patch-cover-letter-format-docfix later to maint). (merge 8547908eb3 pw/rename-to-get-current-worktree later to maint). (merge 890229b3f3 sg/t6112-unwanted-tilde-expansion-fix later to maint). (merge ab9753e7bc kh/doc-restore-double-underscores-fix later to maint). (merge 4a9e097228 za/t2000-modernise-more later to maint). (merge b635fd0725 kh/doc-log-decorate-list later to maint). (merge 65ea197dca jk/commit-sign-overflow-fix later to maint). (merge 3ccb16052a jk/apply-leakfix later to maint). (merge 5e6e8dc786 tb/pseudo-merge-bugfixes later to maint). (merge 6d09e798bc pb/doc-diff-format-updates later to maint). (merge 34a891a2d3 rs/trailer-fold-optim later to maint). (merge 499f9048e0 ps/t3903-cover-stash-include-untracked later to maint). (merge b56ab270aa jk/sq-dequote-cleanup later to maint). (merge 29d9fdcf10 rs/use-builtin-add-overflow-explicitly-on-clang later to maint). (merge d9982e8290 ed/check-connected-close-err-fd-2.53 later to maint). (merge 1740cc35d0 ed/check-connected-close-err-fd later to maint). (merge f4d7eb3d1c sp/doc-range-diff-takes-notes later to maint). (merge 83e7f3bd2b kh/free-commit-list later to maint).