| 1 | Git 2.16 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Backward 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 | |
| 10 | Updates since v2.15 |
| 11 | ------------------- |
| 12 | |
| 13 | UI, 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 optionally talk to a file system monitor via new |
| 66 | fsmonitor extension to speed up "git status" and other operations |
| 67 | that need to see which paths have been modified. Currently we only |
| 68 | support "watchman". See File System Monitor section of |
| 69 | git-update-index(1) for more detail. |
| 70 | |
| 71 | * The "diff" family of commands learned to ignore differences in |
| 72 | carriage return at the end of line. |
| 73 | |
| 74 | * Places that know about "sendemail.to", like documentation and shell |
| 75 | completion (in contrib/) have been taught about "sendemail.tocmd", |
| 76 | too. |
| 77 | |
| 78 | * "git add --renormalize ." is a new and safer way to record the fact |
| 79 | that you are correcting the end-of-line convention and other |
| 80 | "convert_to_git()" glitches in the in-repository data. |
| 81 | |
| 82 | * "git branch" and "git checkout -b" are now forbidden from creating |
| 83 | a branch whose name is "HEAD". |
| 84 | |
| 85 | * "git branch --list" learned to show its output through the pager by |
| 86 | default when the output is going to a terminal, which is controlled |
| 87 | by the pager.branch configuration variable. This is similar to a |
| 88 | recent change to "git tag --list". |
| 89 | |
| 90 | * "git grep -W", "git diff -W" and their friends learned a heuristic |
| 91 | to extend a pre-context beyond the line that matches the "function |
| 92 | pattern" (aka "diff.*.xfuncname") to include a comment block, if |
| 93 | exists, that immediately precedes it. |
| 94 | |
| 95 | * "git config --expiry-date gc.reflogexpire" can read "2.weeks" from |
| 96 | the configuration and report it as a timestamp, just like "--int" |
| 97 | would read "1k" and report 1024, to help consumption by scripts. |
| 98 | |
| 99 | * The shell completion (in contrib/) learned that "git pull" can take |
| 100 | the "--autostash" option. |
| 101 | |
| 102 | * The tagnames "git log --decorate" uses to annotate the commits can |
| 103 | now be limited to subset of available refs with the two additional |
| 104 | options, --decorate-refs[-exclude]=<pattern>. |
| 105 | |
| 106 | * "git grep" compiled with libpcre2 sometimes triggered a segfault, |
| 107 | which is being fixed. |
| 108 | |
| 109 | * "git send-email" tries to see if the sendmail program is available |
| 110 | in /usr/lib and /usr/sbin; extend the list of locations to be |
| 111 | checked to also include directories on $PATH. |
| 112 | |
| 113 | * "git diff" learned, "--anchored", a variant of the "--patience" |
| 114 | algorithm, to which the user can specify which 'unique' line to be |
| 115 | used as anchoring points. |
| 116 | |
| 117 | * The way "git worktree add" determines what branch to create from |
| 118 | where and checkout in the new worktree has been updated a bit. |
| 119 | |
| 120 | * Ancient part of codebase still shows dots after an abbreviated |
| 121 | object name just to show that it is not a full object name, but |
| 122 | these ellipses are confusing to people who newly discovered Git |
| 123 | who are used to seeing abbreviated object names and find them |
| 124 | confusing with the range syntax. |
| 125 | |
| 126 | * With a configuration variable rebase.abbreviateCommands set, |
| 127 | "git rebase -i" produces the todo list with a single-letter |
| 128 | command names. |
| 129 | |
| 130 | * "git worktree add" learned to run the post-checkout hook, just like |
| 131 | "git checkout" does, after the initial checkout. |
| 132 | |
| 133 | * "git svn" has been updated to strip CRs in the commit messages, as |
| 134 | recent versions of Subversion rejects them. |
| 135 | |
| 136 | * "git imap-send" did not correctly quote the folder name when |
| 137 | making a request to the server, which has been corrected. |
| 138 | |
| 139 | * Error messages from "git rebase" have been somewhat cleaned up. |
| 140 | |
| 141 | * Git has been taught to support an https:// URL used for http.proxy |
| 142 | when using recent versions of libcurl. |
| 143 | |
| 144 | * "git merge" learned to pay attention to merge.verifySignatures |
| 145 | configuration variable and pretend as if '--verify-signatures' |
| 146 | option was given from the command line. |
| 147 | |
| 148 | * "git describe" was taught to dig trees deeper to find a |
| 149 | <commit-ish>:<path> that refers to a given blob object. |
| 150 | |
| 151 | |
| 152 | Performance, Internal Implementation, Development Support etc. |
| 153 | |
| 154 | * An earlier update made it possible to use an on-stack in-core |
| 155 | lockfile structure (as opposed to having to deliberately leak an |
| 156 | on-heap one). Many codepaths have been updated to take advantage |
| 157 | of this new facility. |
| 158 | |
| 159 | * Calling cmd_foo() as if it is a general purpose helper function is |
| 160 | a no-no. Correct two instances of such to set an example. |
| 161 | |
| 162 | * We try to see if somebody runs our test suite with a shell that |
| 163 | does not support "local" like bash/dash does. |
| 164 | |
| 165 | * An early part of piece-by-piece rewrite of "git bisect" in C. |
| 166 | |
| 167 | * GSoC to piece-by-piece rewrite "git submodule" in C. |
| 168 | |
| 169 | * Optimize the code to find shortest unique prefix of object names. |
| 170 | |
| 171 | * Pathspec-limited revision traversal was taught not to keep finding |
| 172 | unneeded differences once it knows two trees are different inside |
| 173 | given pathspec. |
| 174 | |
| 175 | * Conversion from uchar[20] to struct object_id continues. |
| 176 | |
| 177 | * Code cleanup. |
| 178 | |
| 179 | * A single-word "unsigned flags" in the diff options is being split |
| 180 | into a structure with many bitfields. |
| 181 | |
| 182 | * TravisCI build updates. |
| 183 | |
| 184 | * Parts of a test to drive the long-running content filter interface |
| 185 | has been split into its own module, hopefully to eventually become |
| 186 | reusable. |
| 187 | |
| 188 | * Drop (perhaps overly cautious) sanity check before using the index |
| 189 | read from the filesystem at runtime. |
| 190 | |
| 191 | * The build procedure has been taught to avoid some unnecessary |
| 192 | instability in the build products. |
| 193 | |
| 194 | * A new mechanism to upgrade the wire protocol in place is proposed |
| 195 | and demonstrated that it works with the older versions of Git |
| 196 | without harming them. |
| 197 | |
| 198 | * An infrastructure to define what hash function is used in Git is |
| 199 | introduced, and an effort to plumb that throughout various |
| 200 | codepaths has been started. |
| 201 | |
| 202 | * The code to iterate over loose object files got optimized. |
| 203 | |
| 204 | * An internal function that was left for backward compatibility has |
| 205 | been removed, as there is no remaining callers. |
| 206 | |
| 207 | * Historically, the diff machinery for rename detection had a |
| 208 | hardcoded limit of 32k paths; this is being lifted to allow users |
| 209 | trade cycles with a (possibly) easier to read result. |
| 210 | |
| 211 | * The tracing infrastructure has been optimized for cases where no |
| 212 | tracing is requested. |
| 213 | |
| 214 | * In preparation for implementing narrow/partial clone, the object |
| 215 | walking machinery has been taught a way to tell it to "filter" some |
| 216 | objects from enumeration. |
| 217 | |
| 218 | * A few structures and variables that are implementation details of |
| 219 | the decorate API have been renamed and then the API got documented |
| 220 | better. |
| 221 | |
| 222 | * Assorted updates for TravisCI integration. |
| 223 | (merge 4f26366679 sg/travis-fixes later to maint). |
| 224 | |
| 225 | * Introduce a helper to simplify code to parse a common pattern that |
| 226 | expects either "--key" or "--key=<something>". |
| 227 | |
| 228 | * "git version --build-options" learned to report the host CPU and |
| 229 | the exact commit object name the binary was built from. |
| 230 | |
| 231 | Also contains various documentation updates and code clean-ups. |
| 232 | |
| 233 | |
| 234 | Fixes since v2.15 |
| 235 | ----------------- |
| 236 | |
| 237 | * "auto" as a value for the columnar output configuration ought to |
| 238 | judge "is the output consumed by humans?" with the same criteria as |
| 239 | "auto" for coloured output configuration, i.e. either the standard |
| 240 | output stream is going to tty, or a pager is in use. We forgot the |
| 241 | latter, which has been fixed. |
| 242 | |
| 243 | * The experimental "color moved lines differently in diff output" |
| 244 | feature was buggy around "ignore whitespace changes" edges, which |
| 245 | has been corrected. |
| 246 | |
| 247 | * Instead of using custom line comparison and hashing functions to |
| 248 | implement "moved lines" coloring in the diff output, use the pair |
| 249 | of these functions from lower-layer xdiff/ code. |
| 250 | |
| 251 | * Some codepaths did not check for errors when asking what branch the |
| 252 | HEAD points at, which have been fixed. |
| 253 | |
| 254 | * "git commit", after making a commit, did not check for errors when |
| 255 | asking on what branch it made the commit, which has been corrected. |
| 256 | |
| 257 | * "git status --ignored -u" did not stop at a working tree of a |
| 258 | separate project that is embedded in an ignored directory and |
| 259 | listed files in that other project, instead of just showing the |
| 260 | directory itself as ignored. |
| 261 | |
| 262 | * A broken access to object databases in recent update to "git grep |
| 263 | --recurse-submodules" has been fixed. |
| 264 | |
| 265 | * A recent regression in "git rebase -i" that broke execution of git |
| 266 | commands from subdirectories via "exec" instruction has been fixed. |
| 267 | |
| 268 | * A (possibly flakey) test fix. |
| 269 | |
| 270 | * "git check-ref-format --branch @{-1}" bit a "BUG()" when run |
| 271 | outside a repository for obvious reasons; clarify the documentation |
| 272 | and make sure we do not even try to expand the at-mark magic in |
| 273 | such a case, but still call the validation logic for branch names. |
| 274 | |
| 275 | * "git fetch --recurse-submodules" now knows that submodules can be |
| 276 | moved around in the superproject in addition to getting updated, |
| 277 | and finds the ones that need to be fetched accordingly. |
| 278 | |
| 279 | * Command line completion (in contrib/) update. |
| 280 | |
| 281 | * Description of blame.{showroot,blankboundary,showemail,date} |
| 282 | configuration variables have been added to "git config --help". |
| 283 | |
| 284 | * After an error from lstat(), diff_populate_filespec() function |
| 285 | sometimes still went ahead and used invalid data in struct stat, |
| 286 | which has been fixed. |
| 287 | |
| 288 | * UNC paths are also relevant in Cygwin builds and they are now |
| 289 | tested just like Mingw builds. |
| 290 | |
| 291 | * Correct start-up sequence so that a repository could be placed |
| 292 | immediately under the root directory again (which was broken at |
| 293 | around Git 2.13). |
| 294 | |
| 295 | * The credential helper for libsecret (in contrib/) has been improved |
| 296 | to allow possibly prompting the end user to unlock secrets that are |
| 297 | currently locked (otherwise the secrets may not be loaded). |
| 298 | |
| 299 | * MinGW updates. |
| 300 | |
| 301 | * Error checking in "git imap-send" for empty response has been |
| 302 | improved. |
| 303 | |
| 304 | * Recent update to the refs infrastructure implementation started |
| 305 | rewriting packed-refs file more often than before; this has been |
| 306 | optimized again for most trivial cases. |
| 307 | |
| 308 | * Some error messages did not quote filenames shown in it, which have |
| 309 | been fixed. |
| 310 | |
| 311 | * "git rebase -i" recently started misbehaving when a submodule that |
| 312 | is configured with 'submodule.<name>.ignore' is dirty; this has |
| 313 | been corrected. |
| 314 | |
| 315 | * Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed. |
| 316 | |
| 317 | * We used to add an empty alternate object database to the system |
| 318 | that does not help anything; it has been corrected. |
| 319 | |
| 320 | * Doc update around use of "format-patch --subject-prefix" etc. |
| 321 | |
| 322 | * A fix for an ancient bug in "git apply --ignore-space-change" codepath. |
| 323 | |
| 324 | * Clarify and enhance documentation for "merge-base --fork-point", as |
| 325 | it was clear what it computed but not why/what for. |
| 326 | |
| 327 | * A few scripts (both in production and tests) incorrectly redirected |
| 328 | their error output. These have been corrected. |
| 329 | |
| 330 | * "git notes" sent its error message to its standard output stream, |
| 331 | which was corrected. |
| 332 | |
| 333 | * The three-way merge performed by "git cherry-pick" was confused |
| 334 | when a new submodule was added in the meantime, which has been |
| 335 | fixed (or "papered over"). |
| 336 | |
| 337 | * The sequencer machinery (used by "git cherry-pick A..B", and "git |
| 338 | rebase -i", among other things) would have lost a commit if stopped |
| 339 | due to an unlockable index file, which has been fixed. |
| 340 | |
| 341 | * "git apply --inaccurate-eof" when used with "--ignore-space-change" |
| 342 | triggered an internal sanity check, which has been fixed. |
| 343 | |
| 344 | * Command line completion (in contrib/) has been taught about the |
| 345 | "--copy" option of "git branch". |
| 346 | |
| 347 | * When "git rebase" prepared a mailbox of changes and fed it to "git |
| 348 | am" to replay them, it was confused when a stray "From " happened |
| 349 | to be in the log message of one of the replayed changes. This has |
| 350 | been corrected. |
| 351 | |
| 352 | * There was a recent semantic mismerge in the codepath to write out a |
| 353 | section of a configuration section, which has been corrected. |
| 354 | |
| 355 | * Mentions of "git-rebase" and "git-am" (dashed form) still remained |
| 356 | in end-user visible strings emitted by the "git rebase" command; |
| 357 | they have been corrected. |
| 358 | |
| 359 | * Contrary to the documentation, "git pull -4/-6 other-args" did not |
| 360 | ask the underlying "git fetch" to go over IPv4/IPv6, which has been |
| 361 | corrected. |
| 362 | |
| 363 | * "git checkout --recursive" may overwrite and rewind the history of |
| 364 | the branch that happens to be checked out in submodule |
| 365 | repositories, which might not be desirable. Detach the HEAD but |
| 366 | still allow the recursive checkout to succeed in such a case. |
| 367 | (merge 57f22bf997 sb/submodule-recursive-checkout-detach-head later to maint). |
| 368 | |
| 369 | * "git branch --set-upstream" has been deprecated and (sort of) |
| 370 | removed, as "--set-upstream-to" is the preferred one these days. |
| 371 | The documentation still had "--set-upstream" listed on its |
| 372 | synopsis section, which has been corrected. |
| 373 | (merge a060f3d3d8 tz/branch-doc-remove-set-upstream later to maint). |
| 374 | |
| 375 | * Internally we use 0{40} as a placeholder object name to signal the |
| 376 | codepath that there is no such object (e.g. the fast-forward check |
| 377 | while "git fetch" stores a new remote-tracking ref says "we know |
| 378 | there is no 'old' thing pointed at by the ref, as we are creating |
| 379 | it anew" by passing 0{40} for the 'old' side), and expect that a |
| 380 | codepath to locate an in-core object to return NULL as a sign that |
| 381 | the object does not exist. A look-up for an object that does not |
| 382 | exist however is quite costly with a repository with large number |
| 383 | of packfiles. This access pattern has been optimized. |
| 384 | (merge 87b5e236a1 jk/fewer-pack-rescan later to maint). |
| 385 | |
| 386 | * In addition to "git stash -m message", the command learned to |
| 387 | accept "git stash -mmessage" form. |
| 388 | (merge 5675473fcb ph/stash-save-m-option-fix later to maint). |
| 389 | |
| 390 | * @{-N} in "git checkout @{-N}" may refer to a detached HEAD state, |
| 391 | but the documentation was not clear about it, which has been fixed. |
| 392 | (merge 75ce149575 ks/doc-checkout-previous later to maint). |
| 393 | |
| 394 | * A regression in the progress eye-candy was fixed. |
| 395 | (merge 9c5951cacf jk/progress-delay-fix later to maint). |
| 396 | |
| 397 | * The code internal to the recursive merge strategy was not fully |
| 398 | prepared to see a path that is renamed to try overwriting another |
| 399 | path that is only different in case on case insensitive systems. |
| 400 | This does not matter in the current code, but will start to matter |
| 401 | once the rename detection logic starts taking hints from nearby |
| 402 | paths moving to some directory and moves a new path along with them. |
| 403 | (merge 4cba2b0108 en/merge-recursive-icase-removal later to maint). |
| 404 | |
| 405 | * An v2.12-era regression in pathspec match logic, which made it look |
| 406 | into submodule tree even when it is not desired, has been fixed. |
| 407 | (merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint). |
| 408 | |
| 409 | * Amending commits in git-gui broke the author name that is non-ascii |
| 410 | due to incorrect encoding conversion. |
| 411 | |
| 412 | * Recent update to the submodule configuration code broke "diff-tree" |
| 413 | by accidentally stopping to read from the index upfront. |
| 414 | (merge fd66bcc31f bw/submodule-config-cleanup later to maint). |
| 415 | |
| 416 | * Git shows a message to tell the user that it is waiting for the |
| 417 | user to finish editing when spawning an editor, in case the editor |
| 418 | opens to a hidden window or somewhere obscure and the user gets |
| 419 | lost. |
| 420 | (merge abfb04d0c7 ls/editor-waiting-message later to maint). |
| 421 | |
| 422 | * The "safe crlf" check incorrectly triggered for contents that does |
| 423 | not use CRLF as line endings, which has been corrected. |
| 424 | (merge 649f1f0948 tb/check-crlf-for-safe-crlf later to maint). |
| 425 | |
| 426 | * "git clone --shared" to borrow from a (secondary) worktree did not |
| 427 | work, even though "git clone --local" did. Both are now accepted. |
| 428 | (merge b3b05971c1 es/clone-shared-worktree later to maint). |
| 429 | |
| 430 | * The build procedure now allows not just the repositories but also |
| 431 | the refs to be used to take pre-formatted manpages and html |
| 432 | documents to install. |
| 433 | (merge 65289e9dcd rb/quick-install-doc later to maint). |
| 434 | |
| 435 | * Update the shell prompt script (in contrib/) to strip trailing CR |
| 436 | from strings read from various "state" files. |
| 437 | (merge 041fe8fc83 ra/prompt-eread-fix later to maint). |
| 438 | |
| 439 | * "git merge -s recursive" did not correctly abort when the index is |
| 440 | dirty, if the merged tree happened to be the same as the current |
| 441 | HEAD, which has been fixed. |
| 442 | |
| 443 | * Bytes with high-bit set were encoded incorrectly and made |
| 444 | credential helper fail. |
| 445 | (merge 4c267f2ae3 jd/fix-strbuf-add-urlencode-bytes later to maint). |
| 446 | |
| 447 | * "git rebase -p -X<option>" did not propagate the option properly |
| 448 | down to underlying merge strategy backend. |
| 449 | (merge dd6fb0053c js/fix-merge-arg-quoting-in-rebase-p later to maint). |
| 450 | |
| 451 | * "git merge -s recursive" did not correctly abort when the index is |
| 452 | dirty, if the merged tree happened to be the same as the current |
| 453 | HEAD, which has been fixed. |
| 454 | (merge f309e8e768 ew/empty-merge-with-dirty-index-maint later to maint). |
| 455 | |
| 456 | * Other minor doc, test and build updates and code cleanups. |
| 457 | (merge 1a1fc2d5b5 rd/man-prune-progress later to maint). |
| 458 | (merge 0ba014035a rd/man-reflog-add-n later to maint). |
| 459 | (merge e54b63359f rd/doc-notes-prune-fix later to maint). |
| 460 | (merge ff4c9b413a sp/doc-info-attributes later to maint). |
| 461 | (merge 7db2cbf4f1 jc/receive-pack-hook-doc later to maint). |
| 462 | (merge 5a0526264b tg/t-readme-updates later to maint). |
| 463 | (merge 5e83cca0b8 jk/no-optional-locks later to maint). |
| 464 | (merge 826c778f7c js/hashmap-update-sample later to maint). |
| 465 | (merge 176b2d328c sg/setup-doc-update later to maint). |
| 466 | (merge 1b09073514 rs/am-builtin-leakfix later to maint). |
| 467 | (merge addcf6cfde rs/fmt-merge-msg-string-leak-fix later to maint). |
| 468 | (merge c3ff8f6c14 rs/strbuf-read-once-reset-length later to maint). |
| 469 | (merge 6b0eb884f9 db/doc-workflows-neuter-the-maintainer later to maint). |
| 470 | (merge 8c87bdfb21 jk/cvsimport-quoting later to maint). |
| 471 | (merge 176cb979fe rs/fmt-merge-msg-leakfix later to maint). |
| 472 | (merge 5a03360e73 tb/delimit-pretty-trailers-args-with-comma later to maint). |
| 473 | (merge d0e6326026 ot/pretty later to maint). |
| 474 | (merge 44103f4197 sb/test-helper-excludes later to maint). |
| 475 | (merge 170078693f jt/transport-no-more-rsync later to maint). |
| 476 | (merge c07b3adff1 bw/path-doc later to maint). |
| 477 | (merge bf9d7df950 tz/lib-git-svn-svnserve-tests later to maint). |
| 478 | (merge dec366c9a8 sr/http-sslverify-config-doc later to maint). |
| 479 | (merge 3f824e91c8 jk/test-suite-tracing later to maint). |
| 480 | (merge 1feb061701 db/doc-config-section-names-with-bs later to maint). |
| 481 | (merge 74dea0e13c jh/memihash-opt later to maint). |
| 482 | (merge 2e9fdc795c ma/bisect-leakfix later to maint). |