Git v2.49 Release Notes
=======================

UI, Workflows & Features
------------------------

 * Completion script updates for zsh

 * "git pack-objects" and its wrapper "git repack" learned an option
   to use an alternative path-hash function to improve delta-base
   selection to produce a packfile with deeper history than window
   size.

 * "git gc" learned the "--expire-to" option and passes it down to
   underlying "git repack".

 * "[help] autocorrect = 1" used to be a way to say "please wait for
   0.1 second after suggesting a typofix of the command name before
   running that command"; now it means "yes, if there is a plausible
   typofix for the command name, please run it immediately".

 * "git clone" learned to make a shallow clone for a single commit
   that is not necessarily be at the tip of any branch.

 * Lazy-loading missing files in a blobless clone on demand is costly
   as it tends to be one-blob-at-a-time.  "git backfill" is introduced
   to help bulk-download necessary files beforehand.

 * "git push --atomic --porcelain" used to ignore failures from the
   other side, losing the error status from the child process, which
   has been corrected.

 * "git rev-list --missing=" learned to accept "print-info" that gives
   known details expected of the missing objects, like path and type.

 * Comes with an updated "gitk".

 * The documentation of "git commit" and "git rebase" now refer to
   commit titles as such, not "subject".

 * The value of "uname -s" is by default sent over the wire as a part
   of the "version" capability.

 * "git refs migrate" can optionally be told not to migrate the reflog.

 * The netrc support (via the cURL library) for the HTTP transport has
   been re-enabled.

 * Removal of ".git/branches" and ".git/remotes" support in the
   BreakingChanges document has been further clarified.

 * What happens to submodules during merge has been documented in a
   bit more detail.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------

 * More -Wsign-compare fixes.

 * meson-based build now supports the unsafe-sha1 build knob.

 * The meson-based build procedure covers contrib/ and other places as
   well.

 * The code to check LSan results has been simplified and made more
   robust.
   (merge 164a2516eb jk/lsan-race-ignore-false-positive later to maint).

 * More code paths have a repository passed through the callchain,
   instead of assuming the primary the_repository object.

 * Move a few more unit tests to the clar test framework.

 * Introduce a new API to visit objects in batches based on a common
   path, or by type.

 * Following the procedure we established to introduce breaking
   changes for Git 3.0, allow an early opt-in for removing support of
   $GIT_DIR/branches/ and $GIT_DIR/remotes/ directories to configure
   remotes.

 * The code paths to interact with zlib has been cleaned up in
   preparation for building with zlib-ng.

 * Foreign language interface for Rust into our code base has been added.

 * All the documentation .txt files have been renamed to .adoc to help
   content aware editors.

 * "git difftool" code clean-up.

 * Rename processing in the recursive merge backend has seen a micro
   optimization.

 * The path.[ch] API takes an explicit repository parameter passed
   throughout the callchain, instead of relying on the_repository
   singleton instance.

 * Large-object promisor protocol extension has been introduced.

 * The editorconfig file is updated to tell us that bash scripts are
   similar to general Bourne shell scripts.

 * Meson-based build procedure forgot to build some docs, which has
   been corrected.


