{"thread":{"id":"54894","subject":"[ANNOUNCE] Git v2.30.0","startedAt":"2020-12-28T19:11:05Z","lastAt":"2020-12-28T19:11:05Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"413088","messageId":"xmqqk0t1g326.fsf@gitster.c.googlers.com","threadId":"54894","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.30.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2020-12-28T19:09:53Z","receivedAt":"2020-12-28T19:11:05Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The latest feature release Git v2.30.0 is now available at the\nusual places.  It comprises 495 non-merge commits since\nv2.29.0, contributed by 83 people, 29 of which are new faces.\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/\n\nThe following public repositories all have a copy of the 'v2.30.0'\ntag and the 'master' branch that the tag points at:\n\n  url = https://kernel.googlesource.com/pub/scm/git/git\n  url = git://repo.or.cz/alt-git.git\n  url = https://github.com/gitster/git\n\nNew contributors whose patches weren't in v2.29.0 are as follows.\nWelcome to the Git development community!\n\n  Alexey, Amanda Shafack, Arusekk, Baptiste Fontaine, Bradley\n  M. Kuhn, Caleb Tillman, Charvi Mendiratta, Daniel Duvall,\n  Daniel Gurney, Dennis Ameling, Javier Spagnoletti, Jinoh Kang,\n  Joey Salazar, Konrad Borowski, m4sk1n, Marlon Rac Cambasis,\n  Martin Schön, Michał Kępień, Nate Avers, Nipunn Koorapati,\n  Rafael Silva, Robert Karszniewicz, Samuel Čavoj, Sean Barag,\n  Sibo Dong, Simão Afonso, Sohom Datta, Thomas Koutcher, and\n  Victor Engmark.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Adam Spiers, Ævar Arnfjörð Bjarmason, Alexander Shopov, Alex\n  Vandiver, Arnout Engelen, brian m. carlson, Christian Couder,\n  Chris. Webster, David Aguilar, Denton Liu, Derrick Stolee,\n  Dimitriy Ryazantcev, Đoàn Trần Công Danh, Drew DeVault,\n  Elijah Newren, Emily Shaffer, Emir Sarı, Eric Sunshine, Felipe\n  Contreras, Han-Wen Nienhuys, Jean-Noël Avila, Jeff Hostetler,\n  Jeff King, Jiang Xin, Johannes Berg, Johannes Schindelin,\n  Jonathan Tan, Jordi Mas, Josh Steadmon, Junio C Hamano,\n  Kyle Meyer, Martin Ågren, Matheus Tavares, Matthias Rüster,\n  Nicolas Morey-Chaisemartin, Patrick Steinhardt, Peter Kaestle,\n  Peter Krefting, Philippe Blain, Phillip Wood, Pranit Bauva,\n  Pratyush Yadav, Ramsay Jones, Randall S. Becker, René Scharfe,\n  Sergey Organov, Serg Tereshchenko, Srinidhi Kaushik, Stefan\n  Haller, Štěpán Němec, SZEDER Gábor, Taylor Blau, Trần\n  Ngọc Quân, and Yi-Jyun Pan.\n\n----------------------------------------------------------------\n\nGit 2.30 Release Notes\n======================\n\nUpdates since v2.29\n-------------------\n\nUI, Workflows & Features\n\n * Userdiff for PHP update.\n\n * Userdiff for Rust update.\n\n * Userdiff for CSS update.\n\n * The command line completion script (in contrib/) learned that \"git\n   stash show\" takes the options \"git diff\" takes.\n\n * \"git worktree list\" now shows if each worktree is locked.  This\n   possibly may open us to show other kinds of states in the future.\n\n * \"git maintenance\", an extended big brother of \"git gc\", continues\n   to evolve.\n\n * \"git push --force-with-lease[=<ref>]\" can easily be misused to lose\n   commits unless the user takes good care of their own \"git fetch\".\n   A new option \"--force-if-includes\" attempts to ensure that what is\n   being force-pushed was created after examining the commit at the\n   tip of the remote ref that is about to be force-replaced.\n\n * \"git clone\" learned clone.defaultremotename configuration variable\n   to customize what nickname to use to call the remote the repository\n   was cloned from.\n\n * \"git checkout\" learned to use checkout.guess configuration variable\n   and enable/disable its \"--[no-]guess\" option accordingly.\n\n * \"git resurrect\" script (in contrib/) learned that the object names\n   may be longer than 40-hex depending on the hash function in use.\n\n * \"git diff A...B\" learned \"git diff --merge-base A B\", which is a\n   longer short-hand to say the same thing.\n\n * A sample 'push-to-checkout' hook, that performs the same as\n   what the built-in default action does, has been added.\n\n * \"git diff\" family of commands learned the \"-I<regex>\" option to\n   ignore hunks whose changed lines all match the given pattern.\n\n * The userdiff pattern learned to identify the function definition in\n   POSIX shells and bash.\n\n * \"git checkout-index\" did not consistently signal an error with its\n   exit status, but now it does.\n\n * A commit and tag object may have CR at the end of each and\n   every line (you can create such an object with hash-object or\n   using --cleanup=verbatim to decline the default clean-up\n   action), but it would make it impossible to have a blank line\n   to separate the title from the body of the message.  We are now\n   more lenient and accept a line with lone CR on it as a blank line,\n   too.\n\n * Exit codes from \"git remote add\" etc. were not usable by scripted\n   callers, but now they are.\n\n * \"git archive\" now allows compression level higher than \"-9\"\n   when generating tar.gz output.\n\n * Zsh autocompletion (in contrib/) update.\n\n * The maximum length of output filenames \"git format-patch\" creates\n   has become configurable (used to be capped at 64).\n\n * \"git rev-parse\" learned the \"--end-of-options\" to help scripts to\n   safely take a parameter that is supposed to be a revision, e.g.\n   \"git rev-parse --verify -q --end-of-options $rev\".\n\n * The command line completion script (in contrib/) learned to expand\n   commands that are alias of alias.\n\n * \"git update-ref --stdin\" learns to take multiple transactions in a\n   single session.\n\n * Various subcommands of \"git config\" that take value_regex\n   learned the \"--literal-value\" option to take the value_regex option\n   as a literal string.\n\n * The transport layer was taught to optionally exchange the session\n   ID assigned by the trace2 subsystem during fetch/push transactions.\n\n * \"git imap-send\" used to ignore configuration variables like\n   core.askpass; this has been corrected.\n\n * \"git $cmd $args\", when $cmd is not a recognised subcommand, by\n   default tries to see if $cmd is a typo of an existing subcommand\n   and optionally executes the corrected command if there is only one\n   possibility, depending on the setting of help.autocorrect; the\n   users can now disable the whole thing, including the cycles spent\n   to find a likely typo, by setting the configuration variable to\n   'never'.\n\n * \"@\" sometimes worked (e.g. \"git push origin @:there\") as a part of\n   a refspec element, but \"git push origin @\" did not work, which has\n   been corrected.\n\n\nPerformance, Internal Implementation, Development Support etc.\n\n * Use \"git archive\" more to produce the release tarball.\n\n * GitHub Actions automated test improvement to skip tests on a tree\n   identical to what has already been tested.\n\n * Test-coverage for running commit-graph task \"git maintenance\" has\n   been extended.\n\n * Our test scripts can be told to run only individual pieces while\n   skipping others with the \"--run=...\" option; they were taught to\n   take a substring of test title, in addition to numbers, to name the\n   test pieces to run.\n\n * Adjust tests so that they won't scream when the default initial\n   branch name is different from 'master'.\n\n * Rewriting \"git bisect\" in C continues.\n\n * More preliminary tests have been added to document desired outcomes\n   of various \"directory rename\" situations.\n\n * Micro clean-up of a couple of test scripts.\n\n * \"git diff\" and other commands that share the same machinery to\n   compare with working tree files have been taught to take advantage\n   of the fsmonitor data when available.\n\n * The code to detect premature EOF in the sideband demultiplexer has\n   been cleaned up.\n\n * \"git fetch --depth=<n>\" over the stateless RPC / smart HTTP\n   transport handled EOF from the client poorly at the server end.\n\n * A specialization of hashmap that uses a string as key has been\n   introduced.  Hopefully it will see wider use over time.\n\n * \"git bisect start/next\" in a large span of history spends a lot of\n   time trying to come up with exactly the half-way point; this can be\n   optimized by stopping when we see a commit that is close enough to\n   the half-way point.\n\n * A lazily defined test prerequisite can now be defined in terms of\n   another lazily defined test prerequisite.\n\n * Expectation for the original contributor after responding to a\n   review comment to use the explanation in a patch update has been\n   described.\n\n * Multiple \"credential-store\" backends can race to lock the same\n   file, causing everybody else but one to fail---reattempt locking\n   with some timeout to reduce the rate of the failure.\n\n * \"git-parse-remote\" shell script library outlived its usefulness.\n\n * Like die() and error(), a call to warning() will also trigger a\n   trace2 event.\n\n * Use of non-reentrant localtime() has been removed.\n\n * Non-reentrant time-related library functions and ctime/asctime with\n   awkward calling interfaces are banned from the codebase.\n\n\nFixes since v2.29\n-----------------\n\n * In 2.29, \"--committer-date-is-author-date\" option of \"rebase\" and\n   \"am\" subcommands lost the e-mail address by mistake, which has been\n   corrected.\n   (merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).\n\n * \"git checkout -p A...B [-- <path>]\" did not work, even though the\n   same command without \"-p\" correctly used the merge-base between\n   commits A and B.\n   (merge 35166b1fb5 dl/checkout-p-merge-base later to maint).\n\n * The side-band status report can be sent at the same time as the\n   primary payload multiplexed, but the demultiplexer on the receiving\n   end incorrectly split a single status report into two, which has\n   been corrected.\n   (merge 712b0377db js/avoid-split-sideband-message later to maint).\n\n * \"git fast-import\" wasted a lot of memory when many marks were in use.\n   (merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).\n\n * A test helper \"test_cmp A B\" was taught to diagnose missing files A\n   or B as a bug in test, but some tests legitimately wanted to notice\n   a failure to even create file B as an error, in addition to leaving\n   the expected result in it, and were misdiagnosed as a bug.  This\n   has been corrected.\n   (merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).\n\n * When \"git commit-graph\" detects the same commit recorded more than\n   once while it is merging the layers, it used to die.  The code now\n   ignores all but one of them and continues.\n   (merge 85102ac71b ds/commit-graph-merging-fix later to maint).\n\n * The meaning of a Signed-off-by trailer can vary from project to\n   project; this and also what it means to this project has been\n   clarified in the documentation.\n   (merge 3abd4a67d9 bk/sob-dco later to maint).\n\n * \"git credential' didn't honor the core.askPass configuration\n   variable (among other things), which has been corrected.\n   (merge 567ad2c0f9 tk/credential-config later to maint).\n\n * Dev support to catch a tentative definition of a variable in our C\n   code as an error.\n   (merge 5539183622 jk/no-common later to maint).\n\n * \"git rebase --rebase-merges\" did not correctly pass --gpg-sign\n   command line option to underlying \"git merge\" when replaying a merge\n   using non-default merge strategy or when replaying an octopus merge\n   (because replaying a two-head merge with the default strategy was\n   done in a separate codepath, the problem did not trigger for most\n   users), which has been corrected.\n   (merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).\n\n * \"git apply -R\" did not handle patches that touch the same path\n   twice correctly, which has been corrected.  This is most relevant\n   in a patch that changes a path from a regular file to a symbolic\n   link (and vice versa).\n   (merge b0f266de11 jt/apply-reverse-twice later to maint).\n\n * A recent oid->hash conversion missed one spot, breaking \"git svn\".\n   (merge 03bb366de4 bc/svn-hash-oid-fix later to maint).\n\n * The documentation on the \"--abbrev=<n>\" option did not say the\n   output may be longer than \"<n>\" hexdigits, which has been\n   clarified.\n   (merge cda34e0d0c jc/abbrev-doc later to maint).\n\n * \"git p4\" now honors init.defaultBranch configuration.\n   (merge 1b09d1917f js/p4-default-branch later to maint).\n\n * Recently the format of an internal state file \"rebase -i\" uses has\n   been tightened up for consistency, which would hurt those who start\n   \"rebase -i\" with old git and then continue with new git.  Loosen\n   the reader side a bit (which we may want to tighten again in a year\n   or so).\n   (merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).\n\n * The code to see if \"git stash drop\" can safely remove refs/stash\n   has been made more careful.\n   (merge 4f44c5659b rs/empty-reflog-check-fix later to maint).\n\n * \"git log -L<range>:<path>\" is documented to take no pathspec, but\n   this was not enforced by the command line option parser, which has\n   been corrected.\n   (merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).\n\n * \"git format-patch --output=there\" did not work as expected and\n   instead crashed.  The option is now supported.\n   (merge dc1672dd10 jk/format-patch-output later to maint).\n\n * Define ARM64 compiled with MSVC to be little-endian.\n   (merge 0c038fc65a dg/bswap-msvc later to maint).\n\n * \"git rebase -i\" did not store ORIG_HEAD correctly.\n   (merge 8843302307 pw/rebase-i-orig-head later to maint).\n\n * \"git blame -L :funcname -- path\" did not work well for a path for\n   which a userdiff driver is defined.\n\n * \"make DEVELOPER=1 sparse\" used to run sparse and let it emit\n   warnings; now such warnings will cause an error.\n   (merge 521dc56270 jc/sparse-error-for-developer-build later to maint).\n\n * \"git blame --ignore-revs-file=<file>\" learned to ignore a\n   non-existent object name in the input, instead of complaining.\n   (merge c714d05875 jc/blame-ignore-fix later to maint).\n\n * Running \"git diff\" while allowing external diff in a state with\n   unmerged paths used to segfault, which has been corrected.\n   (merge d66851806f jk/diff-release-filespec-fix later to maint).\n\n * Build configuration cleanup.\n   (merge b990f02fd8 ab/config-mak-uname-simplify later to maint).\n\n * Fix regression introduced when nvimdiff support in mergetool was added.\n   (merge 12026f46e7 pd/mergetool-nvimdiff later to maint).\n\n * The exchange between receive-pack and proc-receive hook did not\n   carefully check for errors.\n\n * The code was not prepared to deal with pack .idx file that is\n   larger than 4GB.\n   (merge 81c4c5cf2e jk/4gb-idx later to maint).\n\n * Since jgit does not yet work with SHA-256 repositories, mark the\n   tests that use it not to run unless we are testing with ShA-1\n   repositories.\n   (merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).\n\n * Config parser fix for \"git notes\".\n   (merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).\n\n * Move a definition of compatibility wrapper from cache.h to\n   git-compat-util.h\n   (merge a76b138daa hn/sleep-millisec-decl later to maint).\n\n * Error message fix.\n   (merge eaf5341538 km/stash-error-message-fix later to maint).\n\n * \"git pull --rebase --recurse-submodules\" checked for local changes\n   in a wrong range and failed to run correctly when it should.\n   (merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).\n\n * \"git push\" that is killed may leave a pack-objects process behind,\n   still computing to find a good compression, wasting cycles.  This\n   has been corrected.\n   (merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).\n\n * \"git fetch\" that is killed may leave a pack-objects process behind,\n   still computing to find a good compression, wasting cycles.  This\n   has been corrected.\n   (merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).\n\n * \"git add -i\" failed to honor custom colors configured to show\n   patches, which has been corrected.\n   (merge 96386faa03 js/add-i-color-fix later to maint).\n\n * Processes that access packdata while the .idx file gets removed\n   (e.g. while repacking) did not fail or fall back gracefully as they\n   could.\n   (merge 506ec2fbda tb/idx-midx-race-fix later to maint).\n\n * \"git apply\" adjusted the permission bits of working-tree files and\n   directories according to core.sharedRepository setting by mistake and\n   for a long time, which has been corrected.\n   (merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).\n\n * \"fetch-pack\" could pass NULL pointer to unlink(2) when it sees an\n   invalid filename; the error checking has been tightened to make\n   this impossible.\n   (merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).\n\n * \"git maintenance run/start/stop\" needed to be run in a repository\n   to hold the lockfile they use, but didn't make sure they are\n   actually in a repository, which has been corrected.\n\n * The glossary described a branch as an \"active\" line of development,\n   which is misleading---a stale and non-moving branch is still a\n   branch.\n   (merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).\n\n * Newer versions of xsltproc can assign IDs in HTML documents it\n   generates in a consistent manner.  Use the feature to help format\n   HTML version of the user manual reproducibly.\n   (merge 3569e11d69 ae/doc-reproducible-html later to maint).\n\n * Tighten error checking in the codepath that responds to \"git fetch\".\n   (merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).\n\n * \"git pack-redundant\" when there is only one packfile used to crash,\n   which has been corrected.\n   (merge 0696232390 jx/pack-redundant-on-single-pack later to maint).\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).\n   (merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).\n   (merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).\n   (merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).\n   (merge e5cf6d3df4 nk/dir-c-comment-update later to maint).\n   (merge 5710dcce74 jk/report-fn-typedef later to maint).\n   (merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).\n   (merge 4e1bee9a99 js/t7006-cleanup later to maint).\n   (merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).\n   (merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).\n   (merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).\n   (merge 9542d56379 sd/prompt-local-variable later to maint).\n   (merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).\n   (merge b7e20b4373 mc/typofix later to maint).\n   (merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).\n   (merge 53b67a801b js/test-file-size later to maint).\n   (merge 970909c2a7 rs/hashwrite-be64 later to maint).\n   (merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).\n   (merge 1c3e412916 rs/archive-plug-leak-refname later to maint).\n   (merge d44e5267ea rs/plug-diff-cache-leak later to maint).\n   (merge 793c1464d3 ab/gc-keep-base-option later to maint).\n   (merge b86339b12b mt/worktree-error-message-fix later to maint).\n   (merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).\n   (merge e63d774242 sn/config-doc-typofix later to maint).\n   (merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).\n   (merge e66590348a da/vs-build-iconv-fix later to maint).\n   (merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).\n   (merge 633eebe142 jb/midx-doc-update later to maint).\n   (merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint).\n   (merge 14639a4779 jc/compat-util-setitimer-fix later to maint).\n   (merge 56f56ac50b ab/unreachable-break later to maint).\n   (merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint).\n   (merge f4698738f9 es/perf-export-fix later to maint).\n   (merge 773c694142 nk/refspecs-negative-fix later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.29.0 are as follows:\n\nAdam Spiers (1):\n      hook: add sample template for push-to-checkout\n\nAlex Vandiver (2):\n      dir.c: fix comments to agree with argument name\n      fsmonitor: use fsmonitor data in `git diff`\n\nAlexander Shopov (1):\n      l10n: bg.po: Updated Bulgarian translation (5037t)\n\nAlexey (1):\n      completion: fix zsh installation instructions\n\nAmanda Shafack (1):\n      t2200,t9832: avoid using 'git' upstream in a pipe\n\nArnout Engelen (1):\n      doc: make HTML manual reproducible\n\nArusekk (1):\n      l10n: pl.po: add translation and set team leader\n\nBaptiste Fontaine (1):\n      l10n: fr.po Fix a typo\n\nBradley M. Kuhn (2):\n      Documentation: clarify and expand description of --signoff\n      Documentation: stylistically normalize references to Signed-off-by:\n\nCaleb Tillman (1):\n      t0000: use test_path_is_file instead of \"test -f\"\n\nCharvi Mendiratta (5):\n      t7101,t7102,t7201: modernize test formatting\n      t7102,t7201: remove unnecessary blank spaces in test body\n      t7102,t7201: remove whitespace after redirect operator\n      t7201: use 'git -C' to avoid subshell\n      t7201: put each command on a separate line\n\nChris. Webster (1):\n      ci: github action - add check for whitespace errors\n\nChristian Couder (1):\n      filter-branch doc: fix filter-repo typo\n\nDaniel Duvall (1):\n      upload-pack: allow stateless client EOF just prior to haves\n\nDaniel Gurney (2):\n      compat/bswap.h: simplify MSVC endianness detection\n      compat/bswap.h: don't assume MSVC is little-endian\n\nDavid Aguilar (1):\n      git-gui: ssh-askpass: add a checkbox to show the input text\n\nDennis Ameling (1):\n      ci(vs-build): stop passing the iconv library location explicitly\n\nDenton Liu (18):\n      t4068: remove unnecessary >tmp\n      git-diff-index.txt: make --cached description a proper sentence\n      git-diff.txt: backtick quote command text\n      contrib/completion: extract common diff/difftool options\n      diff-lib: accept option flags in run_diff_index()\n      diff-lib: define diff_get_merge_base()\n      t4068: add --merge-base tests\n      builtin/diff-index: learn --merge-base\n      builtin/diff-tree: learn --merge-base\n      contrib/completion: complete `git diff --merge-base`\n      Documentation/config/checkout: replace sq with backticks\n      builtin/checkout: fix `git checkout -p HEAD...` bug\n      Doc: document \"A...B\" form for <tree-ish> in checkout and switch\n      add-patch: add NEEDSWORK about comparing commits\n      t2016: add a NEEDSWORK about the PERL prerequisite\n      checkout: learn to respect checkout.guess\n      contrib/git-resurrect.sh: indent with tabs\n      contrib/git-resurrect.sh: use hash-agnostic OID pattern\n\nDerrick Stolee (28):\n      maintenance: add prefetch task\n      maintenance: add loose-objects task\n      maintenance: create auto condition for loose-objects\n      midx: enable core.multiPackIndex by default\n      midx: use start_delayed_progress()\n      maintenance: add incremental-repack task\n      maintenance: auto-size incremental-repack batch\n      maintenance: add incremental-repack auto condition\n      maintenance: optionally skip --auto process\n      maintenance: add --schedule option and config\n      for-each-repo: run subcommands on configured repos\n      maintenance: add [un]register subcommands\n      maintenance: add start/stop subcommands\n      maintenance: test commit-graph auto condition\n      commit-graph: ignore duplicates when merging layers\n      commit-graph: don't write commit-graph when disabled\n      maintenance: core.commitGraph=false prevents writes\n      maintenance: create maintenance.strategy config\n      maintenance: use 'incremental' strategy by default\n      maintenance: add troubleshooting guide to docs\n      config: convert multi_replace to flags\n      config: replace 'value_regex' with 'value_pattern'\n      t1300: test \"set all\" mode with value-pattern\n      t1300: add test for --replace-all with value-pattern\n      config: add --fixed-value option, un-implemented\n      config: plumb --fixed-value into config API\n      config: implement --fixed-value with --get*\n      maintenance: use 'git config --fixed-value'\n\nDimitriy Ryazantcev (1):\n      git-gui: update Russian translation\n\nDrew DeVault (1):\n      help.c: help.autocorrect=never means \"do not compute suggestions\"\n\nElijah Newren (37):\n      hashmap: add usage documentation explaining hashmap_free[_entries]()\n      directory-rename-detection.txt: update references to regression tests\n      t6423: more involved directory rename test\n      t6423: update directory rename detection tests with new rule\n      t6423: more involved rules for renaming directories into each other\n      t7518: fix flaky grep invocation\n      test-lib: allow selecting tests by substring/glob with --run\n      t6006, t6012: adjust tests to use 'setup' instead of synonyms\n      test-lib: reduce verbosity of skipped tests\n      sequencer: remove duplicate rollback_lock_file() call\n      t/: new helper for tests that pass with ort but fail with recursive\n      merge tests: expect improved directory/file conflict handling in ort\n      t6416: correct expectation for rename/rename(1to2) + directory/file\n      t6404, t6423: expect improved rename/delete handling in ort backend\n      t6423: expect improved conflict markers labels in the ort backend\n      merge tests: expect slight differences in output for recursive vs. ort\n      t6423, t6436: note improved ort handling with dirty files\n      t6423: note improved ort handling with untracked files\n      t6423: add more details about direct resolution of directories\n      merge-ort: barebones API of new merge strategy with empty implementation\n      merge-ort-wrappers: new convience wrappers to mimic the old merge API\n      fast-rebase: demonstrate merge-ort's API via new test-tool command\n      hashmap: adjust spacing to fix argument alignment\n      hashmap: allow re-use after hashmap_free()\n      hashmap: introduce a new hashmap_partial_clear()\n      hashmap: provide deallocation function names\n      strmap: new utility functions\n      merge,rebase,revert: select ort or recursive by config or environment\n      strmap: add more utility functions\n      strmap: enable faster clearing and reusing of strmaps\n      strmap: add functions facilitating use as a string->int map\n      strmap: split create_entry() out of strmap_put()\n      strmap: add a strset sub-type\n      strmap: enable allocations to come from a mem_pool\n      strmap: take advantage of FLEXPTR_ALLOC_STR when relevant\n      Use new HASHMAP_INIT macro to simplify hashmap initialization\n      shortlog: use strset from strmap.h\n\nEmily Shaffer (1):\n      MyFirstContribution: clarify asciidoc dependency\n\nEmir Sarı (2):\n      l10n: tr: v2.30.0-r1\n      l10n: tr: v2.30.0-r2\n\nEric Sunshine (1):\n      t/perf: fix test_export() failure with BSD `sed`\n\nFelipe Contreras (41):\n      completion: zsh: fix __gitcomp_direct()\n      completion: zsh: fix name due to broken autoloading\n      completion: zsh: fix bash script extension\n      completion: zsh: reorganize install instructions\n      completion: zsh: fix for directories with spaces\n      completion: zsh: update slave script locations\n      completion: prompt: fix color for Zsh\n      completion: zsh: fix for command aliasing\n      completion: bash: synchronize zsh wrapper\n      completion: bash: remove zsh wrapper\n      completion: zsh: fix completion for --no-.. options\n      completion: fix conflict with bashcomp\n      completion: zsh: add missing direct_append\n      completion: zsh: fix splitting of words\n      completion: zsh: simplify compadd functions\n      completion: zsh: simplify direct compadd\n      completion: zsh: trivial cleanup\n      completion: zsh: simplify nl_append\n      completion: zsh: simplify file_direct\n      completion: zsh: shuffle functions around\n      completion: zsh: refactor command completion\n      completion: zsh: improve command tags\n      completion: zsh: add alias descriptions\n      completion: zsh: trivial simplification\n      completion: zsh: add simple version check\n      completion: bash: trivial cleanup\n      completion: bash: cleanup cygwin check\n      completion: bash: remove old compat wrappers\n      zsh: update copyright notices\n      completion: bash: support recursive aliases\n      completion: bash: check for alias loop\n      completion: bash: improve alias loop detection\n      tests: push: improve cleanup of HEAD tests\n      tests: push: trivial cleanup\n      refspec: make @ a synonym of HEAD\n      refspec: trivial cleanup\n      .gitignore: remove dangling file\n      test: completion: fix typos\n      tests: lib-functions: trivial style cleanups\n      completion: zsh: fix file completion regression\n      completion: bash: fix gitk alias regression\n\nHan-Wen Nienhuys (1):\n      move sleep_millisec to git-compat-util.h\n\nJavier Spagnoletti (1):\n      userdiff: PHP: catch \"abstract\" and \"final\" functions\n\nJean-Noël Avila (3):\n      l10n: fr fix misleading message\n      l10n: fr.po: v2.30.0 rnd 1\n      l10n: fr.po v2.30.0 rnd 2\n\nJeff Hostetler (1):\n      index-format.txt: document v2 format of file system monitor extension\n\nJeff King (44):\n      fast-import: fix over-allocation of marks storage\n      usage: define a type for a reporting function\n      config.mak.dev: build with -fno-common\n      fast-import: remove duplicated option-parsing line\n      perl: check for perl warnings while running tests\n      t3436: check --committer-date-is-author-date result more carefully\n      am: fix broken email with --committer-date-is-author-date\n      rebase: fix broken email with --committer-date-is-author-date\n      am, sequencer: stop parsing our own committer ident\n      test-pkt-line: drop colon from sideband identity\n      checkout-index: drop error message from empty --stage=all\n      checkout-index: propagate errors to exit code\n      sideband: diagnose more sideband anomalies\n      format-patch: refactor output selection\n      format-patch: tie file-opening logic to output_directory\n      format-patch: support --output option\n      rev-parse: don't accept options after dashdash\n      rev-parse: put all options under the \"-\" check\n      rev-parse: handle --end-of-options\n      compute pack .idx byte offsets using size_t\n      use size_t to store pack .idx byte offsets\n      fsck: correctly compute checksums on idx files larger than 4GB\n      block-sha1: take a size_t length parameter\n      packfile: detect overflow in .idx file size checks\n      repack: make \"exts\" array available outside cmd_repack()\n      send-pack: kill pack-objects helper on signal or exit\n      submodule: fix fetch_in_submodule logic\n      upload-pack: kill pack-objects helper on signal or exit\n      banned.h: mark non-reentrant gmtime, etc as banned\n      t7900: speed up expensive test\n      gitignore: drop duplicate entry for git-sh-i18n\n      banned.h: mark ctime_r() and asctime_r() as banned\n      Makefile: mark git-maintenance as a builtin\n      upload-pack: propagate return value from object filter config callback\n      style: indent multiline \"if\" conditions to align\n      oid-array.h: drop sha1 mention from header guard\n      t0064: drop sha1 mention from filename\n      t0064: make duplicate tests more robust\n      cache.h: move hash/oid functions to hash.h\n      oid-array: make sort function public\n      oid-array: provide a for-loop iterator\n      commit-graph: drop count_distinct_commits() function\n      commit-graph: replace packed_oid_list with oid_array\n      commit-graph: use size_t for array allocation and indexing\n\nJiang Xin (7):\n      t5411: new helper filter_out_user_friendly_and_stable_output\n      receive-pack: gently write messages to proc-receive\n      receive-pack: use default version 0 for proc-receive\n      l10n: git.pot: v2.30.0 round 1 (70 new, 45 removed)\n      pack-redundant: fix crash when one packfile in repo\n      l10n: git.pot: v2.30.0 round 2 (1 new, 2 removed)\n      l10n: zh_CN: for git v2.30.0 l10n round 1 and 2\n\nJinoh Kang (2):\n      diff: allow passing NULL to diff_free_filespec_data()\n      t7800: simplify difftool test\n\nJoey Salazar (1):\n      t7006: Use test_path_is_* functions in test script\n\nJohannes Berg (1):\n      docs: multi-pack-index: remove note about future 'verify' work\n\nJohannes Schindelin (75):\n      ci: work around old records of GitHub runs\n      ci: make the \"skip-if-redundant\" check more defensive\n      sideband: avoid reporting incomplete sideband messages\n      sideband: report unhandled incomplete sideband messages as bugs\n      SKIP_DASHED_BUILT_INS: do not skip the bin/ programs\n      fmt-merge-msg: also suppress \"into main\" by default\n      t9801: use `--` in preparation for default branch rename\n      tests: start moving to a different default main branch name\n      t6200: adjust suppression pattern to also match \"main\"\n      t5703: adjust a test case for the upcoming default branch name\n      t3200: prepare for `main` being shorter than `master`\n      t9902: prepare a test for the upcoming default branch name\n      tests: prepare aligned mentions of the default branch name\n      t1400: prepare for `main` being default branch name\n      t5411: start using the default branch name \"main\"\n      t5411: start adjusting the support files for init.defaultBranch=main\n      t5411: adjust the remaining support files for init.defaultBranch=main\n      t5411: finish preparing for `main` being the default branch name\n      t5515: use `main` as the name of the main branch for testing (part 1)\n      t5515: use `main` as the name of the main branch for testing (part 2)\n      t5515: use `main` as the name of the main branch for testing (part 3)\n      t5515: use `main` as the name of the main branch for testing (conclusion)\n      t2402: fix typo\n      ci: make the whitespace checker more robust\n      tests: consolidate the `file_size` function into `test-lib-functions.sh`\n      ci: avoid using the deprecated `set-env` construct\n      p4: respect init.defaultBranch\n      t1004: insert missing \"branch\" in a message\n      t3406: indent with tabs, not spaces\n      t3427: adjust stale comment\n      t5400,t5402: consistently indent with tabs, not with spaces\n      t5570: remove trailing padding\n      t9603: use tabs for indentation\n      add -i (built-in): do show an error message for incorrect inputs\n      add -i (built-in): send error messages to stderr\n      add -p (built-in): imitate `xdl_format_hunk_hdr()` generating hunk headers\n      add -i: use `reset_color` consistently\n      add -i (built-in): prevent the `reset` \"color\" from being configured\n      add -i (built-in): use correct names to load color.diff.* config\n      mergetools/bc: add `bc4` to the alias list for Beyond Compare\n      mergetool: avoid letting `list_tool_variants` break user-defined setups\n      add -p (built-in): do not color the progress indicator separately\n      add -i (built-in): use the same indentation as the Perl version\n      add -i (Perl version): color header to match the C version\n      add -p: prefer color.diff.context over color.diff.plain\n      add -i: verify in the tests that colors can be overridden\n      t2106: adjust style to the current conventions\n      t2106: make test independent of the current main branch name\n      t2106: ensure that the checkout fails for the expected reason\n      t3040: remove stale note\n      t1309: use a neutral branch name in the `onbranch` test cases\n      t4015: let the test pass with any default branch name\n      pull: colorize the hint about setting `pull.rebase`\n      t3404: do not depend on any specific default branch name\n      t5526: avoid depending on a specific default branch name\n      t5526: drop the prereq expecting the default branch name `main`\n      cmake: determine list of extra built-ins dynamically\n      t6300: avoid using the default name of the initial branch\n      t7064: avoid relying on a specific default branch name\n      init: document `init.defaultBranch` better\n      branch -m: allow renaming a yet-unborn branch\n      get_default_branch_name(): prepare for showing some advice\n      init: provide useful advice about init.defaultBranch\n      t1400: use `main` as initial branch name\n      t3200: finish transitioning to the initial branch name `main`\n      t3201: finalize transitioning to using the branch name `main`\n      t3203: complete the transition to using the branch name `main`\n      t3205: finalize transitioning to using the branch name `main`\n      t5505: finalize transitioning to using the branch name `main`\n      t5510: use `main` as initial branch name\n      t5703: use `main` as initial branch name\n      t6302: use `main` as initial branch name\n      t9902: use `main` as initial branch name\n      tests: drop the `PREPARE_FOR_MAIN_BRANCH` prereq\n      checkout -p: handle tree arguments correctly again\n\nJonathan Tan (3):\n      apply: when -R, also reverse list of sections\n      sequencer: tolerate abbreviated stopped-sha file\n      usage: add trace2 entry upon warning()\n\nJordi Mas (2):\n      l10n: Update Catalan translation\n      l10n: Update Catalan translation\n\nJosh Steadmon (13):\n      docs: new capability to advertise session IDs\n      docs: new transfer.advertiseSID option\n      trace2: add a public function for getting the SID\n      upload-pack: advertise session ID in v0 capabilities\n      receive-pack: advertise session ID in v0 capabilities\n      serve: advertise session ID in v2 capabilities\n      transport: log received server session ID\n      fetch-pack: advertise session ID in capabilities\n      upload-pack, serve: log received client session ID\n      send-pack: advertise session ID in capabilities\n      receive-pack: log received client session ID\n      t7900: fix typo: \"test_execpt_success\"\n      t7900: use --fixed-value in git-maintenance tests\n\nJunio C Hamano (35):\n      doc: preparatory clean-up of description on the sign-off option\n      SubmittingPatches: clarify DCO is our --signoff rule\n      Revert \"test_cmp: diagnose incorrect arguments\"\n      t7102: prepare expected output inside test_expect_* block\n      Git 2.29.1\n      other small fixes for 2.29.2\n      SubmittingPatches: clarify the purpose of the final resend\n      First batch\n      Git 2.29.2\n      Second batch\n      Makefile: enable -Wsparse-error for DEVELOPER build\n      Third batch\n      log: diagnose -L used with pathspec as an error\n      doc: clarify that --abbrev=<n> is about the minimum length\n      Fourth batch\n      format-patch: make output filename configurable\n      Fifth batch\n      ci: avoid `set-env` construct in print-test-failures.sh\n      Sixth batch\n      Seventh batch\n      MyFirstContribition: answering questions is not the end of the story\n      config doc: value-pattern is not necessarily a regexp\n      Eighth batch\n      Ninth batch\n      Revert \"submodules: fix of regression on fetching of non-init subsub-repo\"\n      Tenth batch\n      Eleventh batch\n      Git 2.30-rc0\n      strmap: make callers of strmap_remove() to call it in void context\n      compat-util: pretend that stub setitimer() always succeeds\n      diff: correct interaction between --exit-code and -I<pattern>\n      Another batch before 2.30-rc1\n      Git 2.30-rc1\n      Git 2.30-rc2\n      Git 2.30\n\nKonrad Borowski (1):\n      userdiff: recognize 'macro_rules!' as starting a Rust function block\n\nKyle Meyer (1):\n      stash: add missing space to an error message\n\nMarlon Rac Cambasis (1):\n      doc: fixing two trivial typos in Documentation/\n\nMartin Schön (1):\n      git-gui: use commit message template\n\nMartin Ågren (8):\n      list-objects-filter-options: fix function name in BUG\n      grep: don't set up a \"default\" repo for grep\n      grep: use designated initializers for `grep_defaults`\n      grep: copy struct in one fell swoop\n      MyFirstObjectWalk: drop `init_walken_defaults()`\n      git-maintenance.txt: add missing word\n      gc: fix handling of crontab magic markers\n      t7900-maintenance: test for magic markers\n\nMatheus Tavares (2):\n      worktree: fix order of arguments in error message\n      apply: don't use core.sharedRepository to create working tree files\n\nMatthias Rüster (1):\n      l10n: de.po: Update German translation for Git 2.30.0\n\nMichał Kępień (2):\n      merge-base, xdiff: zero out xpparam_t structures\n      diff: add -I<regex> that ignores matching changes\n\nNate Avers (2):\n      notes.c: fix a segfault in notes_display_config()\n      t3301: test proper exit response to no-value notes.displayRef.\n\nNicolas Morey-Chaisemartin (1):\n      imap-send: parse default git config\n\nNipunn Koorapati (19):\n      t/perf/README: elaborate on output format\n      t/perf/p7519-fsmonitor.sh: warm cache on first git status\n      t/perf: add fsmonitor perf test for git diff\n      perf lint: add make test-lint to perf tests\n      p7519-fsmonitor: refactor to avoid code duplication\n      p7519-fsmonitor: add a git add benchmark\n      t/perf/fsmonitor: separate one time repo initialization\n      t/perf/fsmonitor: move watchman setup to one-time-repo-setup\n      t/perf/fsmonitor: improve error message if typoing hook name\n      t/perf/fsmonitor: factor description out for readability\n      t/perf/fsmonitor: shorten DESC to basename\n      t/perf/fsmonitor: silence initial git commit\n      t/perf/fsmonitor: factor setup for fsmonitor into function\n      t/perf/fsmonitor: initialize test with git reset\n      t/perf/fsmonitor: perf comparison of multiple fsmonitor integrations\n      t/perf/fsmonitor: add benchmark for dirty status\n      perf/fsmonitor: use test_must_be_empty helper\n      negative-refspec: fix segfault on : refspec\n      negative-refspec: improve comment on query_matches_negative_refspec\n\nPatrick Steinhardt (4):\n      t1400: avoid touching refs on filesystem\n      update-ref: allow creation of multiple transactions\n      p1400: use `git-update-ref --stdin` to test multiple transactions\n      update-ref: disallow \"start\" for ongoing transactions\n\nPeter Kaestle (1):\n      submodules: fix of regression on fetching of non-init subsub-repo\n\nPeter Krefting (2):\n      l10n: sv.po: Update Swedish translation (5038t0f0u)\n      l10n: sv.po: Update Swedish translation (5037t0f0u)\n\nPhilippe Blain (15):\n      ref-filter: handle CRLF at end-of-line more gracefully\n      log, show: add tests for messages containing CRLF\n      doc: log, gitk: move '-L' description to 'line-range-options.txt'\n      doc: line-range: improve formatting\n      blame-options.txt: also mention 'funcname' in '-L' description\n      doc: add more pointers to gitattributes(5) for userdiff\n      line-log: mention both modes in 'blame' and 'log' short help\n      blame: enable funcname blaming with userdiff driver\n      blame: simplify 'setup_scoreboard' interface\n      blame: simplify 'setup_blame_bloom_data' interface\n      pull --rebase: compute rebase arguments in separate function\n      t5572: add notes on a peculiar test\n      t5572: describe '--rebase' tests a little more\n      pull: check for local submodule modifications with the right range\n      git.txt: fix typos in 'linkgit' macro invocation\n\nPhillip Wood (4):\n      rebase -i: stop overwriting ORIG_HEAD buffer\n      rebase -i: use struct object_id rather than looking up commit\n      rebase -i: use struct object_id when writing state\n      rebase -i: simplify get_revision_ranges()\n\nPranit Bauva (7):\n      bisect--helper: finish porting `bisect_start()` to C\n      bisect--helper: retire `--bisect-clean-state` subcommand\n      bisect--helper: retire `--next-all` subcommand\n      bisect--helper: reimplement `bisect_state` & `bisect_head` shell functions in C\n      bisect--helper: retire `--check-expected-revs` subcommand\n      bisect--helper: retire `--write-terms` subcommand\n      bisect--helper: retire `--bisect-autostart` subcommand\n\nPratyush Yadav (1):\n      git-gui: Only touch GITGUI_MSG when needed\n\nRafael Silva (2):\n      worktree: teach `list` to annotate locked worktree\n      maintenance: fix SEGFAULT when no repository\n\nRamsay Jones (6):\n      Documentation/Makefile: conditionally include doc.dep\n      Documentation/Makefile: conditionally include ../GIT-VERSION-FILE\n      gitweb/Makefile: conditionally include ../GIT-VERSION-FILE\n      Makefile: don't try to clean old debian build product\n      Makefile: don't use a versioned temp distribution directory\n      Makefile: conditionally include GIT-VERSION-FILE\n\nRandall S. Becker (1):\n      config.mak.uname: remove old NonStop compatibility settings\n\nRené Scharfe (19):\n      Makefile: use git init/add/commit/archive for dist-doc\n      Makefile: remove the unused variable TAR_DIST_EXTRA_OPTS\n      grep: handle deref_tag() returning NULL\n      blame: handle deref_tag() returning NULL\n      line-log: handle deref_tag() returning NULL\n      object: allow clear_commit_marks_all to handle any repo\n      bisect: clear flags in passed repository\n      stash: simplify reflog emptiness check\n      pack-write: use hashwrite_be32() instead of double-buffering array\n      archive: support compression levels beyond 9\n      blame: silently ignore invalid ignore file objects\n      csum-file: add hashwrite_be64()\n      midx: use hashwrite_be64()\n      pack-write: use hashwrite_be64()\n      diff-lib: plug minor memory leaks in do_diff_cache()\n      archive: release refname after use\n      gc: fix cast in compare_tasks_by_selection()\n      fetch-pack: disregard invalid pack lockfiles\n      gitignore: remove entry for git serve\n\nRobert Karszniewicz (2):\n      git-completion.bash: __git_diff_common_options: add --[no-]patch\n      git-completion.bash: stash-show: complete $__git_diff_common_options\n\nSZEDER Gábor (4):\n      bisect: loosen halfway() check for a large number of commits\n      t5310-pack-bitmaps: skip JGit tests with SHA256\n      tests: make sure nested lazy prereqs work reliably\n      tests: fix description of 'test_set_prereq'\n\nSamuel Čavoj (3):\n      sequencer: fix gpg option passed to merge subcommand\n      sequencer: pass explicit --no-gpg-sign to merge\n      t3435: add tests for rebase -r GPG signing\n\nSean Barag (7):\n      clone: add tests for --template and some disallowed option pairs\n      clone: use more conventional config/option layering\n      remote: add tests for add and rename with invalid names\n      refs: consolidate remote name validation\n      clone: validate --origin option before use\n      clone: read new remote name from remote_name instead of option_origin\n      clone: allow configurable default for `-o`/`--origin`\n\nSerg Tereshchenko (1):\n      git-gui: Fix selected text colors\n\nSergey Organov (2):\n      doc/diff-options: fix out of place mentions of '--patch/-p'\n      glossary: improve \"branch\" definition\n\nSibo Dong (1):\n      git-prompt.sh: localize `option` in __git_ps1_show_upstream\n\nSimão Afonso (1):\n      crendential-store: use timeout when locking file\n\nSohom Datta (1):\n      userdiff: expand detected chunk headers for css\n\nSrinidhi Kaushik (3):\n      push: add reflog check for \"--force-if-includes\"\n      push: parse and set flag for \"--force-if-includes\"\n      t, doc: update tests, reference for \"--force-if-includes\"\n\nStefan Haller (2):\n      git-gui: fix colored label backgrounds when using themed widgets\n      git-gui: use gray background for inactive text widgets\n\nTaylor Blau (7):\n      builtin/repack.c: keep track of what pack-objects wrote\n      builtin/repack.c: don't move existing packs out of the way\n      packfile.c: protect against disappearing indexes\n      midx.c: protect against disappearing packs\n      builtin/bugreport.c: use thread-safe localtime_r()\n      builtin/clone.c: don't ignore transport_fetch_refs() errors\n      upload-pack.c: don't free allowed_filters util pointers\n\nThomas Koutcher (1):\n      credential: load default config\n\nTrần Ngọc Quân (1):\n      l10n: vi.po(5037t): v2.30.0 rnd 2\n\nVictor Engmark (1):\n      userdiff: support Bash\n\nYi-Jyun Pan (1):\n      l10n: zh_TW.po: v2.30.0 round 2 (1 untranslated)\n\nbrian m. carlson (1):\n      svn: use correct variable name for short OID\n\nm4sk1n (1):\n      l10n: pl.po: started Polish translation\n\nÆvar Arnfjörð Bjarmason (9):\n      remote: add meaningful exit code on missing/existing\n      config.mak.uname: remove unused the NO_R_TO_GCC_LINKER flag\n      config.mak.uname: remove unused NEEDS_SSL_WITH_CURL flag\n      submodule: use \"fetch\" logic instead of custom remote discovery\n      submodule: remove sh function in favor of helper\n      parse-remote: remove this now-unused library\n      gc docs: change --keep-base-pack to --keep-largest-pack\n      gc: rename keep_base_pack variable for --keep-largest-pack\n      style: do not \"break\" in switch() after \"return\"\n\nĐoàn Trần Công Danh (1):\n      doc: mention Python 3.x supports\n\nŠtěpán Němec (1):\n      config.txt: fix a typo (backslash != backquote)\n\n"}]}