Git v2.44 Release Notes
=======================

Backward Compatibility Notes

 * "git chekcout -B <branch>" used to allow switching to a branch that
   is in use on another worktree, but this was by mistake.  The users
   need to use "--ignore-other-worktrees" option.


UI, Workflows & Features

 * "git add" and "git stash" learned to support the ":(attr:...)"
   magic pathspec.

 * "git rebase --autosquash" is now enabled for non-interactive rebase,
   but it is still incompatible with the apply backend.

 * Introduce "git replay", a tool meant on the server side without
   working tree to recreate a history.

 * "git merge-file" learned to take the "--diff-algorithm" option to
   use algorithm different from the default "myers" diff.

 * Command line completion (in contrib/) learned to complete path
   arguments to the "add/set" subcommands of "git sparse-checkout"
   better.

 * "git checkout -B <branch> [<start-point>]" allowed a branch that is
   in use in another worktree to be updated and checked out, which
   might be a bit unexpected.  The rule has been tightened, which is a
   breaking change.  "--ignore-other-worktrees" option is required to
   unbreak you, if you are used to the current behaviour that "-B"
   overrides the safety.

 * The builtin_objectmode attribute is populated for each path
   without adding anything in .gitattributes files, which would be
   useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
   to limit to executables.

 * "git fetch" learned to pay attention to "fetch.all" configuration
   variable, which pretends as if "--all" was passed from the command
   line when no remote parameter was given.

 * In addition to (rather cryptic) Security Identifiers, show username
   and domain in the error message when we barf on mismatch between
   the Git directory and the current user on Windows.

 * The error message given when "git branch -d branch" fails due to
   commits unique to the branch has been split into an error and a new
   conditional advice message.

 * When given an existing but unreadable file as a configuration file,
   gitweb behaved as if the file did not exist at all, but now it
   errors out.  This is a change that may break backward compatibility.

 * When $HOME/.gitignore is missing but XDG config file available, we
   should write into the latter, not former.  "git gc" and "git
   maintenance" wrote into a wrong "global config" file, which have
   been corrected.

 * Define "special ref" as a very narrow set that consists of
   FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
   be classified as such are actually just pseudorefs.

 * All conditional "advice" messages show how to turn them off, which
   becomes repetitive.  Setting advice.* configuration explicitly on
   now omits the instruction part.

 * The "disable repository discovery of a bare repository" check,
   triggered by setting safe.bareRepository configuration variable to
   'explicit', has been loosened to exclude the ".git/" directory inside
   a non-bare repository from the check.  So you can do "cd .git &&
   git cmd" to run a Git command that works on a bare repository without
   explicitly specifying $GIT_DIR now.

 * The completion script (in contrib/) learned more options that can
   be used with "git log".

 * The labels on conflict markers for the common ancestor, our version,
   and the other version are available to custom 3-way merge driver
   via %S, %X, and %Y placeholders.

 * The write codepath for the reftable data learned to honor
   core.fsync configuration.


Performance, Internal Implementation, Development Support etc.

 * Process to add some form of low-level unit tests has started.

 * Add support for GitLab CI.

 * "git for-each-ref --no-sort" still sorted the refs alphabetically
   which paid non-trivial cost.  It has been redefined to show output
   in an unspecified order, to allow certain optimizations to take
   advantage of.

 * Simplify API implementation to delete references by eliminating
   duplication.

 * Subject approxidate() and show_date() machinery to OSS-Fuzz.

 * A new helper to let us pretend that we called lstat() when we know
   our cache_entry is up-to-date via fsmonitor.

 * The optimization based on fsmonitor in the "diff --cached"
   codepath is resurrected with the "fake-lstat" introduced earlier.

 * Test balloon to use C99 "bool" type from <stdbool.h> has been
   added.

 * "git clone" has been prepared to allow cloning a repository with
   non-default hash function into a repository that uses the reftable
   backend.

 * Streaming spans of packfile data used to be done only from a
   single, primary, pack in a repository with multiple packfiles.  It
   has been extended to allow reuse from other packfiles, too.

 * Comment updates to help developers not to attempt to modify
   messages from plumbing commands that must stay constant.

   It might make sense to reassess the plumbing needs every few years,
   but that should be done as a separate effort.

 * Move test-ctype helper to the unit-test framework.

 * Instead of manually creating refs/ hierarchy on disk upon a
   creation of a secondary worktree, which is only usable via the
   files backend, use the refs API to populate it.

 * CI for GitLab learned to drive macOS jobs.

 * A few tests to "git commit -o <pathspec>" and "git commit -i
   <pathspec>" has been added.

 * Tests on ref API are moved around to prepare for reftable.

 * The Makefile often had to say "-L$(path) -R$(path)" that repeats
   the path to the same library directory for link time and runtime.
   A Makefile template is used to reduce such repetition.


