Documentation / RelNotes / 2.20.0.txton commit Merge branch 'sg/doc-show-branch-typofix' (4b73fda)
   1Git 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
  27Updates since v2.19
  28-------------------
  29
  30UI, Workflows & Features
  31
  32 * Running "git clone" against a project that contain two files with
  33   pathnames that differ only in cases on a case insensitive
  34   filesystem would result in one of the files lost because the
  35   underlying filesystem is incapable of holding both at the same
  36   time.  An attempt is made to detect such a case and warn.
  37
  38 * "git checkout -b newbranch [HEAD]" should not have to do as much as
  39   checking out a commit different from HEAD.  An attempt is made to
  40   optimize this special case.
  41
  42 * "git rev-list --stdin </dev/null" used to be an error; it now shows
  43   no output without an error.  "git rev-list --stdin --default HEAD"
  44   still falls back to the given default when nothing is given on the
  45   standard input.
  46
  47 * Lift code from GitHub to restrict delta computation so that an
  48   object that exists in one fork is not made into a delta against
  49   another object that does not appear in the same forked repository.
  50
  51 * "git format-patch" learned new "--interdiff" and "--range-diff"
  52   options to explain the difference between this version and the
  53   previous attempt in the cover letter (or after the tree-dashes as
  54   a comment).
  55
  56 * "git mailinfo" used in "git am" learned to make a best-effort
  57   recovery of a patch corrupted by MUA that sends text/plain with
  58   format=flawed option.
  59   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
  60
  61 * The rules used by "git push" and "git fetch" to determine if a ref
  62   can or cannot be updated were inconsistent; specifically, fetching
  63   to update existing tags were allowed even though tags are supposed
  64   to be unmoving anchoring points.  "git fetch" was taught to forbid
  65   updates to existing tags without the "--force" option.
  66
  67 * "git multi-pack-index" learned to detect corruption in the .midx
  68   file it uses, and this feature has been integrated into "git fsck".
  69
  70 * Generation of (experimental) commit-graph files have so far been
  71   fairly silent, even though it takes noticeable amount of time in a
  72   meaningfully large repository.  The users will now see progress
  73   output.
  74
  75 * The minimum version of Windows supported by Windows port fo Git is
  76   now set to Vista.
  77
  78 * The completion script (in contrib/) learned to complete a handful of
  79   options "git stash list" command takes.
  80
  81 * The completion script (in contrib/) learned that "git fetch
  82   --multiple" only takes remote names as arguments and no refspecs.
  83
  84 * "git status" learns to show progress bar when refreshing the index
  85   takes a long time.
  86   (merge ae9af12287 nd/status-refresh-progress later to maint).
  87
  88 * "git help -a" and "git help -av" give different pieces of
  89   information, and generally the "verbose" version is more friendly
  90   to the new users.  "git help -a" by default now uses the more
  91   verbose output (with "--no-verbose", you can go back to the
  92   original).  Also "git help -av" now lists aliases and external
  93   commands, which it did not used to.
  94
  95 * Unlike "grep", "git grep" by default recurses to the whole tree.
  96   The command learned "git grep --recursive" option, so that "git
  97   grep --no-recursive" can serve as a synonym to setting the
  98   max-depth to 0.
  99
 100 * When pushing into a repository that borrows its objects from an
 101   alternate object store, "git receive-pack" that responds to the
 102   push request on the other side lists the tips of refs in the
 103   alternate to reduce the amount of objects transferred.  This
 104   sometimes is detrimental when the number of refs in the alternate
 105   is absurdly large, in which case the bandwidth saved in potentially
 106   fewer objects transferred is wasted in excessively large ref
 107   advertisement.  The alternate refs that are advertised are now
 108   configurable with a pair of configuration variables.
 109
 110 * "git cmd --help" when "cmd" is aliased used to only say "cmd is
 111   aliased to ...".  Now it shows that to the standard error stream
 112   and runs "git $cmd --help" where $cmd is the first word of the
 113   alias expansion.
 114
 115 * The documentation of "git gc" has been updated to mention that it
 116   is no longer limited to "pruning away crufts" but also updates
 117   ancillary files like commit-graph as a part of repository
 118   optimization.
 119
 120 * "git p4 unshelve" improvements.
 121
 122 * The logic to select the default user name and e-mail on Windows has
 123   been improved.
 124   (merge 501afcb8b0 js/mingw-default-ident later to maint).
 125
 126
 127Performance, Internal Implementation, Development Support etc.
 128
 129 * When there are too many packfiles in a repository (which is not
 130   recommended), looking up an object in these would require
 131   consulting many pack .idx files; a new mechanism to have a single
 132   file that consolidates all of these .idx files is introduced.
 133
 134 * "git submodule update" is getting rewritten piece-by-piece into C.
 135
 136 * The code for computing history reachability has been shuffled,
 137   obtained a bunch of new tests to cover them, and then being
 138   improved.
 139
 140 * The unpack_trees() API used in checking out a branch and merging
 141   walks one or more trees along with the index.  When the cache-tree
 142   in the index tells us that we are walking a tree whose flattened
 143   contents is known (i.e. matches a span in the index), as linearly
 144   scanning a span in the index is much more efficient than having to
 145   open tree objects recursively and listing their entries, the walk
 146   can be optimized, which has been done.
 147
 148 * When creating a thin pack, which allows objects to be made into a
 149   delta against another object that is not in the resulting pack but
 150   is known to be present on the receiving end, the code learned to
 151   take advantage of the reachability bitmap; this allows the server
 152   to send a delta against a base beyond the "boundary" commit.
 153
 154 * spatch transformation to replace boolean uses of !hashcmp() to
 155   newly introduced oideq() is added, and applied, to regain
 156   performance lost due to support of multiple hash algorithms.
 157
 158 * Fix a bug in which the same path could be registered under multiple
 159   worktree entries if the path was missing (for instance, was removed
 160   manually).  Also, as a convenience, expand the number of cases in
 161   which --force is applicable.
 162
 163 * Split Documentation/config.txt for easier maintenance.
 164   (merge 6014363f0b nd/config-split later to maint).
 165
 166 * Test helper binaries clean-up.
 167   (merge c9a1f4161f nd/test-tool later to maint).
 168
 169 * Various tests have been updated to make it easier to swap the
 170   hash function used for object identification.
 171   (merge ae0c89d41b bc/hash-independent-tests later to maint).
 172
 173 * Update fsck.skipList implementation and documentation.
 174   (merge 371a655074 ab/fsck-skiplist later to maint).
 175
 176 * An alias that expands to another alias has so far been forbidden,
 177   but now it is allowed to create such an alias.
 178
 179 * Various test scripts have been updated for style and also correct
 180   handling of exit status of various commands.
 181
 182 * "gc --auto" ended up calling exit(-1) upon error, which has been
 183   corrected to use exit(1).  Also the error reporting behaviour when
 184   daemonized has been updated to exit with zero status when stopping
 185   due to a previously discovered error (which implies there is no
 186   point running gc to improve the situation); we used to exit with
 187   failure in such a case.
 188
 189 * Various codepaths in the core-ish part learned to work on an
 190   arbitrary in-core index structure, not necessarily the default
 191   instance "the_index".
 192   (merge b3c7eef9b0 nd/the-index later to maint).
 193
 194 * Code clean-up in the internal machinery used by "git status" and
 195   "git commit --dry-run".
 196   (merge 73ba5d78b4 ss/wt-status-committable later to maint).
 197
 198 * Some environment variables that control the runtime options of Git
 199   used during tests are getting renamed for consistency.
 200   (merge 4231d1ba99 bp/rename-test-env-var later to maint).
 201
 202 * A new extension to the index file has been introduced, which allows
 203   the index file to be read in parallel for performance.
 204
 205 * The oidset API was built on top of the oidmap API which in turn is
 206   on the hashmap API.  Replace the implementation to build on top of
 207   the khash API and gain performance.
 208
 209 * Over some transports, fetching objects with an exact commit object
 210   name can be done without first seeing the ref advertisements.  The
 211   code has been optimized to exploit this.
 212
 213 * In a partial clone that will lazily be hydrated from the
 214   originating repository, we generally want to avoid "does this
 215   object exist (locally)?" on objects that we deliberately omitted
 216   when we created the clone.  The cache-tree codepath (which is used
 217   to write a tree object out of the index) however insisted that the
 218   object exists, even for paths that are outside of the partial
 219   checkout area.  The code has been updated to avoid such a check.
 220
 221 * To help developers, an EditorConfig file that attempts to follow
 222   the project convention has been added.
 223   (merge b548d698a0 bc/editorconfig later to maint).
 224
 225 * The result of coverage test can be combined with "git blame" to
 226   check the test coverage of code introduced recently with a new
 227   'coverage-diff' tool (in contrib/).
 228   (merge 783faedd65 ds/coverage-diff later to maint).
 229
 230 * An experiment to fuzz test a few areas, hopefully we can gain more
 231   coverage to various areas.
 232
 233
 234Fixes since v2.19
 235-----------------
 236
 237 * "git interpret-trailers" and its underlying machinery had a buggy
 238   code that attempted to ignore patch text after commit log message,
 239   which triggered in various codepaths that will always get the log
 240   message alone and never get such an input.
 241   (merge 66e83d9b41 jk/trailer-fixes later to maint).
 242
 243 * Malformed or crafted data in packstream can make our code attempt
 244   to read or write past the allocated buffer and abort, instead of
 245   reporting an error, which has been fixed.
 246
 247 * "git rebase -i" did not clear the state files correctly when a run
 248   of "squash/fixup" is aborted and then the user manually amended the
 249   commit instead, which has been corrected.
 250   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
 251
 252 * When fsmonitor is in use, after operation on submodules updates
 253   .gitmodules, we lost track of the fact that we did so and relied on
 254   stale fsmonitor data.
 255   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
 256
 257 * Fix for a long-standing bug that leaves the index file corrupt when
 258   it shrinks during a partial commit.
 259   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
 260
 261 * Further fix for O_APPEND emulation on Windows
 262   (merge eeaf7ddac7 js/mingw-o-append later to maint).
 263
 264 * A corner case bugfix in "git rerere" code.
 265   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
 266
 267 * "git add ':(attr:foo)'" is not supported and is supposed to be
 268   rejected while the command line arguments are parsed, but we fail
 269   to reject such a command line upfront.
 270   (merge 84d938b732 nd/attr-pathspec-fix later to maint).
 271
 272 * Recent update broke the reachability algorithm when refs (e.g.
 273   tags) that point at objects that are not commit were involved,
 274   which has been fixed.
 275
 276 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
 277   commit log message as result of editing, which has been corrected.
 278   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
 279
 280 * The code to backfill objects in lazily cloned repository did not
 281   work correctly, which has been corrected.
 282   (merge e68302011c jt/lazy-object-fetch-fix later to maint).
 283
 284 * Update error messages given by "git remote" and make them consistent.
 285   (merge 5025425dff ms/remote-error-message-update later to maint).
 286
 287 * "git update-ref" learned to make both "--no-deref" and "--stdin"
 288   work at the same time.
 289   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
 290
 291 * Recently added "range-diff" had a corner-case bug to cause it
 292   segfault, which has been corrected.
 293   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
 294
 295 * The recently introduced commit-graph auxiliary data is incompatible
 296   with mechanisms such as replace & grafts that "breaks" immutable
 297   nature of the object reference relationship.  Disable optimizations
 298   based on its use (and updating existing commit-graph) when these
 299   incompatible features are in use in the repository.
 300   (merge 829a321569 ds/commit-graph-with-grafts later to maint).
 301
 302 * The mailmap file update.
 303   (merge 255eb03edf jn/mailmap-update later to maint).
 304
 305 * The code in "git status" sometimes hit an assertion failure.  This
 306   was caused by a structure that was reused without cleaning the data
 307   used for the first run, which has been corrected.
 308   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
 309
 310 * "git fetch $repo $object" in a partial clone did not correctly
 311   fetch the asked-for object that is referenced by an object in
 312   promisor packfile, which has been fixed.
 313
 314 * A corner-case bugfix.
 315   (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
 316
 317 * Various fixes to "diff --color-moved-ws".
 318
 319 * A partial clone that is configured to lazily fetch missing objects
 320   will on-demand issue a "git fetch" request to the originating
 321   repository to fill not-yet-obtained objects.  The request has been
 322   optimized for requesting a tree object (and not the leaf blob
 323   objects contained in it) by telling the originating repository that
 324   no blobs are needed.
 325   (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
 326
 327 * The codepath to support the experimental split-index mode had
 328   remaining "racily clean" issues fixed.
 329   (merge 4c490f3d32 sg/split-index-racefix later to maint).
 330
 331 * "git log --graph" showing an octopus merge sometimes miscounted the
 332   number of display columns it is consuming to show the merge and its
 333   parent commits, which has been corrected.
 334   (merge 04005834ed np/log-graph-octopus-fix later to maint).
 335
 336 * Code cleanup, docfix, build fix, etc.
 337   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
 338   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
 339   (merge fa0aeea770 sg/doc-trace-appends later to maint).
 340   (merge d64324cb60 tb/void-check-attr later to maint).
 341   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
 342   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
 343   (merge 801fa63a90 jk/dev-build-format-security later to maint).
 344   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
 345   (merge db2d36fad8 bw/protocol-v2 later to maint).
 346   (merge 456d7cd3a9 sg/split-index-test later to maint).
 347   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
 348   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
 349   (merge 55f6bce2c9 fe/doc-updates later to maint).
 350   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
 351   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
 352   (merge 4c399442f7 ma/commit-graph-docs later to maint).
 353   (merge fc0503b04e ma/t1400-undebug-test later to maint).
 354   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
 355   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
 356   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
 357   (merge ad0b8f9575 mw/doc-typofixes later to maint).
 358   (merge d9f079ad1a jc/how-to-document-api later to maint).
 359   (merge b1492bf315 ma/t7005-bash-workaround later to maint).
 360   (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
 361   (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
 362   (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
 363   (merge 61018fe9e0 du/cherry-is-plumbing later to maint).