| 1 | Git 2.35 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since Git 2.34 |
| 5 | ---------------------- |
| 6 | |
| 7 | Backward compatibility warts |
| 8 | |
| 9 | * "_" is now treated as any other URL-valid characters in an URL when |
| 10 | matching the per-URL configuration variable names. |
| 11 | |
| 12 | * The color palette used by "git grep" has been updated to match that |
| 13 | of GNU grep. |
| 14 | |
| 15 | |
| 16 | Note to those who build from the source |
| 17 | |
| 18 | * You may need to define NO_UNCOMPRESS2 Makefile macro if you build |
| 19 | with zlib older than 1.2.9. |
| 20 | |
| 21 | * If your compiler cannot grok C99, the build will fail. See the |
| 22 | instruction at the beginning of git-compat-util.h if this happens |
| 23 | to you. |
| 24 | |
| 25 | |
| 26 | UI, Workflows & Features |
| 27 | |
| 28 | * "git status --porcelain=v2" now show the number of stash entries |
| 29 | with --show-stash like the normal output does. |
| 30 | |
| 31 | * "git stash" learned the "--staged" option to stash away what has |
| 32 | been added to the index (and nothing else). |
| 33 | |
| 34 | * "git var GIT_DEFAULT_BRANCH" is a way to see what name is used for |
| 35 | the newly created branch if "git init" is run. |
| 36 | |
| 37 | * Various operating modes of "git reset" have been made to work |
| 38 | better with the sparse index. |
| 39 | |
| 40 | * "git submodule deinit" for a submodule whose .git metadata |
| 41 | directory is embedded in its working tree refused to work, until |
| 42 | the submodule gets converted to use the "absorbed" form where the |
| 43 | metadata directory is stored in superproject, and a gitfile at the |
| 44 | top-level of the working tree of the submodule points at it. The |
| 45 | command is taught to convert such submodules to the absorbed form |
| 46 | as needed. |
| 47 | |
| 48 | * The completion script (in contrib/) learns that the "--date" |
| 49 | option of commands from the "git log" family takes "human" and |
| 50 | "auto" as valid values. |
| 51 | |
| 52 | * "Zealous diff3" style of merge conflict presentation has been added. |
| 53 | |
| 54 | * The "git log --format=%(describe)" placeholder has been extended to |
| 55 | allow passing selected command-line options to the underlying "git |
| 56 | describe" command. |
| 57 | |
| 58 | * "default" and "reset" have been added to our color palette. |
| 59 | |
| 60 | * The cryptographic signing using ssh keys can specify literal keys |
| 61 | for keytypes whose name do not begin with the "ssh-" prefix by |
| 62 | using the "key::" prefix mechanism (e.g. "key::ecdsa-sha2-nistp256"). |
| 63 | |
| 64 | * "git fetch" without the "--update-head-ok" option ought to protect |
| 65 | a checked out branch from getting updated, to prevent the working |
| 66 | tree that checks it out to go out of sync. The code was written |
| 67 | before the use of "git worktree" got widespread, and only checked |
| 68 | the branch that was checked out in the current worktree, which has |
| 69 | been updated. |
| 70 | |
| 71 | * "git name-rev" has been tweaked to give output that is shorter and |
| 72 | easier to understand. |
| 73 | |
| 74 | * "git apply" has been taught to ignore a message without a patch |
| 75 | with the "--allow-empty" option. It also learned to honor the |
| 76 | "--quiet" option given from the command line. |
| 77 | |
| 78 | * The "init" and "set" subcommands in "git sparse-checkout" have been |
| 79 | unified for a better user experience and performance. |
| 80 | |
| 81 | * Many git commands that deal with working tree files try to remove a |
| 82 | directory that becomes empty (i.e. "git switch" from a branch that |
| 83 | has the directory to another branch that does not would attempt |
| 84 | remove all files in the directory and the directory itself). This |
| 85 | drops users into an unfamiliar situation if the command was run in |
| 86 | a subdirectory that becomes subject to removal due to the command. |
| 87 | The commands have been taught to keep an empty directory if it is |
| 88 | the directory they were started in to avoid surprising users. |
| 89 | |
| 90 | * "git am" learns "--empty=(stop|drop|keep)" option to tweak what is |
| 91 | done to a piece of e-mail without a patch in it. |
| 92 | |
| 93 | * The default merge message prepared by "git merge" records the name |
| 94 | of the current branch; the name can be overridden with a new option |
| 95 | to allow users to pretend a merge is made on a different branch. |
| 96 | |
| 97 | * The way "git p4" shows file sizes in its output has been updated to |
| 98 | use human-readable units. |
| 99 | |
| 100 | * "git -c branch.autosetupmerge=inherit branch new old" makes "new" |
| 101 | to have the same upstream as the "old" branch, instead of marking |
| 102 | "old" itself as its upstream. |
| 103 | |
| 104 | |
| 105 | Performance, Internal Implementation, Development Support etc. |
| 106 | |
| 107 | * The use of errno as a means to carry the nature of error in the ref |
| 108 | API implementation has been reworked and reduced. |
| 109 | |
| 110 | * Teach and encourage first-time contributors to this project to |
| 111 | state the base commit when they submit their topic. |
| 112 | |
| 113 | * The command line completion for "git send-email" options have been |
| 114 | tweaked to make it easier to keep it in sync with the command itself. |
| 115 | |
| 116 | * Ensure that the sparseness of the in-core index matches the |
| 117 | index.sparse configuration specified by the repository immediately |
| 118 | after the on-disk index file is read. |
| 119 | |
| 120 | * Code clean-up to eventually allow information on remotes defined |
| 121 | for an arbitrary repository to be read. |
| 122 | |
| 123 | * Build optimization. |
| 124 | |
| 125 | * Tighten code for testing pack-bitmap. |
| 126 | |
| 127 | * Weather balloon to break people with compilers that do not support |
| 128 | C99. |
| 129 | |
| 130 | * The "reftable" backend for the refs API, without integrating into |
| 131 | the refs subsystem, has been added. |
| 132 | |
| 133 | * More tests are marked as leak-free. |
| 134 | |
| 135 | * The test framework learns to list unsatisfied test prerequisites, |
| 136 | and optionally error out when prerequisites that are expected to be |
| 137 | satisfied are not. |
| 138 | |
| 139 | * The default setting for trace2 event nesting was too low to cause |
| 140 | test failures, which is worked around by bumping it up in the test |
| 141 | framework. |
| 142 | |
| 143 | * Drop support for TravisCI and update test workflows at GitHub. |
| 144 | |
| 145 | * Many tests that used to need GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| 146 | mechanism to force "git" to use 'master' as the default name for |
| 147 | the initial branch no longer need it; the use of the mechanism from |
| 148 | them have been removed. |
| 149 | |
| 150 | * Allow running our tests while disabling fsync. |
| 151 | |
| 152 | * Document the parameters given to the reflog entry iterator callback |
| 153 | functions. |
| 154 | (merge e6e94f34b2 jc/reflog-iterator-callback-doc later to maint). |
| 155 | |
| 156 | * The test helper for refs subsystem learned to write bogus and/or |
| 157 | nonexistent object name to refs to simulate error situations we |
| 158 | want to test Git in. |
| 159 | |
| 160 | * "diff --histogram" optimization. |
| 161 | |
| 162 | * Weather balloon to find compilers that do not grok variable |
| 163 | declaration in the for() loop. |
| 164 | |
| 165 | * diff and blame commands have been taught to work better with sparse |
| 166 | index. |
| 167 | |
| 168 | * The chainlint test script linter in the test suite has been updated. |
| 169 | |
| 170 | * The DEVELOPER=yes build uses -std=gnu99 now. |
| 171 | |
| 172 | * "git format-patch" uses a single rev_info instance and then exits. |
| 173 | Mark the structure with UNLEAK() macro to squelch leak sanitizer. |
| 174 | |
| 175 | * New interface into the tmp-objdir API to help in-core use of the |
| 176 | quarantine feature. |
| 177 | |
| 178 | * Broken &&-chains in the test scripts have been corrected. |
| 179 | |
| 180 | * The RCS keyword substitution in "git p4" used to be done assuming |
| 181 | that the contents are UTF-8 text, which can trigger decoding |
| 182 | errors. We now treat the contents as a bytestring for robustness |
| 183 | and correctness. |
| 184 | |
| 185 | * The conditions to choose different definitions of the FLEX_ARRAY |
| 186 | macro for vendor compilers has been simplified to make it easier to |
| 187 | maintain. |
| 188 | |
| 189 | * Correctness and performance update to "diff --color-moved" feature. |
| 190 | |
| 191 | * "git upload-pack" (the other side of "git fetch") used a 8kB buffer |
| 192 | but most of its payload came on 64kB "packets". The buffer size |
| 193 | has been enlarged so that such a packet fits. |
| 194 | |
| 195 | * "git fetch" and "git pull" are now declared sparse-index clean. |
| 196 | Also "git ls-files" learns the "--sparse" option to help debugging. |
| 197 | |
| 198 | * Similar message templates have been consolidated so that |
| 199 | translators need to work on fewer number of messages. |
| 200 | |
| 201 | |
| 202 | Fixes since v2.34 |
| 203 | ----------------- |
| 204 | |
| 205 | * "git grep" looking in a blob that has non-UTF8 payload was |
| 206 | completely broken when linked with certain versions of PCREv2 |
| 207 | library in the latest release. |
| 208 | |
| 209 | * Other code cleanup, docfix, build fix, etc. |
| 210 | |
| 211 | * "git pull" with any strategy when the other side is behind us |
| 212 | should succeed as it is a no-op, but doesn't. |
| 213 | |
| 214 | * An earlier change in 2.34.0 caused JGit application (that abused |
| 215 | GIT_EDITOR mechanism when invoking "git config") to get stuck with |
| 216 | a SIGTTOU signal; it has been reverted. |
| 217 | |
| 218 | * An earlier change that broke .gitignore matching has been reverted. |
| 219 | |
| 220 | * Things like "git -c branch.sort=bogus branch new HEAD", i.e. the |
| 221 | operation modes of the "git branch" command that do not need the |
| 222 | sort key information, no longer errors out by seeing a bogus sort |
| 223 | key. |
| 224 | (merge 98e7ab6d42 jc/fix-ref-sorting-parse later to maint). |
| 225 | |
| 226 | * The compatibility implementation for unsetenv(3) were written to |
| 227 | mimic ancient, non-POSIX, variant seen in an old glibc; it has been |
| 228 | changed to return an integer to match the more modern era. |
| 229 | (merge a38989bd5b jc/unsetenv-returns-an-int later to maint). |
| 230 | |
| 231 | * The clean/smudge conversion code path has been prepared to better |
| 232 | work on platforms where ulong is narrower than size_t. |
| 233 | (merge 596b5e77c9 mc/clean-smudge-with-llp64 later to maint). |
| 234 | |
| 235 | * Redact the path part of packfile URI that appears in the trace output. |
| 236 | (merge 0ba558ffb1 if/redact-packfile-uri later to maint). |
| 237 | |
| 238 | * CI has been taught to catch some Unicode directional formatting |
| 239 | sequence that can be used in certain mischief. |
| 240 | (merge 0e7696c64d js/ci-no-directional-formatting later to maint). |
| 241 | |
| 242 | * The "--date=format:<strftime>" gained a workaround for the lack of |
| 243 | system support for a non-local timezone to handle "%s" placeholder. |
| 244 | (merge 9b591b9403 jk/strbuf-addftime-seconds-since-epoch later to maint). |
| 245 | |
| 246 | * The "merge" subcommand of "git jump" (in contrib/) silently ignored |
| 247 | pathspec and other parameters. |
| 248 | (merge 67ba13e5a4 jk/jump-merge-with-pathspec later to maint). |
| 249 | |
| 250 | * The code to decode the length of packed object size has been |
| 251 | corrected. |
| 252 | (merge 34de5b8eac jt/pack-header-lshift-overflow later to maint). |
| 253 | |
| 254 | * The advice message given by "git pull" when the user hasn't made a |
| 255 | choice between merge and rebase still said that the merge is the |
| 256 | default, which no longer is the case. This has been corrected. |
| 257 | (merge 71076d0edd ah/advice-pull-has-no-preference-between-rebase-and-merge later to maint). |
| 258 | |
| 259 | * "git fetch", when received a bad packfile, can fail with SIGPIPE. |
| 260 | This wasn't wrong per-se, but we now detect the situation and fail |
| 261 | in a more predictable way. |
| 262 | (merge 2a4aed42ec jk/fetch-pack-avoid-sigpipe-to-index-pack later to maint). |
| 263 | |
| 264 | * The function to cull a child process and determine the exit status |
| 265 | had two separate code paths for normal callers and callers in a |
| 266 | signal handler, and the latter did not yield correct value when the |
| 267 | child has caught a signal. The handling of the exit status has |
| 268 | been unified for these two code paths. An existing test with |
| 269 | flakiness has also been corrected. |
| 270 | (merge 5263e22cba jk/t7006-sigpipe-tests-fix later to maint). |
| 271 | |
| 272 | * When a non-existent program is given as the pager, we tried to |
| 273 | reuse an uninitialized child_process structure and crashed, which |
| 274 | has been fixed. |
| 275 | (merge f917f57f40 em/missing-pager later to maint). |
| 276 | |
| 277 | * The single-key-input mode in "git add -p" had some code to handle |
| 278 | keys that generate a sequence of input via ReadKey(), which did not |
| 279 | handle end-of-file correctly, which has been fixed. |
| 280 | (merge fc8a8126df cb/add-p-single-key-fix later to maint). |
| 281 | |
| 282 | * "git rebase -x" added an unnecessary 'exec' instructions before |
| 283 | 'noop', which has been corrected. |
| 284 | (merge cc9dcdee61 en/rebase-x-fix later to maint). |
| 285 | |
| 286 | * When the "git push" command is killed while the receiving end is |
| 287 | trying to report what happened to the ref update proposals, the |
| 288 | latter used to die, due to SIGPIPE. The code now ignores SIGPIPE |
| 289 | to increase our chances to run the post-receive hook after it |
| 290 | happens. |
| 291 | (merge d34182b9e3 rj/receive-pack-avoid-sigpipe-during-status-reporting later to maint). |
| 292 | |
| 293 | * "git worktree add" showed "Preparing worktree" message to the |
| 294 | standard output stream, but when it failed, the message from die() |
| 295 | went to the standard error stream. Depending on the order the |
| 296 | stdio streams are flushed at the program end, this resulted in |
| 297 | confusing output. It has been corrected by sending all the chatty |
| 298 | messages to the standard error stream. |
| 299 | (merge b50252484f es/worktree-chatty-to-stderr later to maint). |
| 300 | |
| 301 | * Coding guideline document has been updated to clarify what goes to |
| 302 | standard error in our system. |
| 303 | (merge e258eb4800 es/doc-stdout-vs-stderr later to maint). |
| 304 | |
| 305 | * The sparse-index/sparse-checkout feature had a bug in its use of |
| 306 | the matching code to determine which path is in or outside the |
| 307 | sparse checkout patterns. |
| 308 | (merge 8c5de0d265 ds/sparse-deep-pattern-checkout-fix later to maint). |
| 309 | |
| 310 | * "git rebase -x" by mistake started exporting the GIT_DIR and |
| 311 | GIT_WORK_TREE environment variables when the command was rewritten |
| 312 | in C, which has been corrected. |
| 313 | (merge 434e0636db en/rebase-x-wo-git-dir-env later to maint). |
| 314 | |
| 315 | * When "git log" implicitly enabled the "decoration" processing |
| 316 | without being explicitly asked with "--decorate" option, it failed |
| 317 | to read and honor the settings given by the "--decorate-refs" |
| 318 | option. |
| 319 | |
| 320 | * "git fetch --set-upstream" did not check if there is a current |
| 321 | branch, leading to a segfault when it is run on a detached HEAD, |
| 322 | which has been corrected. |
| 323 | (merge 17baeaf82d ab/fetch-set-upstream-while-detached later to maint). |
| 324 | |
| 325 | * Among some code paths that ask an yes/no question, only one place |
| 326 | gave a prompt that looked different from the others, which has been |
| 327 | updated to match what the others create. |
| 328 | (merge 0fc8ed154c km/help-prompt-fix later to maint). |
| 329 | |
| 330 | * "git log --invert-grep --author=<name>" used to exclude commits |
| 331 | written by the given author, but now "--invert-grep" only affects |
| 332 | the matches made by the "--grep=<pattern>" option. |
| 333 | (merge 794c000267 rs/log-invert-grep-with-headers later to maint). |
| 334 | |
| 335 | * "git grep --perl-regexp" failed to match UTF-8 characters with |
| 336 | wildcard when the pattern consists only of ASCII letters, which has |
| 337 | been corrected. |
| 338 | (merge 32e3e8bc55 rs/pcre2-utf later to maint). |
| 339 | |
| 340 | * Certain sparse-checkout patterns that are valid in non-cone mode |
| 341 | led to segfault in cone mode, which has been corrected. |
| 342 | |
| 343 | * Use of certain "git rev-list" options with "git fast-export" |
| 344 | created nonsense results (the worst two of which being "--reverse" |
| 345 | and "--invert-grep --grep=<foo>"). The use of "--first-parent" is |
| 346 | made to behave a bit more sensible than before. |
| 347 | (merge 726a228dfb ws/fast-export-with-revision-options later to maint). |
| 348 | |
| 349 | * Perf tests were run with end-user's shell, but it has been |
| 350 | corrected to use the shell specified by $TEST_SHELL_PATH. |
| 351 | (merge 9ccab75608 ja/perf-use-specified-shell later to maint). |
| 352 | |
| 353 | * Fix dependency rules to generate hook-list.h header file. |
| 354 | (merge d3fd1a6667 ab/makefile-hook-list-dependency-fix later to maint). |
| 355 | |
| 356 | * "git stash" by default triggers its "push" action, but its |
| 357 | implementation also made "git stash -h" to show short help only for |
| 358 | "git stash push", which has been corrected. |
| 359 | (merge ca7990cea5 ab/do-not-limit-stash-help-to-push later to maint). |
| 360 | |
| 361 | * "git apply --3way" bypasses the attempt to do a three-way |
| 362 | application in more cases to address the regression caused by the |
| 363 | recent change to use direct application as a fallback. |
| 364 | (merge 34d607032c jz/apply-3-corner-cases later to maint). |
| 365 | |
| 366 | * Fix performance-releated bug in "git subtree" (in contrib/). |
| 367 | (merge 3ce8888fb4 jl/subtree-check-parents-argument-passing-fix later to maint). |
| 368 | |
| 369 | * Extend the guidance to choose the base commit to build your work |
| 370 | on, and hint/nudge contributors to read others' changes. |
| 371 | (merge fdfae830f8 jc/doc-submitting-patches-choice-of-base later to maint). |
| 372 | |
| 373 | * A corner case bug in the ort merge strategy has been corrected. |
| 374 | (merge d30126c20d en/merge-ort-renorm-with-rename-delete-conflict-fix later to maint). |
| 375 | |
| 376 | * "git stash apply" forgot to attempt restoring untracked files when |
| 377 | it failed to restore changes to tracked ones. |
| 378 | (merge 71cade5a0b en/stash-df-fix later to maint). |
| 379 | |
| 380 | * Calling dynamically loaded functions on Windows has been corrected. |
| 381 | (merge 4a9b204920 ma/windows-dynload-fix later to maint). |
| 382 | |
| 383 | * Some lockfile code called free() in signal-death code path, which |
| 384 | has been corrected. |
| 385 | (merge 58d4d7f1c5 ps/lockfile-cleanup-fix later to maint). |
| 386 | |
| 387 | * Other code cleanup, docfix, build fix, etc. |
| 388 | (merge 74db416c9c cw/protocol-v2-doc-fix later to maint). |
| 389 | (merge f9b2b6684d ja/doc-cleanup later to maint). |
| 390 | (merge 7d1b866778 jc/fix-first-object-walk later to maint). |
| 391 | (merge 538ac74604 js/trace2-avoid-recursive-errors later to maint). |
| 392 | (merge 152923b132 jk/t5319-midx-corruption-test-deflake later to maint). |
| 393 | (merge 9081a421a6 ab/checkout-branch-info-leakfix later to maint). |
| 394 | (merge 42c456ff81 rs/mergesort later to maint). |
| 395 | (merge ad506e6780 tl/midx-docfix later to maint). |
| 396 | (merge bf5b83fd8a hk/ci-checkwhitespace-commentfix later to maint). |
| 397 | (merge 49f1eb3b34 jk/refs-g11-workaround later to maint). |
| 398 | (merge 7d3fc7df70 jt/midx-doc-fix later to maint). |
| 399 | (merge 7b089120d9 hn/create-reflog-simplify later to maint). |
| 400 | (merge 9e12400da8 cb/mingw-gmtime-r later to maint). |
| 401 | (merge 0bf0de6cc7 tb/pack-revindex-on-disk-cleanup later to maint). |
| 402 | (merge 2c68f577fc ew/cbtree-remove-unused-and-broken-cb-unlink later to maint). |
| 403 | (merge eafd6e7e55 ab/die-with-bug later to maint). |
| 404 | (merge 91028f7659 jc/grep-patterntype-default-doc later to maint). |
| 405 | (merge 47ca93d071 ds/repack-fixlets later to maint). |
| 406 | (merge e6a9bc0c60 rs/t4202-invert-grep-test-fix later to maint). |
| 407 | (merge deb5407a42 gh/gpg-doc-markup-fix later to maint). |
| 408 | (merge 999bba3e0b rs/daemon-plug-leak later to maint). |
| 409 | (merge 786eb1ba39 js/l10n-mention-ngettext-early-in-readme later to maint). |
| 410 | (merge 2f12b31b74 ab/makefile-msgfmt-wo-stats later to maint). |
| 411 | (merge 0517f591ca fs/gpg-unknown-key-test-fix later to maint). |
| 412 | (merge 97d6fb5a1f ma/header-dup-cleanup later to maint). |