Documentation / RelNotes / 2.20.0.txton commit The seventh batch (7b974e3)
   1Git 2.20 Release Notes
   2======================
   3
   4Backward Compatibility Notes
   5----------------------------
   6
   7 * "git branch -l <foo>" used to be a way to ask a reflog to be
   8   created while creating a new branch, but that is no longer the
   9   case.  It is a short-hand for "git branch --list <foo>" now.
  10
  11 * "git push" into refs/tags/* hierarchy is rejected without getting
  12   forced, but "git fetch" (misguidedly) used the "fast forwarding"
  13   rule used for the refs/heads/* hierarchy; this has been corrected,
  14   which means some fetches of tags that did not fail with older
  15   version of Git will fail without "--force" with this version.
  16
  17 * "git help -a" now gives verbose output (same as "git help -av").
  18   Those who want the old output may say "git help --no-verbose -a"..
  19
  20 * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n",
  21   reported only the alias expansion of "cpn" in earlier versions of
  22   Git.  It now runs "git cherry-pick --help" to show the manual page
  23   of the command, while sending the alias expansion to the standard
  24   error stream.
  25
  26 * "git send-email" learned to grab address-looking string on any
  27   trailer whose name ends with "-by". This is a backward-incompatible
  28   change.  Adding "--suppress-cc=misc-by" on the command line, or
  29   setting sendemail.suppresscc configuration variable to "misc-by",
  30   can be used to disable this behaviour.
  31
  32
  33Updates since v2.19
  34-------------------
  35
  36UI, Workflows & Features
  37
  38 * Running "git clone" against a project that contain two files with
  39   pathnames that differ only in cases on a case insensitive
  40   filesystem would result in one of the files lost because the
  41   underlying filesystem is incapable of holding both at the same
  42   time.  An attempt is made to detect such a case and warn.
  43
  44 * "git checkout -b newbranch [HEAD]" should not have to do as much as
  45   checking out a commit different from HEAD.  An attempt is made to
  46   optimize this special case.
  47
  48 * "git rev-list --stdin </dev/null" used to be an error; it now shows
  49   no output without an error.  "git rev-list --stdin --default HEAD"
  50   still falls back to the given default when nothing is given on the
  51   standard input.
  52
  53 * Lift code from GitHub to restrict delta computation so that an
  54   object that exists in one fork is not made into a delta against
  55   another object that does not appear in the same forked repository.
  56
  57 * "git format-patch" learned new "--interdiff" and "--range-diff"
  58   options to explain the difference between this version and the
  59   previous attempt in the cover letter (or after the three-dashes as
  60   a comment).
  61
  62 * "git mailinfo" used in "git am" learned to make a best-effort
  63   recovery of a patch corrupted by MUA that sends text/plain with
  64   format=flawed option.
  65   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
  66
  67 * The rules used by "git push" and "git fetch" to determine if a ref
  68   can or cannot be updated were inconsistent; specifically, fetching
  69   to update existing tags were allowed even though tags are supposed
  70   to be unmoving anchoring points.  "git fetch" was taught to forbid
  71   updates to existing tags without the "--force" option.
  72
  73 * "git multi-pack-index" learned to detect corruption in the .midx
  74   file it uses, and this feature has been integrated into "git fsck".
  75
  76 * Generation of (experimental) commit-graph files have so far been
  77   fairly silent, even though it takes noticeable amount of time in a
  78   meaningfully large repository.  The users will now see progress
  79   output.
  80
  81 * The minimum version of Windows supported by Windows port of Git is
  82   now set to Vista.
  83
  84 * The completion script (in contrib/) learned to complete a handful of
  85   options "git stash list" command takes.
  86
  87 * The completion script (in contrib/) learned that "git fetch
  88   --multiple" only takes remote names as arguments and no refspecs.
  89
  90 * "git status" learns to show progress bar when refreshing the index
  91   takes a long time.
  92   (merge ae9af12287 nd/status-refresh-progress later to maint).
  93
  94 * "git help -a" and "git help -av" give different pieces of
  95   information, and generally the "verbose" version is more friendly
  96   to the new users.  "git help -a" by default now uses the more
  97   verbose output (with "--no-verbose", you can go back to the
  98   original).  Also "git help -av" now lists aliases and external
  99   commands, which it did not used to.
 100
 101 * Unlike "grep", "git grep" by default recurses to the whole tree.
 102   The command learned "git grep --recursive" option, so that "git
 103   grep --no-recursive" can serve as a synonym to setting the
 104   max-depth to 0.
 105
 106 * When pushing into a repository that borrows its objects from an
 107   alternate object store, "git receive-pack" that responds to the
 108   push request on the other side lists the tips of refs in the
 109   alternate to reduce the amount of objects transferred.  This
 110   sometimes is detrimental when the number of refs in the alternate
 111   is absurdly large, in which case the bandwidth saved in potentially
 112   fewer objects transferred is wasted in excessively large ref
 113   advertisement.  The alternate refs that are advertised are now
 114   configurable with a pair of configuration variables.
 115
 116 * "git cmd --help" when "cmd" is aliased used to only say "cmd is
 117   aliased to ...".  Now it shows that to the standard error stream
 118   and runs "git $cmd --help" where $cmd is the first word of the
 119   alias expansion.
 120
 121 * The documentation of "git gc" has been updated to mention that it
 122   is no longer limited to "pruning away crufts" but also updates
 123   ancillary files like commit-graph as a part of repository
 124   optimization.
 125
 126 * "git p4 unshelve" improvements.
 127
 128 * The logic to select the default user name and e-mail on Windows has
 129   been improved.
 130   (merge 501afcb8b0 js/mingw-default-ident later to maint).
 131
 132 * The "rev-list --filter" feature learned to exclude all trees via
 133   "tree:0" filter.
 134
 135 * "git send-email" learned to grab address-looking string on any
 136   trailer whose name ends with "-by"; --suppress-cc=misc-by on the
 137   command line, or setting sendemail.suppresscc configuration
 138   variable to "misc-by", can be used to disable this behaviour.
 139
 140 * "git mergetool" learned to take the "--[no-]gui" option, just like
 141   "git difftool" does.
 142
 143 * "git rebase -i" learned a new insn, 'break', that the user can
 144   insert in the to-do list.  Upon hitting it, the command returns
 145   control back to the user.
 146
 147 * New "--pretty=format:" placeholders %GF and %GP that show the GPG
 148   key fingerprints have been invented.
 149
 150 * On platforms with recent cURL library, http.sslBackend configuration
 151   variable can be used to choose a different SSL backend at runtime.
 152   The Windows port uses this mechanism to switch between OpenSSL and
 153   Secure Channel while talking over the HTTPS protocol.
 154
 155 * "git send-email" learned to disable SMTP authentication via the
 156   "--smtp-auth=none" option, even when the smtp username is given
 157   (which turns the authentication on by default).
 158
 159 * A fourth class of configuration files (in addition to the
 160   traditional "system wide", "per user in the $HOME directory" and
 161   "per repository in the $GIT_DIR/config") has been introduced so
 162   that different worktrees that share the same repository (hence the
 163   same $GIT_DIR/config file) can use different customization.
 164
 165 * A pattern with '**' that does not have a slash on either side used
 166   to be an invalid one, but the code now treats such double-asterisks
 167   the same way as two normal asterisks that happen to be adjacent to
 168   each other.
 169   (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint).
 170
 171 * The "--no-patch" option, which can be used to get a high-level
 172   overview without the actual line-by-line patch difference shown, of
 173   the "range-diff" command was earlier broken, which has been
 174   corrected.
 175
 176 * The recently merged "rebase in C" has an escape hatch to use the
 177   scripted version when necessary, but it hasn't been documented,
 178   which has been corrected.
 179
 180
 181Performance, Internal Implementation, Development Support etc.
 182
 183 * Developer builds now use -Wunused-function compilation option.
 184
 185 * One of our CI tests to run with "unusual/experimental/random"
 186   settings now also uses commit-graph and midx.
 187
 188 * When there are too many packfiles in a repository (which is not
 189   recommended), looking up an object in these would require
 190   consulting many pack .idx files; a new mechanism to have a single
 191   file that consolidates all of these .idx files is introduced.
 192
 193 * "git submodule update" is getting rewritten piece-by-piece into C.
 194
 195 * The code for computing history reachability has been shuffled,
 196   obtained a bunch of new tests to cover them, and then being
 197   improved.
 198
 199 * The unpack_trees() API used in checking out a branch and merging
 200   walks one or more trees along with the index.  When the cache-tree
 201   in the index tells us that we are walking a tree whose flattened
 202   contents is known (i.e. matches a span in the index), as linearly
 203   scanning a span in the index is much more efficient than having to
 204   open tree objects recursively and listing their entries, the walk
 205   can be optimized, which has been done.
 206
 207 * When creating a thin pack, which allows objects to be made into a
 208   delta against another object that is not in the resulting pack but
 209   is known to be present on the receiving end, the code learned to
 210   take advantage of the reachability bitmap; this allows the server
 211   to send a delta against a base beyond the "boundary" commit.
 212
 213 * spatch transformation to replace boolean uses of !hashcmp() to
 214   newly introduced oideq() is added, and applied, to regain
 215   performance lost due to support of multiple hash algorithms.
 216
 217 * Fix a bug in which the same path could be registered under multiple
 218   worktree entries if the path was missing (for instance, was removed
 219   manually).  Also, as a convenience, expand the number of cases in
 220   which --force is applicable.
 221
 222 * Split Documentation/config.txt for easier maintenance.
 223   (merge 6014363f0b nd/config-split later to maint).
 224
 225 * Test helper binaries clean-up.
 226   (merge c9a1f4161f nd/test-tool later to maint).
 227
 228 * Various tests have been updated to make it easier to swap the
 229   hash function used for object identification.
 230   (merge ae0c89d41b bc/hash-independent-tests later to maint).
 231
 232 * Update fsck.skipList implementation and documentation.
 233   (merge 371a655074 ab/fsck-skiplist later to maint).
 234
 235 * An alias that expands to another alias has so far been forbidden,
 236   but now it is allowed to create such an alias.
 237
 238 * Various test scripts have been updated for style and also correct
 239   handling of exit status of various commands.
 240
 241 * "gc --auto" ended up calling exit(-1) upon error, which has been
 242   corrected to use exit(1).  Also the error reporting behaviour when
 243   daemonized has been updated to exit with zero status when stopping
 244   due to a previously discovered error (which implies there is no
 245   point running gc to improve the situation); we used to exit with
 246   failure in such a case.
 247
 248 * Various codepaths in the core-ish part learned to work on an
 249   arbitrary in-core index structure, not necessarily the default
 250   instance "the_index".
 251   (merge b3c7eef9b0 nd/the-index later to maint).
 252
 253 * Code clean-up in the internal machinery used by "git status" and
 254   "git commit --dry-run".
 255   (merge 73ba5d78b4 ss/wt-status-committable later to maint).
 256
 257 * Some environment variables that control the runtime options of Git
 258   used during tests are getting renamed for consistency.
 259   (merge 4231d1ba99 bp/rename-test-env-var later to maint).
 260
 261 * A pair of new extensions to the index file have been introduced.
 262   They allow the index file to be read in parallel for performance.
 263
 264 * The oidset API was built on top of the oidmap API which in turn is
 265   on the hashmap API.  Replace the implementation to build on top of
 266   the khash API and gain performance.
 267
 268 * Over some transports, fetching objects with an exact commit object
 269   name can be done without first seeing the ref advertisements.  The
 270   code has been optimized to exploit this.
 271
 272 * In a partial clone that will lazily be hydrated from the
 273   originating repository, we generally want to avoid "does this
 274   object exist (locally)?" on objects that we deliberately omitted
 275   when we created the clone.  The cache-tree codepath (which is used
 276   to write a tree object out of the index) however insisted that the
 277   object exists, even for paths that are outside of the partial
 278   checkout area.  The code has been updated to avoid such a check.
 279
 280 * To help developers, an EditorConfig file that attempts to follow
 281   the project convention has been added.
 282   (merge b548d698a0 bc/editorconfig later to maint).
 283
 284 * The result of coverage test can be combined with "git blame" to
 285   check the test coverage of code introduced recently with a new
 286   'coverage-diff' tool (in contrib/).
 287   (merge 783faedd65 ds/coverage-diff later to maint).
 288
 289 * An experiment to fuzz test a few areas, hopefully we can gain more
 290   coverage to various areas.
 291
 292 * More codepaths are moving away from hardcoded hash sizes.
 293
 294 * The way the Windows port figures out the current directory has been
 295   improved.
 296
 297 * The way DLLs are loaded on the Windows port has been improved.
 298
 299 * Some tests have been reorganized and renamed; "ls t/" now gives a
 300   better overview of what is tested for these scripts than before.
 301
 302 * "git rebase" and "git rebase -i" have been reimplemented in C.
 303
 304 * Windows port learned to use nano-second resolution file timestamps.
 305
 306 * The overly large Documentation/config.txt file have been split into
 307   million little pieces.  This potentially allows each individual piece
 308   to be included into the manual page of the command it affects more easily.
 309
 310 * Replace three string-list instances used as look-up tables in "git
 311   fetch" with hashmaps.
 312
 313 * Unify code to read the author-script used in "git am" and the
 314   commands that use the sequencer machinery, e.g. "git rebase -i".
 315
 316 * In preparation to the day when we can deprecate and remove the
 317   "rebase -p", make sure we can skip and later remove tests for
 318   it.
 319
 320 * The history traversal used to implement the tag-following has been
 321   optimized by introducing a new helper.
 322
 323 * The helper function to refresh the cached stat information in the
 324   in-core index has learned to perform the lstat() part of the
 325   operation in parallel on multi-core platforms.
 326
 327 * The code to traverse objects for reachability, used to decide what
 328   objects are unreferenced and expendable, have been taught to also
 329   consider per-worktree refs of other worktrees as starting points to
 330   prevent data loss.
 331
 332 * "git add" needs to internally run "diff-files" equivalent, and the
 333   codepath learned the same optimization as "diff-files" has to run
 334   lstat(2) in parallel to find which paths have been updated in the
 335   working tree.
 336
 337 * The procedure to install dependencies before testing at Travis CI
 338   is getting revamped for both simplicity and flexibility, taking
 339   advantage of the recent move to the vm-based environment.
 340
 341 * The support for format-patch (and send-email) by the command-line
 342   completion script (in contrib/) has been simplified a bit.
 343
 344 * The revision walker machinery learned to take advantage of the
 345   commit generation numbers stored in the commit-graph file.
 346
 347 * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS".
 348
 349 * The way -lcurl library gets linked has been simplified by taking
 350   advantage of the fact that we can just ask curl-config command how.
 351
 352 * Various functions have been audited for "-Wunused-parameter" warnings
 353   and bugs in them got fixed.
 354
 355 * A sanity check for start-up sequence has been added in the config
 356   API codepath.
 357
 358 * The build procedure to link for fuzzing test has been made
 359   customizable with a new Makefile variable.
 360
 361 * The way "git rebase" parses and forwards the command line options
 362   meant for underlying "git am" has been revamped, which fixed for
 363   options with parameters that were not passed correctly.
 364
 365 * Our testing framework uses a special i18n "poisoned localization"
 366   feature to find messages that ought to stay constant but are
 367   incorrectly marked to be translated.  This feature has been made
 368   into a runtime option (it used to be a compile-time option).
 369
 370 * "git push" used to check ambiguities between object-names and
 371   refnames while processing the list of refs' old and new values,
 372   which was unnecessary (as it knew that it is feeding raw object
 373   names).  This has been optimized out.
 374
 375 * The xcurl_off_t() helper function is used to cast size_t to
 376   curl_off_t, but some compilers gave warnings against the code to
 377   ensure the casting is done without wraparound, when size_t is
 378   narrower than curl_off_t.  This warning has been squelched.
 379
 380 * Code preparation to replace ulong vars with size_t vars where
 381   appropriate continues.
 382
 383 * The "test installed Git" mode of our test suite has been updated to
 384   work better.
 385
 386 * A coding convention around the Coccinelle semantic patches to have
 387   two classes to ease code migration process has been proposed and
 388   its support has been added to the Makefile.
 389
 390 * The "container" mode of TravisCI is going away.  Our .travis.yml
 391   file is getting prepared for the transition.
 392   (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint).
 393
 394 * Our test scripts can now take the '-V' option as a synonym for the
 395   '--verbose-log' option.
 396   (merge a5f52c6dab sg/test-verbose-log later to maint).
 397
 398
 399Fixes since v2.19
 400-----------------
 401
 402 * "git interpret-trailers" and its underlying machinery had a buggy
 403   code that attempted to ignore patch text after commit log message,
 404   which triggered in various codepaths that will always get the log
 405   message alone and never get such an input.
 406   (merge 66e83d9b41 jk/trailer-fixes later to maint).
 407
 408 * Malformed or crafted data in packstream can make our code attempt
 409   to read or write past the allocated buffer and abort, instead of
 410   reporting an error, which has been fixed.
 411
 412 * "git rebase -i" did not clear the state files correctly when a run
 413   of "squash/fixup" is aborted and then the user manually amended the
 414   commit instead, which has been corrected.
 415   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
 416
 417 * When fsmonitor is in use, after operation on submodules updates
 418   .gitmodules, we lost track of the fact that we did so and relied on
 419   stale fsmonitor data.
 420   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
 421
 422 * Fix for a long-standing bug that leaves the index file corrupt when
 423   it shrinks during a partial commit.
 424   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
 425
 426 * Further fix for O_APPEND emulation on Windows
 427   (merge eeaf7ddac7 js/mingw-o-append later to maint).
 428
 429 * A corner case bugfix in "git rerere" code.
 430   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
 431
 432 * "git add ':(attr:foo)'" is not supported and is supposed to be
 433   rejected while the command line arguments are parsed, but we fail
 434   to reject such a command line upfront.
 435   (merge 84d938b732 nd/attr-pathspec-fix later to maint).
 436
 437 * Recent update broke the reachability algorithm when refs (e.g.
 438   tags) that point at objects that are not commit were involved,
 439   which has been fixed.
 440
 441 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
 442   commit log message as result of editing, which has been corrected.
 443   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
 444
 445 * The code to backfill objects in lazily cloned repository did not
 446   work correctly, which has been corrected.
 447   (merge e68302011c jt/lazy-object-fetch-fix later to maint).
 448
 449 * Update error messages given by "git remote" and make them consistent.
 450   (merge 5025425dff ms/remote-error-message-update later to maint).
 451
 452 * "git update-ref" learned to make both "--no-deref" and "--stdin"
 453   work at the same time.
 454   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
 455
 456 * Recently added "range-diff" had a corner-case bug to cause it
 457   segfault, which has been corrected.
 458   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
 459
 460 * The recently introduced commit-graph auxiliary data is incompatible
 461   with mechanisms such as replace & grafts that "breaks" immutable
 462   nature of the object reference relationship.  Disable optimizations
 463   based on its use (and updating existing commit-graph) when these
 464   incompatible features are in use in the repository.
 465   (merge 829a321569 ds/commit-graph-with-grafts later to maint).
 466
 467 * The mailmap file update.
 468   (merge 255eb03edf jn/mailmap-update later to maint).
 469
 470 * The code in "git status" sometimes hit an assertion failure.  This
 471   was caused by a structure that was reused without cleaning the data
 472   used for the first run, which has been corrected.
 473   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
 474
 475 * "git fetch $repo $object" in a partial clone did not correctly
 476   fetch the asked-for object that is referenced by an object in
 477   promisor packfile, which has been fixed.
 478
 479 * A corner-case bugfix.
 480   (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
 481
 482 * Various fixes to "diff --color-moved-ws".
 483
 484 * A partial clone that is configured to lazily fetch missing objects
 485   will on-demand issue a "git fetch" request to the originating
 486   repository to fill not-yet-obtained objects.  The request has been
 487   optimized for requesting a tree object (and not the leaf blob
 488   objects contained in it) by telling the originating repository that
 489   no blobs are needed.
 490   (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
 491
 492 * The codepath to support the experimental split-index mode had
 493   remaining "racily clean" issues fixed.
 494   (merge 4c490f3d32 sg/split-index-racefix later to maint).
 495
 496 * "git log --graph" showing an octopus merge sometimes miscounted the
 497   number of display columns it is consuming to show the merge and its
 498   parent commits, which has been corrected.
 499   (merge 04005834ed np/log-graph-octopus-fix later to maint).
 500
 501 * "git range-diff" did not work well when the compared ranges had
 502   changes in submodules and the "--submodule=log" was used.
 503
 504 * The implementation of run_command() API on the UNIX platforms had a
 505   bug that caused a command not on $PATH to be found in the current
 506   directory.
 507   (merge f67b980771 jk/run-command-notdot later to maint).
 508
 509 * A mutex used in "git pack-objects" were not correctly initialized
 510   and this caused "git repack" to dump core on Windows.
 511   (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
 512
 513 * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
 514   Windows would strip initial parts from the paths because they
 515   were not recognized as absolute, which has been corrected.
 516   (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
 517
 518 * The receive.denyCurrentBranch=updateInstead codepath kicked in even
 519   when the push should have been rejected due to other reasons, such
 520   as it does not fast-forward or the update-hook rejects it, which
 521   has been corrected.
 522   (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
 523
 524 * The logic to determine the archive type "git archive" uses did not
 525   correctly kick in for "git archive --remote", which has been
 526   corrected.
 527
 528 * "git repack" in a shallow clone did not correctly update the
 529   shallow points in the repository, leading to a repository that
 530   does not pass fsck.
 531   (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint).
 532
 533 * Some codepaths failed to form a proper URL when .gitmodules record
 534   the URL to a submodule repository as relative to the repository of
 535   superproject, which has been corrected.
 536   (merge e0a862fdaf sb/submodule-url-to-absolute later to maint).
 537
 538 * "git fetch" over protocol v2 into a shallow repository failed to
 539   fetch full history behind a new tip of history that was diverged
 540   before the cut-off point of the history that was previously fetched
 541   shallowly.
 542
 543 * The command line completion machinery (in contrib/) has been
 544   updated to allow the completion script to tweak the list of options
 545   that are reported by the parse-options machinery correctly.
 546   (merge 276b49ff34 nd/completion-negation later to maint).
 547
 548 * Operations on promisor objects make sense in the context of only a
 549   small subset of the commands that internally use the revisions
 550   machinery, but the "--exclude-promisor-objects" option were taken
 551   and led to nonsense results by commands like "log", to which it
 552   didn't make much sense.  This has been corrected.
 553   (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint).
 554
 555 * A regression in Git 2.12 era made "git fsck" fall into an infinite
 556   loop while processing truncated loose objects.
 557   (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint).
 558
 559 * "git ls-remote $there foo" was broken by recent update for the
 560   protocol v2 and stopped showing refs that match 'foo' that are not
 561   refs/{heads,tags}/foo, which has been fixed.
 562   (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint).
 563
 564 * Additional comment on a tricky piece of code to help developers.
 565   (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint).
 566
 567 * A couple of tests used to leave the repository in a state that is
 568   deliberately corrupt, which have been corrected.
 569   (merge aa984dbe5e ab/pack-tests-cleanup later to maint).
 570
 571 * The submodule support has been updated to read from the blob at
 572   HEAD:.gitmodules when the .gitmodules file is missing from the
 573   working tree.
 574   (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint).
 575
 576 * "git fetch" was a bit loose in parsing responses from the other side
 577   when talking over the protocol v2.
 578
 579 * "git rev-parse --exclude=* --branches --branches"  (i.e. first
 580   saying "add only things that do not match '*' out of all branches"
 581   and then adding all branches, without any exclusion this time)
 582   worked as expected, but "--exclude=* --all --all" did not work the
 583   same way, which has been fixed.
 584   (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint).
 585
 586 * "git send-email --transfer-encoding=..." in recent versions of Git
 587   sometimes produced an empty "Content-Transfer-Encoding:" header,
 588   which has been corrected.
 589   (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint).
 590
 591 * The interface into "xdiff" library used to discover the offset and
 592   size of a generated patch hunk by first formatting it into the
 593   textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers
 594   out.  A new interface has been introduced to allow callers a more
 595   direct access to them.
 596   (merge 5eade0746e jk/xdiff-interface later to maint).
 597
 598 * Pathspec matching against a tree object were buggy when negative
 599   pathspec elements were involved, which has been fixed.
 600   (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint).
 601
 602 * "git merge" and "git pull" that merges into an unborn branch used
 603   to completely ignore "--verify-signatures", which has been
 604   corrected.
 605   (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint).
 606
 607 * "git rebase --autostash" did not correctly re-attach the HEAD at times.
 608
 609 * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not
 610   quite work, which has been corrected.
 611   (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint).
 612
 613 * When editing a patch in a "git add -i" session, a hunk could be
 614   made to no-op.  The "git apply" program used to reject a patch with
 615   such a no-op hunk to catch user mistakes, but it is now updated to
 616   explicitly allow a no-op hunk in an edited patch.
 617   (merge 22cb3835b9 js/apply-recount-allow-noop later to maint).
 618
 619 * The URL to an MSDN page in a comment has been updated.
 620   (merge 2ef2ae2917 js/mingw-msdn-url later to maint).
 621
 622 * "git ls-remote --sort=<thing>" can feed an object that is not yet
 623   available into the comparison machinery and segfault, which has
 624   been corrected to check such a request upfront and reject it.
 625
 626 * When "git bundle" aborts due to an empty commit ranges
 627   (i.e. resulting in an empty pack), it left a file descriptor to an
 628   lockfile open, which resulted in leftover lockfile on Windows where
 629   you cannot remove a file with an open file descriptor.  This has
 630   been corrected.
 631   (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint).
 632
 633 * "git format-patch --stat=<width>" can be used to specify the width
 634   used by the diffstat (shown in the cover letter).
 635   (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint).
 636
 637 * The way .git/index and .git/sharedindex* files were initially
 638   created gave these files different perm bits until they were
 639   adjusted for shared repository settings.  This was made consistent.
 640   (merge c9d6c78870 cc/shared-index-permbits later to maint).
 641
 642 * "git rebase --stat" to transplant a piece of history onto a totally
 643   unrelated history were not working before and silently showed wrong
 644   result.  With the recent reimplementation in C, it started to instead
 645   die with an error message, as the original logic was not prepared
 646   to cope with this case.  This has now been fixed.
 647
 648 * The advice message to tell the user to migrate an existing graft
 649   file to the replace system when a graft file was read was shown
 650   even when "git replace --convert-graft-file" command, which is the
 651   way the message suggests to use, was running, which made little
 652   sense.
 653   (merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint).
 654
 655 * "git diff --raw" lost ellipses to adjust the output columns for
 656   some time now, but the documentation still showed them.
 657
 658 * Code cleanup, docfix, build fix, etc.
 659   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
 660   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
 661   (merge fa0aeea770 sg/doc-trace-appends later to maint).
 662   (merge d64324cb60 tb/void-check-attr later to maint).
 663   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
 664   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
 665   (merge 801fa63a90 jk/dev-build-format-security later to maint).
 666   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
 667   (merge db2d36fad8 bw/protocol-v2 later to maint).
 668   (merge 456d7cd3a9 sg/split-index-test later to maint).
 669   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
 670   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
 671   (merge 55f6bce2c9 fe/doc-updates later to maint).
 672   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
 673   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
 674   (merge 4c399442f7 ma/commit-graph-docs later to maint).
 675   (merge fc0503b04e ma/t1400-undebug-test later to maint).
 676   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
 677   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
 678   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
 679   (merge ad0b8f9575 mw/doc-typofixes later to maint).
 680   (merge d9f079ad1a jc/how-to-document-api later to maint).
 681   (merge b1492bf315 ma/t7005-bash-workaround later to maint).
 682   (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
 683   (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
 684   (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
 685   (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
 686   (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
 687   (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
 688   (merge 2e3c894f4b tq/branch-style-fix later to maint).
 689   (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
 690   (merge 081d91618b ah/doc-updates later to maint).
 691   (merge b84c783882 jc/cocci-preincr later to maint).
 692   (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
 693   (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).
 694   (merge 3063477445 tb/char-may-be-unsigned later to maint).
 695   (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).
 696   (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint).
 697   (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint).
 698   (merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint).
 699   (merge 4c2eb06419 sg/daemon-test-signal-fix later to maint).
 700   (merge d27525e519 ss/msvc-strcasecmp later to maint).