Documentation / RelNotes / 2.19.0.txton commit Merge branch 'ab/sha1dc' (d1b0164)
   1Git 2.19 Release Notes
   2======================
   3
   4Updates since v2.18
   5-------------------
   6
   7UI, Workflows & Features
   8
   9 * "git diff" compares the index and the working tree.  For paths
  10   added with intent-to-add bit, the command shows the full contents
  11   of them as added, but the paths themselves were not marked as new
  12   files.  They are now shown as new by default.
  13
  14   "git apply" learned the "--intent-to-add" option so that an
  15   otherwise working-tree-only application of a patch will add new
  16   paths to the index marked with the "intent-to-add" bit.
  17
  18 * "git grep" learned the "--column" option that gives not just the
  19   line number but the column number of the hit.
  20
  21 * The "-l" option in "git branch -l" is an unfortunate short-hand for
  22   "--create-reflog", but many users, both old and new, somehow expect
  23   it to be something else, perhaps "--list".  This step warns when "-l"
  24   is used as a short-hand for "--create-reflog" and warns about the
  25   future repurposing of the it when it is used.
  26
  27 * The userdiff pattern for .php has been updated.
  28
  29 * The content-transfer-encoding of the message "git send-email" sends
  30   out by default was 8bit, which can cause trouble when there is an
  31   overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
  32   automatically switch to quoted-printable when there is such a line
  33   in the payload has been introduced and is made the default.
  34
  35 * "git checkout" and "git worktree add" learned to honor
  36   checkout.defaultRemote when auto-vivifying a local branch out of a
  37   remote tracking branch in a repository with multiple remotes that
  38   have tracking branches that share the same names.
  39   (merge 8d7b558bae ab/checkout-default-remote later to maint).
  40
  41 * "git grep" learned the "--only-matching" option.
  42
  43 * "git rebase --rebase-merges" mode now handles octopus merges as
  44   well.
  45
  46 * Add a server-side knob to skip commits in exponential/fibbonacci
  47   stride in an attempt to cover wider swath of history with a smaller
  48   number of iterations, potentially accepting a larger packfile
  49   transfer, instead of going back one commit a time during common
  50   ancestor discovery during the "git fetch" transaction.
  51   (merge 42cc7485a2 jt/fetch-negotiator-skipping later to maint).
  52
  53 * A new configuration variable core.usereplacerefs has been added,
  54   primarily to help server installations that want to ignore the
  55   replace mechanism altogether.
  56
  57 * Teach "git tag -s" etc. a few configuration variables (gpg.format
  58   that can be set to "openpgp" or "x509", and gpg.<format>.program
  59   that is used to specify what program to use to deal with the format)
  60   to allow x.509 certs with CMS via "gpgsm" to be used instead of
  61   openpgp via "gnupg".
  62
  63 * Many more strings are prepared for l10n.
  64
  65 * "git p4 submit" learns to ask its own pre-submit hook if it should
  66   continue with submitting.
  67
  68
  69Performance, Internal Implementation, Development Support etc.
  70
  71 * The bulk of "git submodule foreach" has been rewritten in C.
  72
  73 * The in-core "commit" object had an all-purpose "void *util" field,
  74   which was tricky to use especially in library-ish part of the
  75   code.  All of the existing uses of the field has been migrated to a
  76   more dedicated "commit-slab" mechanism and the field is eliminated.
  77
  78 * A less often used command "git show-index" has been modernized.
  79   (merge fb3010c31f jk/show-index later to maint).
  80
  81 * The conversion to pass "the_repository" and then "a_repository"
  82   throughout the object access API continues.
  83
  84 * Continuing with the idea to programatically enumerate various
  85   pieces of data required for command line completion, teach the
  86   codebase to report the list of configuration variables
  87   subcommands care about to help complete them.
  88
  89 * Separate "rebase -p" codepath out of "rebase -i" implementation to
  90   slim down the latter and make it easier to manage.
  91
  92 * Make refspec parsing codepath more robust.
  93
  94 * Some flaky tests have been fixed.
  95
  96 * Continuing with the idea to programmatically enumerate various
  97   pieces of data required for command line completion, the codebase
  98   has been taught to enumerate options prefixed with "--no-" to
  99   negate them.
 100
 101 * Build and test procedure for netrc credential helper (in contrib/)
 102   has been updated.
 103
 104 * The conversion to pass "the_repository" and then "a_repository"
 105   throughout the object access API continues.
 106
 107 * Remove unused function definitions and declarations from ewah
 108   bitmap subsystem.
 109
 110 * Code preparation to make "git p4" closer to be usable with Python 3.
 111
 112 * Tighten the API to make it harder to misuse in-tree .gitmodules
 113   file, even though it shares the same syntax with configuration
 114   files, to read random configuration items from it.
 115
 116 * "git fast-import" has been updated to avoid attempting to create
 117   delta against a zero-byte-long string, which is pointless.
 118
 119 * The codebase has been updated to compile cleanly with -pedantic
 120   option.
 121   (merge 2b647a05d7 bb/pedantic later to maint).
 122
 123 * The character display width table has been updated to match the
 124   latest Unicode standard.
 125   (merge 570951eea2 bb/unicode-11-width later to maint).
 126
 127 * test-lint now looks for broken use of "VAR=VAL shell_func" in test
 128   scripts.
 129
 130 * Conversion from uchar[40] to struct object_id continues.
 131
 132 * Recent "security fix" to pay attention to contents of ".gitmodules"
 133   while accepting "git push" was a bit overly strict than necessary,
 134   which has been adjusted.
 135
 136 * "git fsck" learns to make sure the optional commit-graph file is in
 137   a sane state.
 138
 139 * "git diff --color-moved" feature has further been tweaked.
 140
 141 * Code restructuring and a small fix to transport protocol v2 during
 142   fetching.
 143
 144 * Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
 145   take has been tweaked.
 146
 147 * lookup_commit_reference() and friends have been updated to find
 148   in-core object for a specific in-core repository instance.
 149
 150 * Various glitches in the heuristics of merge-recursive strategy have
 151   been documented in new tests.
 152
 153 * "git fetch" learned a new option "--negotiation-tip" to limit the
 154   set of commits it tells the other end as "have", to reduce wasted
 155   bandwidth and cycles, which would be helpful when the receiving
 156   repository has a lot of refs that have little to do with the
 157   history at the remote it is fetching from.
 158
 159 * For a large tree, the index needs to hold many cache entries
 160   allocated on heap.  These cache entries are now allocated out of a
 161   dedicated memory pool to amortize malloc(3) overhead.
 162
 163 * Tests to cover various conflicting cases have been added for
 164   merge-recursive.
 165
 166 * Tests to cover conflict cases that involve submodules have been
 167   added for merge-recursive.
 168
 169 * Look for broken "&&" chains that are hidden in subshell, many of
 170   which have been found and corrected.
 171
 172 * The singleton commit-graph in-core instance is made per in-core
 173   repository instance.
 174
 175 * "make DEVELOPER=1 DEVOPTS=pedantic" allows developers to compile
 176   with -pedantic option, which may catch more problematic program
 177   constructs and potential bugs.
 178
 179 * Preparatory code to later add json output for telemetry data has
 180   been added.
 181
 182 * Update the way we use Coccinelle to find out-of-style code that
 183   need to be modernised.
 184
 185 * It is too easy to misuse system API functions such as strcat();
 186   these selected functions are now forbidden in this codebase and
 187   will cause a compilation failure.
 188
 189 * Add a script (in contrib/) to help users of VSCode work better with
 190   our codebase.
 191
 192 * The Travis CI scripts were taught to ship back the test data from
 193   failed tests.
 194   (merge aea8879a6a sg/travis-retrieve-trash-upon-failure later to maint).
 195
 196
 197Fixes since v2.18
 198-----------------
 199
 200 * "git remote update" can take both a single remote nickname and a
 201   nickname for remote groups, and the completion script (in contrib/)
 202   has been taught about it.
 203   (merge 9cd4382ad5 ls/complete-remote-update-names later to maint).
 204
 205 * "git fetch --shallow-since=<cutoff>" that specifies the cut-off
 206   point that is newer than the existing history used to end up
 207   grabbing the entire history.  Such a request now errors out.
 208   (merge e34de73c56 nd/reject-empty-shallow-request later to maint).
 209
 210 * Fix for 2.17-era regression around `core.safecrlf`.
 211   (merge 6cb09125be as/safecrlf-quiet-fix later to maint).
 212
 213 * The recent addition of "partial clone" experimental feature kicked
 214   in when it shouldn't, namely, when there is no partial-clone filter
 215   defined even if extensions.partialclone is set.
 216   (merge cac1137dc4 jh/partial-clone later to maint).
 217
 218 * "git send-pack --signed" (hence "git push --signed" over the http
 219   transport) did not read user ident from the config mechanism to
 220   determine whom to sign the push certificate as, which has been
 221   corrected.
 222   (merge d067d98887 ms/send-pack-honor-config later to maint).
 223
 224 * "git fetch-pack --all" used to unnecessarily fail upon seeing an
 225   annotated tag that points at an object other than a commit.
 226   (merge c12c9df527 jk/fetch-all-peeled-fix later to maint).
 227
 228 * When user edits the patch in "git add -p" and the user's editor is
 229   set to strip trailing whitespaces indiscriminately, an empty line
 230   that is unchanged in the patch would become completely empty
 231   (instead of a line with a sole SP on it).  The code introduced in
 232   Git 2.17 timeframe failed to parse such a patch, but now it learned
 233   to notice the situation and cope with it.
 234   (merge f4d35a6b49 pw/add-p-recount later to maint).
 235
 236 * The code to try seeing if a fetch is necessary in a submodule
 237   during a fetch with --recurse-submodules got confused when the path
 238   to the submodule was changed in the range of commits in the
 239   superproject, sometimes showing "(null)".  This has been corrected.
 240
 241 * "git submodule" did not correctly adjust core.worktree setting that
 242   indicates whether/where a submodule repository has its associated
 243   working tree across various state transitions, which has been
 244   corrected.
 245   (merge 984cd77ddb sb/submodule-core-worktree later to maint).
 246
 247 * Bugfix for "rebase -i" corner case regression.
 248   (merge a9279c6785 pw/rebase-i-keep-reword-after-conflict later to maint).
 249
 250 * Recently added "--base" option to "git format-patch" command did
 251   not correctly generate prereq patch ids.
 252   (merge 15b76c1fb3 xy/format-patch-prereq-patch-id-fix later to maint).
 253
 254 * POSIX portability fix in Makefile to fix a glitch introduced a few
 255   releases ago.
 256   (merge 6600054e9b dj/runtime-prefix later to maint).
 257
 258 * "git filter-branch" when used with the "--state-branch" option
 259   still attempted to rewrite the commits whose filtered result is
 260   known from the previous attempt (which is recorded on the state
 261   branch); the command has been corrected not to waste cycles doing
 262   so.
 263   (merge 709cfe848a mb/filter-branch-optim later to maint).
 264
 265 * Clarify that setting core.ignoreCase to deviate from reality would
 266   not turn a case-incapable filesystem into a case-capable one.
 267   (merge 48294b512a ms/core-icase-doc later to maint).
 268
 269 * "fsck.skipList" did not prevent a blob object listed there from
 270   being inspected for is contents (e.g. we recently started to
 271   inspect the contents of ".gitmodules" for certain malicious
 272   patterns), which has been corrected.
 273   (merge fb16287719 rj/submodule-fsck-skip later to maint).
 274
 275 * "git checkout --recurse-submodules another-branch" did not report
 276   in which submodule it failed to update the working tree, which
 277   resulted in an unhelpful error message.
 278   (merge ba95d4e4bd sb/submodule-move-head-error-msg later to maint).
 279
 280 * "git rebase" behaved slightly differently depending on which one of
 281   the three backends gets used; this has been documented and an
 282   effort to make them more uniform has begun.
 283   (merge b00bf1c9a8 en/rebase-consistency later to maint).
 284
 285 * The "--ignore-case" option of "git for-each-ref" (and its friends)
 286   did not work correctly, which has been fixed.
 287   (merge e674eb2528 jk/for-each-ref-icase later to maint).
 288
 289 * "git fetch" failed to correctly validate the set of objects it
 290   received when making a shallow history deeper, which has been
 291   corrected.
 292   (merge cf1e7c0770 jt/connectivity-check-after-unshallow later to maint).
 293
 294 * Partial clone support of "git clone" has been updated to correctly
 295   validate the objects it receives from the other side.  The server
 296   side has been corrected to send objects that are directly
 297   requested, even if they may match the filtering criteria (e.g. when
 298   doing a "lazy blob" partial clone).
 299   (merge a7e67c11b8 jt/partial-clone-fsck-connectivity later to maint).
 300
 301 * Handling of an empty range by "git cherry-pick" was inconsistent
 302   depending on how the range ended up to be empty, which has been
 303   corrected.
 304   (merge c5e358d073 jk/empty-pick-fix later to maint).
 305
 306 * "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
 307   had trouble working correctly in a sparsely checked out working
 308   tree after a conflict, which has been corrected.
 309   (merge b33fdfc34c mk/merge-in-sparse-checkout later to maint).
 310
 311 * Correct a broken use of "VAR=VAL shell_func" in a test.
 312   (merge 650161a277 jc/t3404-one-shot-export-fix later to maint).
 313
 314 * "git rev-parse ':/substring'" did not consider the history leading
 315   only to HEAD when looking for a commit with the given substring,
 316   when the HEAD is detached.  This has been fixed.
 317   (merge 6b3351e799 wc/find-commit-with-pattern-on-detached-head later to maint).
 318
 319 * Build doc update for Windows.
 320   (merge ede8d89bb1 nd/command-list later to maint).
 321
 322 * core.commentchar is now honored when preparing the list of commits
 323   to replay in "rebase -i".
 324
 325 * "git pull --rebase" on a corrupt HEAD caused a segfault.  In
 326   general we substitute an empty tree object when running the in-core
 327   equivalent of the diff-index command, and the codepath has been
 328   corrected to do so as well to fix this issue.
 329   (merge 3506dc9445 jk/has-uncommitted-changes-fix later to maint).
 330
 331 * httpd tests saw occasional breakage due to the way its access log
 332   gets inspected by the tests, which has been updated to make them
 333   less flaky.
 334   (merge e8b3b2e275 sg/httpd-test-unflake later to maint).
 335
 336 * Tests to cover more D/F conflict cases have been added for
 337   merge-recursive.
 338
 339 * "git gc --auto" opens file descriptors for the packfiles before
 340   spawning "git repack/prune", which would upset Windows that does
 341   not want a process to work on a file that is open by another
 342   process.  The issue has been worked around.
 343   (merge 12e73a3ce4 kg/gc-auto-windows-workaround later to maint).
 344
 345 * The recursive merge strategy did not properly ensure there was no
 346   change between HEAD and the index before performing its operation,
 347   which has been corrected.
 348   (merge 55f39cf755 en/dirty-merge-fixes later to maint).
 349
 350 * "git rebase" started exporting GIT_DIR environment variable and
 351   exposing it to hook scripts when part of it got rewritten in C.
 352   Instead of matching the old scripted Porcelains' behaviour,
 353   compensate by also exporting GIT_WORK_TREE environment as well to
 354   lessen the damage.  This can harm existing hooks that want to
 355   operate on different repository, but the current behaviour is
 356   already broken for them anyway.
 357   (merge ab5e67d751 bc/sequencer-export-work-tree-as-well later to maint).
 358
 359 * "git send-email" when using in a batched mode that limits the
 360   number of messages sent in a single SMTP session lost the contents
 361   of the variable used to choose between tls/ssl, unable to send the
 362   second and later batches, which has been fixed.
 363   (merge 636f3d7ac5 jm/send-email-tls-auth-on-batch later to maint).
 364
 365 * The lazy clone support had a few places where missing but promised
 366   objects were not correctly tolerated, which have been fixed.
 367
 368 * One of the "diff --color-moved" mode "dimmed_zebra" that was named
 369   in an unusual way has been deprecated and replaced by
 370   "dimmed-zebra".
 371   (merge e3f2f5f9cd es/diff-color-moved-fix later to maint).
 372
 373 * The wire-protocol v2 relies on the client to send "ref prefixes" to
 374   limit the bandwidth spent on the initial ref advertisement.  "git
 375   clone" when learned to speak v2 forgot to do so, which has been
 376   corrected.
 377   (merge 402c47d939 bw/clone-ref-prefixes later to maint).
 378
 379 * "git diff --histogram" had a bad memory usage pattern, which has
 380   been rearranged to reduce the peak usage.
 381   (merge 79cb2ebb92 sb/histogram-less-memory later to maint).
 382
 383 * Code clean-up to use size_t/ssize_t when they are the right type.
 384   (merge 7726d360b5 jk/size-t later to maint).
 385
 386 * The wire-protocol v2 relies on the client to send "ref prefixes" to
 387   limit the bandwidth spent on the initial ref advertisement.  "git
 388   fetch $remote branch:branch" that asks tags that point into the
 389   history leading to the "branch" automatically followed sent to
 390   narrow prefix and broke the tag following, which has been fixed.
 391   (merge 2b554353a5 jt/tag-following-with-proto-v2-fix later to maint).
 392
 393 * When the sparse checkout feature is in use, "git cherry-pick" and
 394   other mergy operations lost the skip_worktree bit when a path that
 395   is excluded from checkout requires content level merge, which is
 396   resolved as the same as the HEAD version, without materializing the
 397   merge result in the working tree, which made the path appear as
 398   deleted.  This has been corrected by preserving the skip_worktree
 399   bit (and not materializing the file in the working tree).
 400   (merge 2b75fb601c en/merge-recursive-skip-fix later to maint).
 401
 402 * Code cleanup, docfix, build fix, etc.
 403   (merge aee9be2ebe sg/update-ref-stdin-cleanup later to maint).
 404   (merge 037714252f jc/clean-after-sanity-tests later to maint).
 405   (merge 5b26c3c941 en/merge-recursive-cleanup later to maint).
 406   (merge 0dcbc0392e bw/config-refer-to-gitsubmodules-doc later to maint).
 407   (merge bb4d000e87 bw/protocol-v2 later to maint).
 408   (merge 928f0ab4ba vs/typofixes later to maint).
 409   (merge d7f590be84 en/rebase-i-microfixes later to maint).
 410   (merge 81d395cc85 js/rebase-recreate-merge later to maint).
 411   (merge 51d1863168 tz/exclude-doc-smallfixes later to maint).
 412   (merge a9aa3c0927 ds/commit-graph later to maint).
 413   (merge 5cf8e06474 js/enhanced-version-info later to maint).
 414   (merge 6aaded5509 tb/config-default later to maint).
 415   (merge 022d2ac1f3 sb/blame-color later to maint).
 416   (merge 5a06a20e0c bp/test-drop-caches-for-windows later to maint).
 417   (merge dd61cc1c2e jk/ui-color-always-to-auto later to maint).
 418   (merge 1e83b9bfdd sb/trailers-docfix later to maint).
 419   (merge ab29f1b329 sg/fast-import-dump-refs-on-checkpoint-fix later to maint).
 420   (merge 6a8ad880f0 jn/subtree-test-fixes later to maint).
 421   (merge ffbd51cc60 nd/pack-objects-threading-doc later to maint).
 422   (merge e9dac7be60 es/mw-to-git-chain-fix later to maint).
 423   (merge fe583c6c7a rs/remote-mv-leakfix later to maint).