| 1 | Git 2.30 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since v2.29 |
| 5 | ------------------- |
| 6 | |
| 7 | UI, Workflows & Features |
| 8 | |
| 9 | * Userdiff for PHP update. |
| 10 | |
| 11 | * Userdiff for Rust update. |
| 12 | |
| 13 | * Userdiff for CSS update. |
| 14 | |
| 15 | * The command line completion script (in contrib/) learned that "git |
| 16 | stash show" takes the options "git diff" takes. |
| 17 | |
| 18 | * "git worktree list" now shows if each worktree is locked. This |
| 19 | possibly may open us to show other kinds of states in the future. |
| 20 | |
| 21 | * "git maintenance", an extended big brother of "git gc", continues |
| 22 | to evolve. |
| 23 | |
| 24 | * "git push --force-with-lease[=<ref>]" can easily be misused to lose |
| 25 | commits unless the user takes good care of their own "git fetch". |
| 26 | A new option "--force-if-includes" attempts to ensure that what is |
| 27 | being force-pushed was created after examining the commit at the |
| 28 | tip of the remote ref that is about to be force-replaced. |
| 29 | |
| 30 | * "git clone" learned clone.defaultremotename configuration variable |
| 31 | to customize what nickname to use to call the remote the repository |
| 32 | was cloned from. |
| 33 | |
| 34 | * "git checkout" learned to use checkout.guess configuration variable |
| 35 | and enable/disable its "--[no-]guess" option accordingly. |
| 36 | |
| 37 | * "git resurrect" script (in contrib/) learned that the object names |
| 38 | may be longer than 40-hex depending on the hash function in use. |
| 39 | |
| 40 | * "git diff A...B" learned "git diff --merge-base A B", which is a |
| 41 | longer short-hand to say the same thing. |
| 42 | |
| 43 | * A sample 'push-to-checkout' hook, that performs the same as |
| 44 | what the built-in default action does, has been added. |
| 45 | |
| 46 | * "git diff" family of commands learned the "-I<regex>" option to |
| 47 | ignore hunks whose changed lines all match the given pattern. |
| 48 | |
| 49 | * The userdiff pattern learned to identify the function definition in |
| 50 | POSIX shells and bash. |
| 51 | |
| 52 | * "git checkout-index" did not consistently signal an error with its |
| 53 | exit status, but now it does. |
| 54 | |
| 55 | * A commit and tag object may have CR at the end of each and |
| 56 | every line (you can create such an object with hash-object or |
| 57 | using --cleanup=verbatim to decline the default clean-up |
| 58 | action), but it would make it impossible to have a blank line |
| 59 | to separate the title from the body of the message. We are now |
| 60 | more lenient and accept a line with lone CR on it as a blank line, |
| 61 | too. |
| 62 | |
| 63 | * Exit codes from "git remote add" etc. were not usable by scripted |
| 64 | callers, but now they are. |
| 65 | |
| 66 | * "git archive" now allows compression level higher than "-9" |
| 67 | when generating tar.gz output. |
| 68 | |
| 69 | * Zsh autocompletion (in contrib/) update. |
| 70 | |
| 71 | * The maximum length of output filenames "git format-patch" creates |
| 72 | has become configurable (used to be capped at 64). |
| 73 | |
| 74 | * "git rev-parse" learned the "--end-of-options" to help scripts to |
| 75 | safely take a parameter that is supposed to be a revision, e.g. |
| 76 | "git rev-parse --verify -q --end-of-options $rev". |
| 77 | |
| 78 | * The command line completion script (in contrib/) learned to expand |
| 79 | commands that are alias of alias. |
| 80 | |
| 81 | * "git update-ref --stdin" learns to take multiple transactions in a |
| 82 | single session. |
| 83 | |
| 84 | * Various subcommands of "git config" that take value_regex |
| 85 | learned the "--literal-value" option to take the value_regex option |
| 86 | as a literal string. |
| 87 | |
| 88 | * The transport layer was taught to optionally exchange the session |
| 89 | ID assigned by the trace2 subsystem during fetch/push transactions. |
| 90 | |
| 91 | * "git imap-send" used to ignore configuration variables like |
| 92 | core.askpass; this has been corrected. |
| 93 | |
| 94 | * "git $cmd $args", when $cmd is not a recognised subcommand, by |
| 95 | default tries to see if $cmd is a typo of an existing subcommand |
| 96 | and optionally executes the corrected command if there is only one |
| 97 | possibility, depending on the setting of help.autocorrect; the |
| 98 | users can now disable the whole thing, including the cycles spent |
| 99 | to find a likely typo, by setting the configuration variable to |
| 100 | 'never'. |
| 101 | |
| 102 | * "@" sometimes worked (e.g. "git push origin @:there") as a part of |
| 103 | a refspec element, but "git push origin @" did not work, which has |
| 104 | been corrected. |
| 105 | |
| 106 | |
| 107 | Performance, Internal Implementation, Development Support etc. |
| 108 | |
| 109 | * Use "git archive" more to produce the release tarball. |
| 110 | |
| 111 | * GitHub Actions automated test improvement to skip tests on a tree |
| 112 | identical to what has already been tested. |
| 113 | |
| 114 | * Test-coverage for running commit-graph task "git maintenance" has |
| 115 | been extended. |
| 116 | |
| 117 | * Our test scripts can be told to run only individual pieces while |
| 118 | skipping others with the "--run=..." option; they were taught to |
| 119 | take a substring of test title, in addition to numbers, to name the |
| 120 | test pieces to run. |
| 121 | |
| 122 | * Adjust tests so that they won't scream when the default initial |
| 123 | branch name is different from 'master'. |
| 124 | |
| 125 | * Rewriting "git bisect" in C continues. |
| 126 | |
| 127 | * More preliminary tests have been added to document desired outcomes |
| 128 | of various "directory rename" situations. |
| 129 | |
| 130 | * Micro clean-up of a couple of test scripts. |
| 131 | |
| 132 | * "git diff" and other commands that share the same machinery to |
| 133 | compare with working tree files have been taught to take advantage |
| 134 | of the fsmonitor data when available. |
| 135 | |
| 136 | * The code to detect premature EOF in the sideband demultiplexer has |
| 137 | been cleaned up. |
| 138 | |
| 139 | * "git fetch --depth=<n>" over the stateless RPC / smart HTTP |
| 140 | transport handled EOF from the client poorly at the server end. |
| 141 | |
| 142 | * A specialization of hashmap that uses a string as key has been |
| 143 | introduced. Hopefully it will see wider use over time. |
| 144 | |
| 145 | * "git bisect start/next" in a large span of history spends a lot of |
| 146 | time trying to come up with exactly the half-way point; this can be |
| 147 | optimized by stopping when we see a commit that is close enough to |
| 148 | the half-way point. |
| 149 | |
| 150 | * A lazily defined test prerequisite can now be defined in terms of |
| 151 | another lazily defined test prerequisite. |
| 152 | |
| 153 | * Expectation for the original contributor after responding to a |
| 154 | review comment to use the explanation in a patch update has been |
| 155 | described. |
| 156 | |
| 157 | * Multiple "credential-store" backends can race to lock the same |
| 158 | file, causing everybody else but one to fail---reattempt locking |
| 159 | with some timeout to reduce the rate of the failure. |
| 160 | |
| 161 | * "git-parse-remote" shell script library outlived its usefulness. |
| 162 | |
| 163 | * Like die() and error(), a call to warning() will also trigger a |
| 164 | trace2 event. |
| 165 | |
| 166 | * Use of non-reentrant localtime() has been removed. |
| 167 | |
| 168 | * Non-reentrant time-related library functions and ctime/asctime with |
| 169 | awkward calling interfaces are banned from the codebase. |
| 170 | |
| 171 | |
| 172 | Fixes since v2.29 |
| 173 | ----------------- |
| 174 | |
| 175 | * In 2.29, "--committer-date-is-author-date" option of "rebase" and |
| 176 | "am" subcommands lost the e-mail address by mistake, which has been |
| 177 | corrected. |
| 178 | (merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint). |
| 179 | |
| 180 | * "git checkout -p A...B [-- <path>]" did not work, even though the |
| 181 | same command without "-p" correctly used the merge-base between |
| 182 | commits A and B. |
| 183 | (merge 35166b1fb5 dl/checkout-p-merge-base later to maint). |
| 184 | |
| 185 | * The side-band status report can be sent at the same time as the |
| 186 | primary payload multiplexed, but the demultiplexer on the receiving |
| 187 | end incorrectly split a single status report into two, which has |
| 188 | been corrected. |
| 189 | (merge 712b0377db js/avoid-split-sideband-message later to maint). |
| 190 | |
| 191 | * "git fast-import" wasted a lot of memory when many marks were in use. |
| 192 | (merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint). |
| 193 | |
| 194 | * A test helper "test_cmp A B" was taught to diagnose missing files A |
| 195 | or B as a bug in test, but some tests legitimately wanted to notice |
| 196 | a failure to even create file B as an error, in addition to leaving |
| 197 | the expected result in it, and were misdiagnosed as a bug. This |
| 198 | has been corrected. |
| 199 | (merge 262d5ad5a5 es/test-cmp-typocatcher later to maint). |
| 200 | |
| 201 | * When "git commit-graph" detects the same commit recorded more than |
| 202 | once while it is merging the layers, it used to die. The code now |
| 203 | ignores all but one of them and continues. |
| 204 | (merge 85102ac71b ds/commit-graph-merging-fix later to maint). |
| 205 | |
| 206 | * The meaning of a Signed-off-by trailer can vary from project to |
| 207 | project; this and also what it means to this project has been |
| 208 | clarified in the documentation. |
| 209 | (merge 3abd4a67d9 bk/sob-dco later to maint). |
| 210 | |
| 211 | * "git credential' didn't honor the core.askPass configuration |
| 212 | variable (among other things), which has been corrected. |
| 213 | (merge 567ad2c0f9 tk/credential-config later to maint). |
| 214 | |
| 215 | * Dev support to catch a tentative definition of a variable in our C |
| 216 | code as an error. |
| 217 | (merge 5539183622 jk/no-common later to maint). |
| 218 | |
| 219 | * "git rebase --rebase-merges" did not correctly pass --gpg-sign |
| 220 | command line option to underlying "git merge" when replaying a merge |
| 221 | using non-default merge strategy or when replaying an octopus merge |
| 222 | (because replaying a two-head merge with the default strategy was |
| 223 | done in a separate codepath, the problem did not trigger for most |
| 224 | users), which has been corrected. |
| 225 | (merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint). |
| 226 | |
| 227 | * "git apply -R" did not handle patches that touch the same path |
| 228 | twice correctly, which has been corrected. This is most relevant |
| 229 | in a patch that changes a path from a regular file to a symbolic |
| 230 | link (and vice versa). |
| 231 | (merge b0f266de11 jt/apply-reverse-twice later to maint). |
| 232 | |
| 233 | * A recent oid->hash conversion missed one spot, breaking "git svn". |
| 234 | (merge 03bb366de4 bc/svn-hash-oid-fix later to maint). |
| 235 | |
| 236 | * The documentation on the "--abbrev=<n>" option did not say the |
| 237 | output may be longer than "<n>" hexdigits, which has been |
| 238 | clarified. |
| 239 | (merge cda34e0d0c jc/abbrev-doc later to maint). |
| 240 | |
| 241 | * "git p4" now honors init.defaultBranch configuration. |
| 242 | (merge 1b09d1917f js/p4-default-branch later to maint). |
| 243 | |
| 244 | * Recently the format of an internal state file "rebase -i" uses has |
| 245 | been tightened up for consistency, which would hurt those who start |
| 246 | "rebase -i" with old git and then continue with new git. Loosen |
| 247 | the reader side a bit (which we may want to tighten again in a year |
| 248 | or so). |
| 249 | (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint). |
| 250 | |
| 251 | * The code to see if "git stash drop" can safely remove refs/stash |
| 252 | has been made more careful. |
| 253 | (merge 4f44c5659b rs/empty-reflog-check-fix later to maint). |
| 254 | |
| 255 | * "git log -L<range>:<path>" is documented to take no pathspec, but |
| 256 | this was not enforced by the command line option parser, which has |
| 257 | been corrected. |
| 258 | (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint). |
| 259 | |
| 260 | * "git format-patch --output=there" did not work as expected and |
| 261 | instead crashed. The option is now supported. |
| 262 | (merge dc1672dd10 jk/format-patch-output later to maint). |
| 263 | |
| 264 | * Define ARM64 compiled with MSVC to be little-endian. |
| 265 | (merge 0c038fc65a dg/bswap-msvc later to maint). |
| 266 | |
| 267 | * "git rebase -i" did not store ORIG_HEAD correctly. |
| 268 | (merge 8843302307 pw/rebase-i-orig-head later to maint). |
| 269 | |
| 270 | * "git blame -L :funcname -- path" did not work well for a path for |
| 271 | which a userdiff driver is defined. |
| 272 | |
| 273 | * "make DEVELOPER=1 sparse" used to run sparse and let it emit |
| 274 | warnings; now such warnings will cause an error. |
| 275 | (merge 521dc56270 jc/sparse-error-for-developer-build later to maint). |
| 276 | |
| 277 | * "git blame --ignore-revs-file=<file>" learned to ignore a |
| 278 | non-existent object name in the input, instead of complaining. |
| 279 | (merge c714d05875 jc/blame-ignore-fix later to maint). |
| 280 | |
| 281 | * Running "git diff" while allowing external diff in a state with |
| 282 | unmerged paths used to segfault, which has been corrected. |
| 283 | (merge d66851806f jk/diff-release-filespec-fix later to maint). |
| 284 | |
| 285 | * Build configuration cleanup. |
| 286 | (merge b990f02fd8 ab/config-mak-uname-simplify later to maint). |
| 287 | |
| 288 | * Fix regression introduced when nvimdiff support in mergetool was added. |
| 289 | (merge 12026f46e7 pd/mergetool-nvimdiff later to maint). |
| 290 | |
| 291 | * The exchange between receive-pack and proc-receive hook did not |
| 292 | carefully check for errors. |
| 293 | |
| 294 | * The code was not prepared to deal with pack .idx file that is |
| 295 | larger than 4GB. |
| 296 | (merge 81c4c5cf2e jk/4gb-idx later to maint). |
| 297 | |
| 298 | * Since jgit does not yet work with SHA-256 repositories, mark the |
| 299 | tests that use it not to run unless we are testing with ShA-1 |
| 300 | repositories. |
| 301 | (merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint). |
| 302 | |
| 303 | * Config parser fix for "git notes". |
| 304 | (merge 45fef1599a na/notes-displayref-is-not-boolean later to maint). |
| 305 | |
| 306 | * Move a definition of compatibility wrapper from cache.h to |
| 307 | git-compat-util.h |
| 308 | (merge a76b138daa hn/sleep-millisec-decl later to maint). |
| 309 | |
| 310 | * Error message fix. |
| 311 | (merge eaf5341538 km/stash-error-message-fix later to maint). |
| 312 | |
| 313 | * "git pull --rebase --recurse-submodules" checked for local changes |
| 314 | in a wrong range and failed to run correctly when it should. |
| 315 | (merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint). |
| 316 | |
| 317 | * "git push" that is killed may leave a pack-objects process behind, |
| 318 | still computing to find a good compression, wasting cycles. This |
| 319 | has been corrected. |
| 320 | (merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint). |
| 321 | |
| 322 | * "git fetch" that is killed may leave a pack-objects process behind, |
| 323 | still computing to find a good compression, wasting cycles. This |
| 324 | has been corrected. |
| 325 | (merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint). |
| 326 | |
| 327 | * "git add -i" failed to honor custom colors configured to show |
| 328 | patches, which has been corrected. |
| 329 | (merge 96386faa03 js/add-i-color-fix later to maint). |
| 330 | |
| 331 | * Processes that access packdata while the .idx file gets removed |
| 332 | (e.g. while repacking) did not fail or fall back gracefully as they |
| 333 | could. |
| 334 | (merge 506ec2fbda tb/idx-midx-race-fix later to maint). |
| 335 | |
| 336 | * "git apply" adjusted the permission bits of working-tree files and |
| 337 | directories according to core.sharedRepository setting by mistake and |
| 338 | for a long time, which has been corrected. |
| 339 | (merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint). |
| 340 | |
| 341 | * "fetch-pack" could pass NULL pointer to unlink(2) when it sees an |
| 342 | invalid filename; the error checking has been tightened to make |
| 343 | this impossible. |
| 344 | (merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint). |
| 345 | |
| 346 | * "git maintenance run/start/stop" needed to be run in a repository |
| 347 | to hold the lockfile they use, but didn't make sure they are |
| 348 | actually in a repository, which has been corrected. |
| 349 | |
| 350 | * The glossary described a branch as an "active" line of development, |
| 351 | which is misleading---a stale and non-moving branch is still a |
| 352 | branch. |
| 353 | (merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint). |
| 354 | |
| 355 | * Newer versions of xsltproc can assign IDs in HTML documents it |
| 356 | generates in a consistent manner. Use the feature to help format |
| 357 | HTML version of the user manual reproducibly. |
| 358 | (merge 3569e11d69 ae/doc-reproducible-html later to maint). |
| 359 | |
| 360 | * Tighten error checking in the codepath that responds to "git fetch". |
| 361 | (merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint). |
| 362 | |
| 363 | * "git pack-redundant" when there is only one packfile used to crash, |
| 364 | which has been corrected. |
| 365 | (merge 0696232390 jx/pack-redundant-on-single-pack later to maint). |
| 366 | |
| 367 | * Other code cleanup, docfix, build fix, etc. |
| 368 | (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint). |
| 369 | (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint). |
| 370 | (merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint). |
| 371 | (merge 6db29ab213 jk/fast-import-marks-cleanup later to maint). |
| 372 | (merge e5cf6d3df4 nk/dir-c-comment-update later to maint). |
| 373 | (merge 5710dcce74 jk/report-fn-typedef later to maint). |
| 374 | (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint). |
| 375 | (merge 4e1bee9a99 js/t7006-cleanup later to maint). |
| 376 | (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint). |
| 377 | (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint). |
| 378 | (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint). |
| 379 | (merge 9542d56379 sd/prompt-local-variable later to maint). |
| 380 | (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint). |
| 381 | (merge b7e20b4373 mc/typofix later to maint). |
| 382 | (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint). |
| 383 | (merge 53b67a801b js/test-file-size later to maint). |
| 384 | (merge 970909c2a7 rs/hashwrite-be64 later to maint). |
| 385 | (merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint). |
| 386 | (merge 1c3e412916 rs/archive-plug-leak-refname later to maint). |
| 387 | (merge d44e5267ea rs/plug-diff-cache-leak later to maint). |
| 388 | (merge 793c1464d3 ab/gc-keep-base-option later to maint). |
| 389 | (merge b86339b12b mt/worktree-error-message-fix later to maint). |
| 390 | (merge e01ae2a4a7 js/pull-rebase-use-advise later to maint). |
| 391 | (merge e63d774242 sn/config-doc-typofix later to maint). |
| 392 | (merge 08e9df2395 jk/multi-line-indent-style-fix later to maint). |
| 393 | (merge e66590348a da/vs-build-iconv-fix later to maint). |
| 394 | (merge 7fe07275be js/cmake-extra-built-ins-fix later to maint). |
| 395 | (merge 633eebe142 jb/midx-doc-update later to maint). |
| 396 | (merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint). |
| 397 | (merge 14639a4779 jc/compat-util-setitimer-fix later to maint). |
| 398 | (merge 56f56ac50b ab/unreachable-break later to maint). |
| 399 | (merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint). |
| 400 | (merge f4698738f9 es/perf-export-fix later to maint). |
| 401 | (merge 773c694142 nk/refspecs-negative-fix later to maint). |