| 1 | Git v2.43 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | Backward Compatibility Notes |
| 5 | |
| 6 | * The "--rfc" option of "git format-patch" used to be a valid way to |
| 7 | override an earlier "--subject-prefix=<something>" on the command |
| 8 | line and replace it with "[RFC PATCH]", but from this release, it |
| 9 | merely prefixes the string "RFC " in front of the given subject |
| 10 | prefix. If you are negatively affected by this change, please use |
| 11 | "--subject-prefix=PATCH --rfc" as a replacement. |
| 12 | |
| 13 | * In Git 2.42, "git rev-list --stdin" learned to take non-revisions |
| 14 | (like "--not") from the standard input, but the way such a "--not" was |
| 15 | handled was quite confusing, which has been rethought. The updated |
| 16 | rule is that "--not" given from the command line only affects revs |
| 17 | given from the command line that comes but not revs read from the |
| 18 | standard input, and "--not" read from the standard input affects |
| 19 | revs given from the standard input and not revs given from the |
| 20 | command line. |
| 21 | |
| 22 | UI, Workflows & Features |
| 23 | |
| 24 | * A message written in olden time prevented a branch from getting |
| 25 | checked out, saying it is already checked out elsewhere. But these |
| 26 | days, we treat a branch that is being bisected or rebased just like |
| 27 | a branch that is checked out and protect it from getting modified |
| 28 | with the same codepath. The message has been rephrased to say that |
| 29 | the branch is "in use" to avoid confusion. |
| 30 | |
| 31 | * Hourly and other schedules of "git maintenance" jobs are randomly |
| 32 | distributed now. |
| 33 | |
| 34 | * "git cmd -h" learned to signal which options can be negated by |
| 35 | listing such options like "--[no-]opt". |
| 36 | |
| 37 | * The way authentication related data other than passwords (e.g., |
| 38 | oauth token and password expiration data) are stored in libsecret |
| 39 | keyrings has been rethought. |
| 40 | |
| 41 | * Update the libsecret and wincred credential helpers to correctly |
| 42 | match which credential to erase; they erased the wrong entry in |
| 43 | some cases. |
| 44 | |
| 45 | * Git GUI updates. |
| 46 | |
| 47 | * "git format-patch" learned a new "--description-file" option that |
| 48 | lets cover letter description to be fed; this can be used on |
| 49 | detached HEAD where there is no branch description available, and |
| 50 | also can override the branch description if there is one. |
| 51 | |
| 52 | * Use of the "--max-pack-size" option to allow multiple packfiles to |
| 53 | be created is now supported even when we are sending unreachable |
| 54 | objects to cruft packs. |
| 55 | |
| 56 | * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the |
| 57 | "--subject-prefix" option and used "[RFC PATCH]"; now we will add |
| 58 | "RFC" prefix to whatever subject prefix is specified. |
| 59 | |
| 60 | * "git log --format" has been taught the %(decorate) placeholder for |
| 61 | further customization over what the "--decorate" option offers. |
| 62 | |
| 63 | * The default log message created by "git revert", when reverting a |
| 64 | commit that records a revert, has been tweaked, to encourage people |
| 65 | to describe complex "revert of revert of revert" situations better in |
| 66 | their own words. |
| 67 | |
| 68 | * The command-line completion support (in contrib/) learned to |
| 69 | complete "git commit --trailer=" for possible trailer keys. |
| 70 | |
| 71 | * "git update-index" learned the "--show-index-version" option to |
| 72 | inspect the index format version used by the on-disk index file. |
| 73 | |
| 74 | * "git diff" learned the "diff.statNameWidth" configuration variable, |
| 75 | to give the default width for the name part in the "--stat" output. |
| 76 | |
| 77 | * "git range-diff --notes=foo" compared "log --notes=foo --notes" of |
| 78 | the two ranges, instead of using just the specified notes tree, |
| 79 | which has been corrected to use only the specified notes tree. |
| 80 | |
| 81 | * The command line completion script (in contrib/) can be told to |
| 82 | complete aliases by including ": git <cmd> ;" in the alias to tell |
| 83 | it that the alias should be completed in a similar way to how "git |
| 84 | <cmd>" is completed. The parsing code for the alias has been |
| 85 | loosened to allow ';' without an extra space before it. |
| 86 | |
| 87 | * "git for-each-ref" and friends learned to apply mailmap to |
| 88 | authorname and other fields in a more flexible way than using |
| 89 | separate placeholder letters like %a[eElL] every time we want to |
| 90 | come up with small variants. |
| 91 | |
| 92 | * "git repack" machinery learned to pay attention to the "--filter=" |
| 93 | option. |
| 94 | |
| 95 | * "git repack" learned the "--max-cruft-size" option to prevent cruft |
| 96 | packs from growing without bounds. |
| 97 | |
| 98 | * "git merge-tree" learned to take strategy backend specific options |
| 99 | via the "-X" option, like "git merge" does. |
| 100 | |
| 101 | * "git log" and friends learned the "--dd" option that is a |
| 102 | short-hand for "--diff-merges=first-parent -p". |
| 103 | |
| 104 | * The attribute subsystem learned to honor the "attr.tree" |
| 105 | configuration variable that specifies which tree to read the |
| 106 | .gitattributes files from. |
| 107 | |
| 108 | * "git merge-file" learns a mode to read three variants of the |
| 109 | contents to be merged from blob objects. |
| 110 | |
| 111 | |
| 112 | Performance, Internal Implementation, Development Support etc. |
| 113 | |
| 114 | * "git check-attr" has been taught to work better with sparse-index. |
| 115 | |
| 116 | * It may be tempting to leave the help text NULL for a command line |
| 117 | option that is either hidden or too obvious, but "git subcmd -h" |
| 118 | and "git subcmd --help-all" would have segfaulted if done so. Now |
| 119 | the help text is truly optional. |
| 120 | |
| 121 | * Tests that are known to pass with LSan are now marked as such. |
| 122 | |
| 123 | * Flaky "git p4" tests, as well as "git svn" tests, are now skipped |
| 124 | in the (rather expensive) sanitizer CI job. |
| 125 | |
| 126 | * Tests with LSan from time to time seem to emit harmless messages |
| 127 | that make our tests unnecessarily flaky; we work around it by |
| 128 | filtering the uninteresting output. |
| 129 | |
| 130 | * Unused parameters to functions are marked as such, and/or removed, |
| 131 | in order to bring us closer to "-Wunused-parameter" clean. |
| 132 | |
| 133 | * The code to keep track of existing packs in the repository while |
| 134 | repacking has been refactored. |
| 135 | |
| 136 | * The "streaming" interface used for bulk-checkin codepath has been |
| 137 | narrowed to take only blob objects for now, with no real loss of |
| 138 | functionality. |
| 139 | |
| 140 | * GitHub CI workflow has learned to trigger Coverity check. |
| 141 | |
| 142 | * Test coverage for trailers has been improved. |
| 143 | |
| 144 | * The code to iterate over loose references has been optimized to |
| 145 | reduce the number of lstat() system calls. |
| 146 | |
| 147 | * The codepaths that read "chunk" formatted files have been corrected |
| 148 | to pay attention to the chunk size and notice broken files. |
| 149 | |
| 150 | * Replace macos-12 used at GitHub CI with macos-13. |
| 151 | (merge 682a868f67 js/ci-use-macos-13 later to maint). |
| 152 | |
| 153 | |
| 154 | Fixes since v2.42 |
| 155 | ----------------- |
| 156 | |
| 157 | * Overly long label names used in the sequencer machinery are now |
| 158 | chopped to fit under filesystem limitation. |
| 159 | |
| 160 | * Scalar updates. |
| 161 | |
| 162 | * Tweak GitHub Actions CI so that pushing the same commit to multiple |
| 163 | branch tips at the same time will not waste building and testing |
| 164 | the same thing twice. |
| 165 | |
| 166 | * The commit-graph verification code that detects a mixture of zero and |
| 167 | non-zero generation numbers has been updated. |
| 168 | |
| 169 | * "git diff -w --exit-code" with various options did not work |
| 170 | correctly, which has been corrected. |
| 171 | |
| 172 | * The "transfer.unpackLimit" configuration variable ought to be used |
| 173 | as a fallback, but overrode the more specific "fetch.unpackLimit" |
| 174 | and "receive.unpackLimit" configuration variables by mistake, which |
| 175 | has been corrected. |
| 176 | |
| 177 | * The use of API between two calls to require_clean_work_tree() from |
| 178 | the sequencer code has been cleaned up for consistency. |
| 179 | |
| 180 | * "git diff --no-such-option" and other corner cases around the exit |
| 181 | status of the "diff" command have been corrected. |
| 182 | |
| 183 | * "git for-each-ref --sort='contents:size'" sorted the refs according |
| 184 | to size numerically, giving a ref that points at a blob twelve-byte |
| 185 | (12) long before showing a blob hundred-byte (100) long, which has |
| 186 | been corrected. |
| 187 | |
| 188 | * We now limit the depth of the tree objects and maximum length of |
| 189 | pathnames recorded in tree objects. |
| 190 | (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint). |
| 191 | |
| 192 | * Various fixes to the behavior of "rebase -i", when the command got |
| 193 | interrupted by conflicting changes, have been made. |
| 194 | |
| 195 | * References from a description of the `--patch` option in various |
| 196 | manual pages have been simplified and improved. |
| 197 | |
| 198 | * "git grep -e A --no-or -e B" is accepted, even though the negation |
| 199 | of the "--or" option did not mean anything, which has been tightened. |
| 200 | |
| 201 | * The completion script (in contrib/) has been taught to treat the |
| 202 | "-t" option to "git checkout" and "git switch" just like the |
| 203 | "--track" option, to complete remote-tracking branches. |
| 204 | |
| 205 | * "git diff --no-index -R <(one) <(two)" did not work correctly, |
| 206 | which has been corrected. |
| 207 | |
| 208 | * "git maintenance" timers' implementation has been updated, based on |
| 209 | systemd timers, to work with WSL. |
| 210 | |
| 211 | * "git diff --cached" codepath did not fill the necessary stat |
| 212 | information for a file when fsmonitor knows it is clean and ended |
| 213 | up behaving as if it were not clean, which has been corrected. |
| 214 | |
| 215 | * How "alias.foo = : git cmd ; aliased-command-string" should be |
| 216 | spelled with necessary whitespace around punctuation marks to work |
| 217 | has been more clearly documented (but this will be moot with newer |
| 218 | versions of Git where the parsing rules have been improved). |
| 219 | |
| 220 | * HTTP Header redaction code has been adjusted for a newer version of |
| 221 | cURL library that shows its traces differently from earlier |
| 222 | versions. |
| 223 | |
| 224 | * An error message given by "git send-email", when given a malformed |
| 225 | address, did not show the offending address, which has been corrected. |
| 226 | |
| 227 | * UBSan options were not propagated through the test framework to git |
| 228 | run via the httpd, unlike ASan options, which has been corrected. |
| 229 | |
| 230 | * "checkout --merge -- path" and "update-index --unresolve path" did |
| 231 | not resurrect conflicted state that was resolved to remove path, |
| 232 | but now they do. |
| 233 | (merge 5bdedac3c7 jc/unresolve-removal later to maint). |
| 234 | |
| 235 | * The display width table for unicode characters has been updated for |
| 236 | Unicode 15.1 |
| 237 | (merge 872976c37e bb/unicode-width-table-15 later to maint). |
| 238 | |
| 239 | * Update mailmap entry for Derrick. |
| 240 | (merge 6e5457d8c7 ds/mailmap-entry-update later to maint). |
| 241 | |
| 242 | * In the ".gitmodules" files, submodules are keyed by their names, |
| 243 | and the path to the submodule whose name is $name is specified by |
| 244 | the submodule.$name.path variable. There were a few codepaths that |
| 245 | mixed the name and path up when consulting the submodule database, |
| 246 | which have been corrected. It took long for these bugs to be found |
| 247 | as the name of a submodule initially is the same as its path, and |
| 248 | the problem does not surface until it is moved to a different path, |
| 249 | which apparently happens very rarely. |
| 250 | |
| 251 | * "git diff --merge-base X other args..." insisted that X must be a |
| 252 | commit and errored out when given an annotated tag that peels to a |
| 253 | commit, but we only need it to be a committish. This has been |
| 254 | corrected. |
| 255 | (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint). |
| 256 | |
| 257 | * "git merge-tree" used to segfault when the "--attr-source" |
| 258 | option is used, which has been corrected. |
| 259 | (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint). |
| 260 | |
| 261 | * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did |
| 262 | not auto-initialize the decoration subsystem, which has been |
| 263 | corrected. |
| 264 | |
| 265 | * Feeding "git stash store" with a random commit that was not created |
| 266 | by "git stash create" now errors out. |
| 267 | (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint). |
| 268 | |
| 269 | * The index file has room only for the lower 32-bit of the file size in |
| 270 | the cached stat information, which means cached stat information |
| 271 | will have 0 in its sd_size member for a file whose size is a multiple |
| 272 | of 4GiB. This is mistaken for a racily clean path. Avoid it by |
| 273 | storing a bogus sd_size value instead for such files. |
| 274 | (merge 5143ac07b1 bc/racy-4gb-files later to maint). |
| 275 | |
| 276 | * "git p4" tried to store symlinks to LFS when told, but has been |
| 277 | fixed not to do so, because it does not make sense. |
| 278 | (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint). |
| 279 | |
| 280 | * The codepath to handle recipient addresses `git send-email |
| 281 | --compose` learns from the user was completely broken, which has |
| 282 | been corrected. |
| 283 | (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint). |
| 284 | |
| 285 | * "cd sub && git grep -f patterns" tried to read "patterns" file at |
| 286 | the top level of the working tree; it has been corrected to read |
| 287 | "sub/patterns" instead. |
| 288 | |
| 289 | * "git reflog expire --single-worktree" has been broken for the past |
| 290 | 20 months or so, which has been corrected. |
| 291 | |
| 292 | * "git send-email" did not have certain pieces of data computed yet |
| 293 | when it tried to validate the outgoing messages and its recipient |
| 294 | addresses, which has been sorted out. |
| 295 | |
| 296 | * "git bugreport" learned to complain when it received a command line |
| 297 | argument that it will not use. |
| 298 | |
| 299 | * The codepath to traverse the commit-graph learned to notice that a |
| 300 | commit is missing (e.g., corrupt repository lost an object), even |
| 301 | though it knows something about the commit (like its parents) from |
| 302 | what is in commit-graph. |
| 303 | (merge 7a5d604443 ps/do-not-trust-commit-graph-blindly-for-existence later to maint). |
| 304 | |
| 305 | * "git rev-list --missing" did not work for missing commit objects, |
| 306 | which has been corrected. |
| 307 | |
| 308 | * "git rev-list --unpacked --objects" failed to exclude packed |
| 309 | non-commit objects, which has been corrected. |
| 310 | (merge 7b3c8e9f38 tb/rev-list-unpacked-fix later to maint). |
| 311 | |
| 312 | * "To dereference" and "to peel" were sometimes used in in-code |
| 313 | comments and documentation but without description in the glossary. |
| 314 | (merge 893dce2ffb vd/glossary-dereference-peel later to maint). |
| 315 | |
| 316 | * Other code cleanup, docfix, build fix, etc. |
| 317 | (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint). |
| 318 | (merge 1bd809938a tb/format-pack-doc-update later to maint). |
| 319 | (merge 8f81532599 an/clang-format-typofix later to maint). |
| 320 | (merge 3ca86adc2d la/strvec-header-fix later to maint). |
| 321 | (merge 6789275d37 jc/test-i18ngrep later to maint). |
| 322 | (merge 9972cd6004 ps/leakfixes later to maint). |
| 323 | (merge 46edab516b tz/send-email-helpfix later to maint). |