Git fork
at reftables-rust 514 lines 23 kB view raw
1Git 2.29 Release Notes 2====================== 3 4Updates since v2.28 5------------------- 6 7UI, Workflows & Features 8 9 * "git help log" has been enhanced by sharing more material from the 10 documentation for the underlying "git rev-list" command. 11 12 * "git for-each-ref --format=<>" learned %(contents:size). 13 14 * "git merge" learned to selectively omit " into <branch>" at the end 15 of the title of default merge message with merge.suppressDest 16 configuration. 17 18 * The component to respond to "git fetch" request is made more 19 configurable to selectively allow or reject object filtering 20 specification used for partial cloning. 21 22 * Stop when "sendmail.*" configuration variables are defined, which 23 could be a mistaken attempt to define "sendemail.*" variables. 24 25 * The existing backends for "git mergetool" based on variants of vim 26 have been refactored and then support for "nvim" has been added. 27 28 * "git bisect" learns the "--first-parent" option to find the first 29 breakage along the first-parent chain. 30 31 * "git log --first-parent -p" showed patches only for single-parent 32 commits on the first-parent chain; the "--first-parent" option has 33 been made to imply "-m". Use "--no-diff-merges" to restore the 34 previous behaviour to omit patches for merge commits. 35 36 * The commit labels used to explain each side of conflicted hunks 37 placed by the sequencer machinery have been made more readable by 38 humans. 39 40 * The "--batch-size" option of "git multi-pack-index repack" command 41 is now used to specify that very small packfiles are collected into 42 one until the total size roughly exceeds it. 43 44 * The recent addition of SHA-256 support is marked as experimental in 45 the documentation. 46 47 * "git fetch" learned --no-write-fetch-head option to avoid writing 48 the FETCH_HEAD file. 49 50 * Command line completion (in contrib/) usually omits redundant, 51 deprecated and/or dangerous options from its output; it learned to 52 optionally include all of them. 53 54 * The output from the "diff" family of the commands had abbreviated 55 object names of blobs involved in the patch, but its length was not 56 affected by the --abbrev option. Now it is. 57 58 * "git worktree" gained a "repair" subcommand to help users recover 59 after moving the worktrees or repository manually without telling 60 Git. Also, "git init --separate-git-dir" no longer corrupts 61 administrative data related to linked worktrees. 62 63 * The "--format=" option to the "for-each-ref" command and friends 64 learned a few more tricks, e.g. the ":short" suffix that applies to 65 "objectname" now also can be used for "parent", "tree", etc. 66 67 * "git worktree add" learns that the "-d" is a synonym to "--detach" 68 option to create a new worktree without being on a branch. 69 70 * "format-patch --range-diff=<prev> <origin>..HEAD" has been taught 71 not to ignore <origin> when <prev> is a single version. 72 73 * "add -p" now allows editing paths that were only added in intent. 74 75 * The 'meld' backend of the "git mergetool" learned to give the 76 underlying 'meld' the '--auto-merge' option, which would help 77 reduce the amount of text that requires manual merging. 78 79 * "git for-each-ref" and friends that list refs used to allow only 80 one --merged or --no-merged to filter them; they learned to take 81 combination of both kind of filtering. 82 83 * "git maintenance", a "git gc"'s big brother, has been introduced to 84 take care of more repository maintenance tasks, not limited to the 85 object database cleaning. 86 87 * "git receive-pack" that accepts requests by "git push" learned to 88 outsource most of the ref updates to the new "proc-receive" hook. 89 90 * "git push" that wants to be atomic and wants to send push 91 certificate learned not to prepare and sign the push certificate 92 when it fails the local check (hence due to atomicity it is known 93 that no certificate is needed). 94 95 * "git commit-graph write" learned to limit the number of bloom 96 filters that are computed from scratch with the --max-new-filters 97 option. 98 99 * The transport protocol v2 has become the default again. 100 101 * The installation procedure learned to optionally omit "git-foo" 102 executable files for each 'foo' built-in subcommand, which are only 103 required by old timers that still rely on the age old promise that 104 prepending "git --exec-path" output to PATH early in their script 105 will keep the "git-foo" calls they wrote working. 106 107 * The command line completion (in contrib/) learned that "git restore 108 -s <TAB>" is often followed by a refname. 109 110 * "git shortlog" has been taught to group commits by the contents of 111 the trailer lines, like "Reviewed-by:", "Coauthored-by:", etc. 112 113 * "git archive" learns the "--add-file" option to include untracked 114 files into a snapshot from a tree-ish. 115 116 * "git fetch" and "git push" support negative refspecs. 117 118 * "git format-patch" learns to take "whenAble" as a possible value 119 for the format.useAutoBase configuration variable to become no-op 120 when the automatically computed base does not make sense. 121 122 * Credential helpers are now allowed to terminate lines with CRLF 123 line ending, as well as LF line ending. 124 125 126Performance, Internal Implementation, Development Support etc. 127 128 * The changed-path Bloom filter is improved using ideas from an 129 independent implementation. 130 131 * Updates to the changed-paths bloom filter. 132 133 * The test framework has been updated so that most tests will run 134 with predictable (artificial) timestamps. 135 136 * Preliminary clean-up of the refs API in preparation for adding a 137 new refs backend "reftable". 138 139 * Dev support to limit the use of test_must_fail to only git commands. 140 141 * While packing many objects in a repository with a promissor remote, 142 lazily fetching missing objects from the promissor remote one by 143 one may be inefficient---the code now attempts to fetch all the 144 missing objects in batch (obviously this won't work for a lazy 145 clone that lazily fetches tree objects as you cannot even enumerate 146 what blobs are missing until you learn which trees are missing). 147 148 * The pretend-object mechanism checks if the given object already 149 exists in the object store before deciding to keep the data 150 in-core, but the check would have triggered lazy fetching of such 151 an object from a promissor remote. 152 153 * The argv_array API is useful for not just managing argv but any 154 "vector" (NULL-terminated array) of strings, and has seen adoption 155 to a certain degree. It has been renamed to "strvec" to reduce the 156 barrier to adoption. 157 158 * The final leg of SHA-256 transition plus doc updates. Note that 159 there is no interoperability between SHA-1 and SHA-256 160 repositories yet. 161 162 * CMake support to build with MSVC for Windows bypassing the Makefile. 163 164 * A new helper function has_object() has been introduced to make it 165 easier to mark object existence checks that do and don't want to 166 trigger lazy fetches, and a few such checks are converted using it. 167 168 * A no-op replacement function implemented as a C preprocessor macro 169 does not perform as good a job as one implemented as a "static 170 inline" function in catching errors in parameters; replace the 171 former with the latter in <git-compat-util.h> header. 172 173 * Test framework update. 174 (merge d572f52a64 es/test-cmp-typocatcher later to maint). 175 176 * Updates to "git merge" tests, in preparation for a new merge 177 strategy backend. 178 179 * midx and commit-graph files now use the byte defined in their file 180 format specification for identifying the hash function used for 181 object names. 182 183 * The FETCH_HEAD is now always read from the filesystem regardless of 184 the ref backend in use, as its format is much richer than the 185 normal refs, and written directly by "git fetch" as a plain file.. 186 187 * An unused binary has been discarded, and a bunch of commands 188 have been turned into built-in. 189 190 * A handful of places in in-tree code still relied on being able to 191 execute the git subcommands, especially built-ins, in "git-foo" 192 form, which have been corrected. 193 194 * When a packfile is removed by "git repack", multi-pack-index gets 195 cleared; the code was taught to do so less aggressively by first 196 checking if the midx actually refers to a pack that no longer 197 exists. 198 199 * Internal API clean-up to handle two options "diff-index" and "log" 200 have, which happen to share the same short form, more sensibly. 201 202 * The "add -i/-p" machinery has been written in C but it is not used 203 by default yet. It is made default to those who are participating 204 in feature.experimental experiment. 205 206 * Allow maintainers to tweak $(TAR) invocations done while making 207 distribution tarballs. 208 209 * "git index-pack" learned to resolve deltified objects with greater 210 parallelism. 211 212 * "diff-highlight" (in contrib/) had a logic to flush its output upon 213 seeing a blank line but the way it detected a blank line was broken. 214 215 * The logic to skip testing on the tagged commit and the tag itself 216 was not quite consistent which led to failure of Windows test 217 tasks. It has been revamped to consistently skip revisions that 218 have already been tested, based on the tree object of the revision. 219 220 221Fixes since v2.28 222----------------- 223 224 * The "mediawiki" remote backend which lives in contrib/mw-to-git/ 225 and is not built with git by default, had an RCE bug allowing a 226 malicious MediaWiki server operator to inject arbitrary commands 227 for execution by a cloning client. This has been fixed. 228 229 The bug was discovered and reported by Joern Schneeweisz of GitLab 230 to the git-security mailing list. Its practical impact due to the 231 obscurity of git-remote-mediawiki was deemed small enough to forgo 232 a dedicated security release. 233 234 * "git clone --separate-git-dir=$elsewhere" used to stomp on the 235 contents of the existing directory $elsewhere, which has been 236 taught to fail when $elsewhere is not an empty directory. 237 (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint). 238 239 * With the base fix to 2.27 regresion, any new extensions in a v0 240 repository would still be silently honored, which is not quite 241 right. Instead, complain and die loudly. 242 (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint). 243 244 * Fetching from a lazily cloned repository resulted at the server 245 side in attempts to lazy fetch objects that the client side has, 246 many of which will not be available from the third-party anyway. 247 (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint). 248 249 * Fix to an ancient bug caused by an over-eager attempt for 250 optimization. 251 (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint). 252 253 * Pushing a ref whose name contains non-ASCII character with the 254 "--force-with-lease" option did not work over smart HTTP protocol, 255 which has been corrected. 256 (merge cd85b447bf bc/push-cas-cquoted-refname later to maint). 257 258 * "git mv src dst", when src is an unmerged path, errored out 259 correctly but with an incorrect error message to claim that src is 260 not tracked, which has been clarified. 261 (merge 9b906af657 ct/mv-unmerged-path-error later to maint). 262 263 * Fix to a regression introduced during 2.27 cycle. 264 (merge cada7308ad en/fill-directory-exponential later to maint). 265 266 * Command line completion (in contrib/) update. 267 (merge 688b87c81b mp/complete-show-color-moved later to maint). 268 269 * All "mergy" operations that internally use the merge-recursive 270 machinery should honor the merge.renormalize configuration, but 271 many of them didn't. 272 273 * Doc cleanup around "worktree". 274 (merge dc9c144be5 es/worktree-doc-cleanups later to maint). 275 276 * The "git blame --first-parent" option was not documented, but now 277 it is. 278 (merge 11bc12ae1e rp/blame-first-parent-doc later to maint). 279 280 * The logic to find the ref transaction hook script attempted to 281 cache the path to the found hook without realizing that it needed 282 to keep a copied value, as the API it used returned a transitory 283 buffer space. This has been corrected. 284 (merge 09b2aa30c9 ps/ref-transaction-hook later to maint). 285 286 * Recent versions of "git diff-files" shows a diff between the index 287 and the working tree for "intent-to-add" paths as a "new file" 288 patch; "git apply --cached" should be able to take "git diff-files" 289 and should act as an equivalent to "git add" for the path, but the 290 command failed to do so for such a path. 291 (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint). 292 293 * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a 294 bit was not showing the mode bits from the working tree. 295 (merge cb0dd22b82 rp/ita-diff-modefix later to maint). 296 297 * Ring buffer with size 4 used for bin-hex translation resulted in a 298 wrong object name in the sequencer's todo output, which has been 299 corrected. 300 (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint). 301 302 * When given more than one target line ranges, "git blame -La,b 303 -Lc,d" was over-eager to coalesce groups of original lines and 304 showed incorrect results, which has been corrected. 305 (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint). 306 307 * The regexp to identify the function boundary for FORTRAN programs 308 has been updated. 309 (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint). 310 311 * A few end-user facing messages have been updated to be 312 hash-algorithm agnostic. 313 (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint). 314 315 * "unlink" emulation on MinGW has been optimized. 316 (merge 680e0b4524 jh/mingw-unlink later to maint). 317 318 * The purpose of "git init --separate-git-dir" is to initialize a 319 new project with the repository separate from the working tree, 320 or, in the case of an existing project, to move the repository 321 (the .git/ directory) out of the working tree. It does not make 322 sense to use --separate-git-dir with a bare repository for which 323 there is no working tree, so disallow its use with bare 324 repositories. 325 (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint). 326 327 * "ls-files -o" mishandled the top-level directory of another git 328 working tree that hangs in the current git working tree. 329 (merge ab282aa548 en/dir-nonbare-embedded later to maint). 330 331 * Fix some incorrect UNLEAK() annotations. 332 (merge 3e19816dc0 jk/unleak-fixes later to maint). 333 334 * Use more buffered I/O where we used to call many small write(2)s. 335 (merge a698d67b08 rs/more-buffered-io later to maint). 336 337 * The patch-id computation did not ignore the "incomplete last line" 338 marker like whitespaces. 339 (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint). 340 341 * Updates into a lazy/partial clone with a submodule did not work 342 well with transfer.fsckobjects set. 343 344 * The parser for "git for-each-ref --format=..." was too loose when 345 parsing the "%(trailers...)" atom, and forgot that "trailers" and 346 "trailers:<modifiers>" are the only two allowed forms, which has 347 been corrected. 348 (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint). 349 350 * Long ago, we decided to use 3 threads by default when running the 351 index-pack task in parallel, which has been adjusted a bit upwards. 352 (merge fbff95b67f jk/index-pack-w-more-threads later to maint). 353 354 * "git restore/checkout --no-overlay" with wildcarded pathspec 355 mistakenly removed matching paths in subdirectories, which has been 356 corrected. 357 (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint). 358 359 * The description of --cached/--index options in "git apply --help" 360 has been updated. 361 (merge d064702be3 rp/apply-cached-doc later to maint). 362 363 * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and 364 running "git log --ignore-missing $ZERO_OID" fell back to start 365 digging from HEAD; it has been corrected to become a no-op, like 366 "git log --tags=no-tag-matches-this-pattern" does. 367 (merge 04a0e98515 jk/rev-input-given-fix later to maint). 368 369 * Various callers of run_command API have been modernized. 370 (merge afbdba391e jc/run-command-use-embedded-args later to maint). 371 372 * List of options offered and accepted by "git add -i/-p" were 373 inconsistent, which have been corrected. 374 (merge ce910287e7 pw/add-p-allowed-options-fix later to maint). 375 376 * "git diff --stat -w" showed 0-line changes for paths whose changes 377 were only whitespaces, which was not intuitive. We now omit such 378 paths from the stat output. 379 (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint). 380 381 * It was possible for xrealloc() to send a non-NULL pointer that has 382 been freed, which has been fixed. 383 (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint). 384 385 * "git status" has trouble showing where it came from by interpreting 386 reflog entries that record certain events, e.g. "checkout @{u}", and 387 gives a hard/fatal error. Even though it inherently is impossible 388 to give a correct answer because the reflog entries lose some 389 information (e.g. "@{u}" does not record what branch the user was 390 on hence which branch 'the upstream' needs to be computed, and even 391 if the record were available, the relationship between branches may 392 have changed), at least hide the error and allow "status" to show its 393 output. 394 395 * "git status --short" quoted a path with SP in it when tracked, but 396 not those that are untracked, ignored or unmerged. They are all 397 shown quoted consistently. 398 399 * "git diff/show" on a change that involves a submodule used to read 400 the information on commits in the submodule from a wrong repository 401 and gave a wrong information when the commit-graph is involved. 402 (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint). 403 404 * Unlike "git config --local", "git config --worktree" did not fail 405 early and cleanly when started outside a git repository. 406 (merge 378fe5fc3d mt/config-fail-nongit-early later to maint). 407 408 * There is a logic to estimate how many objects are in the 409 repository, which is meant to run once per process invocation, but 410 it ran every time the estimated value was requested. 411 (merge 67bb65de5d jk/dont-count-existing-objects-twice later to maint). 412 413 * "git remote set-head" that failed still said something that hints 414 the operation went through, which was misleading. 415 (merge 5a07c6c3c2 cs/don-t-pretend-a-failed-remote-set-head-succeeded later to maint). 416 417 * "git fetch --all --ipv4/--ipv6" forgot to pass the protocol options 418 to instances of the "git fetch" that talk to individual remotes, 419 which has been corrected. 420 (merge 4e735c1326 ar/fetch-ipversion-in-all later to maint). 421 422 * The "unshelve" subcommand of "git p4" incorrectly used commit^N 423 where it meant to say commit~N to name the Nth generation 424 ancestor, which has been corrected. 425 (merge 0acbf5997f ld/p4-unshelve-fix later to maint). 426 427 * "git clone" that clones from SHA-1 repository, while 428 GIT_DEFAULT_HASH set to use SHA-256 already, resulted in an 429 unusable repository that half-claims to be SHA-256 repository 430 with SHA-1 objects and refs. This has been corrected. 431 432 * Adjust sample hooks for hash algorithm other than SHA-1. 433 (merge d8d3d632f4 dl/zero-oid-in-hooks later to maint). 434 435 * "git range-diff" showed incorrect diffstat, which has been 436 corrected. 437 438 * Earlier we taught "git pull" to warn when the user does not say the 439 histories need to be merged, rebased or accepts only fast- 440 forwarding, but the warning triggered for those who have set the 441 pull.ff configuration variable. 442 (merge 54200cef86 ah/pull later to maint). 443 444 * Compilation fix around type punning. 445 (merge 176380fd11 jk/drop-unaligned-loads later to maint). 446 447 * "git blame --ignore-rev/--ignore-revs-file" failed to validate 448 their input are valid revision, and failed to take into account 449 that the user may want to give an annotated tag instead of a 450 commit, which has been corrected. 451 (merge 610e2b9240 jc/blame-ignore-fix later to maint). 452 453 * "git bisect start X Y", when X and Y are not valid committish 454 object names, should take X and Y as pathspec, but didn't. 455 (merge 73c6de06af cc/bisect-start-fix later to maint). 456 457 * The explanation of the "scissors line" has been clarified. 458 (merge 287416dba6 eg/mailinfo-doc-scissors later to maint). 459 460 * A race that leads to an access to a free'd data was corrected in 461 the codepath that reads pack files. 462 (merge bda959c476 mt/delta-base-cache-races later to maint). 463 464 * in_merge_bases_many(), a way to see if a commit is reachable from 465 any commit in a set of commits, was totally broken when the 466 commit-graph feature was in use, which has been corrected. 467 (merge 8791bf1841 ds/in-merge-bases-many-optim-bug later to maint). 468 469 * "git submodule update --quiet" did not squelch underlying "rebase" 470 and "pull" commands. 471 (merge 3ad0401e9e td/submodule-update-quiet later to maint). 472 473 * The lazy fetching done internally to make missing objects available 474 in a partial clone incorrectly made permanent damage to the partial 475 clone filter in the repository, which has been corrected. 476 477 * "log -c --find-object=X" did not work well to find a merge that 478 involves a change to an object X from only one parent. 479 (merge 957876f17d jk/diff-cc-oidfind-fix later to maint). 480 481 * Other code cleanup, docfix, build fix, etc. 482 (merge 84544f2ea3 sk/typofixes later to maint). 483 (merge b17f411ab5 ar/help-guides-doc later to maint). 484 (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint). 485 (merge 861c4ce141 en/typofixes later to maint). 486 (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint). 487 (merge e2bfa50ac3 jb/doc-packfile-name later to maint). 488 (merge 918d8ff780 es/worktree-cleanup later to maint). 489 (merge dc156bc31f ma/t1450-quotefix later to maint). 490 (merge 56e743426b en/merge-recursive-comment-fixes later to maint). 491 (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint). 492 (merge de20baf2c9 ny/notes-doc-sample-update later to maint). 493 (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint). 494 (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint). 495 (merge ac900fddb7 ma/stop-progress-null-fix later to maint). 496 (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint). 497 (merge a831908599 rs/preserve-merges-unused-code-removal later to maint). 498 (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint). 499 (merge 847b37271e pb/set-url-docfix later to maint). 500 (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint). 501 (merge ce820cbd58 dl/subtree-docs later to maint). 502 (merge 55fe225dde jk/leakfix later to maint). 503 (merge ee22a29215 so/pretty-abbrev-doc later to maint). 504 (merge 3100fd5588 jc/post-checkout-doc later to maint). 505 (merge 17bae89476 pb/doc-external-diff-env later to maint). 506 (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint). 507 (merge 1302badd16 ea/blame-use-oideq later to maint). 508 (merge e6d5a11fed al/t3200-back-on-a-branch later to maint). 509 (merge 324efcf6b6 pw/add-p-leakfix later to maint). 510 (merge 1c6ffb546b jk/add-i-fixes later to maint). 511 (merge e40e936551 cd/commit-graph-doc later to maint). 512 (merge 0512eabd91 jc/sequencer-stopped-sha-simplify later to maint). 513 (merge d01141de5a so/combine-diff-simplify later to maint). 514 (merge 3be01e5ab1 sn/fast-import-doc later to maint).