Git v2.45 Release Notes
=======================

Backward Compatibility Notes

UI, Workflows & Features

 * Integrate the reftable code into the refs framework as a backend.
   With "git init --ref-format=reftable", hopefully it would be a lot
   more efficient to manage a repository with many references.

 * "git checkout -p" and friends learned that that "@" is a synonym
   for "HEAD".

 * Variants of vimdiff learned to honor mergetool.<variant>.layout
   settings.

 * "git reflog" learned a "list" subcommand that enumerates known reflogs.

 * When a merge conflicted at a submodule, merge-ort backend used to
   unconditionally give a lengthy message to suggest how to resolve
   it.  Now the message can be squelched as an advice message.

 * "git for-each-ref" learned "--include-root-refs" option to show
   even the stuff outside the 'refs/' hierarchy.

 * "git rev-list --missing=print" has learned to optionally take
   "--allow-missing-tips", which allows the objects at the starting
   points to be missing.

 * "git merge-tree" has learned that the three trees involved in the
   3-way merge only need to be trees, not necessarily commits.

 * "git log --merge" learned to pay attention to CHERRY_PICK_HEAD and
   other kinds of *_HEAD pseudorefs.

 * Platform specific tweaks for OS/390 has been added to
   config.mak.uname.

 * Users with safe.bareRepository=explicit can still work from within
   $GIT_DIR of a seconary worktree (which resides at .git/worktrees/$name/)
   of the primary worktree without explicitly specifying the $GIT_DIR
   environment variable or the --git-dir=<path> option.

 * The output format for dates "iso-strict" has been tweaked to show
   a time in the Zulu timezone with "Z" suffix, instead of "+00:00".

 * "git diff" and friends learned two extra configuration variables,
   diff.srcPrefix and diff.dstPrefix.

 * The status.showUntrackedFiles configuration variable had a name
   that tempts users to set a Boolean value expressed in our usual
   "false", "off", and "0", but it only took "no".  This has been
   corrected so "true" and its synonyms are taken as "normal", while
   "false" and its synonyms are taken as "no".

 * Remove an ancient and not well maintained Hg-to-git migration
   script from contrib/.


Performance, Internal Implementation, Development Support etc.

 * The code to iterate over refs with the reftable backend has seen
   some optimization.

 * More tests that are marked as "ref-files only" have been updated to
   improve test coverage of reftable backend.

 * Some parts of command line completion script (in contrib/) have
   been micro-optimized.

 * The way placeholders are to be marked-up in documentation have been
   specified; use "_<placeholder>_" to typeset the word inside a pair
   of <angle-brakets> emphasized.

 * "git --no-lazy-fetch cmd" allows to run "cmd" while disabling lazy
   fetching of objects from the promisor remote, which may be handy
   for debugging.

 * The implementation in "git clean" that makes "-n" and "-i" ignore
   clean.requireForce has been simplified, together with the
   documentation.

 * The code to iterate over refs with the reftable backend has seen
   some optimization.

 * Uses of xwrite() helper have been audited and updated for better
   error checking and simpler code.

 * Some trace2 events that lacked def_param have learned to show it,
   enriching the output.

 * The parse-options code that deals with abbreviated long option
   names have been cleaned up.

 * The code in reftable backend that creates new table files works
   better with the tempfile framework to avoid leaving cruft after a
   failure.

 * The reftable code has its own custom binary search function whose
   comparison callback has an unusual interface, which caused the
   binary search to degenerate into a linear search, which has been
   corrected.

 * The code to iterate over reflogs in the reftable has been optimized
   to reduce memory allocation and deallocation.

 * Work to support a repository that work with both SHA-1 and SHA-256
   hash algorithms has started.

 * A new fuzz target that exercises config parsing code has been
   added.


