Git fork
at reftables-rust 429 lines 19 kB view raw
1Git 2.36 Release Notes 2====================== 3 4Updates since Git 2.35 5---------------------- 6 7Backward compatibility warts 8 9 * "git name-rev --stdin" has been deprecated and issues a warning 10 when used; use "git name-rev --annotate-stdin" instead. 11 12 * "git clone --filter=... --recurse-submodules" only makes the 13 top-level a partial clone, while submodules are fully cloned. This 14 behaviour is changed to pass the same filter down to the submodules. 15 16 * With the fixes for CVE-2022-24765 that are common with versions of 17 Git 2.30.4, 2.31.3, 2.32.2, 2.33.3, 2.34.3, and 2.35.3, Git has 18 been taught not to recognise repositories owned by other users, in 19 order to avoid getting affected by their config files and hooks. 20 You can list the path to the safe/trusted repositories that may be 21 owned by others on a multi-valued configuration variable 22 `safe.directory` to override this behaviour, or use '*' to declare 23 that you trust anything. 24 25 26Note to those who build from the source 27 28 * Since Git 2.31, our source assumed that the compiler you use to 29 build Git supports variadic macros, with an easy-to-use escape 30 hatch to allow compilation without variadic macros with an request 31 to report that you had to use the escape hatch to the list. 32 Because we haven't heard from anybody who actually needed to use 33 the escape hatch, it has been removed, making support of variadic 34 macros a hard requirement. 35 36 37UI, Workflows & Features 38 39 * Assorted updates to "git cat-file", especially "-h". 40 41 * The command line completion (in contrib/) learns to complete 42 arguments to give to "git sparse-checkout" command. 43 44 * "git log --remerge-diff" shows the difference from mechanical merge 45 result and the result that is actually recorded in a merge commit. 46 47 * "git log" and friends learned an option --exclude-first-parent-only 48 to propagate UNINTERESTING bit down only along the first-parent 49 chain, just like --first-parent option shows commits that lack the 50 UNINTERESTING bit only along the first-parent chain. 51 52 * The command line completion script (in contrib/) learned to 53 complete all Git subcommands, including the ones that are normally 54 hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used. 55 56 * "git branch" learned the "--recurse-submodules" option. 57 58 * A user can forget to make a script file executable before giving 59 it to "git bisect run". In such a case, all tests will exit with 60 126 or 127 error codes, even on revisions that are marked as good. 61 Try to recognize this situation and stop iteration early. 62 63 * When "index-pack" dies due to incoming data exceeding the maximum 64 allowed input size, include the value of the limit in the error 65 message. 66 67 * The error message given by "git switch HEAD~4" has been clarified 68 to suggest the "--detach" option that is required. 69 70 * In sparse-checkouts, files mis-marked as missing from the working tree 71 could lead to later problems. Such files were hard to discover, and 72 harder to correct. Automatically detecting and correcting the marking 73 of such files has been added to avoid these problems. 74 75 * "git cat-file" learns "--batch-command" mode, which is a more 76 flexible interface than the existing "--batch" or "--batch-check" 77 modes, to allow different kinds of inquiries made. 78 79 * The level of verbose output from the ort backend during inner merge 80 has been aligned to that of the recursive backend. 81 82 * "git remote rename A B", depending on the number of remote-tracking 83 refs involved, takes long time renaming them. The command has been 84 taught to show progress bar while making the user wait. 85 86 * Bundle file format gets extended to allow a partial bundle, 87 filtered by similar criteria you would give when making a 88 partial/lazy clone. 89 90 * A new built-in userdiff driver for kotlin has been added. 91 92 * "git repack" learned a new configuration to disable triggering of 93 age-old "update-server-info" command, which is rarely useful these 94 days. 95 96 * "git stash" does not allow subcommands it internally runs as its 97 implementation detail, except for "git reset", to emit messages; 98 now "git reset" part has also been squelched. 99 100 * "git ls-tree" learns "--oid-only" option, similar to "--name-only", 101 and more generalized "--format" option. 102 103 * "git fetch --refetch" learned to fetch everything without telling 104 the other side what we already have, which is useful when you 105 cannot trust what you have in the local object store. 106 107 * "git branch" gives hint when branch tracking cannot be established 108 because fetch refspecs from multiple remote repositories overlap. 109 110 * "git worktree list --porcelain" did not c-quote pathnames and lock 111 reasons with unsafe bytes correctly, which is worked around by 112 introducing NUL terminated output format with "-z". 113 114 115Performance, Internal Implementation, Development Support etc. 116 117 * "git apply" (ab)used the util pointer of the string-list to keep 118 track of how each symbolic link needs to be handled, which has been 119 simplified by using strset. 120 121 * Fix a hand-rolled alloca() imitation that may have violated 122 alignment requirement of data being sorted in compatibility 123 implementation of qsort_s() and stable qsort(). 124 125 * Use the parse-options API in "git reflog" command. 126 127 * The conditional inclusion mechanism of configuration files using 128 "[includeIf <condition>]" learns to base its decision on the 129 URL of the remote repository the repository interacts with. 130 (merge 399b198489 jt/conditional-config-on-remote-url later to maint). 131 132 * "git name-rev --stdin" does not behave like usual "--stdin" at 133 all. Start the process of renaming it to "--annotate-stdin". 134 (merge a2585719b3 jc/name-rev-stdin later to maint). 135 136 * "git update-index", "git checkout-index", and "git clean" are 137 taught to work better with the sparse checkout feature. 138 139 * Use an internal call to reset_head() helper function instead of 140 spawning "git checkout" in "rebase", and update code paths that are 141 involved in the change. 142 143 * Messages "ort" merge backend prepares while dealing with conflicted 144 paths were unnecessarily confusing since it did not differentiate 145 inner merges and outer merges. 146 147 * Small modernization of the rerere-train script (in contrib/). 148 149 * Use designated initializers we started using in mid 2017 in more 150 parts of the codebase that are relatively quiescent. 151 152 * Improve failure case behaviour of xdiff library when memory 153 allocation fails. 154 155 * General clean-up in reftable implementation, including 156 clarification of the API documentation, tightening the code to 157 honor documented length limit, etc. 158 159 * Remove the escape hatch we added when we introduced the weather 160 balloon to use variadic macros unconditionally, to make it official 161 that we now have a hard dependency on the feature. 162 163 * Makefile refactoring with a bit of suffixes rule stripping to 164 optimize the runtime overhead. 165 166 * "git stash drop" is reimplemented as an internal call to 167 reflog_delete() function, instead of invoking "git reflog delete" 168 via run_command() API. 169 170 * Count string_list items in size_t, not "unsigned int". 171 172 * The single-key interactive operation used by "git add -p" has been 173 made more robust. 174 175 * Remove unneeded <meta http-equiv=content-type...> from gitweb 176 output. 177 178 * "git name-rev" learned to use the generation numbers when setting 179 the lower bound of searching commits used to explain the revision, 180 when available, instead of committer time. 181 182 * Replace core.fsyncObjectFiles with two new configuration variables, 183 core.fsync and core.fsyncMethod. 184 185 * Updates to refs traditionally weren't fsync'ed, but we can 186 configure using core.fsync variable to do so. 187 188 * "git reflog" command now uses parse-options API to parse its 189 command line options. 190 191 192Fixes since v2.35 193----------------- 194 195 * "rebase" and "stash" in secondary worktrees are broken in 196 Git 2.35.0, which has been corrected. 197 198 * "git pull --rebase" ignored the rebase.autostash configuration 199 variable when the remote history is a descendant of our history, 200 which has been corrected. 201 (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint). 202 203 * "git update-index --refresh" has been taught to deal better with 204 racy timestamps (just like "git status" already does). 205 (merge 2ede073fd2 ms/update-index-racy later to maint). 206 207 * Avoid tests that are run under GIT_TRACE2 set from failing 208 unnecessarily. 209 (merge 944d808e42 js/test-unset-trace2-parents later to maint). 210 211 * The merge-ort misbehaved when merge.renameLimit configuration is 212 set too low and failed to find all renames. 213 (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint). 214 215 * We explain that revs come first before the pathspec among command 216 line arguments, but did not spell out that dashed options come 217 before other args, which has been corrected. 218 (merge c11f95010c tl/doc-cli-options-first later to maint). 219 220 * "git add -p" rewritten in C regressed hunk splitting in some cases, 221 which has been corrected. 222 (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint). 223 224 * "git fetch --negotiate-only" is an internal command used by "git 225 push" to figure out which part of our history is missing from the 226 other side. It should never recurse into submodules even when 227 fetch.recursesubmodules configuration variable is set, nor it 228 should trigger "gc". The code has been tightened up to ensure it 229 only does common ancestry discovery and nothing else. 230 (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint). 231 232 * The code path that verifies signatures made with ssh were made to 233 work better on a system with CRLF line endings. 234 (merge caeef01ea7 fs/ssh-signing-crlf later to maint). 235 236 * "git sparse-checkout init" failed to write into $GIT_DIR/info 237 directory when the repository was created without one, which has 238 been corrected to auto-create it. 239 (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint). 240 241 * Cloning from a repository that does not yet have any branches or 242 tags but has other refs resulted in a "remote transport reported 243 error", which has been corrected. 244 (merge dccea605b6 jt/clone-not-quite-empty later to maint). 245 246 * Mark in various places in the code that the sparse index and the 247 split index features are mutually incompatible. 248 (merge 451b66c533 js/sparse-vs-split-index later to maint). 249 250 * Update the logic to compute alignment requirement for our mem-pool. 251 (merge e38bcc66d8 jc/mem-pool-alignment later to maint). 252 253 * Pick a better random number generator and use it when we prepare 254 temporary filenames. 255 (merge 47efda967c bc/csprng-mktemps later to maint). 256 257 * Update the contributor-facing documents on proposed log messages. 258 (merge cdba0295b0 jc/doc-log-messages later to maint). 259 260 * When "git fetch --prune" failed to prune the refs it wanted to 261 prune, the command issued error messages but exited with exit 262 status 0, which has been corrected. 263 (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint). 264 265 * Problems identified by Coverity in the reftable code have been 266 corrected. 267 (merge 01033de49f hn/reftable-coverity-fixes later to maint). 268 269 * A bug that made multi-pack bitmap and the object order out-of-sync, 270 making the .midx data corrupt, has been fixed. 271 (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint). 272 273 * The build procedure has been taught to notice older version of zlib 274 and enable our replacement uncompress2() automatically. 275 (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint). 276 277 * Interaction between fetch.negotiationAlgorithm and 278 feature.experimental configuration variables has been corrected. 279 (merge 714edc620c en/fetch-negotiation-default-fix later to maint). 280 281 * "git diff --diff-filter=aR" is now parsed correctly. 282 (merge 75408ca949 js/diff-filter-negation-fix later to maint). 283 284 * When "git subtree" wants to create a merge, it used "git merge" and 285 let it be affected by end-user's "merge.ff" configuration, which 286 has been corrected. 287 (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint). 288 289 * Unlike "git apply", "git patch-id" did not handle patches with 290 hunks that has only 1 line in either preimage or postimage, which 291 has been corrected. 292 (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint). 293 294 * "receive-pack" checks if it will do any ref updates (various 295 conditions could reject a push) before received objects are taken 296 out of the temporary directory used for quarantine purposes, so 297 that a push that is known-to-fail will not leave crufts that a 298 future "gc" needs to clean up. 299 (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint). 300 301 * When there is no object to write .bitmap file for, "git 302 multi-pack-index" triggered an error, instead of just skipping, 303 which has been corrected. 304 (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint). 305 306 * "git cmd -h" outside a repository should error out cleanly for many 307 commands, but instead it hit a BUG(), which has been corrected. 308 (merge 87ad07d735 js/short-help-outside-repo-fix later to maint). 309 310 * "working tree" and "per-worktree ref" were in glossary, but 311 "worktree" itself wasn't, which has been corrected. 312 (merge 2df5387ed0 jc/glossary-worktree later to maint). 313 314 * L10n support for a few error messages. 315 (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint). 316 317 * Test modernization. 318 (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint). 319 320 * "git log --graph --graph" used to leak a graph structure, and there 321 was no way to countermand "--graph" that appear earlier on the 322 command line. A "--no-graph" option has been added and resource 323 leakage has been plugged. 324 325 * Error output given in response to an ambiguous object name has been 326 improved. 327 (merge 3a73c1dfaf ab/ambiguous-object-name later to maint). 328 329 * "git sparse-checkout" wants to work with per-worktree configuration, 330 but did not work well in a worktree attached to a bare repository. 331 (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint). 332 333 * Setting core.untrackedCache to true failed to add the untracked 334 cache extension to the index. 335 336 * Workaround we have for versions of PCRE2 before their version 10.36 337 were in effect only for their versions newer than 10.36 by mistake, 338 which has been corrected. 339 (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint). 340 341 * Document Taylor as a new member of Git PLC at SFC. Welcome. 342 (merge e8d56ca863 tb/coc-plc-update later to maint). 343 344 * "git checkout -b branch/with/multi/level/name && git stash" only 345 recorded the last level component of the branch name, which has 346 been corrected. 347 348 * Check the return value from parse_tree_indirect() to turn segfaults 349 into calls to die(). 350 (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint). 351 352 * Newer version of GPGSM changed its output in a backward 353 incompatible way to break our code that parses its output. It also 354 added more processes our tests need to kill when cleaning up. 355 Adjustments have been made to accommodate these changes. 356 (merge b0b70d54c4 fs/gpgsm-update later to maint). 357 358 * The untracked cache newly computed weren't written back to the 359 on-disk index file when there is no other change to the index, 360 which has been corrected. 361 362 * "git config -h" did not describe the "--type" option correctly. 363 (merge 5445124fad mf/fix-type-in-config-h later to maint). 364 365 * The way generation number v2 in the commit-graph files are 366 (not) handled has been corrected. 367 (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint). 368 369 * The method to trigger malloc check used in our tests no longer work 370 with newer versions of glibc. 371 (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint). 372 373 * When "git fetch --recurse-submodules" grabbed submodule commits 374 that would be needed to recursively check out newly fetched commits 375 in the superproject, it only paid attention to submodules that are 376 in the current checkout of the superproject. We now do so for all 377 submodules that have been run "git submodule init" on. 378 379 * "git rebase $base $non_branch_commit", when $base is an ancestor or 380 the $non_branch_commit, modified the current branch, which has been 381 corrected. 382 383 * When "shallow" information is updated, we forgot to update the 384 in-core equivalent, which has been corrected. 385 386 * When creating a loose object file, we didn't report the exact 387 filename of the file we failed to fsync, even though the 388 information was readily available, which has been corrected. 389 390 * "git am" can read from the standard input when no mailbox is given 391 on the command line, but the end-user gets no indication when it 392 happens, making Git appear stuck. 393 (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint). 394 395 * "git mv" failed to refresh the cached stat information for the 396 entry it moved. 397 (merge b7f9130a06 vd/mv-refresh-stat later to maint). 398 399 * Other code cleanup, docfix, build fix, etc. 400 (merge cfc5cf428b jc/find-header later to maint). 401 (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint). 402 (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint). 403 (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint). 404 (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint). 405 (merge 6046f7a91c en/plug-leaks-in-merge later to maint). 406 (merge 8c591dbfce bc/clarify-eol-attr later to maint). 407 (merge 518e15db74 rs/parse-options-lithelp-help later to maint). 408 (merge cbac0076ef gh/doc-typos later to maint). 409 (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint). 410 (merge 2826ffad8c rc/negotiate-only-typofix later to maint). 411 (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint). 412 (merge 74f3390dde sy/diff-usage-typofix later to maint). 413 (merge 45d0212a71 ll/doc-mktree-typofix later to maint). 414 (merge e9b272e4c1 js/no-more-legacy-stash later to maint). 415 (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint). 416 (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint). 417 (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint). 418 (merge d17294a05e ab/hash-object-leakfix later to maint). 419 (merge b8403129d3 jd/t0015-modernize later to maint). 420 (merge 332acc248d ds/mailmap later to maint). 421 (merge 04bf052eef ab/grep-patterntype later to maint). 422 (merge 6ee36364eb ab/diff-free-more later to maint). 423 (merge 63a36017fe nj/read-tree-doc-reffix later to maint). 424 (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint). 425 (merge c614beb933 ep/t6423-modernize later to maint). 426 (merge 57be9c6dee ab/reflog-prep-fix later to maint). 427 (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint). 428 (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint). 429 (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).