Git 2.26 Release Notes
======================

Updates since v2.25
-------------------

UI, Workflows & Features

 * Sample credential helper for using .netrc has been updated to work
   out of the box.

 * gpg.minTrustLevel configuration variable has been introduced to
   tell various signature verification codepaths the required minimum
   trust level.

 * The command line completion (in contrib/) learned to complete
   subcommands and arguments to "git worktree".


Performance, Internal Implementation, Development Support etc.

 * Tell .editorconfig that in this project, *.txt files are indented
   with tabs.

 * The test-lint machinery knew to check "VAR=VAL shell_function"
   construct, but did not check "VAR= shell_funciton", which has been
   corrected.

 * Replace "git config --bool" calls with "git config --type=bool" in
   sample templates.

 * The effort to move "git-add--interactive" to C continues.

 * Improve error message generation for "git submodule add".

 * Preparation of test scripts for the day when the object names will
   use SHA-256 continues.


Fixes since v2.25
-----------------

 * "git commit" gives output similar to "git status" when there is
   nothing to commit, but without honoring the advise.statusHints
   configuration variable, which has been corrected.
   (merge 5c4f55f1f6 hw/commit-advise-while-rejecting later to maint).

 * has_object_file() said "no" given an object registered to the
   system via pretend_object_file(), making it inconsistent with
   read_object_file(), causing lazy fetch to attempt fetching an
   empty tree from promisor remotes.
   (merge 9c8a294a1a jt/sha1-file-remove-oi-skip-cached later to maint).

 * Complete an update to tutorial that encourages "git switch" over
   "git checkout" that was done only half-way.
   (merge 1a7e454dd6 hw/tutorial-favor-switch-over-checkout later to maint).

 * C pedantry ;-) fix.
   (merge 63ab08fb99 bc/run-command-nullness-after-free-fix later to maint).

 * The code that tries to skip over the entries for the paths in a
   single directory using the cache-tree was not careful enough
   against corrupt index file.
   (merge 573117dfa5 es/unpack-trees-oob-fix later to maint).

 * Reduce unnecessary round-trip when running "ls-remote" over the
   stateless RPC mechanism.
   (merge 4d8cab95cc jk/no-flush-upon-disconnecting-slrpc-transport later to maint).

 * "git restore --staged" did not correctly update the cache-tree
   structure, resulting in bogus trees to be written afterwards, which
   has been corrected.
   (merge e701bab3e9 nd/switch-and-restore later to maint).

 * The code recently added to move to the entry beyond the ones in the
   same directory in the index in the sparse-cone mode did not count
   the number of entries to skip over incorrectly, which has been
   corrected.
   (merge 7210ca4ee5 ds/sparse-cone later to maint).

 * Rendering by "git log --graph" of ancestry lines leading to a merge
   commit were made suboptimal to waste vertical space a bit with a
   recent update, which has been corrected.
   (merge c958d3bd0a ds/graph-horizontal-edges later to maint).

 * Work around test breakages caused by custom regex engine used in
   libasan, when address sanitizer is used with more recent versions
   of gcc and clang.
   (merge f65d07fffa jk/asan-build-fix later to maint).

 * Minor bugfixes to "git add -i" that has recently been rewritten in C.
   (merge 849e43cc18 js/builtin-add-i-cmds later to maint).

 * "git fetch --refmap=" option has got a better documentation.
   (merge b40a50264a ds/refmap-doc later to maint).

 * "git checkout X" did not correctly fail when X is not a local
   branch but could name more than one remote-tracking branches
   (i.e. to be dwimmed as the starting point to create a corresponding
   local branch), which has been corrected.
   (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).

 * Corner case bugs in "git clean" that stems from a (necessarily for
   performance reasons) awkward calling convention in the directory
   enumeration API has been corrected.
   (merge 0cbb60574e en/fill-directory-fixes-more later to maint).

 * A fetch that is told to recursively fetch updates in submodules
   inevitably produces reams of output, and it becomes hard to spot
   error messages.  The command has been taught to enumerate
   submodules that had errors at the end of the operation.
   (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).

 * The "--recurse-submodules" option of various subcommands did not
   work well when run in an alternate worktree, which has been
   corrected.
   (merge a9472afb63 pb/recurse-submodule-in-worktree-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 26f924d50e en/simplify-check-updates-in-unpack-trees later to maint).
   (merge 065027ee1a en/string-list-can-be-custom-sorted later to maint).
   (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
   (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
   (merge e4837b4406 jk/test-fixes later to maint).
   (merge a4ffbbbb99 rt/submodule-i18n later to maint).
   (merge 856249c62a bc/actualmente later to maint).
   (merge c513a958b6 ss/t6025-modernize later to maint).
   (merge 69e104d70e bc/author-committer-doc later to maint).
   (merge 7a2dc95cbc bc/misconception-doc later to maint).
   (merge b441717256 dl/test-must-fail-fixes later to maint).
   (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
