| 1 | Git v2.41 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | |
| 6 | * Allow information carried on the WWW-Authenticate header to be |
| 7 | passed to the credential helpers. |
| 8 | |
| 9 | * A new "fetch.hideRefs" option can be used to exclude specified refs |
| 10 | from "rev-list --objects --stdin --not --all" traversal for |
| 11 | checking object connectivity, most useful when there are many |
| 12 | unrelated histories in a single repository. |
| 13 | |
| 14 | * "git push" has been taught to allow deletion of refs with one-level |
| 15 | names to help repairing a repository who acquired such a ref by |
| 16 | mistake. In general, we don't encourage use of such a ref, and |
| 17 | creation or update to such a ref is rejected as before. |
| 18 | |
| 19 | * Allow "git bisect reset" to check out the original branch when the |
| 20 | branch is already checked out in a different worktree linked to the |
| 21 | same repository. |
| 22 | |
| 23 | * A few subcommands have been taught to stop users from working on a |
| 24 | branch that is being used in another worktree linked to the same |
| 25 | repository. |
| 26 | |
| 27 | * "git format-patch" learned to write a log-message only output file |
| 28 | for empty commits. |
| 29 | |
| 30 | * "git format-patch" honors the src/dst prefixes set to nonstandard |
| 31 | values with configuration variables like "diff.noprefix", causing |
| 32 | receiving end of the patch that expects the standard -p1 format to |
| 33 | break. "format-patch" has been taught to ignore end-user configuration |
| 34 | and always use the standard prefixes. |
| 35 | |
| 36 | This is a backward compatibility breaking change. |
| 37 | |
| 38 | * Lift the limitation that colored prompts can only be used with |
| 39 | PROMPT_COMMAND mode. |
| 40 | |
| 41 | * "git blame --contents=<file> <rev> -- <path>" used to be forbidden, |
| 42 | but now it finds the origins of lines starting at <file> contents |
| 43 | through the history that leads to <rev>. |
| 44 | |
| 45 | * "git pack-redundant" gave a warning when run, as the command has |
| 46 | outlived its usefulness long ago and is nominated for future |
| 47 | removal. Now we escalate to give an error. |
| 48 | |
| 49 | * "git clone" from an empty repository learned to propagate the |
| 50 | choice of the hash algorithm from the source repository to the |
| 51 | newly created repository over any one of the v0/v1/v2 protocol. |
| 52 | |
| 53 | * "git mergetool" and "git difftool" learns a new configuration |
| 54 | guiDefault to optionally favor configured guitool over non-gui-tool |
| 55 | automatically when $DISPLAY is set. |
| 56 | |
| 57 | * "git branch -d origin/master" would say "no such branch", but it is |
| 58 | likely a missed "-r" if refs/remotes/origin/master exists. The |
| 59 | command has been taught to give such a hint in its error message. |
| 60 | |
| 61 | * Clean-up of the code path that deals with merge strategy option |
| 62 | handling in "git rebase". |
| 63 | |
| 64 | * "git clone --local" stops copying from an original repository that |
| 65 | has symbolic links inside its $GIT_DIR; an error message when that |
| 66 | happens has been updated. |
| 67 | |
| 68 | * The "--format=..." option of "git for-each-ref", "git branch", and |
| 69 | "git tag" commands learn "--omit-empty" to hide refs whose |
| 70 | formatting results in an empty string from the output. |
| 71 | |
| 72 | * The sendemail-validate validate hook learned to pass the total |
| 73 | number of input files and where in the sequence each invocation is |
| 74 | via environment variables. |
| 75 | |
| 76 | * When "gc" needs to retain unreachable objects, packing them into |
| 77 | cruft packs (instead of exploding them into loose object files) has |
| 78 | been offered as a more efficient option for some time. Now the use |
| 79 | of cruft packs has been made the default and no longer considered |
| 80 | an experimental feature. |
| 81 | |
| 82 | * The output given by "git blame" that attributes a line to contents |
| 83 | taken from the file specified by the "--contents" option shows it |
| 84 | differently from a line attributed to the working tree file. |
| 85 | |
| 86 | * "git send-email" learned to give the e-mail headers to the validate |
| 87 | hook by passing an extra argument from the command line. |
| 88 | |
| 89 | * The credential subsystem learns to help OAuth framework. |
| 90 | |
| 91 | * The titles of manual pages used to be chomped at an unreasonably |
| 92 | short limit, which has been removed. |
| 93 | |
| 94 | * Error messages given when working on an unborn branch that is |
| 95 | checked out in another worktree have been improved. |
| 96 | |
| 97 | * The documentation was misleading about the interaction between |
| 98 | GIT_DEFAULT_HASH and "git clone", which has been clarified to |
| 99 | stress that the variable is to be ignored by the command. |
| 100 | |
| 101 | * "git send-email" learned "--header-cmd=<cmd>" that can inject |
| 102 | arbitrary e-mail header lines to the outgoing messages. |
| 103 | |
| 104 | * "git fsck" learned to detect bit-flip breakages in the reachability |
| 105 | bitmap files. |
| 106 | |
| 107 | * The "--stdin" option of "git name-rev" has been replaced with |
| 108 | the "--annotate-stdin" option more than a year ago. We stop |
| 109 | advertising it in the "git name-rev -h" output. |
| 110 | |
| 111 | * "git push --all" gained an alias "git push --branches". |
| 112 | |
| 113 | * "git fetch" learned the "--porcelain" option that emits what it did |
| 114 | in a machine-parseable format. |
| 115 | |
| 116 | * "git --attr-source=<tree> cmd $args" is a new way to have any |
| 117 | command to read attributes not from the working tree but from the |
| 118 | given tree object. |
| 119 | |
| 120 | |
| 121 | Performance, Internal Implementation, Development Support etc. |
| 122 | |
| 123 | * Code clean-up to clarify directory traversal API. |
| 124 | |
| 125 | * Code clean-up to clarify the rule that "git-compat-util.h" must be |
| 126 | the first to be included. |
| 127 | |
| 128 | * More work towards -Wunused. |
| 129 | |
| 130 | * Instead of forcing each command to choose to honor GPG related |
| 131 | configuration variables, make the subsystem lazily initialize |
| 132 | itself. |
| 133 | |
| 134 | * Remove workaround for ancient versions of DocBook to make it work |
| 135 | correctly with groff, which has not been necessary since docbook |
| 136 | 1.76 from 2010. |
| 137 | |
| 138 | * Code clean-up to include and/or uninclude parse-options.h file as |
| 139 | needed. |
| 140 | |
| 141 | * The code path that reports what "git fetch" did to each ref has |
| 142 | been cleaned up. |
| 143 | |
| 144 | * Assorted config API updates. |
| 145 | |
| 146 | * A few configuration variables to tell the cURL library that |
| 147 | different types of ssl-cert and ssl-key are in use have been added. |
| 148 | |
| 149 | * Split key function and data structure definitions out of cache.h to |
| 150 | new header files and adjust the users. |
| 151 | |
| 152 | * "git fetch --all" does not have to download and handle the same |
| 153 | bundleURI over and over, which has been corrected. |
| 154 | |
| 155 | * "git sparse-checkout" command learns a debugging aid for the sparse |
| 156 | rule definitions. |
| 157 | |
| 158 | * "git write-tree" learns to work better with sparse-index. |
| 159 | |
| 160 | * The on-disk reverse index that allows mapping from the pack offset |
| 161 | to the object name for the object stored at the offset has been |
| 162 | enabled by default. |
| 163 | |
| 164 | * "git fsck" learned to validate the on-disk pack reverse index files. |
| 165 | |
| 166 | * strtok() and strtok_r() are banned in this codebase. |
| 167 | |
| 168 | * The detect-compilers script to help auto-tweaking the build system |
| 169 | had trouble working with compilers whose version number has extra |
| 170 | suffixes. The script has been taught that certain suffixes (like |
| 171 | "-win32" in "gcc 10-win32") can be safely stripped as they share |
| 172 | the same features and bugs with the version without the suffix. |
| 173 | |
| 174 | * ctype tests have been taught to test EOF, too. |
| 175 | |
| 176 | * The implementation of credential helpers used fgets() over fixed |
| 177 | size buffers to read protocol messages, causing the remainder of |
| 178 | the folded long line to trigger unexpected behaviour, which has |
| 179 | been corrected. |
| 180 | |
| 181 | * The implementation of the default "negotiator", used to find common |
| 182 | ancestor over the network for object tranfer, used to be recursive; |
| 183 | it was updated to be iterative to conserve stackspace usage. |
| 184 | |
| 185 | * Our custom callout formatter is no longer used in the documentation |
| 186 | formatting toolchain, as the upstream default ones give better |
| 187 | output these days. |
| 188 | |
| 189 | * The tracing mechanism learned to notice and report when |
| 190 | auto-discovered bare repositories are being used, as allowing so |
| 191 | without explicitly stating the user intends to do so (with setting |
| 192 | GIT_DIR for example) can be used with social engineering as an |
| 193 | attack vector. |
| 194 | |
| 195 | * "git diff-files" learned not to expand sparse-index unless needed. |
| 196 | |
| 197 | |
| 198 | Fixes since v2.40 |
| 199 | ----------------- |
| 200 | |
| 201 | * "git fsck" learned to check the index files in other worktrees, |
| 202 | just like "git gc" honors them as anchoring points. |
| 203 | (merge 8d3e7eac52 jk/fsck-indices-in-worktrees later to maint). |
| 204 | |
| 205 | * Fix a segfaulting loop. The function and its caller may need |
| 206 | further clean-up. |
| 207 | (merge c5773dc078 ew/commit-reach-clean-up-flags-fix later to maint). |
| 208 | |
| 209 | * "git restore" supports options like "--ours" that are only |
| 210 | meaningful during a conflicted merge, but these options are only |
| 211 | meaningful when updating the working tree files. These options are |
| 212 | marked to be incompatible when both "--staged" and "--worktree" are |
| 213 | in effect. |
| 214 | (merge ee8a88826a ak/restore-both-incompatible-with-conflicts later to maint). |
| 215 | |
| 216 | * Simplify UI to control progress meter given by "git bundle" command. |
| 217 | (merge 8b95521edb jk/bundle-progress later to maint). |
| 218 | |
| 219 | * "git bundle" learned that "-" is a common way to say that the input |
| 220 | comes from the standard input and/or the output goes to the |
| 221 | standard output. It used to work only for output and only from the |
| 222 | root level of the working tree. |
| 223 | (merge 0bbe10313e jk/bundle-use-dash-for-stdfiles later to maint). |
| 224 | |
| 225 | * Once we start running, we assumed that the list of alternate object |
| 226 | databases would never change. Hook into the machinery used to |
| 227 | update the list of packfiles during runtime to update this list as |
| 228 | well. |
| 229 | (merge e2d003dbed ds/reprepare-alternates-when-repreparing-packfiles later to maint). |
| 230 | |
| 231 | * The code to parse "git rebase -X<opt>" was not prepared to see an |
| 232 | unparsable option string, which has been corrected. |
| 233 | (merge 15a4cc912e ab/fix-strategy-opts-parsing later to maint). |
| 234 | |
| 235 | * "git add -p" while the index is unmerged sometimes failed to parse |
| 236 | the diff output it internally produces and died, which has been |
| 237 | corrected. |
| 238 | (merge 28d1122f9c jk/add-p-unmerged-fix later to maint). |
| 239 | |
| 240 | * Fix for a "ls-files --format="%(path)" that produced nonsense |
| 241 | output, which was a bug in 2.38. |
| 242 | (merge cfb62dd006 aj/ls-files-format-fix later to maint). |
| 243 | |
| 244 | * "git receive-pack" that responds to "git push" requests failed to |
| 245 | clean a stale lockfile when killed in the middle, which has been |
| 246 | corrected. |
| 247 | (merge c55c30669c ps/receive-pack-unlock-before-die later to maint). |
| 248 | |
| 249 | * "git rev-parse --quiet foo@{u}", or anything that asks @{u} to be |
| 250 | parsed with GET_OID_QUIETLY option, did not quietly fail, which has |
| 251 | been corrected. |
| 252 | (merge dfbfdc521d fc/oid-quietly-parse-upstream later to maint). |
| 253 | |
| 254 | * Transports that do not support protocol v2 did not correctly fall |
| 255 | back to protocol v0 under certain conditions, which has been |
| 256 | corrected. |
| 257 | (merge eaa0fd6584 jk/fix-proto-downgrade-to-v0 later to maint). |
| 258 | |
| 259 | * time(2) on glib 2.31+, especially on Linux, goes out of sync with |
| 260 | higher resolution timers used for gettimeofday(2) and by the |
| 261 | filesystem. Replace all calls to it with a git_time() wrapper and |
| 262 | (merge 370ddcbc89 pe/time-use-gettimeofday later to maint). |
| 263 | |
| 264 | * Code clean-up to use designated initializers in parse-options API. |
| 265 | (merge 353e6d4554 sg/parse-options-h-initializers later to maint). |
| 266 | |
| 267 | * A recent-ish change to allow unicode character classes to be used |
| 268 | with "grep -P" triggered a JIT bug in older pcre2 libraries. |
| 269 | The problematic change in Git built with these older libraries has |
| 270 | been disabled to work around the bug. |
| 271 | (merge 14b9a04479 mk/workaround-pcre-jit-ucp-bug later to maint). |
| 272 | |
| 273 | * The wildmatch library code unlearns exponential behaviour it |
| 274 | acquired some time ago since it was borrowed from rsync. |
| 275 | (merge 3dc0b7f0dc pw/wildmatch-fixes later to maint). |
| 276 | |
| 277 | * The index files can become corrupt under certain conditions when |
| 278 | the split-index feature is in use, especially together with |
| 279 | fsmonitor, which have been corrected. |
| 280 | (merge 061dd722dc js/split-index-fixes later to maint). |
| 281 | |
| 282 | * Document what the pathname-looking strings in "rev-list --object" |
| 283 | output are for and what they mean. |
| 284 | (merge 15364d2a3c jk/document-rev-list-object-name later to maint). |
| 285 | |
| 286 | * Fix unnecessary truncation of generation numbers used in-core. |
| 287 | (merge d3af1c193d ps/ahead-behind-truncation-fix later to maint). |
| 288 | |
| 289 | * Code clean-up around the use of the_repository. |
| 290 | (merge 4a93b899c1 ab/remove-implicit-use-of-the-repository later to maint). |
| 291 | |
| 292 | * Consistently spell "Message-ID" as such, not "Message-Id". |
| 293 | (merge ba4324c4e1 jc/spell-id-in-both-caps-in-message-id later to maint). |
| 294 | |
| 295 | * Correct use of an uninitialized structure member. |
| 296 | (merge dc12ee77ab jx/cap-object-info-uninitialized-fix later to maint). |
| 297 | |
| 298 | * Tests had a few places where we ignored PERL_PATH and blindly used |
| 299 | /usr/bin/perl, which have been corrected. |
| 300 | (merge c1917156a0 jk/use-perl-path-consistently later to maint). |
| 301 | |
| 302 | * Documentation mark-up fix. |
| 303 | (merge 78b6369e67 la/mfc-markup-fix later to maint). |
| 304 | |
| 305 | * Doc toolchain update to remove old workaround for AsciiDoc. |
| 306 | (merge 8806120de6 fc/remove-header-workarounds-for-asciidoc later to maint). |
| 307 | |
| 308 | * The userdiff regexp patterns for various filetypes that are built |
| 309 | into the system have been updated to avoid triggering regexp errors |
| 310 | from UTF-8 aware regex engines. |
| 311 | (merge be39144954 rs/userdiff-multibyte-regex later to maint). |
| 312 | |
| 313 | * The approxidate() API has been simplified by losing an extra |
| 314 | function that did the same thing as another one. |
| 315 | (merge 8a7f0b666f rs/remove-approxidate-relative later to maint). |
| 316 | |
| 317 | * Code clean-up to replace a hardcoded constant with a CPP macro. |
| 318 | (merge c870de6502 rs/get-tar-commit-id-use-defined-const later to maint). |
| 319 | |
| 320 | * Doc build simplification. |
| 321 | (merge 9a09ed3229 fc/doc-stop-using-manversion later to maint). |
| 322 | |
| 323 | * "git archive" run from a subdirectory mishandled attributes and |
| 324 | paths outside the current directory. |
| 325 | (merge 92b1dd1b9e rs/archive-from-subdirectory-fixes later to maint). |
| 326 | |
| 327 | * The code to parse capability list for v0 on-wire protocol fell into |
| 328 | an infinite loop when a capability appears multiple times, which |
| 329 | has been corrected. |
| 330 | |
| 331 | * Geometric repacking ("git repack --geometric=<n>") in a repository |
| 332 | that borrows from an alternate object database had various corner |
| 333 | case bugs, which have been corrected. |
| 334 | (merge d85cd18777 ps/fix-geom-repack-with-alternates later to maint). |
| 335 | |
| 336 | * The "%GT" placeholder for the "--format" option of "git log" and |
| 337 | friends caused BUG() to trigger on a commit signed with an unknown |
| 338 | key, which has been corrected. |
| 339 | (merge 7891e46585 jk/gpg-trust-level-fix later to maint). |
| 340 | |
| 341 | * The completion script used to use bare "read" without the "-r" |
| 342 | option to read the contents of various state files, which risked |
| 343 | getting confused with backslashes in them. This has been |
| 344 | corrected. |
| 345 | (merge 197152098a ek/completion-use-read-r-to-read-literally later to maint). |
| 346 | |
| 347 | * A small API fix to the ort merge strategy backend. |
| 348 | (merge 000c4ceca7 en/ort-finalize-after-0-merges-fix later to maint). |
| 349 | |
| 350 | * The commit object parser has been taught to be a bit more lenient |
| 351 | to parse timestamps on the author/committer line with a malformed |
| 352 | author/committer ident. |
| 353 | (merge 90ef0f14eb jk/parse-commit-with-malformed-ident later to maint). |
| 354 | |
| 355 | * Retitle a test script with an overly narrow name. |
| 356 | (merge 8bb19c14fb ob/t3501-retitle later to maint). |
| 357 | |
| 358 | * Doc update to clarify how text and eol attributes interact to |
| 359 | specify the end-of-line conversion. |
| 360 | (merge 6696077ace ah/doc-attributes-text later to maint). |
| 361 | |
| 362 | * Gitk updates from GfW project. |
| 363 | (merge 99e70f3077 js/gitk-fixes-from-gfw later to maint). |
| 364 | |
| 365 | * "git diff --dirstat" leaked memory, which has been plugged. |
| 366 | (merge 83973981eb jc/dirstat-plug-leaks later to maint). |
| 367 | |
| 368 | * "git merge-tree" reads the basic configuration, which can be used |
| 369 | by git forges to disable replace-refs feature. |
| 370 | (merge b6551feadf ds/merge-tree-use-config later to maint). |
| 371 | |
| 372 | * A few bugs in the sequencer machinery that results in miscounting |
| 373 | the steps have been corrected. |
| 374 | (merge 170eea9750 js/rebase-count-fixes later to maint). |
| 375 | |
| 376 | * Other code cleanup, docfix, build fix, etc. |
| 377 | (merge f7111175df as/doc-markup-fix later to maint). |
| 378 | (merge 90ff7c9898 fc/test-aggregation-clean-up later to maint). |
| 379 | (merge 9b0c7f308a jc/am-doc-refer-to-format-patch later to maint). |
| 380 | (merge b10cbdac4c bb/unicode-width-table-15 later to maint). |
| 381 | (merge 3457b50e8c ab/retire-scripted-add-p later to maint). |
| 382 | (merge d52fcf493b ds/p2000-fix-grep-sparse later to maint). |
| 383 | (merge ec063d2591 ss/hashmap-typofix later to maint). |
| 384 | (merge 1aaed69d11 rs/archive-mtime later to maint). |
| 385 | (merge 2da2cc9b28 ob/rollback-after-commit-lock-failure later to maint). |
| 386 | (merge 54dbd0933b ob/sequencer-save-head-simplify later to maint). |
| 387 | (merge a93cbe8d78 ar/test-cleanup-unused-file-creation later to maint). |
| 388 | (merge cc48ddd937 jk/chainlint-fixes later to maint). |
| 389 | (merge 4833b08426 ow/ref-format-remove-unused-member later to maint). |
| 390 | (merge d0ea2ca1cf dw/doc-submittingpatches-grammofix later to maint). |
| 391 | (merge fd72637423 ar/t2024-checkout-output-fix later to maint). |
| 392 | (merge d45cbe3fe0 ob/sequencer-i18n-fix later to maint). |
| 393 | (merge b734fe49fd ob/messages-capitalize-exception later to maint). |
| 394 | (merge ad353d7e77 ma/gittutorial-fixes later to maint). |
| 395 | (merge a5855fd8d4 ar/test-cleanup-unused-file-creation-part2 later to maint). |
| 396 | (merge 0c5308af30 sd/doc-gitignore-and-rm-cached later to maint). |
| 397 | (merge cbb83daeaf kh/doc-interpret-trailers-updates later to maint). |
| 398 | (merge 3d77fbb664 ar/config-count-tests-updates later to maint). |
| 399 | (merge b7cf25c8f4 jc/t9800-fix-use-of-show-s-raw later to maint). |