f7fca7123f5d3f71d2da5f6fbdeb5f05997a7403
   1Git 2.16 Release Notes
   2======================
   3
   4Backward compatibility notes and other notable changes.
   5
   6 * Use of an empty string as a pathspec element that is used for
   7   'everything matches' is now an error.
   8
   9
  10Updates since v2.15
  11-------------------
  12
  13UI, Workflows & Features
  14
  15 * An empty string as a pathspec element that means "everything"
  16   i.e. 'git add ""', is now illegal.  We started this by first
  17   deprecating and warning a pathspec that has such an element in
  18   2.11 (Nov 2016).
  19
  20 * A hook script that is set unexecutable is simply ignored.  Git
  21   notifies when such a file is ignored, unless the message is
  22   squelched via advice.ignoredHook configuration.
  23
  24 * "git pull" has been taught to accept "--[no-]signoff" option and
  25   pass it down to "git merge".
  26
  27 * The "--push-option=<string>" option to "git push" now defaults to a
  28   list of strings configured via push.pushOption variable.
  29
  30 * "gitweb" checks if a directory is searchable with Perl's "-x"
  31   operator, which can be enhanced by using "filetest 'access'"
  32   pragma, which now we do.
  33
  34 * "git stash save" has been deprecated in favour of "git stash push".
  35
  36 * The set of paths output from "git status --ignored" was tied
  37   closely with its "--untracked=<mode>" option, but now it can be
  38   controlled more flexibly.  Most notably, a directory that is
  39   ignored because it is listed to be ignored in the ignore/exclude
  40   mechanism can be handled differently from a directory that ends up
  41   to be ignored only because all files in it are ignored.
  42
  43 * The remote-helper for talking to MediaWiki has been updated to
  44   truncate an overlong pagename so that ".mw" suffix can still be
  45   added.
  46
  47 * The remote-helper for talking to MediaWiki has been updated to
  48   work with mediawiki namespaces.
  49
  50 * The "--format=..." option "git for-each-ref" takes learned to show
  51   the name of the 'remote' repository and the ref at the remote side
  52   that is affected for 'upstream' and 'push' via "%(push:remotename)"
  53   and friends.
  54
  55 * Doc and message updates to teach users "bisect view" is a synonym
  56   for "bisect visualize".
  57
  58 * "git bisect run" that did not specify any command to run used to go
  59   ahead and treated all commits to be tested as 'good'.  This has
  60   been corrected by making the command error out.
  61
  62 * The SubmittingPatches document has been converted to produce an
  63   HTML version via AsciiDoc/Asciidoctor.
  64
  65 * We learned to talk to watchman to speed up "git status" and other
  66   operations that need to see which paths have been modified.
  67
  68 * The "diff" family of commands learned to ignore differences in
  69   carriage return at the end of line.
  70
  71 * Places that know about "sendemail.to", like documentation and shell
  72   completion (in contrib/) have been taught about "sendemail.tocmd",
  73   too.
  74
  75 * "git add --renormalize ." is a new and safer way to record the fact
  76   that you are correcting the end-of-line convention and other
  77   "convert_to_git()" glitches in the in-repository data.
  78
  79 * "git branch" and "git checkout -b" are now forbidden from creating
  80   a branch whose name is "HEAD".
  81
  82 * "git branch --list" learned to show its output through the pager by
  83   default when the output is going to a terminal, which is controlled
  84   by the pager.branch configuration variable.  This is similar to a
  85   recent change to "git tag --list".
  86
  87 * "git grep -W", "git diff -W" and their friends learned a heuristic
  88   to extend a pre-context beyond the line that matches the "function
  89   pattern" (aka "diff.*.xfuncname") to include a comment block, if
  90   exists, that immediately precedes it.
  91
  92 * "git config --expiry-date gc.reflogexpire" can read "2.weeks" from
  93   the configuration and report it as a timestamp, just like "--int"
  94   would read "1k" and report 1024, to help consumption by scripts.
  95
  96 * The shell completion (in contrib/) learned that "git pull" can take
  97   the "--autostash" option.
  98
  99 * The tagnames "git log --decorate" uses to annotate the commits can
 100   now be limited to subset of available refs with the two additional
 101   options, --decorate-refs[-exclude]=<pattern>.
 102
 103 * "git grep" compiled with libpcre2 sometimes triggered a segfault,
 104   which is being fixed.
 105
 106 * "git send-email" tries to see if the sendmail program is available
 107   in /usr/lib and /usr/sbin; extend the list of locations to be
 108   checked to also include directories on $PATH.
 109
 110
 111Performance, Internal Implementation, Development Support etc.
 112
 113 * An earlier update made it possible to use an on-stack in-core
 114   lockfile structure (as opposed to having to deliberately leak an
 115   on-heap one).  Many codepaths have been updated to take advantage
 116   of this new facility.
 117
 118 * Calling cmd_foo() as if it is a general purpose helper function is
 119   a no-no.  Correct two instances of such to set an example.
 120
 121 * We try to see if somebody runs our test suite with a shell that
 122   does not support "local" like bash/dash does.
 123
 124 * An early part of piece-by-piece rewrite of "git bisect" in C.
 125
 126 * GSoC to piece-by-piece rewrite "git submodule" in C.
 127
 128 * Optimize the code to find shortest unique prefix of object names.
 129
 130 * Pathspec-limited revision traversal was taught not to keep finding
 131   unneeded differences once it knows two trees are different inside
 132   given pathspec.
 133
 134 * Conversion from uchar[20] to struct object_id continues.
 135
 136 * Code cleanup.
 137
 138 * A single-word "unsigned flags" in the diff options is being split
 139   into a structure with many bitfields.
 140
 141 * TravisCI build updates.
 142
 143 * Parts of a test to drive the long-running content filter interface
 144   has been split into its own module, hopefully to eventually become
 145   reusable.
 146
 147 * Drop (perhaps overly cautious) sanity check before using the index
 148   read from the filesystem at runtime.
 149
 150 * The build procedure has been taught to avoid some unnecessary
 151   instability in the build products.
 152
 153 * A new mechanism to upgrade the wire protocol in place is proposed
 154   and demonstrated that it works with the older versions of Git
 155   without harming them.
 156
 157 * An infrastructure to define what hash function is used in Git is
 158   introduced, and an effort to plumb that throughout various
 159   codepaths has been started.
 160
 161 * The code to iterate over loose object files got optimized.
 162
 163 * An internal function that was left for backward compatibility has
 164   been removed, as there is no remaining callers.
 165
 166Also contains various documentation updates and code clean-ups.
 167
 168
 169Fixes since v2.15
 170-----------------
 171
 172 * "auto" as a value for the columnar output configuration ought to
 173   judge "is the output consumed by humans?" with the same criteria as
 174   "auto" for coloured output configuration, i.e. either the standard
 175   output stream is going to tty, or a pager is in use.  We forgot the
 176   latter, which has been fixed.
 177
 178 * The experimental "color moved lines differently in diff output"
 179   feature was buggy around "ignore whitespace changes" edges, which
 180   has been corrected.
 181
 182 * Instead of using custom line comparison and hashing functions to
 183   implement "moved lines" coloring in the diff output, use the pair
 184   of these functions from lower-layer xdiff/ code.
 185
 186 * Some codepaths did not check for errors when asking what branch the
 187   HEAD points at, which have been fixed.
 188
 189 * "git commit", after making a commit, did not check for errors when
 190   asking on what branch it made the commit, which has been corrected.
 191
 192 * "git status --ignored -u" did not stop at a working tree of a
 193   separate project that is embedded in an ignored directory and
 194   listed files in that other project, instead of just showing the
 195   directory itself as ignored.
 196
 197 * A broken access to object databases in recent update to "git grep
 198   --recurse-submodules" has been fixed.
 199
 200 * A recent regression in "git rebase -i" that broke execution of git
 201   commands from subdirectories via "exec" instruction has been fixed.
 202
 203 * A (possibly flakey) test fix.
 204
 205 * "git check-ref-format --branch @{-1}" bit a "BUG()" when run
 206   outside a repository for obvious reasons; clarify the documentation
 207   and make sure we do not even try to expand the at-mark magic in
 208   such a case, but still call the validation logic for branch names.
 209
 210 * "git fetch --recurse-submodules" now knows that submodules can be
 211   moved around in the superproject in addition to getting updated,
 212   and finds the ones that need to be fetched accordingly.
 213
 214 * Command line completion (in contrib/) update.
 215
 216 * Description of blame.{showroot,blankboundary,showemail,date}
 217   configuration variables have been added to "git config --help".
 218
 219 * After an error from lstat(), diff_populate_filespec() function
 220   sometimes still went ahead and used invalid data in struct stat,
 221   which has been fixed.
 222
 223 * UNC paths are also relevant in Cygwin builds and they are now
 224   tested just like Mingw builds.
 225
 226 * Correct start-up sequence so that a repository could be placed
 227   immediately under the root directory again (which was broken at
 228   around Git 2.13).
 229
 230 * The credential helper for libsecret (in contrib/) has been improved
 231   to allow possibly prompting the end user to unlock secrets that are
 232   currently locked (otherwise the secrets may not be loaded).
 233
 234 * MinGW updates.
 235
 236 * Error checking in "git imap-send" for empty response has been
 237   improved.
 238
 239 * Recent update to the refs infrastructure implementation started
 240   rewriting packed-refs file more often than before; this has been
 241   optimized again for most trivial cases.
 242
 243 * Some error messages did not quote filenames shown in it, which have
 244   been fixed.
 245
 246 * "git rebase -i" recently started misbehaving when a submodule that
 247   is configured with 'submodule.<name>.ignore' is dirty; this has
 248   been corrected.
 249
 250 * Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.
 251
 252 * We used to add an empty alternate object database to the system
 253   that does not help anything; it has been corrected.
 254
 255 * Doc update around use of "format-patch --subject-prefix" etc.
 256
 257 * A fix for an ancient bug in "git apply --ignore-space-change" codepath.
 258
 259 * Clarify and enhance documentation for "merge-base --fork-point", as
 260   it was clear what it computed but not why/what for.
 261
 262 * A few scripts (both in production and tests) incorrectly redirected
 263   their error output.  These have been corrected.
 264
 265 * "git notes" sent its error message to its standard output stream,
 266   which was corrected.
 267
 268 * The three-way merge performed by "git cherry-pick" was confused
 269   when a new submodule was added in the meantime, which has been
 270   fixed (or "papered over").
 271
 272 * The sequencer machinery (used by "git cherry-pick A..B", and "git
 273   rebase -i", among other things) would have lost a commit if stopped
 274   due to an unlockable index file, which has been fixed.
 275
 276 * "git apply --inaccurate-eof" when used with "--ignore-space-change"
 277   triggered an internal sanity check, which has been fixed.
 278
 279 * Command line completion (in contrib/) has been taught about the
 280   "--copy" option of "git branch".
 281
 282 * When "git rebase" prepared an mailbox of changes and fed it to "git
 283   am" to replay them, it was confused when a stray "From " happened
 284   to be in the log message of one of the replayed changes.  This has
 285   been corrected.
 286
 287 * There was a recent semantic mismerge in the codepath to write out a
 288   section of a configuration section, which has been corrected.
 289
 290 * Mentions of "git-rebase" and "git-am" (dashed form) still remained
 291   in end-user visible strings emitted by the "git rebase" command;
 292   they have been corrected.
 293
 294 * Contrary to the documentation, "git pull -4/-6 other-args" did not
 295   ask the underlying "git fetch" to go over IPv4/IPv6, which has been
 296   corrected.
 297
 298 * "git checkout --recursive" may overwrite and rewind the history of
 299   the branch that happens to be checked out in submodule
 300   repositories, which might not be desirable.  Detach the HEAD but
 301   still allow the recursive checkout to succeed in such a case.
 302   (merge 57f22bf997 sb/submodule-recursive-checkout-detach-head later to maint).
 303
 304 * "git branch --set-upstream" has been deprecated and (sort of)
 305   removed, as "--set-upstream-to" is the preferred one these days.
 306   The documentation still had "--set-upstream" listed on its
 307   synopsis section, which has been corrected.
 308   (merge a060f3d3d8 tz/branch-doc-remove-set-upstream later to maint).
 309
 310 * Internally we use 0{40} as a placeholder object name to signal the
 311   codepath that there is no such object (e.g. the fast-forward check
 312   while "git fetch" stores a new remote-tracking ref says "we know
 313   there is no 'old' thing pointed at by the ref, as we are creating
 314   it anew" by passing 0{40} for the 'old' side), and expect that a
 315   codepath to locate an in-core object to return NULL as a sign that
 316   the object does not exist.  A look-up for an object that does not
 317   exist however is quite costly with a repository with large number
 318   of packfiles.  This access pattern has been optimized.
 319   (merge 87b5e236a1 jk/fewer-pack-rescan later to maint).
 320
 321 * In addition to "git stash -m message", the command learned to
 322   accept "git stash -mmessage" form.
 323   (merge 5675473fcb ph/stash-save-m-option-fix later to maint).
 324
 325 * @{-N} in "git checkout @{-N}" may refer to a detached HEAD state,
 326   but the documentation was not clear about it, which has been fixed.
 327   (merge 75ce149575 ks/doc-checkout-previous later to maint).
 328
 329 * A regression in the progress eye-candy was fixed.
 330   (merge 9c5951cacf jk/progress-delay-fix later to maint).
 331
 332 * Other minor doc, test and build updates and code cleanups.
 333   (merge 1a1fc2d5b5 rd/man-prune-progress later to maint).
 334   (merge 0ba014035a rd/man-reflog-add-n later to maint).
 335   (merge e54b63359f rd/doc-notes-prune-fix later to maint).
 336   (merge ff4c9b413a sp/doc-info-attributes later to maint).
 337   (merge 7db2cbf4f1 jc/receive-pack-hook-doc later to maint).
 338   (merge 5a0526264b tg/t-readme-updates later to maint).
 339   (merge 5e83cca0b8 jk/no-optional-locks later to maint).
 340   (merge 826c778f7c js/hashmap-update-sample later to maint).