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.


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.


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).

 * 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).
