Documentation / RelNotes / 2.20.0.txton commit Merge branch 'jt/avoid-ls-refs' (0527fba)
   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
  18Updates since v2.19
  19-------------------
  20
  21UI, Workflows & Features
  22
  23 * Running "git clone" against a project that contain two files with
  24   pathnames that differ only in cases on a case insensitive
  25   filesystem would result in one of the files lost because the
  26   underlying filesystem is incapable of holding both at the same
  27   time.  An attempt is made to detect such a case and warn.
  28
  29 * "git checkout -b newbranch [HEAD]" should not have to do as much as
  30   checking out a commit different from HEAD.  An attempt is made to
  31   optimize this special case.
  32
  33 * "git rev-list --stdin </dev/null" used to be an error; it now shows
  34   no output without an error.  "git rev-list --stdin --default HEAD"
  35   still falls back to the given default when nothing is given on the
  36   standard input.
  37
  38 * Lift code from GitHub to restrict delta computation so that an
  39   object that exists in one fork is not made into a delta against
  40   another object that does not appear in the same forked repository.
  41
  42 * "git format-patch" learned new "--interdiff" and "--range-diff"
  43   options to explain the difference between this version and the
  44   previous attempt in the cover letter (or after the tree-dashes as
  45   a comment).
  46
  47 * "git mailinfo" used in "git am" learned to make a best-effort
  48   recovery of a patch corrupted by MUA that sends text/plain with
  49   format=flawed option.
  50   (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
  51
  52 * The rules used by "git push" and "git fetch" to determine if a ref
  53   can or cannot be updated were inconsistent; specifically, fetching
  54   to update existing tags were allowed even though tags are supposed
  55   to be unmoving anchoring points.  "git fetch" was taught to forbid
  56   updates to existing tags without the "--force" option.
  57
  58 * "git multi-pack-index" learned to detect corruption in the .midx
  59   file it uses, and this feature has been integrated into "git fsck".
  60
  61 * Generation of (experimental) commit-graph files have so far been
  62   fairly silent, even though it takes noticeable amount of time in a
  63   meaningfully large repository.  The users will now see progress
  64   output.
  65
  66 * The minimum version of Windows supported by Windows port fo Git is
  67   now set to Vista.
  68
  69 * The completion script (in contrib/) learned to complete a handful of
  70   options "git stash list" command takes.
  71
  72
  73Performance, Internal Implementation, Development Support etc.
  74
  75 * When there are too many packfiles in a repository (which is not
  76   recommended), looking up an object in these would require
  77   consulting many pack .idx files; a new mechanism to have a single
  78   file that consolidates all of these .idx files is introduced.
  79
  80 * "git submodule update" is getting rewritten piece-by-piece into C.
  81
  82 * The code for computing history reachability has been shuffled,
  83   obtained a bunch of new tests to cover them, and then being
  84   improved.
  85
  86 * The unpack_trees() API used in checking out a branch and merging
  87   walks one or more trees along with the index.  When the cache-tree
  88   in the index tells us that we are walking a tree whose flattened
  89   contents is known (i.e. matches a span in the index), as linearly
  90   scanning a span in the index is much more efficient than having to
  91   open tree objects recursively and listing their entries, the walk
  92   can be optimized, which has been done.
  93
  94 * When creating a thin pack, which allows objects to be made into a
  95   delta against another object that is not in the resulting pack but
  96   is known to be present on the receiving end, the code learned to
  97   take advantage of the reachability bitmap; this allows the server
  98   to send a delta against a base beyond the "boundary" commit.
  99
 100 * spatch transformation to replace boolean uses of !hashcmp() to
 101   newly introduced oideq() is added, and applied, to regain
 102   performance lost due to support of multiple hash algorithms.
 103
 104 * Fix a bug in which the same path could be registered under multiple
 105   worktree entries if the path was missing (for instance, was removed
 106   manually).  Also, as a convenience, expand the number of cases in
 107   which --force is applicable.
 108
 109 * Split Documentation/config.txt for easier maintenance.
 110   (merge 6014363f0b nd/config-split later to maint).
 111
 112 * Test helper binaries clean-up.
 113   (merge c9a1f4161f nd/test-tool later to maint).
 114
 115 * Various tests have been updated to make it easier to swap the
 116   hash function used for object identification.
 117   (merge ae0c89d41b bc/hash-independent-tests later to maint).
 118
 119 * Update fsck.skipList implementation and documentation.
 120   (merge 371a655074 ab/fsck-skiplist later to maint).
 121
 122 * An alias that expands to another alias has so far been forbidden,
 123   but now it is allowed to create such an alias.
 124
 125 * Various test scripts have been updated for style and also correct
 126   handling of exit status of various commands.
 127
 128 * "gc --auto" ended up calling exit(-1) upon error, which has been
 129   corrected to use exit(1).  Also the error reporting behaviour when
 130   daemonized has been updated to exit with zero status when stopping
 131   due to a previously discovered error (which implies there is no
 132   point running gc to improve the situation); we used to exit with
 133   failure in such a case.
 134
 135
 136Fixes since v2.19
 137-----------------
 138
 139 * "git interpret-trailers" and its underlying machinery had a buggy
 140   code that attempted to ignore patch text after commit log message,
 141   which triggered in various codepaths that will always get the log
 142   message alone and never get such an input.
 143   (merge 66e83d9b41 jk/trailer-fixes later to maint).
 144
 145 * Malformed or crafted data in packstream can make our code attempt
 146   to read or write past the allocated buffer and abort, instead of
 147   reporting an error, which has been fixed.
 148
 149 * "git rebase -i" did not clear the state files correctly when a run
 150   of "squash/fixup" is aborted and then the user manually amended the
 151   commit instead, which has been corrected.
 152   (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
 153
 154 * When fsmonitor is in use, after operation on submodules updates
 155   .gitmodules, we lost track of the fact that we did so and relied on
 156   stale fsmonitor data.
 157   (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
 158
 159 * Fix for a long-standing bug that leaves the index file corrupt when
 160   it shrinks during a partial commit.
 161   (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
 162
 163 * Further fix for O_APPEND emulation on Windows
 164   (merge eeaf7ddac7 js/mingw-o-append later to maint).
 165
 166 * A corner case bugfix in "git rerere" code.
 167   (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
 168
 169 * "git add ':(attr:foo)'" is not supported and is supposed to be
 170   rejected while the command line arguments are parsed, but we fail
 171   to reject such a command line upfront.
 172   (merge 84d938b732 nd/attr-pathspec-fix later to maint).
 173
 174 * Recent update broke the reachability algorithm when refs (e.g.
 175   tags) that point at objects that are not commit were involved,
 176   which has been fixed.
 177
 178 * "git rebase" etc. in Git 2.19 fails to abort when given an empty
 179   commit log message as result of editing, which has been corrected.
 180   (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
 181
 182 * The code to backfill objects in lazily cloned repository did not
 183   work correctly, which has been corrected.
 184   (merge e68302011c jt/lazy-object-fetch-fix later to maint).
 185
 186 * Update error messages given by "git remote" and make them consistent.
 187   (merge 5025425dff ms/remote-error-message-update later to maint).
 188
 189 * "git update-ref" learned to make both "--no-deref" and "--stdin"
 190   work at the same time.
 191   (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
 192
 193 * Recently added "range-diff" had a corner-case bug to cause it
 194   segfault, which has been corrected.
 195   (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
 196
 197 * The recently introduced commit-graph auxiliary data is incompatible
 198   with mechanisms such as replace & grafts that "breaks" immutable
 199   nature of the object reference relationship.  Disable optimizations
 200   based on its use (and updating existing commit-graph) when these
 201   incompatible features are in use in the repository.
 202   (merge 829a321569 ds/commit-graph-with-grafts later to maint).
 203
 204 * The mailmap file update.
 205   (merge 255eb03edf jn/mailmap-update later to maint).
 206
 207 * The code in "git status" sometimes hit an assertion failure.  This
 208   was caused by a structure that was reused without cleaning the data
 209   used for the first run, which has been corrected.
 210   (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
 211
 212 * Code cleanup, docfix, build fix, etc.
 213   (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
 214   (merge b9b07efdb2 tg/conflict-marker-size later to maint).
 215   (merge fa0aeea770 sg/doc-trace-appends later to maint).
 216   (merge d64324cb60 tb/void-check-attr later to maint).
 217   (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
 218   (merge 79336116f5 sg/t3701-tighten-trace later to maint).
 219   (merge 801fa63a90 jk/dev-build-format-security later to maint).
 220   (merge 0597dd62ba sb/string-list-remove-unused later to maint).
 221   (merge db2d36fad8 bw/protocol-v2 later to maint).
 222   (merge 456d7cd3a9 sg/split-index-test later to maint).
 223   (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
 224   (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
 225   (merge 55f6bce2c9 fe/doc-updates later to maint).
 226   (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
 227   (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
 228   (merge 4c399442f7 ma/commit-graph-docs later to maint).
 229   (merge fc0503b04e ma/t1400-undebug-test later to maint).
 230   (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
 231   (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
 232   (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
 233   (merge ad0b8f9575 mw/doc-typofixes later to maint).