Fixes since v2.43
-----------------

 * The way CI testing used "prove" could lead to running the test
   suite twice needlessly, which has been corrected.
   (merge e7e03ef995 js/ci-discard-prove-state later to maint).

 * Update ref-related tests.

 * "git format-patch --encode-email-headers" ignored the option when
   preparing the cover letter, which has been corrected.

 * Newer versions of Getopt::Long started giving warnings against our
   (ab)use of it in "git send-email".  Bump the minimum version
   requirement for Perl to 5.8.1 (from September 2002) to allow
   simplifying our implementation.
   (merge 6ff658cc78 tz/send-email-negatable-options later to maint).

 * Earlier we stopped relying on commit-graph that (still) records
   information about commits that are lost from the object store,
   which has negative performance implications.  The default has been
   flipped to disable this pessimization.
   (merge b1df3b3867 ps/commit-graph-less-paranoid later to maint).

 * Stale URLs have been updated to their current counterparts (or
   archive.org) and HTTP links are replaced with working HTTPS links.
   (merge 62b4f7b9c6 js/update-urls-in-doc-and-comment later to maint).

 * trace2 streams used to record the URLs that potentially embed
   authentication material, which has been corrected.
   (merge 16fa3eebc0 jh/trace2-redact-auth later to maint).

 * The sample pre-commit hook that tries to catch introduction of new
   paths that use potentially non-portable characters did not notice
   an existing path getting renamed to such a problematic path, when
   rename detection was enabled.
   (merge d9fd71fa2a jp/use-diff-index-in-pre-commit-sample later to maint).

 * The command line parser for the "log" family of commands was too
   loose when parsing certain numbers, e.g., silently ignoring the
   extra 'q' in "git log -n 1q" without complaining, which has been
   tightened up.
   (merge 71a1e94821 jc/revision-parse-int later to maint).

 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
   to interpret "--rev" as a rev, and "--path" as a path.  This was
   fixed for many programs like "reset" and "checkout".
   (merge 9385174627 jk/end-of-options later to maint).

 * "git bisect reset" has been taught to clean up state files and refs
   even when BISECT_START file is gone.
   (merge daaa03e54c jk/bisect-reset-fix later to maint).

 * Some codepaths did not correctly parse configuration variables
   specified with valueless "true", which has been corrected.
   (merge d49cb162fa jk/implicit-true later to maint).

 * Code clean-up for sanity checking of command line options for "git
   show-ref".
   (merge 7382497372 rs/show-ref-incompatible-options later to maint).

 * The code to parse the From e-mail header has been updated to avoid
   recursion.
   (merge dee182941f jk/mailinfo-iterative-unquote-comment later to maint).

 * "git fetch --atomic" issued an unnecessary empty error message,
   which has been corrected.
   (merge 18ce48918c jx/fetch-atomic-error-message-fix later to maint).

 * Command line completion script (in contrib/) learned to work better
   with the reftable backend.
   (merge 44dbb3bf29 sh/completion-with-reftable later to maint).

 * "git status" is taught to show both the branch being bisected and
   being rebased when both are in effect at the same time.
   (merge 990adccbdf rj/status-bisect-while-rebase later to maint).

 * "git archive --list extra garbage" silently ignored excess command
   line parameters, which has been corrected.
   (merge d6b6cd1393 jc/archive-list-with-extra-args later to maint).

 * "git sparse-checkout set" added default patterns even when the
   patterns are being fed from the standard input, which has been
   corrected.
   (merge 53ded839ae jc/sparse-checkout-set-default-fix later to maint).

 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
   not handle "--end-of-options" correctly after a recent update.

 * Unlike other environment variables that took the usual
   true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
   which has been corrected.
   (merge 556e68032f cp/git-flush-is-an-env-bool later to maint).

 * Clearing in-core repository (happens during e.g., "git fetch
   --recurse-submodules" with commit graph enabled) made in-core
   commit object in an inconsistent state by discarding the necessary
   data from commit-graph too early, which has been corrected.
   (merge d70f554cdf jk/commit-graph-slab-clear-fix later to maint).

 * Update to a new feature recently added, "git show-ref --exists".
   (merge 0aabeaa562 tc/show-ref-exists-fix later to maint).

 * oss-fuzz tests are built and run in CI.
   (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).

 * Rename detection logic ignored the final line of a file if it is an
   incomplete line.
   (merge 1c5bc6971e en/diffcore-delta-final-line-fix later to maint).

 * GitHub CI update.
   (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).

 * "git diff --no-rename A B" did not disable rename detection but did
   not trigger an error from the command line parser.
   (merge 457f96252f rs/parse-options-with-keep-unknown-abbrev-fix later to maint).

 * "git archive --remote=<remote>" learned to talk over the smart
   http (aka stateless) transport.
   (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).

 * Fetching via protocol v0 over Smart HTTP transport sometimes failed
   to correctly auto-follow tags.
   (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).

 * The documentation for the --exclude-per-directory option marked it
   as deprecated, which confused readers into thinking there may be a
   plan to remove it in the future, which was not our intention.
   (merge 0009542cab jc/ls-files-doc-update later to maint).

 * "git diff --no-index file1 file2" segfaulted while invoking the
   external diff driver, which has been corrected.
   (merge 85a9a63c92 jk/diff-external-with-no-index later to maint).

 * Rewrite //-comments to /* comments */ in files whose comments
   prevalently use the latter.
   (merge de65079d7b jc/comment-style-fixes later to maint).

 * Cirrus CI jobs started breaking because we specified version of
   FreeBSD that is no longer available, which has been corrected.
   (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 50f1abcff6 js/packfile-h-typofix later to maint).
   (merge cbf498eb53 jb/reflog-expire-delete-dry-run-options later to maint).
   (merge 7854bf4960 rs/i18n-cannot-be-used-together later to maint).
   (merge cd3c28c53a rs/column-leakfix later to maint).
   (merge 866a1b9026 ps/ref-tests-update-more later to maint).
   (merge e4299d26d4 mk/doc-gitfile-more later to maint).
   (merge 792b86283b rs/incompatible-options-messages later to maint).
   (merge ea8f9494ab jk/config-cleanup later to maint).
   (merge d1bd3a8c34 jk/mailinfo-oob-read-fix later to maint).
   (merge c0cadb0576 ps/reftable-fixes later to maint).
   (merge 647b5e0998 ps/chainlint-self-check-update later to maint).
   (merge 68fcebfb1a es/add-doc-list-short-form-of-all-in-synopsis later to maint).
   (merge bc62d27d5c jc/doc-most-refs-are-not-that-special later to maint).
   (merge 6d6f1cd7ee jc/doc-misspelt-refs-fix later to maint).
   (merge 37e8d795be sp/test-i18ngrep later to maint).
   (merge fbc6526ea6 rs/t6300-compressed-size-fix later to maint).
   (merge 45184afb4d rs/rebase-use-strvec-pushf later to maint).
   (merge a762af3dfd jc/retire-cas-opt-name-constant later to maint).
   (merge de7c27a186 la/trailer-cleanups later to maint).
   (merge d44b517137 jc/orphan-unborn later to maint).
   (merge 63956c553d ml/doc-merge-updates later to maint).
   (merge d57c671a51 en/header-cleanup later to maint).
   (merge 5b7eec4bc5 rs/fast-import-simplify-mempool-allocation later to maint).
   (merge 291873e5d6 js/contributor-docs-updates later to maint).
   (merge 54d8a2531b jk/t1006-cat-file-objectsize-disk later to maint).
   (merge 7033d5479b jx/sideband-chomp-newline-fix later to maint).
   (merge 9cd30af991 ms/rebase-insnformat-doc-fix later to maint).
   (merge 03bcc93769 cp/sideband-array-index-comment-fix later to maint).
   (merge 993d38a066 jk/index-pack-lsan-false-positive-fix later to maint).
   (merge 25aec06326 ib/rebase-reschedule-doc later to maint).
   (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
   (merge 9cce3be2df bk/bisect-doc-fix later to maint).
   (merge 8f50984cf4 ne/doc-filter-blob-limit-fix later to maint).
   (merge f10b0989b8 la/strvec-comment-fix later to maint).
   (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
   (merge f10031fadd nb/rebase-x-shell-docfix later to maint).
   (merge af3d2c160f jc/majordomo-to-subspace later to maint).
   (merge ee9895b0ff sd/negotiate-trace-fix later to maint).
   (merge 976d0251ce jc/coc-whitespace-fix later to maint).
   (merge 9023198280 jt/p4-spell-re-with-raw-string later to maint).
   (merge 36c9c44fa4 tb/pack-bitmap-drop-unused-struct-member later to maint).
   (merge 19ed0dff8f js/win32-retry-pipe-write-on-enospc later to maint).
   (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).
