Git fork
at reftables-rust 525 lines 24 kB view raw
1Git 2.27 Release Notes 2====================== 3 4Updates since v2.26 5------------------- 6 7Backward compatibility notes 8 9 * When "git describe C" finds that commit C is pointed by a signed or 10 annotated tag, which records T as its tagname in the object, the 11 command gives T as its answer. Even if the user renames or moves 12 such a tag from its natural location in the "refs/tags/" hierarchy, 13 "git describe C" would still give T as the answer, but in such a 14 case "git show T^0" would no longer work as expected. There may be 15 nothing at "refs/tags/T" or even worse there may be a different tag 16 instead. 17 18 Starting from this version, "git describe" will always use the 19 "long" version, as if the "--long" option were given, when giving 20 its output based on such a misplaced tag to work around the problem. 21 22 * "git pull" issues a warning message until the pull.rebase 23 configuration variable is explicitly given, which some existing 24 users may find annoying---those who prefer not to rebase need to 25 set the variable to false to squelch the warning. 26 27 * The transport protocol version 2, which was promoted to the default 28 in Git 2.26 release, turned out to have some remaining rough edges, 29 so it has been demoted from the default. 30 31 32UI, Workflows & Features 33 34 * A handful of options to configure SSL when talking to proxies have 35 been added. 36 37 * Smudge/clean conversion filters are now given more information 38 (e.g. the object of the tree-ish in which the blob being converted 39 appears, in addition to its path, which has already been given). 40 41 * When "git describe C" finds an annotated tag with tagname A to be 42 the best name to explain commit C, and the tag is stored in a 43 "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the 44 command gave a warning message but used A (not B) to describe C. 45 If C is exactly at the tag, the describe output would be "A", but 46 "git rev-parse A^0" would not be equal as "git rev-parse C^0". The 47 behavior of the command has been changed to use the "long" form 48 i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse. 49 50 * "git pull" learned to warn when no pull.rebase configuration 51 exists, and neither --[no-]rebase nor --ff-only is given (which 52 would result a merge). 53 54 * "git p4" learned four new hooks and also "--no-verify" option to 55 bypass them (and the existing "p4-pre-submit" hook). 56 57 * "git pull" shares many options with underlying "git fetch", but 58 some of them were not documented and some of those that would make 59 sense to pass down were not passed down. 60 61 * "git rebase" learned the "--no-gpg-sign" option to countermand 62 commit.gpgSign the user may have. 63 64 * The output from "git format-patch" uses RFC 2047 encoding for 65 non-ASCII letters on From: and Subject: headers, so that it can 66 directly be fed to e-mail programs. A new option has been added 67 to produce these headers in raw. 68 69 * "git log" learned "--show-pulls" that helps pathspec limited 70 history views; a merge commit that takes the whole change from a 71 side branch, which is normally omitted from the output, is shown 72 in addition to the commits that introduce real changes. 73 74 * The interactive input from various codepaths are consolidated and 75 any prompt possibly issued earlier are fflush()ed before we read. 76 77 * Allow "git rebase" to reapply all local commits, even if the may be 78 already in the upstream, without checking first. 79 80 * The 'pack.useSparse' configuration variable now defaults to 'true', 81 enabling an optimization that has been experimental since Git 2.21. 82 83 * "git rebase" happens to call some hooks meant for "checkout" and 84 "commit" by this was not a designed behaviour than historical 85 accident. This has been documented. 86 87 * "git merge" learns the "--autostash" option. 88 89 * "sparse-checkout" UI improvements. 90 91 * "git update-ref --stdin" learned a handful of new verbs to let the 92 user control ref update transactions more explicitly, which helps 93 as an ingredient to implement two-phase commit-style atomic 94 ref-updates across multiple repositories. 95 96 * "git commit-graph write" learned different ways to write out split 97 files. 98 99 * Introduce an extension to the commit-graph to make it efficient to 100 check for the paths that were modified at each commit using Bloom 101 filters. 102 103 * The approxidate parser learns to parse seconds with fraction and 104 ignore fractional part. 105 106 * The userdiff patterns for Markdown documents have been added. 107 108 * The sparse-checkout patterns have been forbidden from excluding all 109 paths, leaving an empty working tree, for a long time. This 110 limitation has been lifted. 111 112 * "git restore --staged --worktree" now defaults to take the contents 113 out of "HEAD", instead of erring out. 114 115 * "git p4" learned to recover from a (broken) state where a directory 116 and a file are recorded at the same path in the Perforce repository 117 the same way as their clients do. 118 119 * "git multi-pack-index repack" has been taught to honor some 120 repack.* configuration variables. 121 122 123Performance, Internal Implementation, Development Support etc. 124 125 * The advise API has been revamped to allow more systematic enumeration of 126 advice knobs in the future. 127 128 * SHA-256 transition continues. 129 130 * The code to interface with GnuPG has been refactored. 131 132 * "git stash" has kept an escape hatch to use the scripted version 133 for a few releases, which got stale. It has been removed. 134 135 * Enable tests that require GnuPG on Windows. 136 137 * Minor test usability improvement. 138 139 * Trace2 enhancement to allow logging of the environment variables. 140 141 * Test clean-up continues. 142 143 * Perf-test update. 144 145 * A Windows-specific test element has been made more robust against 146 misuse from both user's environment and programmer's errors. 147 148 * Various tests have been updated to work around issues found with 149 shell utilities that come with busybox etc. 150 151 * The config API made mixed uses of int and size_t types to represent 152 length of various pieces of text it parsed, which has been updated 153 to use the correct type (i.e. size_t) throughout. 154 155 * The "--decorate-refs" and "--decorate-refs-exclude" options "git 156 log" takes have learned a companion configuration variable 157 log.excludeDecoration that sits at the lowest priority in the 158 family. 159 160 * A new CI job to build and run test suite on linux with musl libc 161 has been added. 162 163 * Update the CI configuration to use GitHub Actions, retiring the one 164 based on Azure Pipelines. 165 166 * The directory traversal code had redundant recursive calls which 167 made its performance characteristics exponential with respect to 168 the depth of the tree, which was corrected. 169 170 * "git blame" learns to take advantage of the "changed-paths" Bloom 171 filter stored in the commit-graph file. 172 173 * The "bugreport" tool has been added. 174 175 * The object walk with object filter "--filter=tree:0" can now take 176 advantage of the pack bitmap when available. 177 178 * Instead of always building all branches at GitHub via Actions, 179 users can specify which branches to build. 180 181 * Codepaths that show progress meter have been taught to also use the 182 start_progress() and the stop_progress() calls as a "region" to be 183 traced. 184 185 * Instead of downloading Windows SDK for CI jobs for windows builds 186 from an external site (wingit.blob.core.windows.net), use the one 187 created in the windows-build job, to work around quota issues at 188 the external site. 189 190 191Fixes since v2.26 192----------------- 193 194 * The real_path() convenience function can easily be misused; with a 195 bit of code refactoring in the callers' side, its use has been 196 eliminated. 197 (merge 49d3c4b481 am/real-path-fix later to maint). 198 199 * Update "git p4" to work with Python 3. 200 (merge 6bb40ed20a yz/p4-py3 later to maint). 201 202 * The mechanism to prevent "git commit" from making an empty commit 203 or amending during an interrupted cherry-pick was broken during the 204 rewrite of "git rebase" in C, which has been corrected. 205 (merge 430b75f720 pw/advise-rebase-skip later to maint). 206 207 * Fix "git checkout --recurse-submodules" of a nested submodule 208 hierarchy. 209 (merge 846f34d351 pb/recurse-submodules-fix later to maint). 210 211 * The "--fork-point" mode of "git rebase" regressed when the command 212 was rewritten in C back in 2.20 era, which has been corrected. 213 (merge f08132f889 at/rebase-fork-point-regression-fix later to maint). 214 215 * The import-tars importer (in contrib/fast-import/) used to create 216 phony files at the top-level of the repository when the archive 217 contains global PAX headers, which made its own logic to detect and 218 omit the common leading directory ineffective, which has been 219 corrected. 220 (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint). 221 222 * Simplify the commit ancestry connectedness check in a partial clone 223 repository in which "promised" objects are assumed to be obtainable 224 lazily on-demand from promisor remote repositories. 225 (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint). 226 227 * The server-end of the v2 protocol to serve "git clone" and "git 228 fetch" was not prepared to see a delim packets at unexpected 229 places, which led to a crash. 230 (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint). 231 232 * When fed a midx that records no objects, some codepaths tried to 233 loop from 0 through (num_objects-1), which, due to integer 234 arithmetic wrapping around, made it nonsense operation with out of 235 bounds array accesses. The code has been corrected to reject such 236 an midx file. 237 (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint). 238 239 * Utitiles run via the run_command() API were not spawned correctly 240 on Cygwin, when the paths to them are given as a full path with 241 backslashes. 242 (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint). 243 244 * "git pull --rebase" tried to run a rebase even after noticing that 245 the pull results in a fast-forward and no rebase is needed nor 246 sensible, for the past few years due to a mistake nobody noticed. 247 (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint). 248 249 * "git rebase" with the merge backend did not work well when the 250 rebase.abbreviateCommands configuration was set. 251 (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint). 252 253 * The logic to auto-follow tags by "git clone --single-branch" was 254 not careful to avoid lazy-fetching unnecessary tags, which has been 255 corrected. 256 (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint). 257 258 * "git rebase -i" did not leave the reflog entries correctly. 259 (merge 1f6965f994 en/sequencer-reflog-action later to maint). 260 261 * The more aggressive updates to remote-tracking branches we had for 262 the past 7 years or so were not reflected in the documentation, 263 which has been corrected. 264 (merge a44088435c pb/pull-fetch-doc later to maint). 265 266 * We've left the command line parsing of "git log :/a/b/" broken for 267 about a full year without anybody noticing, which has been 268 corrected. 269 (merge 0220461071 jc/missing-ref-store-fix later to maint). 270 271 * Misc fixes for Windows. 272 (merge 3efc128cd5 js/mingw-fixes later to maint). 273 274 * "git rebase" (again) learns to honor "--no-keep-empty", which lets 275 the user to discard commits that are empty from the beginning (as 276 opposed to the ones that become empty because of rebasing). The 277 interactive rebase also marks commits that are empty in the todo. 278 (merge 50ed76148a en/rebase-no-keep-empty later to maint). 279 280 * Parsing the host part out of URL for the credential helper has been corrected. 281 (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint). 282 283 * Document the recommended way to abort a failing test early (e.g. by 284 exiting a loop), which is to say "return 1". 285 (merge 7cc112dc95 jc/doc-test-leaving-early later to maint). 286 287 * The code that refreshes the last access and modified time of 288 on-disk packfiles and loose object files have been updated. 289 (merge 312cd76130 lr/freshen-file-fix later to maint). 290 291 * Validation of push certificate has been made more robust against 292 timing attacks. 293 (merge 719483e547 bc/constant-memequal later to maint). 294 295 * The custom hash function used by "git fast-import" has been 296 replaced with the one from hashmap.c, which gave us a nice 297 performance boost. 298 (merge d8410a816b jk/fast-import-use-hashmap later to maint). 299 300 * The "git submodule" command did not initialize a few variables it 301 internally uses and was affected by variable settings leaked from 302 the environment. 303 (merge 65d100c4dd lx/submodule-clear-variables later to maint). 304 305 * Raise the minimum required version of docbook-xsl package to 1.74, 306 as 1.74.0 was from late 2008, which is more than 10 years old, and 307 drop compatibility cruft from our documentation suite. 308 (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint). 309 310 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap" 311 (merge 88acccda38 jc/log-no-mailmap later to maint). 312 313 * "git commit-graph write --expire-time=<timestamp>" did not use the 314 given timestamp correctly, which has been corrected. 315 (merge b09b785c78 ds/commit-graph-expiry-fix later to maint). 316 317 * Tests update to use "test-chmtime" instead of "touch -t". 318 (merge e892a56845 ds/t5319-touch-fix later to maint). 319 320 * "git diff" in a partial clone learned to avoid lazy loading blob 321 objects in more casese when they are not needed. 322 (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint). 323 324 * "git push --atomic" used to show failures for refs that weren't 325 even pushed, which has been corrected. 326 (merge dfe1b7f19c jx/atomic-push later to maint). 327 328 * Code in builtin/*, i.e. those can only be called from within 329 built-in subcommands, that implements bulk of a couple of 330 subcommands have been moved to libgit.a so that they could be used 331 by others. 332 (merge 9460fd48b5 dl/libify-a-few later to maint). 333 334 * Allowing the user to split a patch hunk while "git stash -p" does 335 not work well; a band-aid has been added to make this (partially) 336 work better. 337 338 * "git diff-tree --pretty --notes" used to hit an assertion failure, 339 as it forgot to initialize the notes subsystem. 340 (merge 5778b22b3d tb/diff-tree-with-notes later to maint). 341 342 * "git range-diff" fixes. 343 (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint). 344 345 * "git grep" did not quote a path with unusual character like other 346 commands (like "git diff", "git status") do, but did quote when run 347 from a subdirectory, both of which has been corrected. 348 (merge 45115d8490 mt/grep-cquote-path later to maint). 349 350 * GNU/Hurd is also among the ones that need the fopen() wrapper. 351 (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint). 352 353 * Those fetching over protocol v2 from linux-next and other kernel 354 repositories are reporting that v2 often fetches way too much than 355 needed. 356 (merge 11c7f2a30b jn/demote-proto2-from-default later to maint). 357 358 * The upload-pack protocol v2 gave up too early before finding a 359 common ancestor, resulting in a wasteful fetch from a fork of a 360 project. This has been corrected to match the behaviour of v0 361 protocol. 362 (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint). 363 364 * The build procedure did not use the libcurl library and its include 365 files correctly for a custom-built installation. 366 (merge 0573831950 jk/build-with-right-curl later to maint). 367 368 * Tighten "git mailinfo" to notice and error out when decoded result 369 contains NUL in it. 370 (merge 3919997447 dd/mailinfo-with-nul later to maint). 371 372 * Fix in-core inconsistency after fetching into a shallow repository 373 that broke the code to write out commit-graph. 374 (merge 37b9dcabfc tb/reset-shallow later to maint). 375 376 * The commit-graph code exhausted file descriptors easily when it 377 does not have to. 378 (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint). 379 380 * The multi-pack-index left mmapped file descriptors open when it 381 does not have to. 382 (merge 6c7ff7cf7f ds/multi-pack-index later to maint). 383 384 * Recent update to Homebrew used by macOS folks breaks build by 385 moving gettext library and necessary headers. 386 (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint). 387 388 * Incompatible options "--root" and "--fork-point" of "git rebase" 389 have been marked and documented as being incompatible. 390 (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint). 391 392 * Error and verbose trace messages from "git push" did not redact 393 credential material embedded in URLs. 394 (merge d192fa5006 js/anonymise-push-url-in-errors later to maint). 395 396 * Update the parser used for credential.<URL>.<variable> 397 configuration, to handle <URL>s with '/' in them correctly. 398 (merge b44d0118ac bc/wildcard-credential later to maint). 399 400 * Recent updates broke parsing of "credential.<url>.<key>" where 401 <url> is not a full URL (e.g. [credential "https://"] helper = ...) 402 stopped working, which has been corrected. 403 (merge 9a121b0d22 js/partial-urlmatch-2.17 later to maint). 404 (merge cd93e6c029 js/partial-urlmatch later to maint). 405 406 * Some of the files commit-graph subsystem keeps on disk did not 407 correctly honor the core.sharedRepository settings and some were 408 left read-write. 409 410 * In error messages that "git switch" mentions its option to create a 411 new branch, "-b/-B" options were shown, where "-c/-C" options 412 should be, which has been corrected. 413 (merge 7c16ef7577 dl/switch-c-option-in-error-message later to maint). 414 415 * With the recent tightening of the code that is used to parse 416 various parts of a URL for use in the credential subsystem, a 417 hand-edited credential-store file causes the credential helper to 418 die, which is a bit too harsh to the users. Demote the error 419 behaviour to just ignore and keep using well-formed lines instead. 420 (merge c03859a665 cb/credential-store-ignore-bogus-lines later to maint). 421 422 * The samples in the credential documentation has been updated to 423 make it clear that we depict what would appear in the .git/config 424 file, by adding appropriate quotes as needed.. 425 (merge 177681a07e jk/credential-sample-update later to maint). 426 427 * "git branch" and other "for-each-ref" variants accepted multiple 428 --sort=<key> options in the increasing order of precedence, but it 429 had a few breakages around "--ignore-case" handling, and tie-breaking 430 with the refname, which have been fixed. 431 (merge 7c5045fc18 jk/for-each-ref-multi-key-sort-fix later to maint). 432 433 * The coding guideline for shell scripts instructed to refer to a 434 variable with dollar-sign inside arithmetic expansion to work 435 around a bug in old versions of dash, which is a thing of the past. 436 Now we are not forbidden from writing $((var+1)). 437 (merge 32b5fe7f0e jk/arith-expansion-coding-guidelines later to maint). 438 439 * The <stdlib.h> header on NetBSD brings in its own definition of 440 hmac() function (eek), which conflicts with our own and unrelated 441 function with the same name. Our function has been renamed to work 442 around the issue. 443 (merge 3013118eb8 cb/avoid-colliding-with-netbsd-hmac later to maint). 444 445 * The basic test did not honor $TEST_SHELL_PATH setting, which has 446 been corrected. 447 (merge 0555e4af58 cb/t0000-use-the-configured-shell later to maint). 448 449 * Minor in-code comments and documentation updates around credential 450 API. 451 (merge 1aed817f99 cb/credential-doc-fixes later to maint). 452 453 * Teach "am", "commit", "merge" and "rebase", when they are run with 454 the "--quiet" option, to pass "--quiet" down to "gc --auto". 455 (merge 7c3e9e8cfb jc/auto-gc-quiet later to maint). 456 457 * The code to skip unmerged paths in the index when sparse checkout 458 is in use would have made out-of-bound access of the in-core index 459 when the last path was unmerged, which has been corrected. 460 461 * Serving a "git fetch" client over "git://" and "ssh://" protocols 462 using the on-wire protocol version 2 was buggy on the server end 463 when the client needs to make a follow-up request to 464 e.g. auto-follow tags. 465 (merge 08450ef791 cc/upload-pack-v2-fetch-fix later to maint). 466 467 * "git bisect replay" had trouble with input files when they used 468 CRLF line ending, which has been corrected. 469 (merge 6c722cbe5a cw/bisect-replay-with-dos later to maint). 470 471 * "rebase -i" segfaulted when rearranging a sequence that has a 472 fix-up that applies another fix-up (which may or may not be a 473 fix-up of yet another step). 474 (merge 02471e7e20 js/rebase-autosquash-double-fixup-fix later to maint). 475 476 * "git fsck" ensures that the paths recorded in tree objects are 477 sorted and without duplicates, but it failed to notice a case where 478 a blob is followed by entries that sort before a tree with the same 479 name. This has been corrected. 480 (merge 9068cfb20f rs/fsck-duplicate-names-in-trees later to maint). 481 482 * Code clean-up by removing a compatibility implementation of a 483 function we no longer use. 484 (merge 84b0115f0d cb/no-more-gmtime later to maint). 485 486 * When a binary file gets modified and renamed on both sides of history 487 to different locations, both files would be written to the working 488 tree but both would have the contents from "ours". This has been 489 corrected so that the path from each side gets their original content. 490 491 * Fix for a copy-and-paste error introduced during 2.20 era. 492 (merge e68a5272b1 ds/multi-pack-verify later to maint). 493 494 * Update an unconditional use of "grep -a" with a perl script in a test. 495 (merge 1eb7371236 dd/t5703-grep-a-fix later to maint). 496 497 * Other code cleanup, docfix, build fix, etc. 498 (merge 564956f358 jc/maintain-doc later to maint). 499 (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint). 500 (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint). 501 (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint). 502 (merge 8312aa7d74 jc/config-tar later to maint). 503 (merge d00a5bdd50 ss/submodule-foreach-cb later to maint). 504 (merge 64d1022e14 ar/test-style-fixes later to maint). 505 (merge 4a465443a6 ds/doc-clone-filter later to maint). 506 (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint). 507 (merge d3507cc712 js/test-junit-finalization-fix later to maint). 508 (merge 2149b6748f bc/faq later to maint). 509 (merge 12dc0879f1 jk/test-cleanup later to maint). 510 (merge 344420bf0f pb/rebase-doc-typofix later to maint). 511 (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint). 512 (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint). 513 (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint). 514 (merge 0740d0a5d3 jk/oid-array-cleanups later to maint). 515 (merge a1aba0c95c js/t0007-typofix later to maint). 516 (merge 76ba7fa225 ma/config-doc-fix later to maint). 517 (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint). 518 (merge 88eaf361e0 eb/mboxrd-doc later to maint). 519 (merge 051cc54941 tm/zsh-complete-switch-restore later to maint). 520 (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint). 521 (merge 4d9378bfad eb/gitweb-more-trailers later to maint). 522 (merge bdccbf7047 mt/doc-worktree-ref later to maint). 523 (merge ce9baf234f dl/push-recurse-submodules-fix later to maint). 524 (merge 4153274052 bc/doc-credential-helper-value later to maint). 525 (merge 5c7bb0146e jc/codingstyle-compare-with-null later to maint).