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 * "git help -a" now gives verbose output (same as "git help -av"). 18 Those who want the old output may say "git help --no-verbose -a".. 19 20 * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n", 21 reported only the alias expansion of "cpn" in earlier versions of 22 Git. It now runs "git cherry-pick --help" to show the manual page 23 of the command, while sending the alias expansion to the standard 24 error stream. 25 26 * "git send-email" learned to grab address-looking string on any 27 trailer whose name ends with "-by". This is a backward-incompatible 28 change. Adding "--suppress-cc=misc-by" on the command line, or 29 setting sendemail.suppresscc configuration variable to "misc-by", 30 can be used to disable this behaviour. 31 32 33Updates since v2.19 34------------------- 35 36UI, Workflows & Features 37 38 * Running "git clone" against a project that contain two files with 39 pathnames that differ only in cases on a case insensitive 40 filesystem would result in one of the files lost because the 41 underlying filesystem is incapable of holding both at the same 42 time. An attempt is made to detect such a case and warn. 43 44 * "git checkout -b newbranch [HEAD]" should not have to do as much as 45 checking out a commit different from HEAD. An attempt is made to 46 optimize this special case. 47 48 * "git rev-list --stdin </dev/null" used to be an error; it now shows 49 no output without an error. "git rev-list --stdin --default HEAD" 50 still falls back to the given default when nothing is given on the 51 standard input. 52 53 * Lift code from GitHub to restrict delta computation so that an 54 object that exists in one fork is not made into a delta against 55 another object that does not appear in the same forked repository. 56 57 * "git format-patch" learned new "--interdiff" and "--range-diff" 58 options to explain the difference between this version and the 59 previous attempt in the cover letter (or after the three-dashes as 60 a comment). 61 62 * "git mailinfo" used in "git am" learned to make a best-effort 63 recovery of a patch corrupted by MUA that sends text/plain with 64 format=flawed option. 65 (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint). 66 67 * The rules used by "git push" and "git fetch" to determine if a ref 68 can or cannot be updated were inconsistent; specifically, fetching 69 to update existing tags were allowed even though tags are supposed 70 to be unmoving anchoring points. "git fetch" was taught to forbid 71 updates to existing tags without the "--force" option. 72 73 * "git multi-pack-index" learned to detect corruption in the .midx 74 file it uses, and this feature has been integrated into "git fsck". 75 76 * Generation of (experimental) commit-graph files have so far been 77 fairly silent, even though it takes noticeable amount of time in a 78 meaningfully large repository. The users will now see progress 79 output. 80 81 * The minimum version of Windows supported by Windows port of Git is 82 now set to Vista. 83 84 * The completion script (in contrib/) learned to complete a handful of 85 options "git stash list" command takes. 86 87 * The completion script (in contrib/) learned that "git fetch 88 --multiple" only takes remote names as arguments and no refspecs. 89 90 * "git status" learns to show progress bar when refreshing the index 91 takes a long time. 92 (merge ae9af12287 nd/status-refresh-progress later to maint). 93 94 * "git help -a" and "git help -av" give different pieces of 95 information, and generally the "verbose" version is more friendly 96 to the new users. "git help -a" by default now uses the more 97 verbose output (with "--no-verbose", you can go back to the 98 original). Also "git help -av" now lists aliases and external 99 commands, which it did not used to. 100 101 * Unlike "grep", "git grep" by default recurses to the whole tree. 102 The command learned "git grep --recursive" option, so that "git 103 grep --no-recursive" can serve as a synonym to setting the 104 max-depth to 0. 105 106 * When pushing into a repository that borrows its objects from an 107 alternate object store, "git receive-pack" that responds to the 108 push request on the other side lists the tips of refs in the 109 alternate to reduce the amount of objects transferred. This 110 sometimes is detrimental when the number of refs in the alternate 111 is absurdly large, in which case the bandwidth saved in potentially 112 fewer objects transferred is wasted in excessively large ref 113 advertisement. The alternate refs that are advertised are now 114 configurable with a pair of configuration variables. 115 116 * "git cmd --help" when "cmd" is aliased used to only say "cmd is 117 aliased to ...". Now it shows that to the standard error stream 118 and runs "git $cmd --help" where $cmd is the first word of the 119 alias expansion. 120 121 * The documentation of "git gc" has been updated to mention that it 122 is no longer limited to "pruning away crufts" but also updates 123 ancillary files like commit-graph as a part of repository 124 optimization. 125 126 * "git p4 unshelve" improvements. 127 128 * The logic to select the default user name and e-mail on Windows has 129 been improved. 130 (merge 501afcb8b0 js/mingw-default-ident later to maint). 131 132 * The "rev-list --filter" feature learned to exclude all trees via 133 "tree:0" filter. 134 135 * "git send-email" learned to grab address-looking string on any 136 trailer whose name ends with "-by"; --suppress-cc=misc-by on the 137 command line, or setting sendemail.suppresscc configuration 138 variable to "misc-by", can be used to disable this behaviour. 139 140 * Developer builds now uses -Wunused-function compilation option. 141 142 * One of our CI tests to run with "unusual/experimental/random" 143 settings now also uses commit-graph and midx. 144 145 * "git mergetool" learned to take the "--[no-]gui" option, just like 146 "git difftool" does. 147 148 * "git rebase -i" learned a new insn, 'break', that the user can 149 insert in the to-do list. Upon hitting it, the command returns 150 control back to the user. 151 152 * New "--pretty=format:" placeholders %GF and %GP that show the GPG 153 key fingerprints have been invented. 154 155 * On platforms with recent cURL library, http.sslBackend configuration 156 variable can be used to choose a different SSL backend at runtime. 157 The Windows port uses this mechanism to switch between OpenSSL and 158 Secure Channel while talking over the HTTPS protocol. 159 160 * "git send-email" learned to disable SMTP authentication via the 161 "--smtp-auth=none" option, even when the smtp username is given 162 (which turns the authentication on by default). 163 164 165Performance, Internal Implementation, Development Support etc. 166 167 * When there are too many packfiles in a repository (which is not 168 recommended), looking up an object in these would require 169 consulting many pack .idx files; a new mechanism to have a single 170 file that consolidates all of these .idx files is introduced. 171 172 * "git submodule update" is getting rewritten piece-by-piece into C. 173 174 * The code for computing history reachability has been shuffled, 175 obtained a bunch of new tests to cover them, and then being 176 improved. 177 178 * The unpack_trees() API used in checking out a branch and merging 179 walks one or more trees along with the index. When the cache-tree 180 in the index tells us that we are walking a tree whose flattened 181 contents is known (i.e. matches a span in the index), as linearly 182 scanning a span in the index is much more efficient than having to 183 open tree objects recursively and listing their entries, the walk 184 can be optimized, which has been done. 185 186 * When creating a thin pack, which allows objects to be made into a 187 delta against another object that is not in the resulting pack but 188 is known to be present on the receiving end, the code learned to 189 take advantage of the reachability bitmap; this allows the server 190 to send a delta against a base beyond the "boundary" commit. 191 192 * spatch transformation to replace boolean uses of !hashcmp() to 193 newly introduced oideq() is added, and applied, to regain 194 performance lost due to support of multiple hash algorithms. 195 196 * Fix a bug in which the same path could be registered under multiple 197 worktree entries if the path was missing (for instance, was removed 198 manually). Also, as a convenience, expand the number of cases in 199 which --force is applicable. 200 201 * Split Documentation/config.txt for easier maintenance. 202 (merge 6014363f0b nd/config-split later to maint). 203 204 * Test helper binaries clean-up. 205 (merge c9a1f4161f nd/test-tool later to maint). 206 207 * Various tests have been updated to make it easier to swap the 208 hash function used for object identification. 209 (merge ae0c89d41b bc/hash-independent-tests later to maint). 210 211 * Update fsck.skipList implementation and documentation. 212 (merge 371a655074 ab/fsck-skiplist later to maint). 213 214 * An alias that expands to another alias has so far been forbidden, 215 but now it is allowed to create such an alias. 216 217 * Various test scripts have been updated for style and also correct 218 handling of exit status of various commands. 219 220 * "gc --auto" ended up calling exit(-1) upon error, which has been 221 corrected to use exit(1). Also the error reporting behaviour when 222 daemonized has been updated to exit with zero status when stopping 223 due to a previously discovered error (which implies there is no 224 point running gc to improve the situation); we used to exit with 225 failure in such a case. 226 227 * Various codepaths in the core-ish part learned to work on an 228 arbitrary in-core index structure, not necessarily the default 229 instance "the_index". 230 (merge b3c7eef9b0 nd/the-index later to maint). 231 232 * Code clean-up in the internal machinery used by "git status" and 233 "git commit --dry-run". 234 (merge 73ba5d78b4 ss/wt-status-committable later to maint). 235 236 * Some environment variables that control the runtime options of Git 237 used during tests are getting renamed for consistency. 238 (merge 4231d1ba99 bp/rename-test-env-var later to maint). 239 240 * A new extension to the index file has been introduced, which allows 241 the index file to be read in parallel for performance. 242 243 * The oidset API was built on top of the oidmap API which in turn is 244 on the hashmap API. Replace the implementation to build on top of 245 the khash API and gain performance. 246 247 * Over some transports, fetching objects with an exact commit object 248 name can be done without first seeing the ref advertisements. The 249 code has been optimized to exploit this. 250 251 * In a partial clone that will lazily be hydrated from the 252 originating repository, we generally want to avoid "does this 253 object exist (locally)?" on objects that we deliberately omitted 254 when we created the clone. The cache-tree codepath (which is used 255 to write a tree object out of the index) however insisted that the 256 object exists, even for paths that are outside of the partial 257 checkout area. The code has been updated to avoid such a check. 258 259 * To help developers, an EditorConfig file that attempts to follow 260 the project convention has been added. 261 (merge b548d698a0 bc/editorconfig later to maint). 262 263 * The result of coverage test can be combined with "git blame" to 264 check the test coverage of code introduced recently with a new 265 'coverage-diff' tool (in contrib/). 266 (merge 783faedd65 ds/coverage-diff later to maint). 267 268 * An experiment to fuzz test a few areas, hopefully we can gain more 269 coverage to various areas. 270 271 * More codepaths are moving away from hardcoded hash sizes. 272 273 * The way the Windows port figures out the current directory has been 274 improved. 275 276 * The way DLLs are loaded on the Windows port has been improved. 277 278 * Some tests have been reorganized and renamed; "ls t/" now gives a 279 better overview of what is tested for these scripts than before. 280 281 * "git rebase" and "git rebase -i" have been reimplemented in C. 282 283 * Windows port learned to use nano-second resolution file timestamps. 284 285 286Fixes since v2.19 287----------------- 288 289 * "git interpret-trailers" and its underlying machinery had a buggy 290 code that attempted to ignore patch text after commit log message, 291 which triggered in various codepaths that will always get the log 292 message alone and never get such an input. 293 (merge 66e83d9b41 jk/trailer-fixes later to maint). 294 295 * Malformed or crafted data in packstream can make our code attempt 296 to read or write past the allocated buffer and abort, instead of 297 reporting an error, which has been fixed. 298 299 * "git rebase -i" did not clear the state files correctly when a run 300 of "squash/fixup" is aborted and then the user manually amended the 301 commit instead, which has been corrected. 302 (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint). 303 304 * When fsmonitor is in use, after operation on submodules updates 305 .gitmodules, we lost track of the fact that we did so and relied on 306 stale fsmonitor data. 307 (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint). 308 309 * Fix for a long-standing bug that leaves the index file corrupt when 310 it shrinks during a partial commit. 311 (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint). 312 313 * Further fix for O_APPEND emulation on Windows 314 (merge eeaf7ddac7 js/mingw-o-append later to maint). 315 316 * A corner case bugfix in "git rerere" code. 317 (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint). 318 319 * "git add ':(attr:foo)'" is not supported and is supposed to be 320 rejected while the command line arguments are parsed, but we fail 321 to reject such a command line upfront. 322 (merge 84d938b732 nd/attr-pathspec-fix later to maint). 323 324 * Recent update broke the reachability algorithm when refs (e.g. 325 tags) that point at objects that are not commit were involved, 326 which has been fixed. 327 328 * "git rebase" etc. in Git 2.19 fails to abort when given an empty 329 commit log message as result of editing, which has been corrected. 330 (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint). 331 332 * The code to backfill objects in lazily cloned repository did not 333 work correctly, which has been corrected. 334 (merge e68302011c jt/lazy-object-fetch-fix later to maint). 335 336 * Update error messages given by "git remote" and make them consistent. 337 (merge 5025425dff ms/remote-error-message-update later to maint). 338 339 * "git update-ref" learned to make both "--no-deref" and "--stdin" 340 work at the same time. 341 (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint). 342 343 * Recently added "range-diff" had a corner-case bug to cause it 344 segfault, which has been corrected. 345 (merge e467a90c7a tg/range-diff-corner-case-fix later to maint). 346 347 * The recently introduced commit-graph auxiliary data is incompatible 348 with mechanisms such as replace & grafts that "breaks" immutable 349 nature of the object reference relationship. Disable optimizations 350 based on its use (and updating existing commit-graph) when these 351 incompatible features are in use in the repository. 352 (merge 829a321569 ds/commit-graph-with-grafts later to maint). 353 354 * The mailmap file update. 355 (merge 255eb03edf jn/mailmap-update later to maint). 356 357 * The code in "git status" sometimes hit an assertion failure. This 358 was caused by a structure that was reused without cleaning the data 359 used for the first run, which has been corrected. 360 (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint). 361 362 * "git fetch $repo $object" in a partial clone did not correctly 363 fetch the asked-for object that is referenced by an object in 364 promisor packfile, which has been fixed. 365 366 * A corner-case bugfix. 367 (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint). 368 369 * Various fixes to "diff --color-moved-ws". 370 371 * A partial clone that is configured to lazily fetch missing objects 372 will on-demand issue a "git fetch" request to the originating 373 repository to fill not-yet-obtained objects. The request has been 374 optimized for requesting a tree object (and not the leaf blob 375 objects contained in it) by telling the originating repository that 376 no blobs are needed. 377 (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint). 378 379 * The codepath to support the experimental split-index mode had 380 remaining "racily clean" issues fixed. 381 (merge 4c490f3d32 sg/split-index-racefix later to maint). 382 383 * "git log --graph" showing an octopus merge sometimes miscounted the 384 number of display columns it is consuming to show the merge and its 385 parent commits, which has been corrected. 386 (merge 04005834ed np/log-graph-octopus-fix later to maint). 387 388 * "git range-diff" did not work well when the compared ranges had 389 changes in submodules and the "--submodule=log" was used. 390 391 * The implementation of run_command() API on the UNIX platforms had a 392 bug that caused a command not on $PATH to be found in the current 393 directory. 394 (merge f67b980771 jk/run-command-notdot later to maint). 395 396 * A mutex used in "git pack-objects" were not correctly initialized 397 and this caused "git repack" to dump core on Windows. 398 (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint). 399 400 * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on 401 Windows would strip initial parts from the paths because they 402 were not recognized as absolute, which has been corrected. 403 (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint). 404 405 * The receive.denyCurrentBranch=updateInstead codepath kicked in even 406 when the push should have been rejected due to other reasons, such 407 as it does not fast-forward or the update-hook rejects it, which 408 has been corrected. 409 (merge b072a25fad jc/receive-deny-current-branch-fix later to maint). 410 411 * The logic to determine the archive type "git archive" uses did not 412 correctly kick in for "git archive --remote", which has been 413 corrected. 414 415 * "git repack" in a shallow clone did not correctly update the 416 shallow points in the repository, leading to a repository that 417 does not pass fsck. 418 (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint). 419 420 * Some codepaths failed to form a proper URL when .gitmodules record 421 the URL to a submodule repository as relative to the repository of 422 superproject, which has been corrected. 423 (merge e0a862fdaf sb/submodule-url-to-absolute later to maint). 424 425 * "git fetch" over protocol v2 into a shallow repository failed to 426 fetch full history behind a new tip of history that was diverged 427 before the cut-off point of the history that was previously fetched 428 shallowly. 429 430 * The command line completion machinery (in contrib/) has been 431 updated to allow the completion script to tweak the list of options 432 that are reported by the parse-options machinery correctly. 433 (merge 276b49ff34 nd/completion-negation later to maint). 434 435 * Operations on promisor objects make sense in the context of only a 436 small subset of the commands that internally use the revisions 437 machinery, but the "--exclude-promisor-objects" option were taken 438 and led to nonsense results by commands like "log", to which it 439 didn't make much sense. This has been corrected. 440 (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint). 441 442 * The "container" mode of TravisCI is going away. Our .travis.yml 443 file is getting prepared for the transition. 444 (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint). 445 446 * Our test scripts can now take the '-V' option as a synonym for the 447 '--verbose-log' option. 448 (merge a5f52c6dab sg/test-verbose-log later to maint). 449 450 * Code cleanup, docfix, build fix, etc. 451 (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint). 452 (merge b9b07efdb2 tg/conflict-marker-size later to maint). 453 (merge fa0aeea770 sg/doc-trace-appends later to maint). 454 (merge d64324cb60 tb/void-check-attr later to maint). 455 (merge c3b9bc94b9 en/double-semicolon-fix later to maint). 456 (merge 79336116f5 sg/t3701-tighten-trace later to maint). 457 (merge 801fa63a90 jk/dev-build-format-security later to maint). 458 (merge 0597dd62ba sb/string-list-remove-unused later to maint). 459 (merge db2d36fad8 bw/protocol-v2 later to maint). 460 (merge 456d7cd3a9 sg/split-index-test later to maint). 461 (merge 7b6057c852 tq/refs-internal-comment-fix later to maint). 462 (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint). 463 (merge 55f6bce2c9 fe/doc-updates later to maint). 464 (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint). 465 (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint). 466 (merge 4c399442f7 ma/commit-graph-docs later to maint). 467 (merge fc0503b04e ma/t1400-undebug-test later to maint). 468 (merge e56b53553a nd/packobjectshook-doc-fix later to maint). 469 (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint). 470 (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint). 471 (merge ad0b8f9575 mw/doc-typofixes later to maint). 472 (merge d9f079ad1a jc/how-to-document-api later to maint). 473 (merge b1492bf315 ma/t7005-bash-workaround later to maint). 474 (merge ac1f98a0df du/rev-parse-is-plumbing later to maint). 475 (merge ca8ed443a5 mm/doc-no-dashed-git later to maint). 476 (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint). 477 (merge 61018fe9e0 du/cherry-is-plumbing later to maint). 478 (merge c7e5fe79b9 sb/strbuf-h-update later to maint). 479 (merge 8d2008196b tq/branch-create-wo-branch-get later to maint). 480 (merge 2e3c894f4b tq/branch-style-fix later to maint). 481 (merge c5d844af9c sg/doc-show-branch-typofix later to maint). 482 (merge 081d91618b ah/doc-updates later to maint). 483 (merge b84c783882 jc/cocci-preincr later to maint). 484 (merge 5e495f8122 uk/merge-subtree-doc-update later to maint). 485 (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint). 486 (merge 3063477445 tb/char-may-be-unsigned later to maint). 487 (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint).