| 1 | Git 2.34 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since Git 2.33 |
| 5 | ---------------------- |
| 6 | |
| 7 | Backward compatibility notes |
| 8 | |
| 9 | * The "--preserve-merges" option of "git rebase" has been removed. |
| 10 | |
| 11 | |
| 12 | UI, Workflows & Features |
| 13 | |
| 14 | * Pathname expansion (like "~username/") learned a way to specify a |
| 15 | location relative to Git installation (e.g. its $sharedir which is |
| 16 | $(prefix)/share), with "%(prefix)". |
| 17 | |
| 18 | * The `ort` strategy is used instead of `recursive` as the default |
| 19 | merge strategy. |
| 20 | |
| 21 | * The userdiff pattern for "java" language has been updated. |
| 22 | |
| 23 | * "git rebase" by default skips changes that are equivalent to |
| 24 | commits that are already in the history the branch is rebased onto; |
| 25 | give messages when this happens to let the users be aware of |
| 26 | skipped commits, and also teach them how to tell "rebase" to keep |
| 27 | duplicated changes. |
| 28 | |
| 29 | * The advice message that "git cherry-pick" gives when it asks |
| 30 | conflicted replay of a commit to be resolved by the end user has |
| 31 | been updated. |
| 32 | |
| 33 | * After "git clone --recurse-submodules", all submodules are cloned |
| 34 | but they are not by default recursed into by other commands. With |
| 35 | submodule.stickyRecursiveClone configuration set, submodule.recurse |
| 36 | configuration is set to true in a repository created by "clone" |
| 37 | with "--recurse-submodules" option. |
| 38 | |
| 39 | * The logic for auto-correction of misspelt subcommands learned to go |
| 40 | interactive when the help.autocorrect configuration variable is set |
| 41 | to 'prompt'. |
| 42 | |
| 43 | * "git maintenance" scheduler learned to use systemd timers as a |
| 44 | possible backend. |
| 45 | |
| 46 | * "git diff --submodule=diff" showed failure from run_command() when |
| 47 | trying to run diff inside a submodule, when the user manually |
| 48 | removes the submodule directory. |
| 49 | |
| 50 | * "git bundle unbundle" learned to show progress display. |
| 51 | |
| 52 | * In cone mode, the sparse-index code path learned to remove ignored |
| 53 | files (like build artifacts) outside the sparse cone, allowing the |
| 54 | entire directory outside the sparse cone to be removed, which is |
| 55 | especially useful when the sparse patterns change. |
| 56 | |
| 57 | * Taking advantage of the CGI interface, http-backend has been |
| 58 | updated to enable protocol v2 automatically when the other side |
| 59 | asks for it. |
| 60 | |
| 61 | * The credential-cache helper has been adjusted to Windows. |
| 62 | |
| 63 | * The error in "git help no-such-git-command" is handled better. |
| 64 | |
| 65 | * The unicode character width table (used for output alignment) has |
| 66 | been updated. |
| 67 | |
| 68 | * The ref iteration code used to optionally allow dangling refs to be |
| 69 | shown, which has been tightened up. |
| 70 | |
| 71 | * "git add", "git mv", and "git rm" have been adjusted to avoid |
| 72 | updating paths outside of the sparse-checkout definition unless |
| 73 | the user specifies a "--sparse" option. |
| 74 | |
| 75 | * "git repack" has been taught to generate multi-pack reachability |
| 76 | bitmaps. |
| 77 | |
| 78 | * "git fsck" has been taught to report mismatch between expected and |
| 79 | actual types of an object better. |
| 80 | |
| 81 | * In addition to GnuPG, ssh public crypto can be used for object and |
| 82 | push-cert signing. Note that this feature cannot be used with |
| 83 | ssh-keygen from OpenSSH 8.7, whose support for it is broken. Avoid |
| 84 | using it unless you update to OpenSSH 8.8. |
| 85 | |
| 86 | * "git log --grep=string --author=name" learns to highlight hits just |
| 87 | like "git grep string" does. |
| 88 | |
| 89 | |
| 90 | |
| 91 | Performance, Internal Implementation, Development Support etc. |
| 92 | |
| 93 | * "git bisect" spawned "git show-branch" only to pretty-print the |
| 94 | title of the commit after checking out the next version to be |
| 95 | tested; this has been rewritten in C. |
| 96 | |
| 97 | * "git add" can work better with the sparse index. |
| 98 | |
| 99 | * Support for ancient versions of cURL library (pre 7.19.4) has been |
| 100 | dropped. |
| 101 | |
| 102 | * A handful of tests that assumed implementation details of files |
| 103 | backend for refs have been cleaned up. |
| 104 | |
| 105 | * trace2 logs learned to show parent process name to see in what |
| 106 | context Git was invoked. |
| 107 | |
| 108 | * Loading of ref tips to prepare for common ancestry negotiation in |
| 109 | "git fetch-pack" has been optimized by taking advantage of the |
| 110 | commit graph when available. |
| 111 | |
| 112 | * Remind developers that the userdiff patterns should be kept simple |
| 113 | and permissive, assuming that the contents they apply are always |
| 114 | syntactically correct. |
| 115 | |
| 116 | * The current implementation of GIT_TEST_FAIL_PREREQS is broken in |
| 117 | that checking for the lack of a prerequisite would not work. Avoid |
| 118 | the use of "if ! test_have_prereq X" in a test script. |
| 119 | |
| 120 | * The revision traversal API has been optimized by taking advantage |
| 121 | of the commit-graph, when available, to determine if a commit is |
| 122 | reachable from any of the existing refs. |
| 123 | |
| 124 | * "git fetch --quiet" optimization to avoid useless computation of |
| 125 | info that will never be displayed. |
| 126 | |
| 127 | * Callers from older advice_config[] based API has been updated to |
| 128 | use the newer advice_if_enabled() and advice_enabled() API. |
| 129 | |
| 130 | * Teach "test_pause" and "debug" helpers to allow using the HOME and |
| 131 | TERM environment variables the user usually uses. |
| 132 | |
| 133 | * "make INSTALL_STRIP=-s install" allows the installation step to use |
| 134 | "install -s" to strip the binaries as they get installed. |
| 135 | |
| 136 | * Code that handles large number of refs in the "git fetch" code |
| 137 | path has been optimized. |
| 138 | |
| 139 | * The reachability bitmap file used to be generated only for a single |
| 140 | pack, but now we've learned to generate bitmaps for history that |
| 141 | span across multiple packfiles. |
| 142 | |
| 143 | * The code to make "git grep" recurse into submodules has been |
| 144 | updated to migrate away from the "add submodule's object store as |
| 145 | an alternate object store" mechanism (which is suboptimal). |
| 146 | |
| 147 | * The tracing of process ancestry information has been enhanced. |
| 148 | |
| 149 | * Reduce number of write(2) system calls while sending the |
| 150 | ref advertisement. |
| 151 | |
| 152 | * Update the build procedure to use the "-pedantic" build when |
| 153 | DEVELOPER makefile macro is in effect. |
| 154 | |
| 155 | * Large part of "git submodule add" gets rewritten in C. |
| 156 | |
| 157 | * The run-command API has been updated so that the callers can easily |
| 158 | ask the file descriptors open for packfiles to be closed immediately |
| 159 | before spawning commands that may trigger auto-gc. |
| 160 | |
| 161 | * An oddball OPTION_ARGUMENT feature has been removed from the |
| 162 | parse-options API. |
| 163 | |
| 164 | * The mergesort implementation used to sort linked list has been |
| 165 | optimized. |
| 166 | |
| 167 | * Remove external declaration of functions that no longer exist. |
| 168 | |
| 169 | * "git multi-pack-index write --bitmap" learns to propagate the |
| 170 | hashcache from original bitmap to resulting bitmap. |
| 171 | |
| 172 | * CI learns to run the leak sanitizer builds. |
| 173 | |
| 174 | * "git grep --recurse-submodules" takes trees and blobs from the |
| 175 | submodule repository, but the textconv settings when processing a |
| 176 | blob from the submodule is not taken from the submodule repository. |
| 177 | A test is added to demonstrate the issue, without fixing it. |
| 178 | |
| 179 | * Teach "git help -c" into helping the command line completion of |
| 180 | configuration variables. |
| 181 | |
| 182 | * When "git cmd -h" shows more than one line of usage text (e.g. |
| 183 | the cmd subcommand may take sub-sub-command), parse-options API |
| 184 | learned to align these lines, even across i18n/l10n. |
| 185 | |
| 186 | * Prevent "make sparse" from running for the source files that |
| 187 | haven't been modified. |
| 188 | |
| 189 | * The code path to write a new version of .midx multi-pack index files |
| 190 | has learned to release the mmaped memory holding the current |
| 191 | version of .midx before removing them from the disk, as some |
| 192 | platforms do not allow removal of a file that still has mapping. |
| 193 | |
| 194 | * A new feature has been added to abort early in the test framework. |
| 195 | |
| 196 | |
| 197 | Fixes since v2.33 |
| 198 | ----------------- |
| 199 | |
| 200 | * Input validation of "git pack-objects --stdin-packs" has been |
| 201 | corrected. |
| 202 | |
| 203 | * Bugfix for common ancestor negotiation recently introduced in "git |
| 204 | push" code path. |
| 205 | |
| 206 | * "git pull" had various corner cases that were not well thought out |
| 207 | around its --rebase backend, e.g. "git pull --ff-only" did not stop |
| 208 | but went ahead and rebased when the history on other side is not a |
| 209 | descendant of our history. The series tries to fix them up. |
| 210 | |
| 211 | * "git apply" miscounted the bytes and failed to read to the end of |
| 212 | binary hunks. |
| 213 | |
| 214 | * "git range-diff" code clean-up. |
| 215 | |
| 216 | * "git commit --fixup" now works with "--edit" again, after it was |
| 217 | broken in v2.32. |
| 218 | |
| 219 | * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the |
| 220 | new version has a blocker bug for that architecture. |
| 221 | |
| 222 | * Checking out all the paths from HEAD during the last conflicted |
| 223 | step in "git rebase" and continuing would cause the step to be |
| 224 | skipped (which is expected), but leaves MERGE_MSG file behind in |
| 225 | $GIT_DIR and confuses the next "git commit", which has been |
| 226 | corrected. |
| 227 | |
| 228 | * Various bugs in "git rebase -r" have been fixed. |
| 229 | |
| 230 | * mmap() imitation used to call xmalloc() that dies upon malloc() |
| 231 | failure, which has been corrected to just return an error to the |
| 232 | caller to be handled. |
| 233 | |
| 234 | * "git diff --relative" segfaulted and/or produced incorrect result |
| 235 | when there are unmerged paths. |
| 236 | |
| 237 | * The delayed checkout code path in "git checkout" etc. were chatty |
| 238 | even when --quiet and/or --no-progress options were given. |
| 239 | |
| 240 | * "git branch -D <branch>" used to refuse to remove a broken branch |
| 241 | ref that points at a missing commit, which has been corrected. |
| 242 | |
| 243 | * Build update for Apple clang. |
| 244 | |
| 245 | * The parser for the "--nl" option of "git column" has been |
| 246 | corrected. |
| 247 | |
| 248 | * "git upload-pack" which runs on the other side of "git fetch" |
| 249 | forgot to take the ref namespaces into account when handling |
| 250 | want-ref requests. |
| 251 | |
| 252 | * The sparse-index support can corrupt the index structure by storing |
| 253 | a stale and/or uninitialized data, which has been corrected. |
| 254 | |
| 255 | * Buggy tests could damage repositories outside the throw-away test |
| 256 | area we created. We now by default export GIT_CEILING_DIRECTORIES |
| 257 | to limit the damage from such a stray test. |
| 258 | |
| 259 | * Even when running "git send-email" without its own threaded |
| 260 | discussion support, a threading related header in one message is |
| 261 | carried over to the subsequent message to result in an unwanted |
| 262 | threading, which has been corrected. |
| 263 | |
| 264 | * The output from "git fast-export", when its anonymization feature |
| 265 | is in use, showed an annotated tag incorrectly. |
| 266 | |
| 267 | * Recent "diff -m" changes broke "gitk", which has been corrected. |
| 268 | |
| 269 | * The "git apply -3" code path learned not to bother the lower level |
| 270 | merge machinery when the three-way merge can be trivially resolved |
| 271 | without the content level merge. This fixes a regression caused by |
| 272 | recent "-3way first and fall back to direct application" change. |
| 273 | |
| 274 | * The code that optionally creates the *.rev reverse index file has |
| 275 | been optimized to avoid needless computation when it is not writing |
| 276 | the file out. |
| 277 | |
| 278 | * "git range-diff -I... <range> <range>" segfaulted, which has been |
| 279 | corrected. |
| 280 | |
| 281 | * The order in which various files that make up a single (conceptual) |
| 282 | packfile has been reevaluated and straightened up. This matters in |
| 283 | correctness, as an incomplete set of files must not be shown to a |
| 284 | running Git. |
| 285 | |
| 286 | * The "mode" word is useless in a call to open(2) that does not |
| 287 | create a new file. Such a call in the files backend of the ref |
| 288 | subsystem has been cleaned up. |
| 289 | |
| 290 | * "git update-ref --stdin" failed to flush its output as needed, |
| 291 | which potentially led the conversation to a deadlock. |
| 292 | |
| 293 | * When "git am --abort" fails to abort correctly, it still exited |
| 294 | with exit status of 0, which has been corrected. |
| 295 | |
| 296 | * Correct nr and alloc members of strvec struct to be of type size_t. |
| 297 | |
| 298 | * "git stash", where the tentative change involves changing a |
| 299 | directory to a file (or vice versa), was confused, which has been |
| 300 | corrected. |
| 301 | |
| 302 | * "git clone" from a repository whose HEAD is unborn into a bare |
| 303 | repository didn't follow the branch name the other side used, which |
| 304 | is corrected. |
| 305 | |
| 306 | * "git cvsserver" had a long-standing bug in its authentication code, |
| 307 | which has finally been corrected (it is unclear and is a separate |
| 308 | question if anybody is seriously using it, though). |
| 309 | |
| 310 | * "git difftool --dir-diff" mishandled symbolic links. |
| 311 | |
| 312 | * Sensitive data in the HTTP trace were supposed to be redacted, but |
| 313 | we failed to do so in HTTP/2 requests. |
| 314 | |
| 315 | * "make clean" has been updated to remove leftover .depend/ |
| 316 | directories, even when it is not told to use them to compute header |
| 317 | dependencies. |
| 318 | |
| 319 | * Protocol v0 clients can get stuck parsing a malformed feature line. |
| 320 | |
| 321 | * A few kinds of changes "git status" can show were not documented. |
| 322 | (merge d2a534c515 ja/doc-status-types-and-copies later to maint). |
| 323 | |
| 324 | * The mergesort implementation used to sort linked list has been |
| 325 | optimized. |
| 326 | (merge c90cfc225b rs/mergesort later to maint). |
| 327 | |
| 328 | * An editor session launched during a Git operation (e.g. during 'git |
| 329 | commit') can leave the terminal in a funny state. The code path |
| 330 | has updated to save the terminal state before, and restore it |
| 331 | after, it spawns an editor. |
| 332 | (merge 3d411afabc cm/save-restore-terminal later to maint). |
| 333 | |
| 334 | * "git cat-file --batch" with the "--batch-all-objects" option is |
| 335 | supposed to iterate over all the objects found in a repository, but |
| 336 | it used to translate these object names using the replace mechanism, |
| 337 | which defeats the point of enumerating all objects in the repository. |
| 338 | This has been corrected. |
| 339 | (merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint). |
| 340 | |
| 341 | * Recent sparse-index work broke safety against attempts to add paths |
| 342 | with trailing slashes to the index, which has been corrected. |
| 343 | (merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint). |
| 344 | |
| 345 | * The "--color-lines" and "--color-by-age" options of "git blame" |
| 346 | have been missing, which are now documented. |
| 347 | (merge 8c32856133 bs/doc-blame-color-lines later to maint). |
| 348 | |
| 349 | * The PATH used in CI job may be too wide and let incompatible dlls |
| 350 | to be grabbed, which can cause the build&test to fail. Tighten it. |
| 351 | (merge 7491ef6198 js/windows-ci-path-fix later to maint). |
| 352 | |
| 353 | * Avoid performance measurements from getting ruined by gc and other |
| 354 | housekeeping pauses interfering in the middle. |
| 355 | (merge be79131a53 rs/disable-gc-during-perf-tests later to maint). |
| 356 | |
| 357 | * Stop "git add --dry-run" from creating new blob and tree objects. |
| 358 | (merge e578d0311d rs/add-dry-run-without-objects later to maint). |
| 359 | |
| 360 | * "git commit" gave duplicated error message when the object store |
| 361 | was unwritable, which has been corrected. |
| 362 | (merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint). |
| 363 | |
| 364 | * Recent sparse-index addition, namely any use of index_name_pos(), |
| 365 | can expand sparse index entries and breaks any code that walks |
| 366 | cache-tree or existing index entries. One such instance of such a |
| 367 | breakage has been corrected. |
| 368 | |
| 369 | * The xxdiff difftool backend can exit with status 128, which the |
| 370 | difftool-helper that launches the backend takes as a significant |
| 371 | failure, when it is not significant at all. Work it around. |
| 372 | (merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint). |
| 373 | |
| 374 | * Improve test framework around unwritable directories. |
| 375 | (merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint). |
| 376 | |
| 377 | * "git push" client talking to an HTTP server did not diagnose the |
| 378 | lack of the final status report from the other side correctly, |
| 379 | which has been corrected. |
| 380 | (merge c5c3486f38 jk/http-push-status-fix later to maint). |
| 381 | |
| 382 | * Update "git archive" documentation and give explicit mention on the |
| 383 | compression level for both zip and tar.gz format. |
| 384 | (merge c4b208c309 bs/archive-doc-compression-level later to maint). |
| 385 | |
| 386 | * Drop "git sparse-checkout" from the list of common commands. |
| 387 | (merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint). |
| 388 | |
| 389 | * "git branch -c/-m new old" was not described to copy config, which |
| 390 | has been corrected. |
| 391 | (merge 8252ec300e jc/branch-copy-doc later to maint). |
| 392 | |
| 393 | * Squelch over-eager warning message added during this cycle. |
| 394 | |
| 395 | * Fix long-standing shell syntax error in the completion script. |
| 396 | (merge 46b0585286 re/completion-fix-test-equality later to maint). |
| 397 | |
| 398 | * Teach "git commit-graph" command not to allow using replace objects |
| 399 | at all, as we do not use the commit-graph at runtime when we see |
| 400 | object replacement. |
| 401 | (merge 095d112f8c ab/ignore-replace-while-working-on-commit-graph later to maint). |
| 402 | |
| 403 | * "git pull --no-verify" did not affect the underlying "git merge". |
| 404 | (merge 47bfdfb3fd ar/fix-git-pull-no-verify later to maint). |
| 405 | |
| 406 | * One CI task based on Fedora image noticed a not-quite-kosher |
| 407 | construct recently, which has been corrected. |
| 408 | |
| 409 | * "git pull --ff-only" and "git pull --rebase --ff-only" should make |
| 410 | it a no-op to attempt pulling from a remote that is behind us, but |
| 411 | instead the command errored out by saying it was impossible to |
| 412 | fast-forward, which may technically be true, but not a useful thing |
| 413 | to diagnose as an error. This has been corrected. |
| 414 | (merge 361cb52383 jc/fix-pull-ff-only-when-already-up-to-date later to maint). |
| 415 | |
| 416 | * The way Cygwin emulates a unix-domain socket, on top of which the |
| 417 | simple-ipc mechanism is implemented, can race with the program on |
| 418 | the other side that wants to use the socket, and briefly make it |
| 419 | appear as a regular file before lstat(2) starts reporting it as a |
| 420 | socket. We now have a workaround on the side that connects to a |
| 421 | unix domain socket. |
| 422 | |
| 423 | * Other code cleanup, docfix, build fix, etc. |
| 424 | (merge f188160be9 ab/bundle-remove-verbose-option later to maint). |
| 425 | (merge 8c6b4332b4 rs/close-pack-leakfix later to maint). |
| 426 | (merge 51b04c05b7 bs/difftool-msg-tweak later to maint). |
| 427 | (merge dd20e4a6db ab/make-compdb-fix later to maint). |
| 428 | (merge 6ffb990dc4 os/status-docfix later to maint). |
| 429 | (merge 100c2da2d3 rs/p3400-lose-tac later to maint). |
| 430 | (merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint). |
| 431 | (merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint). |
| 432 | (merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint). |
| 433 | (merge ec9a37d69b ab/pkt-line-cleanup later to maint). |
| 434 | (merge 8650c6298c ab/fix-make-lint-docs later to maint). |
| 435 | (merge 1c720357ce ab/test-lib-diff-cleanup later to maint). |
| 436 | (merge 6b615dbece ks/submodule-add-message-fix later to maint). |
| 437 | (merge 203eb8381a jc/doc-format-patch-clarify-auto-base later to maint). |
| 438 | (merge 559664c792 ab/test-lib later to maint). |