Documentation / RelNotes / 2.18.0.txton commit Merge branch 'cc/tests-without-assuming-ref-files-backend' (d6e5484)
   1Git 2.18 Release Notes
   2======================
   3
   4Updates since v2.17
   5-------------------
   6
   7UI, Workflows & Features
   8
   9 * Rename detection logic in "diff" family that is used in "merge" has
  10   learned to guess when all of x/a, x/b and x/c have moved to z/a,
  11   z/b and z/c, it is likely that x/d added in the meantime would also
  12   want to move to z/d by taking the hint that the entire directory
  13   'x' moved to 'z'.  A bug causing dirty files involved in a rename
  14   to be overwritten during merge has also been fixed as part of this
  15   work.  Incidentally, this also avoids updating a file in the
  16   working tree after a (non-trivial) merge whose result matches what
  17   our side originally had.
  18
  19 * "git filter-branch" learned to use a different exit code to allow
  20   the callers to tell the case where there was no new commits to
  21   rewrite from other error cases.
  22
  23 * When built with more recent cURL, GIT_SSL_VERSION can now specify
  24   "tlsv1.3" as its value.
  25
  26 * "git gui" learned that "~/.ssh/id_ecdsa.pub" and
  27   "~/.ssh/id_ed25519.pub" are also possible SSH key files.
  28   (merge 2e2f0288ef bb/git-gui-ssh-key-files later to maint).
  29
  30 * "git gui" performs commit upon CTRL/CMD+ENTER but the
  31   CTRL/CMD+KP_ENTER (i.e. enter key on the numpad) did not have the
  32   same key binding.  It now does.
  33   (merge 28a1d94a06 bp/git-gui-bind-kp-enter later to maint).
  34
  35 * "git gui" has been taught to work with old versions of tk (like
  36   8.5.7) that do not support "ttk::style theme use" as a way to query
  37   the current theme.
  38   (merge 4891961105 cb/git-gui-ttk-style later to maint).
  39
  40 * "git rebase" has learned to honor "--signoff" option when using
  41   backends other than "am" (but not "--preserve-merges").
  42
  43 * "git branch --list" during an interrupted "rebase -i" now lets
  44   users distinguish the case where a detached HEAD is being rebased
  45   and a normal branch is being rebased.
  46
  47 * "git mergetools" learned talking to guiffy.
  48
  49 * The scripts in contrib/emacs/ have outlived their usefulness and
  50   have been replaced with a stub that errors out and tells the user
  51   there are replacements.
  52
  53 * The new "checkout-encoding" attribute can ask Git to convert the
  54   contents to the specified encoding when checking out to the working
  55   tree (and the other way around when checking in).
  56
  57 * The "git config" command uses separate options e.g. "--int",
  58   "--bool", etc. to specify what type the caller wants the value to
  59   be interpreted as.  A new "--type=<typename>" option has been
  60   introduced, which would make it cleaner to define new types.
  61
  62 * "git config --get" learned the "--default" option, to help the
  63   calling script.  Building on top of the above changes, the
  64   "git config" learns "--type=color" type.  Taken together, you can
  65   do things like "git config --get foo.color --default blue" and get
  66   the ANSI color sequence for the color given to foo.color variable,
  67   or "blue" if the variable does not exist.
  68
  69 * "git ls-remote" learned an option to allow sorting its output based
  70   on the refnames being shown.
  71
  72 * The command line completion (in contrib/) has been taught that "git
  73   stash save" has been deprecated ("git stash push" is the preferred
  74   spelling in the new world) and does not offer it as a possible
  75   completion candidate when "git stash push" can be.
  76
  77 * "git gc --prune=nonsense" spent long time repacking and then
  78   silently failed when underlying "git prune --expire=nonsense"
  79   failed to parse its command line.  This has been corrected.
  80
  81 * Error messages from "git push" can be painted for more visibility.
  82
  83 * "git http-fetch" (deprecated) had an optional and experimental
  84   "feature" to fetch only commits and/or trees, which nobody used.
  85   This has been removed.
  86
  87 * The functionality of "$GIT_DIR/info/grafts" has been superseded by
  88   the "refs/replace/" mechanism for some time now, but the internal
  89   code had support for it in many places, which has been cleaned up
  90   in order to drop support of the "grafts" mechanism.
  91
  92 * "git worktree add" learned to check out an existing branch.
  93
  94 * "git --no-pager cmd" did not have short-and-sweet single letter
  95   option. Now it does as "-P".
  96   (merge 7213c28818 js/no-pager-shorthand later to maint).
  97
  98 * "git rebase" learned "--rebase-merges" to transplant the whole
  99   topology of commit graph elsewhere.
 100
 101 * "git status" learned to pay attention to UI related diff
 102   configuration variables such as diff.renames.
 103
 104 * The command line completion mechanism (in contrib/) learned to load
 105   custom completion file for "git $command" where $command is a
 106   custom "git-$command" that the end user has on the $PATH when using
 107   newer version of bash.
 108
 109 * "git send-email" can sometimes offer confirmation dialog "Send this
 110   email?" with choices 'Yes', 'No', 'Quit', and 'All'.  A new action
 111   'Edit' has been added to this dialog's choice.
 112
 113 * With merge.renames configuration set to false, the recursive merge
 114   strategy can be told not to spend cycles trying to find renamed
 115   paths and merge them accordingly.
 116
 117 * "git status" learned to honor a new status.renames configuration to
 118   skip rename detection, which could be useful for those who want to
 119   do so without disabling the default rename detection done by the
 120   "git diff" command.
 121
 122 * Command line completion (in contrib/) learned to complete pathnames
 123   for various commands better.
 124
 125 * "git blame" learns to unhighlight uninteresting metadata from the
 126   originating commit on lines that are the same as the previous one,
 127   and also paint lines in different colors depending on the age of
 128   the commit.
 129
 130 * Transfer protocol v2 learned to support the partial clone.
 131
 132 * When a short hexadecimal string is used to name an object but there
 133   are multiple objects that share the string as the prefix of their
 134   names, the code lists these ambiguous candidates in a help message.
 135   These object names are now sorted according to their types for
 136   easier eyeballing.
 137
 138 * "git fetch $there $refspec" that talks over protocol v2 can take
 139   advantage of server-side ref filtering; the code has been extended
 140   so that this mechanism triggers also when fetching with configured
 141   refspec.
 142
 143 * Our HTTP client code used to advertise that we accept gzip encoding
 144   from the other side; instead, just let cURL library to advertise
 145   and negotiate the best one.
 146
 147
 148Performance, Internal Implementation, Development Support etc.
 149
 150 * A "git fetch" from a repository with insane number of refs into a
 151   repository that is already up-to-date still wasted too many cycles
 152   making many lstat(2) calls to see if these objects at the tips
 153   exist as loose objects locally.  These lstat(2) calls are optimized
 154   away by enumerating all loose objects beforehand.
 155   It is unknown if the new strategy negatively affects existing use
 156   cases, fetching into a repository with many loose objects from a
 157   repository with small number of refs.
 158
 159 * Git can be built to use either v1 or v2 of the PCRE library, and so
 160   far, the build-time configuration USE_LIBPCRE=YesPlease instructed
 161   the build procedure to use v1, but now it means v2.  USE_LIBPCRE1
 162   and USE_LIBPCRE2 can be used to explicitly choose which version to
 163   use, as before.
 164
 165 * The build procedure learned to optionally use symbolic links
 166   (instead of hardlinks and copies) to install "git-foo" for built-in
 167   commands, whose binaries are all identical.
 168
 169 * Conversion from uchar[20] to struct object_id continues.
 170
 171 * The way "git worktree prune" worked internally has been simplified,
 172   by assuming how "git worktree move" moves an existing worktree to a
 173   different place.
 174
 175 * Code clean-up for the "repository" abstraction.
 176   (merge 00a3da2a13 nd/remove-ignore-env-field later to maint).
 177
 178 * Code to find the length to uniquely abbreviate object names based
 179   on packfile content, which is a relatively recent addtion, has been
 180   optimized to use the same fan-out table.
 181
 182 * The mechanism to use parse-options API to automate the command line
 183   completion continues to get extended and polished.
 184
 185 * Copies of old scripted Porcelain commands in contrib/examples/ have
 186   been removed.
 187
 188 * Some tests that rely on the exact hardcoded values of object names
 189   have been updated in preparation for hash function migration.
 190
 191 * Perf-test update.
 192
 193 * Test helper update.
 194
 195 * The effort continues to refactor the internal global data structure
 196   to make it possible to open multiple repositories, work with and
 197   then close them,
 198
 199 * Small test-helper programs have been consolidated into a single
 200   binary.
 201
 202 * API clean-up around ref-filter code.
 203
 204 * Shell completion (in contrib) that gives list of paths have been
 205   optimized somewhat.
 206
 207 * The index file is updated to record the fsmonitor section after a
 208   full scan was made, to avoid wasting the effort that has already
 209   spent.
 210
 211 * Performance measuring framework in t/perf learned to help bisecting
 212   performance regressions.
 213
 214 * Some multi-word source filenames are being renamed to separate
 215   words with dashes instead of underscores.
 216
 217 * An reusable "memory pool" implementation has been extracted from
 218   fast-import.c, which in turn has become the first user of the
 219   mem-pool API.
 220
 221 * A build-time option has been added to allow Git to be told to refer
 222   to its associated files relative to the main binary, in the same
 223   way that has been possible on Windows for quite some time, for
 224   Linux, BSDs and Darwin.
 225
 226 * Precompute and store information necessary for ancestry traversal
 227   in a separate file to optimize graph walking.
 228
 229 * The effort to pass the repository in-core structure throughout the
 230   API continues.  This round deals with the code that implements the
 231   refs/replace/ mechanism.
 232
 233 * The build procedure "make DEVELOPER=YesPlease" learned to enable a
 234   bit more warning options depending on the compiler used to help
 235   developers more.  There also is "make DEVOPTS=tokens" knob
 236   available now, for those who want to help fixing warnings we
 237   usually ignore, for example.
 238
 239 * A new version of the transport protocol is being worked on.
 240
 241 * The code to interface to GPG has been restructured somewhat to make
 242   it cleaner to integrate with other types of signature systems later.
 243
 244 * The code has been taught to use the duplicated information stored
 245   in the commit-graph file to learn the tree object name for a commit
 246   to avoid opening and parsing the commit object when it makes sense
 247   to do so.
 248
 249 * "git gc" in a large repository takes a lot of time as it considers
 250   to repack all objects into one pack by default.  The command has
 251   been taught to pretend as if the largest existing packfile is
 252   marked with ".keep" so that it is left untouched while objects in
 253   other packs and loose ones are repacked.
 254
 255 * The transport protocol v2 is getting updated further.
 256
 257 * The codepath around object-info API has been taught to take the
 258   repository object (which in turn tells the API which object store
 259   the objects are to be located).
 260
 261 * "git pack-objects" needs to allocate tons of "struct object_entry"
 262   while doing its work, and shrinking its size helps the performance
 263   quite a bit.
 264
 265 * The implementation of "git rebase -i --root" has been updated to use
 266   the sequencer machinery more.
 267
 268 * Developer support update, by using BUG() macro instead of die() to
 269   mark codepaths that should not happen more clearly.
 270
 271 * Developer support.  Use newer GCC on one of the builds done at
 272   TravisCI.org to get more warnings and errors diagnosed.
 273
 274 * Conversion from uchar[20] to struct object_id continues.
 275
 276 * By code restructuring of submodule merge in merge-recursive,
 277   informational messages from the codepath are now given using the
 278   same mechanism as other output, and honor the merge.verbosity
 279   configuration.  The code also learned to give a few new messages
 280   when a submodule three-way merge resolves cleanly when one side
 281   records a descendant of the commit chosen by the other side.
 282
 283 * Avoid unchecked snprintf() to make future code auditing easier.
 284   (merge ac4896f007 jk/snprintf-truncation later to maint).
 285
 286 * Many tests hardcode the raw object names, which would change once
 287   we migrate away from SHA-1.  While some of them must test against
 288   exact object names, most of them do not have to use hardcoded
 289   constants in the test.  The latter kind of tests have been updated
 290   to test the moral equivalent of the original without hardcoding the
 291   actual object names.
 292
 293
 294Also contains various documentation updates and code clean-ups.
 295
 296
 297Fixes since v2.17
 298-----------------
 299
 300 * "git shortlog cruft" aborted with a BUG message when run outside a
 301   Git repository.  The command has been taught to complain about
 302   extra and unwanted arguments on its command line instead in such a
 303   case.
 304   (merge 4aa0161e83 ma/shortlog-revparse later to maint).
 305
 306 * "git stash push -u -- <pathspec>" gave an unnecessary and confusing
 307   error message when there was no tracked files that match the
 308   <pathspec>, which has been fixed.
 309   (merge 353278687e tg/stash-untracked-with-pathspec-fix later to maint).
 310
 311 * "git tag --contains no-such-commit" gave a full list of options
 312   after giving an error message.
 313   (merge 3bb0923f06 ps/contains-id-error-message later to maint).
 314
 315 * "diff-highlight" filter (in contrib/) learned to undertand "git log
 316   --graph" output better.
 317   (merge 4551fbba14 jk/diff-highlight-graph-fix later to maint).
 318
 319 * when refs that do not point at committish are given, "git
 320   filter-branch" gave a misleading error messages.  This has been
 321   corrected.
 322   (merge f78ab355e7 yk/filter-branch-non-committish-refs later to maint).
 323
 324 * "git submodule status" misbehaved on a submodule that has been
 325   removed from the working tree.
 326   (merge 74b6bda32f rs/status-with-removed-submodule later to maint).
 327
 328 * When credential helper exits very quickly without reading its
 329   input, it used to cause Git to die with SIGPIPE, which has been
 330   fixed.
 331   (merge a0d51e8d0e eb/cred-helper-ignore-sigpipe later to maint).
 332
 333 * "git rebase --keep-empty" still removed an empty commit if the
 334   other side contained an empty commit (due to the "does an
 335   equivalent patch exist already?" check), which has been corrected.
 336   (merge 3d946165e1 pw/rebase-keep-empty-fixes later to maint).
 337
 338 * Some codepaths, including the refs API, get and keep relative
 339   paths, that go out of sync when the process does chdir(2).  The
 340   chdir-notify API is introduced to let these codepaths adjust these
 341   cached paths to the new current directory.
 342   (merge fb9c2d2703 jk/relative-directory-fix later to maint).
 343
 344 * "cd sub/dir && git commit ../path" ought to record the changes to
 345   the file "sub/path", but this regressed long time ago.
 346   (merge 86238e07ef bw/commit-partial-from-subdirectory-fix later to maint).
 347
 348 * Recent introduction of "--log-destination" option to "git daemon"
 349   did not work well when the daemon was run under "--inetd" mode.
 350   (merge e67d906d73 lw/daemon-log-destination later to maint).
 351
 352 * Small fix to the autoconf build procedure.
 353   (merge 249482daf0 es/fread-reads-dir-autoconf-fix later to maint).
 354
 355 * Fix an unexploitable (because the oversized contents are not under
 356   attacker's control) buffer overflow.
 357   (merge d8579accfa bp/fsmonitor-bufsize-fix later to maint).
 358
 359 * Recent simplification of build procedure forgot a bit of tweak to
 360   the build procedure of contrib/mw-to-git/
 361   (merge d8698987f3 ab/simplify-perl-makefile later to maint).
 362
 363 * Moving a submodule that itself has submodule in it with "git mv"
 364   forgot to make necessary adjustment to the nested sub-submodules;
 365   now the codepath learned to recurse into the submodules.
 366
 367 * "git config --unset a.b", when "a.b" is the last variable in an
 368   otherwise empty section "a", left an empty section "a" behind, and
 369   worse yet, a subsequent "git config a.c value" did not reuse that
 370   empty shell and instead created a new one.  These have been
 371   (partially) corrected.
 372   (merge c71d8bb38a js/empty-config-section-fix later to maint).
 373
 374 * "git worktree remove" learned that "-f" is a shorthand for
 375   "--force" option, just like for "git worktree add".
 376   (merge d228eea514 sb/worktree-remove-opt-force later to maint).
 377
 378 * The completion script (in contrib/) learned to clear cached list of
 379   command line options upon dot-sourcing it again in a more efficient
 380   way.
 381   (merge 94408dc71c sg/completion-clear-cached later to maint).
 382
 383 * "git svn" had a minor thinko/typo which has been fixed.
 384   (merge 51db271587 ab/git-svn-get-record-typofix later to maint).
 385
 386 * During a "rebase -i" session, the code could give older timestamp
 387   to commits created by later "pick" than an earlier "reword", which
 388   has been corrected.
 389   (merge 12f7babd6b js/ident-date-fix later to maint).
 390
 391 * "git submodule status" did not check the symbolic revision name it
 392   computed for the submodule HEAD is not the NULL, and threw it at
 393   printf routines, which has been corrected.
 394   (merge 0b5e2ea7cf nd/submodule-status-fix later to maint).
 395
 396 * When fed input that already has In-Reply-To: and/or References:
 397   headers and told to add the same information, "git send-email"
 398   added these headers separately, instead of appending to an existing
 399   one, which is a violation of the RFC.  This has been corrected.
 400   (merge 256be1d3f0 sa/send-email-dedup-some-headers later to maint).
 401
 402 * "git fast-export" had a regression in v2.15.0 era where it skipped
 403   some merge commits in certain cases, which has been corrected.
 404   (merge be011bbe00 ma/fast-export-skip-merge-fix later to maint).
 405
 406 * The code did not propagate the terminal width to subprocesses via
 407   COLUMNS environment variable, which it now does.  This caused
 408   trouble to "git column" helper subprocess when "git tag --column=row"
 409   tried to list the existing tags on a display with non-default width.
 410   (merge b5d5a567fb nd/term-columns later to maint).
 411
 412 * We learned that our source files with ".pl" and ".py" extensions
 413   are Perl and Python files respectively and changes to them are
 414   better viewed as such with appropriate diff drivers.
 415   (merge 7818b619e2 ab/perl-python-attrs later to maint).
 416
 417 * "git rebase -i" sometimes left intermediate "# This is a
 418   combination of N commits" message meant for the human consumption
 419   inside an editor in the final result in certain corner cases, which
 420   has been fixed.
 421   (merge 15ef69314d js/rebase-i-clean-msg-after-fixup-continue later to maint).
 422
 423 * A test to see if the filesystem normalizes UTF-8 filename has been
 424   updated to check what we need to know in a more direct way, i.e. a
 425   path created in NFC form can be accessed with NFD form (or vice
 426   versa) to cope with APFS as well as HFS.
 427   (merge 742ae10e35 tb/test-apfs-utf8-normalization later to maint).
 428
 429 * "git format-patch --cover --attach" created a broken MIME multipart
 430   message for the cover letter, which has been fixed by keeping the
 431   cover letter as plain text file.
 432   (merge 50cd54ef4e bc/format-patch-cover-no-attach later to maint).
 433
 434 * The split-index feature had a long-standing and dormant bug in
 435   certain use of the in-core merge machinery, which has been fixed.
 436   (merge 7db118303a en/unpack-trees-split-index-fix later to maint).
 437
 438 * Asciidoctor gives a reasonable imitation for AsciiDoc, but does not
 439   render illustration in a literal block correctly when indented with
 440   HT by default. The problem is fixed by forcing 8-space tabs.
 441   (merge 379805051d bc/asciidoctor-tab-width later to maint).
 442
 443 * Code clean-up to adjust to a more recent lockfile API convention that
 444   allows lockfile instances kept on the stack.
 445   (merge 0fa5a2ed8d ma/lockfile-cleanup later to maint).
 446
 447 * the_repository->index is not a allocated piece of memory but
 448   repo_clear() indiscriminately attempted to free(3) it, which has
 449   been corrected.
 450   (merge 74373b5f10 nd/repo-clear-keep-the-index later to maint).
 451
 452 * Code clean-up to avoid non-standard-conformant pointer arithmetic.
 453   (merge c112084af9 rs/no-null-ptr-arith-in-fast-export later to maint).
 454
 455 * Code clean-up to turn history traversal more robust in a
 456   semi-corrupt repository.
 457   (merge 8702b30fd7 jk/unavailable-can-be-missing later to maint).
 458
 459 * "git update-ref A B" is supposed to ensure that ref A does not yet
 460   exist when B is a NULL OID, but this check was not done correctly
 461   for pseudo-refs outside refs/ hierarchy, e.g. MERGE_HEAD.
 462
 463 * "git submodule update" and "git submodule add" supported the
 464   "--reference" option to borrow objects from a neighbouring local
 465   repository like "git clone" does, but lacked the more recent
 466   invention "--dissociate".  Also "git submodule add" has been taught
 467   to take the "--progress" option.
 468   (merge a0ef29341a cf/submodule-progress-dissociate later to maint).
 469
 470 * Update credential-netrc helper (in contrib/) to allow customizing
 471   the GPG used to decrypt the encrypted .netrc file.
 472   (merge 786ef50a23 lm/credential-netrc later to maint).
 473
 474 * "git submodule update" attempts two different kinds of "git fetch"
 475   against the upstream repository to grab a commit bound at the
 476   submodule's path, but it incorrectly gave up if the first kind
 477   (i.e. a normal fetch) failed, making the second "last resort" one
 478   (i.e. fetching an exact commit object by object name) ineffective.
 479   This has been corrected.
 480   (merge e30d833671 sb/submodule-update-try-harder later to maint).
 481
 482 * Error behaviour of "git grep" when it cannot read the index was
 483   inconsistent with other commands that uses the index, which has
 484   been corrected to error out early.
 485   (merge b2aa84c789 sb/grep-die-on-unreadable-index later to maint).
 486
 487 * We used to call regfree() after regcomp() failed in some codepaths,
 488   which have been corrected.
 489   (merge 17154b1576 ma/regex-no-regfree-after-comp-fail later to maint).
 490
 491 * Other minor doc, test and build updates and code cleanups.
 492   (merge 248f66ed8e nd/trace-with-env later to maint).
 493   (merge 14ced5562c ys/bisect-object-id-missing-conversion-fix later to maint).
 494   (merge 5988eb631a ab/doc-hash-brokenness later to maint).
 495   (merge a4d4e32a70 pk/test-avoid-pipe-hiding-exit-status later to maint).
 496   (merge 05e293c1ac jk/flockfile-stdio later to maint).
 497   (merge e9184b0789 jk/t5561-missing-curl later to maint).
 498   (merge b1801b85a3 nd/worktree-move later to maint).
 499   (merge bbd374dd20 ak/bisect-doc-typofix later to maint).
 500   (merge 4855f06fb3 mn/send-email-credential-doc later to maint).
 501   (merge 8523b1e355 en/doc-typoes later to maint).
 502   (merge 43b44ccfe7 js/t5404-path-fix later to maint).
 503   (merge decf711fc1 ps/test-chmtime-get later to maint).
 504   (merge 22d11a6e8e es/worktree-docs later to maint).
 505   (merge 92a5dbbc22 tg/use-git-contacts later to maint).
 506   (merge adc887221f tq/t1510 later to maint).
 507   (merge bed21a8ad6 sg/doc-gc-quote-mismatch-fix later to maint).
 508   (merge 73364e4f10 tz/doc-git-urls-reference later to maint).
 509   (merge cd1e606bad bc/mailmap-self later to maint).
 510   (merge f7997e3682 ao/config-api-doc later to maint).
 511   (merge ee930754d8 jk/apply-p-doc later to maint).
 512   (merge 011b648646 nd/pack-format-doc later to maint).
 513   (merge 87a6bb701a sg/t5310-jgit-bitmap-test later to maint).
 514   (merge f6b82970aa sg/t5516-fixes later to maint).
 515   (merge 4362da078e sg/t7005-spaces-in-filenames-cleanup later to maint).
 516   (merge 7d0ee47c11 js/test-unset-prereq later to maint).
 517   (merge 5356a3c354 ah/misc-doc-updates later to maint).
 518   (merge 92c4a7a129 nd/completion-aliasfiletype-typofix later to maint).
 519   (merge 58bd77b66a nd/pack-unreachable-objects-doc later to maint).
 520   (merge 4ed79d5203 sg/t6500-no-redirect-of-stdin later to maint).
 521   (merge 17b8a2d6cd jk/config-blob-sans-repo later to maint).