Fixes since v2.44
-----------------

 * "git apply" on a filesystem without filemode support have learned
   to take a hint from what is in the index for the path, even when
   not working with the "--index" or "--cached" option, when checking
   the executable bit match what is required by the preimage in the
   patch.
   (merge 45b625142d cp/apply-core-filemode later to maint).

 * "git column" has been taught to reject negative padding value, as
   it would lead to nonsense behaviour including division by zero.
   (merge 76fb807faa kh/column-reject-negative-padding later to maint).

 * "git am --help" now tells readers what actions are available in
   "git am --whitespace=<action>", in addition to saying that the
   option is passed through to the underlying "git apply".
   (merge a171dac734 jc/am-whitespace-doc later to maint).

 * "git tag --column" failed to check the exit status of its "git
   column" invocation, which has been corrected.
   (merge 92e66478fc rj/tag-column-fix later to maint).

 * Credential helper based on libsecret (in contrib/) has been updated
   to handle an empty password correctly.
   (merge 8f1f2023b7 mh/libsecret-empty-password-fix later to maint).

 * "git difftool --dir-diff" learned to honor the "--trust-exit-code"
   option; it used to always exit with 0 and signalled success.
   (merge eb84c8b6ce ps/difftool-dir-diff-exit-code later to maint).

 * The code incorrectly attempted to use textconv cache when asked,
   even when we are not running in a repository, which has been
   corrected.
   (merge affe355fe7 jk/textconv-cache-outside-repo-fix later to maint).

 * Remove an empty file that shouldn't have been added in the first
   place.
   (merge 4f66942215 js/remove-cruft-files later to maint).

 * The logic to access reflog entries by date and number had ugly
   corner cases at the boundaries, which have been cleaned up.
   (merge 5edd126720 jk/reflog-special-cases-fix later to maint).

 * An error message from "git upload-pack", which responds to "git
   fetch" requests, had a trialing NUL in it, which has been
   corrected.
   (merge 3f4c7a0805 sg/upload-pack-error-message-fix later to maint).

 * Clarify wording in the CodingGuidelines that requires <git-compat-util.h>
   to be the first header file.
   (merge 4e89f0e07c jc/doc-compat-util later to maint).

 * "git commit -v --cleanup=scissors" used to add the scissors line
   twice in the log message buffer, which has been corrected.
   (merge e90cc075cc jt/commit-redundant-scissors-fix later to maint).

 * A custom remote helper no longer cannot access the newly created
   repository during "git clone", which is a regression in Git 2.44.
   This has been corrected.
   (merge 199f44cb2e ps/remote-helper-repo-initialization-fix later to maint).

 * Various parts of upload-pack has been updated to bound the resource
   consumption relative to the size of the repository to protect from
   abusive clients.
   (merge 6cd05e768b jk/upload-pack-bounded-resources later to maint).

 * The upload-pack program, when talking over v2, accepted the
   packfile-uris protocol extension from the client, even if it did
   not advertise the capability, which has been corrected.
   (merge a922bfa3b5 jk/upload-pack-v2-capability-cleanup later to maint).

 * Make sure failure return from merge_bases_many() is properly caught.
   (merge 25fd20eb44 js/merge-base-with-missing-commit later to maint).

 * FSMonitor client code was confused when FSEvents were given in a
   different case on a case-insensitive filesystem, which has been
   corrected.
   (merge 29c139ce78 jh/fsmonitor-icase-corner-case-fix later to maint).

 * The "core.commentChar" configuration variable only allows an ASCII
   character, which was not clearly documented, which has been
   corrected.
   (merge fb7c556f58 kh/doc-commentchar-is-a-byte later to maint).

 * With release 2.44 we got rid of all uses of test_i18ngrep and there
   is no in-flight topic that adds a new use of it.  Make a call to
   test_i18ngrep a hard failure, so that we can remove it at the end
   of this release cycle.
   (merge 381a83dfa3 jc/test-i18ngrep later to maint).

 * The command line completion script (in contrib/) learned to
   complete "git reflog" better.
   (merge 1284f9cc11 rj/complete-reflog later to maint).

 * The logic to complete the command line arguments to "git worktree"
   subcommand (in contrib/) has been updated to correctly honor things
   like "git -C dir" etc.
   (merge 3574816d98 rj/complete-worktree-paths-fix later to maint).

 * When git refuses to create a branch because the proposed branch
   name is not a valid refname, an advice message is given to refer
   the user to exact naming rules.
   (merge 8fbd903e58 kh/branch-ref-syntax-advice later to maint).

 * Code simplification by getting rid of code that sets an environment
   variable that is no longer used.
   (merge 72a8d3f027 pw/rebase-i-ignore-cherry-pick-help-environment later to maint).

 * The code to find the effective end of log message can fall into an
   endless loop, which has been corrected.
   (merge 2541cba2d6 fs/find-end-of-log-message-fix later to maint).

 * Mark-ups used in the documentation has been improved for
   consistency.
   (merge 45d5ed3e50 ja/doc-markup-fixes later to maint).

 * The status.showUntrackedFiles configuration variable was
   incorrectly documented to accept "false", which has been corrected.

 * Leaks from "git restore" have been plugged.
   (merge 2f64da0790 rj/restore-plug-leaks later to maint).

 * "git bugreport --no-suffix" was not supported and instead
   segfaulted, which has been corrected.
   (merge b3b57c69da js/bugreport-no-suffix-fix later to maint).

 * The documentation for "%(trailers[:options])" placeholder in the
   "--pretty" option of commands in the "git log" family has been
   updated.
   (merge bff85a338c bl/doc-key-val-sep-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f0e578c69c rs/use-xstrncmpz later to maint).
   (merge 83e6eb7d7a ba/credential-test-clean-fix later to maint).
   (merge 64562d784d jb/doc-interactive-singlekey-do-not-need-perl later to maint).
   (merge c431a235e2 cp/t9146-use-test-path-helpers later to maint).
   (merge 82d75402d5 ds/doc-send-email-capitalization later to maint).
   (merge 41bff66e35 jc/doc-add-placeholder-fix later to maint).
   (merge 6835f0efe9 jw/remote-doc-typofix later to maint).
   (merge 244001aa20 hs/rebase-not-in-progress later to maint).
   (merge 2ca6c07db2 jc/no-include-of-compat-util-from-headers later to maint).
   (merge 87bd7fbb9c rs/fetch-simplify-with-starts-with later to maint).
   (merge f39addd0d9 rs/name-rev-with-mempool later to maint).
   (merge 9a97b43e03 rs/submodule-prefix-simplify later to maint).
   (merge 40b8076462 ak/rebase-autosquash later to maint).
   (merge 3223204456 eg/add-uflags later to maint).
   (merge 5f78d52dce es/config-doc-sort-sections later to maint).
   (merge 781fb7b4c2 as/option-names-in-messages later to maint).
   (merge 51d41dc243 jk/doc-remote-helpers-markup-fix later to maint).
   (merge e1aaf309db pb/ci-win-artifact-names-fix later to maint).
   (merge ad538c61da jc/index-pack-fsck-levels later to maint).
   (merge 67471bc704 ja/doc-formatting-fix later to maint).
   (merge 86f9ce7dd6 bl/doc-config-fixes later to maint).