Fixes since v2.48
-----------------

 * "git submodule" learned various ways to spell the same option,
   e.g. "--branch=B" can be spelled "--branch B" or "-bB".
   (merge b86f0f9071 re/submodule-parse-opt later to maint).

 * Tweak the help text used for the option value placeholders by
   parse-options API so that translations can customize the "<>"
   placeholder signal (e.g. "--option=<value>").
   (merge 5b34dd08d0 as/long-option-help-i18n later to maint).

 * CI jobs gave sporadic failures, which turns out that that the
   object finalization code was giving an error when it did not have
   to.
   (merge d7fcbe2c56 ps/object-collision-check later to maint).

 * The code to compute "unique" name used git_rand() which can fail or
   get stuck; the callsite does not require cryptographic security.
   Introduce the "insecure" mode and use it appropriately.
   (merge 0b4f8afef6 ps/reftable-get-random-fix later to maint).

 * A misconfigured "fsck.skiplist" configuration variable was not
   diagnosed as an error, which has been corrected.
   (merge ca7158076f jt/fsck-skiplist-parse-fix later to maint).

 * Extended SHA-1 expression parser did not work well when a branch
   with an unusual name (e.g. "foo{bar") is involved.
   (merge 191f0c8db2 en/object-name-with-funny-refname-fix later to maint).

 * The meson build procedure looked for the 'version-def.h' file in a
   wrong directory, which has been corrected.
   (merge 4771501c0a tc/meson-use-our-version-def-h later to maint).

 * The meson build procedure for Documentation/technical/ hierarchy was
   missing necessary dependencies, which has been corrected.
   (merge 1dca492edd sj/meson-doc-technical-dependency-fix later to maint).

 * The "instaweb" bound only to local IP address without "--local" and
   to all addresses with "--local", which was the other way around, when
   using Python's http.server class, which has been corrected.
   (merge 76baf97fa1 ak/instaweb-python-port-binding-fix later to maint).

 * Document that it is insecure to use Personal Access Tokens, which
   some hosting providers take as username/password, embedded in URLs.
   (merge a90ff409f0 mh/doc-credential-helpers-with-pat later to maint).

 * The help text from "git $cmd -h" appear on the standard output for
   some $cmd and the standard error for others.  The built-in commands
   have been fixed to show them on the standard output consistently.
   (merge f66d1423f5 jc/show-usage-help later to maint).

 * The meson-driven build is now aware of "git-subtree" housed in
   contrib/subtree hierarchy.
   (merge 8454b42f94 ps/build-meson-subtree later to maint).

 * It was possible for "git unpack-objects" and "git index-pack" to
   make an unaligned access, which has been corrected.
   (merge 98046591b9 jk/pack-header-parse-alignment-fix later to maint).

 * The "cache" credential back-end did not handle authtype correctly,
   which has been corrected.
   (merge 0b43274850 mh/credential-cache-authtype-request-fix later to maint).

 * "git branch --sort=..." and "git for-each-ref --format=... --sort=..."
   did not work as expected with some atoms, which has been corrected.
   (merge c5490ce9d1 rs/ref-fitler-used-atoms-value-fix later to maint).

 * reflog entries for symbolic ref updates were broken, which has been
   corrected.
   (merge 3519492430 kn/reflog-symref-fix later to maint).

 * The trace2 code was not prepared to show a configuration variable
   that is set to true using the valueless true syntax, which has been
   corrected.
   (merge 2fd367cf63 am/trace2-with-valueless-true later to maint).

 * The "git refs migrate" command did not migrate the reflog for
   refs/stash, which is the contents of the stashes, which has been
   corrected.
   (merge a0bea0978f ps/reflog-migration-with-logall-fix later to maint).

 * Doc and short-help text for "show-index" has been clarified to
   stress that the command reads its data from the standard input.
   (merge 49edce4ff9 jc/show-index-h-update later to maint).

 * The API around choosing to use unsafe variant of SHA-1
   implementation has been updated in an attempt to make it harder to
   abuse.
   (merge 04292c3796 tb/unsafe-hash-cleanup later to maint).

 * Fix bugs in an earlier attempt to fix "git refs migration".
   (merge f11f0a5a2d kn/reflog-migration-fix-fix later to maint).

 * The code path used when "git fetch" fetches from a bundle file
   closed the same file descriptor twice, which sometimes broke things
   unexpectedly when the file descriptor was reused, which has been
   corrected.
   (merge 9a84794ad8 js/bundle-unbundle-fd-reuse-fix later to maint).

 * "git init" to reinitialize a repository that already exists cannot
   change the hash function and ref backends; such a request is
   silently ignored now.
   (merge 7e88640cd1 ps/setup-reinit-fixes later to maint).

 * "git apply" internally uses unsigned long for line numbers and uses
   strtoul() to parse numbers on the hunk headers.  It however forgot
   to check parse errors.
   (merge a206058fda pw/apply-ulong-overflow-check later to maint).

 * Two CI tasks, whitespace check and style check, work on the
   difference from the base version and the version being checked, but
   the base was computed incorrectly in GitLab CI in some cases, which
   has been corrected.
   (merge acc4fb302b jt/gitlab-ci-base-fix later to maint).

 * "git repack --keep-unreachable" to send unreachable objects to the
   main pack "git repack -ad" produces did not work when there is no
   existing packs, which has been corrected.
   (merge 414c82300a ps/repack-keep-unreachable-in-unpacked-repo later to maint).

 * Going into a secondary worktree and asking "is the main worktree
   bare?" did not work correctly when per-worktree configuration
   option was in use, which has been corrected.

 * Fetching into a bare repository incorrectly assumed it always used
   a mirror layout when deciding to update remote-tracking HEAD, which
   has been corrected.
   (merge 93dc16483a bf/fetch-set-head-fix later to maint).

 * A thunderbird helper script lost its bashism.
   (merge 59d26bd961 bc/contrib-thunderbird-patch-inline-fix later to maint).

 * The -G/-S options to the "diff" family of commands caused us to hit
   a BUG() when they get no values; they have been corrected.
   (merge a620046b29 bc/diff-reject-empty-arg-to-pickaxe later to maint).

 * "git merge-tree --stdin" has been improved (including a workaround
   for a deadlock).
   (merge 6a9ae81015 pw/merge-tree-stdin-deadlock-fix later to maint).

 * Correct the default target in Documentation/Makefile, and
   future-proof all Makefiles from similar breakages by declaring the
   default target (which happens to be "all") upfront.
   (merge 5309c1e9fb ad/set-default-target-in-makefiles later to maint).

 * "git check-mailmap" used to segfault when queried without human
   readable name.
   (merge bb60c52131 jk/check-mailmap-wo-name-fix later to maint).

 * Support for renaming of symbolic links on Windows has been improved.

 * "git rebase -i" failed to allow rewording an empty commit that has
   been fast-forwarded.
   (merge af8fc7be10 pw/rebase-i-ff-empty-commit later to maint).

 * The use of "paste" command for aggregating the test results have
   been corrected.
   (merge ce98863204 dk/test-aggregate-results-paste-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge ddb5287894 jk/t7407-use-test-grep later to maint).
   (merge 21e1b44865 aj/difftool-config-doc-fix later to maint).
   (merge 6a63995335 mh/gitattr-doc-markup-fix later to maint).
   (merge 43850dcf9c sk/unit-test-hash later to maint).
   (merge 4ad47d2de3 jc/cli-doc-option-and-config later to maint).
   (merge 2d0ff147e5 jp/t8002-printf-fix later to maint).
   (merge 69666e6746 ja/doc-restore-markup-update later to maint).
   (merge d11d003ba5 sk/strlen-returns-size_t later to maint).
   (merge 77b2d29e91 ja/doc-notes-markup-updates later to maint).
   (merge 6979bf6f8f jk/combine-diff-cleanup later to maint).
   (merge 8705c9bd13 kn/pack-write-with-reduced-globals later to maint).
   (merge 087740d65a ps/leakfixes-0129 later to maint).
   (merge 6bba6f604b jp/doc-trailer-config later to maint).
   (merge f1cc562b77 lo/t7603-path-is-file-update later to maint).
   (merge 45761988ac en/doc-renormalize later to maint).
   (merge 832f56f06a jc/doc-boolean-synonyms later to maint).
   (merge 3eeed876a9 ac/doc-http-ssl-type-config later to maint).
   (merge c268e3285d jc/breaking-changes-early-adopter-option later to maint).
   (merge 0d03fda6a5 pb/doc-follow-remote-head later to maint).
