Documentation / RelNotes / 2.22.0.txton commit The seventh batch (83232e3)
   1Git 2.22 Release Notes
   2======================
   3
   4Updates since v2.21
   5-------------------
   6
   7UI, Workflows & Features
   8
   9 * "git checkout --no-overlay" can be used to trigger a new mode of
  10   checking out paths out of the tree-ish, that allows paths that
  11   match the pathspec that are in the current index and working tree
  12   and are not in the tree-ish.
  13
  14 * The %(trailers) formatter in "git log --format=..."  now allows to
  15   optionally pick trailers selectively by keyword, show only values,
  16   etc.
  17
  18 * Four new configuration variables {author,committer}.{name,email}
  19   have been introduced to override user.{name,email} in more specific
  20   cases.
  21
  22 * Command-line completion (in contrib/) learned to tab-complete the
  23   "git submodule absorbgitdirs" subcommand.
  24
  25 * "git branch" learned a new subcommand "--show-current".
  26
  27 * Output from "diff --cc" did not show the original paths when the
  28   merge involved renames.  A new option adds the paths in the
  29   original trees to the output.
  30
  31 * The command line completion (in contrib/) has been taught to
  32   complete more subcommand parameters.
  33
  34 * The final report from "git bisect" used to show the suspected
  35   culprit using a raw "diff-tree", with which there is no output for
  36   a merge commit.  This has been updated to use a more modern and
  37   human readable output that still is concise enough.
  38
  39 * "git rebase --rebase-merges" replaces its old "--preserve-merges"
  40   option; the latter is now marked as deprecated.
  41
  42 * Error message given while cloning with --recurse-submodules has
  43   been updated.
  44
  45 * The completion helper code now pays attention to repository-local
  46   configuration (when available), which allows --list-cmds to honour
  47   a repository specific setting of completion.commands, for example.
  48
  49 * "git mergetool" learned to offer Sublime Merge (smerge) as one of
  50   its backends.
  51
  52 * A new hook "post-index-change" is called when the on-disk index
  53   file changes, which can help e.g. a virtualized working tree
  54   implementation.
  55
  56 * "git difftool" can now run outside a repository.
  57
  58 * "git checkout -m <other>" was about carrying the differences
  59   between HEAD and the working-tree files forward while checking out
  60   another branch, and ignored the differences between HEAD and the
  61   index.  The command has been taught to abort when the index and the
  62   HEAD are different.
  63
  64 * A progress indicator has been added to the "index-pack" step, which
  65   often makes users wait for completion during "git clone".
  66
  67 * "git submodule" learns "set-branch" subcommand that allows the
  68   submodule.*.branch settings to be modified.
  69
  70
  71Performance, Internal Implementation, Development Support etc.
  72
  73 * The diff machinery, one of the oldest parts of the system, which
  74   long predates the parse-options API, uses fairly long and complex
  75   handcrafted option parser.  This is being rewritten to use the
  76   parse-options API.
  77
  78 * The implementation of pack-redundant has been updated for
  79   performance in a repository with many packfiles.
  80
  81 * A more structured way to obtain execution trace has been added.
  82
  83 * "git prune" has been taught to take advantage of reachability
  84   bitmap when able.
  85
  86 * The command line parser of "git commit-tree" has been rewritten to
  87   use the parse-options API.
  88
  89 * Suggest GitGitGadget instead of submitGit as a way to submit
  90   patches based on GitHub PR to us.
  91
  92 * The test framework has been updated to help developers by making it
  93   easier to run most of the tests under different versions of
  94   over-the-wire protocols.
  95
  96 * Dev support update to make it easier to compare two formatted
  97   results from our documentation.
  98
  99 * The scripted "git rebase" implementation has been retired.
 100
 101 * "git multi-pack-index verify" did not scale well with the number of
 102   packfiles, which is being improved.
 103
 104 * "git stash" has been rewritten in C.
 105
 106 * The "check-docs" Makefile target to support developers has been
 107   updated.
 108
 109 * The tests have been updated not to rely on the abbreviated option
 110   names the parse-options API offers, to protect us from an
 111   abbreviated form of an option that used to be unique within the
 112   command getting non-unique when a new option that share the same
 113   prefix is added.
 114
 115 * The scripted version of "git rebase -i" wrote and rewrote the todo
 116   list many times during a single step of its operation, and the
 117   recent C-rewrite made a faithful conversion of the logic to C.  The
 118   implementation has been updated to carry necessary information
 119   around in-core to avoid rewriting the same file over and over
 120   unnecessarily.
 121
 122 * Test framework update to more robustly clean up leftover files and
 123   processes after tests are done.
 124
 125 * Conversion from unsigned char[20] to struct object_id continues.
 126
 127 * While running "git diff" in a lazy clone, we can upfront know which
 128   missing blobs we will need, instead of waiting for the on-demand
 129   machinery to discover them one by one.  The code learned to aim to
 130   achieve better performance by batching the request for these
 131   promised blobs.
 132
 133
 134Fixes since v2.21
 135-----------------
 136
 137 * "git prune-packed" did not notice and complain against excess
 138   arguments given from the command line, which now it does.
 139   (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
 140
 141 * Split-index fix.
 142   (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
 143
 144 * "git diff --no-index" may still want to access Git goodies like
 145   --ext-diff and --textconv, but so far these have been ignored,
 146   which has been corrected.
 147   (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
 148
 149 * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
 150   a bug in the latter (lack of authentication retry) and generally
 151   improves the code base.
 152   (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
 153
 154 * The include file compat/bswap.h has been updated so that it is safe
 155   to (accidentally) include it more than once.
 156   (merge 33aa579a55 jk/guard-bswap-header later to maint).
 157
 158 * The set of header files used by "make hdr-check" unconditionally
 159   included sha256/gcrypt.h, even when it is not used, causing the
 160   make target to fail.  We now skip it when GCRYPT_SHA256 is not in
 161   use.
 162   (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
 163
 164 * The Makefile uses 'find' utility to enumerate all the *.h header
 165   files, which is expensive on platforms with slow filesystems; it
 166   now optionally uses "ls-files" if working within a repository,
 167   which is a trick similar to how all sources are enumerated to run
 168   ETAGS on.
 169   (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
 170
 171 * "git rebase" that was reimplemented in C did not set ORIG_HEAD
 172   correctly, which has been corrected.
 173   (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
 174
 175 * Dev support.
 176   (merge f545737144 js/stress-test-ui-tweak later to maint).
 177
 178 * CFLAGS now can be tweaked when invoking Make while using
 179   DEVELOPER=YesPlease; this did not work well before.
 180   (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
 181
 182 * "git fsck --connectivity-only" omits computation necessary to sift
 183   the objects that are not reachable from any of the refs into
 184   unreachable and dangling.  This is now enabled when dangling
 185   objects are requested (which is done by default, but can be
 186   overridden with the "--no-dangling" option).
 187   (merge 8d8c2a5aef jk/fsck-doc later to maint).
 188
 189 * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
 190   the upload-pack that runs on the other end that hangs up after
 191   detecting an error could cause "git fetch" to die with a signal,
 192   which led to a flakey test.  "git fetch" now ignores SIGPIPE during
 193   the network portion of its operation (this is not a problem as we
 194   check the return status from our write(2)s).
 195   (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
 196
 197 * A recent update broke "is this object available to us?" check for
 198   well-known objects like an empty tree (which should yield "yes",
 199   even when there is no on-disk object for an empty tree), which has
 200   been corrected.
 201   (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
 202
 203 * The setup code has been cleaned up to avoid leaks around the
 204   repository_format structure.
 205   (merge e8805af1c3 ma/clear-repository-format later to maint).
 206
 207 * "git config --type=color ..." is meant to replace "git config --get-color"
 208   but there is a slight difference that wasn't documented, which is
 209   now fixed.
 210   (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
 211
 212 * When the "clean" filter can reduce the size of a huge file in the
 213   working tree down to a small "token" (a la Git LFS), there is no
 214   point in allocating a huge scratch area upfront, but the buffer is
 215   sized based on the original file size.  The convert mechanism now
 216   allocates very minimum and reallocates as it receives the output
 217   from the clean filter process.
 218   (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
 219
 220 * "git rebase" uses the refs/rewritten/ hierarchy to store its
 221   intermediate states, which inherently makes the hierarchy per
 222   worktree, but it didn't quite work well.
 223   (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
 224
 225 * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
 226   output as it should.  This has been corrected.
 227   (merge 05314efaea jk/line-log-with-patch later to maint).
 228
 229 * "git worktree add" used to do a "find an available name with stat
 230   and then mkdir", which is race-prone.  This has been fixed by using
 231   mkdir and reacting to EEXIST in a loop.
 232   (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
 233
 234 * Build update for SHA-1 with collision detection.
 235   (merge 07a20f569b jk/sha1dc later to maint).
 236
 237 * Build procedure has been fixed around use of asciidoctor instead of
 238   asciidoc.
 239   (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
 240
 241 * remote-http transport did not anonymize URLs reported in its error
 242   messages at places.
 243   (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
 244
 245 * Error messages given from the http transport have been updated so
 246   that they can be localized.
 247   (merge ed8b4132c8 js/remote-curl-i18n later to maint).
 248
 249 * "git init" forgot to read platform-specific repository
 250   configuration, which made Windows port to ignore settings of
 251   core.hidedotfiles, for example.
 252
 253 * A corner-case object name ambiguity while the sequencer machinery
 254   is working (e.g. "rebase -i -x") has been fixed.
 255
 256 * "git format-patch" did not diagnose an error while opening the
 257   output file for the cover-letter, which has been corrected.
 258   (merge 2fe95f494c jc/format-patch-error-check later to maint).
 259
 260 * "git checkout -f <branch>" while the index has an unmerged path
 261   incorrectly left some paths in an unmerged state, which has been
 262   corrected.
 263
 264 * A corner case bug in the refs API has been corrected.
 265   (merge d3322eb28b jk/refs-double-abort later to maint).
 266
 267 * Unicode update.
 268   (merge 584b62c37b bb/unicode-12 later to maint).
 269
 270 * dumb-http walker has been updated to share more error recovery
 271   strategy with the normal codepath.
 272
 273 * A buglet in configuration parser has been fixed.
 274   (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
 275
 276 * The documentation for "git read-tree --reset -u" has been updated.
 277   (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
 278
 279 * Code clean-up around a much-less-important-than-it-used-to-be
 280   update_server_info() funtion.
 281   (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
 282
 283 * The message given when "git commit -a <paths>" errors out has been
 284   updated.
 285   (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
 286
 287 * "git cherry-pick --options A..B", after giving control back to the
 288   user to ask help resolving a conflicted step, did not honor the
 289   options it originally received, which has been corrected.
 290
 291 * Various glitches in "git gc" around reflog handling have been fixed.
 292
 293 * The code to read from commit-graph file has been cleanup with more
 294   careful error checking before using data read from it.
 295
 296 * Performance fix around "git fetch" that grabs many refs.
 297   (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
 298
 299 * Protocol v2 support in "git fetch-pack" of shallow clones has been
 300   corrected.
 301
 302 * Performance fix around "git blame", especially in a linear history
 303   (which is the norm we should optimize for).
 304   (merge f892014943 dk/blame-keep-origin-blob later to maint).
 305
 306 * Performance fix for "rev-list --parents -- pathspec".
 307   (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
 308
 309 * Updating the display with progress message has been cleaned up to
 310   deal better with overlong messages.
 311   (merge 545dc345eb sg/overlong-progress-fix later to maint).
 312
 313 * "git blame -- path" in a non-bare repository starts blaming from
 314   the working tree, and the same command in a bare repository errors
 315   out because there is no working tree by definition.  The command
 316   has been taught to instead start blaming from the commit at HEAD,
 317   which is more useful.
 318   (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
 319
 320 * An underallocation in the code to read the untracked cache
 321   extension has been corrected.
 322   (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
 323
 324 * The code is updated to check the result of memory allocation before
 325   it is used in more places, by using xmalloc and/or xcalloc calls.
 326   (merge 999b951b28 jk/xmalloc later to maint).
 327
 328 * The GETTEXT_POISON test option has been quite broken ever since it
 329   was made runtime-tunable, which has been fixed.
 330   (merge f88b9cb603 jc/gettext-test-fix later to maint).
 331
 332 * Test fix on APFS that is incapable of store paths in Latin-1.
 333   (merge 3889149619 js/iso8895-test-on-apfs later to maint).
 334
 335 * "git submodule foreach <command> --quiet" did not pass the option
 336   down correctly, which has been corrected.
 337   (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
 338
 339 * "git send-email" has been taught to use quoted-printable when the
 340   payload contains carriage-return.  The use of the mechanism is in
 341   line with the design originally added the codepath that chooses QP
 342   when the payload has overly long lines.
 343   (merge 74d76a1701 bc/send-email-qp-cr later to maint).
 344
 345 * The recently added feature to add addresses that are on
 346   anything-by: trailers in 'git send-email' was found to be way too
 347   eager and considered nonsense strings as if they can be legitimate
 348   beginning of *-by: trailer.  This has been tightened.
 349
 350 * Build with gettext breaks on recent macOS w/ Homebrew when
 351   /usr/local/bin is not on PATH, which has been corrected.
 352   (merge 92a1377a2a js/macos-gettext-build later to maint).
 353
 354 * Code cleanup, docfix, build fix, etc.
 355   (merge 11f470aee7 jc/test-yes-doc later to maint).
 356   (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
 357   (merge 5c326d1252 jk/unused-params later to maint).
 358   (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
 359   (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
 360   (merge 1ede45e44b en/merge-options-doc later to maint).
 361   (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
 362   (merge c271dc28fd nd/no-more-check-racy later to maint).
 363   (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
 364   (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
 365   (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
 366   (merge 50b206371d js/untravis-windows later to maint).
 367   (merge dbf47215e3 js/rebase-recreate-merge later to maint).
 368   (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
 369   (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
 370   (merge af91b0230c dl/ignore-docs later to maint).
 371   (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
 372   (merge e041d0781b ar/t4150-remove-cruft later to maint).
 373   (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
 374   (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
 375   (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
 376   (merge a7256debd4 nd/checkout-m-doc-update later to maint).
 377   (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
 378   (merge 0b918b75af sg/t5318-cleanup later to maint).
 379   (merge 68ed71b53c cb/doco-mono later to maint).
 380   (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
 381   (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
 382   (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
 383   (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
 384   (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
 385   (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
 386   (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
 387   (merge d8083e4180 km/t3000-retitle later to maint).