| 1 | Git 2.36 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since Git 2.35 |
| 5 | ---------------------- |
| 6 | |
| 7 | Backward 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 | |
| 26 | Note 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 | |
| 37 | UI, 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 | |
| 115 | Performance, 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 | |
| 192 | Fixes 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). |