| 1 | Git v2.46 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | |
| 6 | * The "--rfc" option of "git format-patch" learned to take an |
| 7 | optional string value to be used in place of "RFC" to tweak the |
| 8 | "[PATCH]" on the subject header. |
| 9 | |
| 10 | * The credential helper protocol, together with the HTTP layer, have |
| 11 | been enhanced to support authentication schemes different from |
| 12 | username & password pair, like Bearer and NTLM. |
| 13 | |
| 14 | * Command line completion script (in contrib/) learned to complete |
| 15 | "git symbolic-ref" a bit better (you need to enable plumbing |
| 16 | commands to be completed with GIT_COMPLETION_SHOW_ALL_COMMANDS). |
| 17 | |
| 18 | * When the user responds to a prompt given by "git add -p" with an |
| 19 | unsupported command, list of available commands were given, which |
| 20 | was too much if the user knew what they wanted to type but merely |
| 21 | made a typo. Now the user gets a much shorter error message. |
| 22 | |
| 23 | * The color parsing code learned to handle 12-bit RGB colors, spelled |
| 24 | as "#RGB" (in addition to "#RRGGBB" that is already supported). |
| 25 | |
| 26 | * The operation mode options (like "--get") the "git config" command |
| 27 | uses have been deprecated and replaced with subcommands (like "git |
| 28 | config get"). |
| 29 | |
| 30 | * "git tag" learned the "--trailer" option to futz with the trailers |
| 31 | in the same way as "git commit" does. |
| 32 | |
| 33 | * A new global "--no-advice" option can be used to disable all advice |
| 34 | messages, which is meant to be used only in scripts. |
| 35 | |
| 36 | * Updates to symbolic refs can now be made as a part of ref |
| 37 | transaction. |
| 38 | |
| 39 | * The trailer API has been reshuffled a bit. |
| 40 | |
| 41 | * Terminology to call various ref-like things are getting |
| 42 | straightened out. |
| 43 | |
| 44 | * The command line completion script (in contrib/) has been adjusted |
| 45 | to the recent update to "git config" that adopted subcommand based |
| 46 | UI. |
| 47 | |
| 48 | * The knobs to tweak how reftable files are written have been made |
| 49 | available as configuration variables. |
| 50 | |
| 51 | * When "git push" notices that the commit at the tip of the ref on |
| 52 | the other side it is about to overwrite does not exist locally, it |
| 53 | used to first try fetching it if the local repository is a partial |
| 54 | clone. The command has been taught not to do so and immediately |
| 55 | fail instead. |
| 56 | |
| 57 | * The promisor.quiet configuration knob can be set to true to make |
| 58 | lazy fetching from promisor remotes silent. |
| 59 | |
| 60 | * The inter/range-diff output has been moved to the end of the patch |
| 61 | when format-patch adds it to a single patch, instead of writing it |
| 62 | before the patch text, to be consistent with what is done for a |
| 63 | cover letter for a multi-patch series. |
| 64 | |
| 65 | * A new command has been added to migrate a repository that uses the |
| 66 | files backend for its ref storage to use the reftable backend, with |
| 67 | limitations. |
| 68 | |
| 69 | * "git diff --exit-code --ext-diff" learned to take the exit status |
| 70 | of the external diff driver into account when deciding the exit |
| 71 | status of the overall "git diff" invocation when configured to do |
| 72 | so. |
| 73 | |
| 74 | * "git update-ref --stdin" learned to handle transactional updates of |
| 75 | symbolic-refs. |
| 76 | |
| 77 | * "git format-patch --interdiff" for multi-patch series learned to |
| 78 | turn on cover letters automatically (unless told never to enable |
| 79 | cover letter with "--no-cover-letter" and such). |
| 80 | |
| 81 | * The "--heads" option of "ls-remote" and "show-ref" has been |
| 82 | deprecated; "--branches" replaces "--heads". |
| 83 | |
| 84 | * For over a year, setting add.interactive.useBuiltin configuration |
| 85 | variable did nothing but giving a "this does not do anything" |
| 86 | warning. The warning has been removed. |
| 87 | |
| 88 | * The http transport can now be told to send request with |
| 89 | authentication material without first getting a 401 response. |
| 90 | |
| 91 | * A handful of entries are added to the GitFAQ document. |
| 92 | |
| 93 | * "git var GIT_SHELL_PATH" should report the path to the shell used |
| 94 | to spawn external commands, but it didn't do so on Windows, which |
| 95 | has been corrected. |
| 96 | |
| 97 | |
| 98 | Performance, Internal Implementation, Development Support etc. |
| 99 | |
| 100 | * Advertise "git contacts", a tool for newcomers to find people to |
| 101 | ask review for their patches, a bit more in our developer |
| 102 | documentation. |
| 103 | |
| 104 | * In addition to building the objects needed, try to link the objects |
| 105 | that are used in fuzzer tests, to make sure at least they build |
| 106 | without bitrot, in Linux CI runs. |
| 107 | |
| 108 | * Code to write out reftable has seen some optimization and |
| 109 | simplification. |
| 110 | |
| 111 | * Tests to ensure interoperability between reftable written by jgit |
| 112 | and our code have been added and enabled in CI. |
| 113 | |
| 114 | * The singleton index_state instance "the_index" has been eliminated |
| 115 | by always instantiating "the_repository" and replacing references |
| 116 | to "the_index" with references to its .index member. |
| 117 | |
| 118 | * Git-GUI has a new maintainer, Johannes Sixt. |
| 119 | |
| 120 | * The "test-tool" has been taught to run testsuite tests in parallel, |
| 121 | bypassing the need to use the "prove" tool. |
| 122 | |
| 123 | * The "whitespace check" task that was enabled for GitHub Actions CI |
| 124 | has been ported to GitLab CI. |
| 125 | |
| 126 | * The refs API lost functions that implicitly assumes to work on the |
| 127 | primary ref_store by forcing the callers to pass a ref_store as an |
| 128 | argument. |
| 129 | |
| 130 | * Code clean-up to reduce inter-function communication inside |
| 131 | builtin/config.c done via the use of global variables. |
| 132 | |
| 133 | * The pack bitmap code saw some clean-up to prepare for a follow-up topic. |
| 134 | |
| 135 | * Preliminary code clean-up for "git send-email". |
| 136 | |
| 137 | * The default "creation-factor" used by "git format-patch" has been |
| 138 | raised to make it more aggressively find matching commits. |
| 139 | |
| 140 | * Before discovering the repository details, We used to assume SHA-1 |
| 141 | as the "default" hash function, which has been corrected. Hopefully |
| 142 | this will smoke out codepaths that rely on such an unwarranted |
| 143 | assumptions. |
| 144 | |
| 145 | * The project decision making policy has been documented. |
| 146 | |
| 147 | * The strcmp-offset tests have been rewritten using the unit test |
| 148 | framework. |
| 149 | |
| 150 | * "git add -p" learned to complain when an answer with more than one |
| 151 | letter is given to a prompt that expects a single letter answer. |
| 152 | |
| 153 | * The alias-expanded command lines are logged to the trace output. |
| 154 | |
| 155 | * A new test was added to ensure git commands that are designed to |
| 156 | run outside repositories do work. |
| 157 | |
| 158 | * A few tests in reftable library have been rewritten using the |
| 159 | unit test framework. |
| 160 | |
| 161 | * A pair of test helpers that essentially are unit tests on hash |
| 162 | algorithms have been rewritten using the unit-tests framework. |
| 163 | |
| 164 | * A test helper that essentially is unit tests on the "decorate" |
| 165 | logic has been rewritten using the unit-tests framework. |
| 166 | |
| 167 | * Many memory leaks in the sparse-checkout code paths have been |
| 168 | plugged. |
| 169 | |
| 170 | * "make check-docs" noticed problems and reported to its output but |
| 171 | failed to signal its findings with its exit status, which has been |
| 172 | corrected. |
| 173 | |
| 174 | * Building with "-Werror -Wwrite-strings" is now supported. |
| 175 | |
| 176 | * To help developers, the build procedure now allows builders to use |
| 177 | CFLAGS_APPEND to specify additional CFLAGS. |
| 178 | |
| 179 | * "oidtree" tests were rewritten to use the unit test framework. |
| 180 | |
| 181 | * The structure of the document that records longer-term project |
| 182 | decisions to deprecate/remove/update various behaviour has been |
| 183 | outlined. |
| 184 | |
| 185 | * The pseudo-merge reachability bitmap to help more efficient storage |
| 186 | of the reachability bitmap in a repository with too many refs has |
| 187 | been added. |
| 188 | |
| 189 | * When "git merge" sees that the index cannot be refreshed (e.g. due |
| 190 | to another process doing the same in the background), it died but |
| 191 | after writing MERGE_HEAD etc. files, which was useless for the |
| 192 | purpose to recover from the failure. |
| 193 | |
| 194 | * The output from "git cat-file --batch-check" and "--batch-command |
| 195 | (info)" should not be unbuffered, for which some tests have been |
| 196 | added. |
| 197 | |
| 198 | * A CPP macro USE_THE_REPOSITORY_VARIABLE is introduced to help |
| 199 | transition the codebase to rely less on the availability of the |
| 200 | singleton the_repository instance. |
| 201 | |
| 202 | * "git version --build-options" reports the version information of |
| 203 | OpenSSL and other libraries (if used) in the build. |
| 204 | |
| 205 | * Memory ownership rules for the in-core representation of |
| 206 | remote.*.url configuration values have been straightened out, which |
| 207 | resulted in a few leak fixes and code clarification. |
| 208 | |
| 209 | * When bundleURI interface fetches multiple bundles, Git failed to |
| 210 | take full advantage of all bundles and ended up slurping duplicated |
| 211 | objects, which has been corrected. |
| 212 | |
| 213 | * The code to deal with modified paths that are out-of-cone in a |
| 214 | sparsely checked out working tree has been optimized. |
| 215 | |
| 216 | * An existing test of oidmap API has been rewritten with the |
| 217 | unit-test framework. |
| 218 | |
| 219 | * The "ort" merge backend saw one bugfix for a crash that happens |
| 220 | when inner merge gets killed, and assorted code clean-ups. |
| 221 | |
| 222 | * A new warning message is issued when a command has to expand a |
| 223 | sparse index to handle working tree cruft that are outside of the |
| 224 | sparse checkout. |
| 225 | |
| 226 | * The test framework learned to take the test body not as a single |
| 227 | string but as a here-document. |
| 228 | |
| 229 | * "git push '' HEAD:there" used to hit a BUG(); it has been corrected |
| 230 | to die with "fatal: bad repository ''". |
| 231 | |
| 232 | * What happens when http.cookieFile gets the special value "" has |
| 233 | been clarified in the documentation. |
| 234 | |
| 235 | |
| 236 | Fixes since v2.45 |
| 237 | ----------------- |
| 238 | |
| 239 | * "git rebase --signoff" used to forget that it needs to add a |
| 240 | sign-off to the resulting commit when told to continue after a |
| 241 | conflict stops its operation. |
| 242 | |
| 243 | * The procedure to build multi-pack-index got confused by the |
| 244 | replace-refs mechanism, which has been corrected by disabling the |
| 245 | latter. |
| 246 | |
| 247 | * The "-k" and "--rfc" options of "format-patch" will now error out |
| 248 | when used together, as one tells us not to add anything to the |
| 249 | title of the commit, and the other one tells us to add "RFC" in |
| 250 | addition to "PATCH". |
| 251 | |
| 252 | * "git stash -S" did not handle binary files correctly, which has |
| 253 | been corrected. |
| 254 | |
| 255 | * A scheduled "git maintenance" job is expected to work on all |
| 256 | repositories it knows about, but it stopped at the first one that |
| 257 | errored out. Now it keeps going. |
| 258 | |
| 259 | * zsh can pretend to be a normal shell pretty well except for some |
| 260 | glitches that we tickle in some of our scripts. Work them around |
| 261 | so that "vimdiff" and our test suite works well enough with it. |
| 262 | |
| 263 | * Command line completion support for zsh (in contrib/) has been |
| 264 | updated to stop exposing internal state to end-user shell |
| 265 | interaction. |
| 266 | |
| 267 | * Tests that try to corrupt in-repository files in chunked format did |
| 268 | not work well on macOS due to its broken "mv", which has been |
| 269 | worked around. |
| 270 | |
| 271 | * The maximum size of attribute files is enforced more consistently. |
| 272 | |
| 273 | * Unbreak CI jobs so that we do not attempt to use Python 2 that has |
| 274 | been removed from the platform. |
| 275 | |
| 276 | * Git 2.43 started using the tree of HEAD as the source of attributes |
| 277 | in a bare repository, which has severe performance implications. |
| 278 | For now, revert the change, without ripping out a more explicit |
| 279 | support for the attr.tree configuration variable. |
| 280 | |
| 281 | * The "--exit-code" option of "git diff" command learned to work with |
| 282 | the "--ext-diff" option. |
| 283 | |
| 284 | * Windows CI running in GitHub Actions started complaining about the |
| 285 | order of arguments given to calloc(); the imported regex code uses |
| 286 | the wrong order almost consistently, which has been corrected. |
| 287 | |
| 288 | * Expose "name conflict" error when a ref creation fails due to D/F |
| 289 | conflict in the ref namespace, to improve an error message given by |
| 290 | "git fetch". |
| 291 | (merge 9339fca23e it/refs-name-conflict later to maint). |
| 292 | |
| 293 | * The SubmittingPatches document now refers folks to manpages |
| 294 | translation project. |
| 295 | |
| 296 | * The documentation for "git diff --name-only" has been clarified |
| 297 | that it is about showing the names in the post-image tree. |
| 298 | |
| 299 | * The credential helper that talks with osx keychain learned to avoid |
| 300 | storing back the authentication material it just got received from |
| 301 | the keychain. |
| 302 | (merge e1ab45b2da kn/osxkeychain-skip-idempotent-store later to maint). |
| 303 | |
| 304 | * The chainlint script (invoked during "make test") did nothing when |
| 305 | it failed to detect the number of available CPUs. It now falls |
| 306 | back to 1 CPU to avoid the problem. |
| 307 | |
| 308 | * Revert overly aggressive "layered defence" that went into 2.45.1 |
| 309 | and friends, which broke "git-lfs", "git-annex", and other use |
| 310 | cases, so that we can rebuild necessary counterparts in the open. |
| 311 | |
| 312 | * "git init" in an already created directory, when the user |
| 313 | configuration has includeif.onbranch, started to fail recently, |
| 314 | which has been corrected. |
| 315 | |
| 316 | * Memory leaks in "git mv" has been plugged. |
| 317 | |
| 318 | * The safe.directory configuration knob has been updated to |
| 319 | optionally allow leading path matches. |
| 320 | |
| 321 | * An overly large ".gitignore" files are now rejected silently. |
| 322 | |
| 323 | * Upon expiration event, the credential subsystem forgot to clear |
| 324 | in-core authentication material other than password (whose support |
| 325 | was added recently), which has been corrected. |
| 326 | |
| 327 | * Fix for an embarrassing typo that prevented Python2 tests from running |
| 328 | anywhere. |
| 329 | |
| 330 | * Varargs functions that are unannotated as printf-like or execl-like |
| 331 | have been annotated as such. |
| 332 | |
| 333 | * "git am" has a safety feature to prevent it from starting a new |
| 334 | session when there already is a session going. It reliably |
| 335 | triggers when a mbox is given on the command line, but it has to |
| 336 | rely on the tty-ness of the standard input. Add an explicit way to |
| 337 | opt out of this safety with a command line option. |
| 338 | (merge 62c71ace44 jk/am-retry later to maint). |
| 339 | |
| 340 | * A leak in "git imap-send" that somehow escapes LSan has been |
| 341 | plugged. |
| 342 | |
| 343 | * Setting core.abbrev too early before the repository set-up |
| 344 | (typically in "git clone") caused segfault, which as been |
| 345 | corrected. |
| 346 | |
| 347 | * When the user adds to "git rebase -i" instruction to "pick" a merge |
| 348 | commit, the error experience is not pleasant. Such an error is now |
| 349 | caught earlier in the process that parses the todo list. |
| 350 | |
| 351 | * We forgot to normalize the result of getcwd() to NFC on macOS where |
| 352 | all other paths are normalized, which has been corrected. This still |
| 353 | does not address the case where core.precomposeUnicode configuration |
| 354 | is not defined globally. |
| 355 | |
| 356 | * Earlier we stopped using the tree of HEAD as the default source of |
| 357 | attributes in a bare repository, but failed to document it. This |
| 358 | has been corrected. |
| 359 | |
| 360 | * "git update-server-info" and "git commit-graph --write" have been |
| 361 | updated to use the tempfile API to avoid leaving cruft after |
| 362 | failing. |
| 363 | |
| 364 | * An unused extern declaration for mingw has been removed to prevent |
| 365 | it from causing build failure. |
| 366 | |
| 367 | * A helper function shared between two tests had a copy-paste bug, |
| 368 | which has been corrected. |
| 369 | |
| 370 | * "git fetch-pack -k -k" without passing "--lock-pack" (which we |
| 371 | never do ourselves) did not work at all, which has been corrected. |
| 372 | |
| 373 | * CI job to build minimum fuzzers learned to pass NO_CURL=NoThanks to |
| 374 | the build procedure, as its build environment does not offer, or |
| 375 | the rest of the build needs, anything cURL. |
| 376 | (merge 4e66b5a990 jc/fuzz-sans-curl later to maint). |
| 377 | |
| 378 | * "git diff --no-ext-diff" when diff.external is configured ignored |
| 379 | the "--color-moved" option. |
| 380 | (merge 0f4b0d4cf0 rs/diff-color-moved-w-no-ext-diff-fix later to maint). |
| 381 | |
| 382 | * "git archive --add-virtual-file=<path>:<contents>" never paid |
| 383 | attention to the --prefix=<prefix> option but the documentation |
| 384 | said it would. The documentation has been corrected. |
| 385 | (merge 72c282098d jc/archive-prefix-with-add-virtual-file later to maint). |
| 386 | |
| 387 | * When GIT_PAGER failed to spawn, depending on the code path taken, |
| 388 | we failed immediately (correct) or just spew the payload to the |
| 389 | standard output (incorrect). The code now always fail immediately |
| 390 | when GIT_PAGER fails. |
| 391 | (merge 78f0a5d187 rj/pager-die-upon-exec-failure later to maint). |
| 392 | |
| 393 | * date parser updates to be more careful about underflowing epoch |
| 394 | based timestamp. |
| 395 | (merge 9d69789770 db/date-underflow-fix later to maint). |
| 396 | |
| 397 | * The Bloom filter used for path limited history traversal was broken |
| 398 | on systems whose "char" is unsigned; update the implementation and |
| 399 | bump the format version to 2. |
| 400 | (merge 9c8a9ec787 tb/path-filter-fix later to maint). |
| 401 | |
| 402 | * Typofix. |
| 403 | (merge 231cf7370e as/pathspec-h-typofix later to maint). |
| 404 | |
| 405 | * Code clean-up. |
| 406 | (merge 4b837f821e rs/simplify-submodule-helper-super-prefix-invocation later to maint). |
| 407 | |
| 408 | * "git describe --dirty --broken" forgot to refresh the index before |
| 409 | seeing if there is any chang, ("git describe --dirty" correctly did |
| 410 | so), which has been corrected. |
| 411 | (merge b8ae42e292 as/describe-broken-refresh-index-fix later to maint). |
| 412 | |
| 413 | * Test suite has been taught not to unnecessarily rely on DNS failing |
| 414 | a bogus external name. |
| 415 | (merge 407cdbd271 jk/tests-without-dns later to maint). |
| 416 | |
| 417 | * GitWeb update to use committer date consistently in rss/atom feeds. |
| 418 | (merge cf6ead095b am/gitweb-feed-use-committer-date later to maint). |
| 419 | |
| 420 | * Custom control structures we invented more recently have been |
| 421 | taught to the clang-format file. |
| 422 | (merge 1457dff9be rs/clang-format-updates later to maint). |
| 423 | |
| 424 | * Developer build procedure fix. |
| 425 | (merge df32729866 tb/dev-build-pedantic-fix later to maint). |
| 426 | |
| 427 | * "git push" that pushes only deletion gave an unnecessary and |
| 428 | harmless error message when push negotiation is configured, which |
| 429 | has been corrected. |
| 430 | (merge 4d8ee0317f jc/disable-push-nego-for-deletion later to maint). |
| 431 | |
| 432 | * Address-looking strings found on the trailer are now placed on the |
| 433 | Cc: list after running through sanitize_address by "git send-email". |
| 434 | (merge c852531f45 cb/send-email-sanitize-trailer-addresses later to maint). |
| 435 | |
| 436 | * Tests that use GIT_TEST_SANITIZE_LEAK_LOG feature got their exit |
| 437 | status inverted, which has been corrected. |
| 438 | (merge 8c1d6691bc rj/test-sanitize-leak-log-fix later to maint). |
| 439 | |
| 440 | * The http.cookieFile and http.saveCookies configuration variables |
| 441 | have a few values that need to be avoided, which are now ignored |
| 442 | with warning messages. |
| 443 | (merge 4f5822076f jc/http-cookiefile later to maint). |
| 444 | |
| 445 | * Repacking a repository with multi-pack index started making stupid |
| 446 | pack selections in Git 2.45, which has been corrected. |
| 447 | (merge 8fb6d11fad ds/midx-write-repack-fix later to maint). |
| 448 | |
| 449 | * Fix documentation mark-up regression in 2.45. |
| 450 | (merge 6474da0aa4 ja/doc-markup-updates-fix later to maint). |
| 451 | |
| 452 | * Work around asciidoctor's css that renders `monospace` material |
| 453 | in the SYNOPSIS section of manual pages as block elements. |
| 454 | (merge d44ce6ddd5 js/doc-markup-updates-fix later to maint). |
| 455 | |
| 456 | * Other code cleanup, docfix, build fix, etc. |
| 457 | (merge 493fdae046 ew/object-convert-leakfix later to maint). |
| 458 | (merge 00f3661a0a ss/doc-eol-attr-fix later to maint). |
| 459 | (merge 428c40da61 ri/doc-show-branch-fix later to maint). |
| 460 | (merge 58696bfcaa jc/where-is-bash-for-ci later to maint). |
| 461 | (merge 616e94ca24 tb/doc-max-tree-depth-fix later to maint). |