{"thread":{"id":"64472","subject":"[ANNOUNCE] Git v2.52.0-rc2","startedAt":"2025-11-12T17:16:40Z","lastAt":"2025-11-12T17:16:40Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"530607","messageId":"xmqqv7jfqih5.fsf@gitster.g","threadId":"64472","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.52.0-rc2","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-11-12T17:16:38Z","receivedAt":"2025-11-12T17:16:40Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"A release candidate Git v2.52.0-rc2 is now available for testing at\nthe usual places.  It is comprised of 623 non-merge commits since\nv2.51.0, contributed by 81 people, 33 of which are new faces [*].\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/testing/\n\nThe following public repositories all have a copy of the\n'v2.52.0-rc2' tag and the 'master' branch that the tag points at:\n\n  url = https://git.kernel.org/pub/scm/git/git\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 contributions weren't in v2.51.0 are as follows.\nWelcome to the Git development community!\n\n  Alexander Monakov, Cheng, Colin Stagner, Daniele Sassoli,\n  Emily Yang, Evgeni Chasnovski, Evgeny Cherpak, Ezekiel Newren,\n  Gregoire Geis, Igor Stepushchik, Isaac Oscar Gariano, Jake\n  Zimmerman, Joe Drew, Julia Evans, KIYOTA Fumiya, Knut Harald\n  Ryager, Kyle E. Mitchell, Langbart, Lauri Tirkkonen, Mikhail\n  Malinouski, NeilBrown, Olamide Caleb Bello, Paulo Casaretto,\n  Queen Ediri Jessa, Rick Sanders, Ruoyu Zhong, Simon Cheng,\n  Solly, Thomas Uhle, Windl, Ulrich, Xinyu Ruan, Xi Ruoyao,\n  and ノウラ | Flare.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Adam Dinwoodie, Aditya Garg, Ayush Chandekar, brian m. carlson,\n  Christian Couder, Collin Funk, David Aguilar, D. Ben Knoble,\n  Denton Liu, Derrick Stolee, Elijah Newren, Eric Sunshine,\n  Eric W. Biederman, Ghanshyam Thakkar, Greg Hurrell, Han Jiang,\n  Heiko Voigt, Jacob Keller, Jean-Noël Avila, Jeff King, Johannes\n  Schindelin, Johannes Sixt, Jonathan Tan, Junio C Hamano, Justin\n  Tobler, Karthik Nayak, Kristoffer Haugsbakk, Lidong Yan, Lucas\n  Seiki Oshiro, Mark Levedahl, Meet Soni, M Hickford, Michael\n  Lohmann, Michael Rappazzo, Patrick Steinhardt, Peter Krefting,\n  Phillip Wood, Ramsay Jones, Randall S. Becker, René Scharfe,\n  shejialuo, SZEDER Gábor, Taylor Blau, Todd Zullinger, Toon\n  Claes, Torsten Bögershausen, Usman Akinyemi, and Дилян\n  Палаузов.\n\n[*] We are counting not just the authorship contribution but issue\n    reporting, mentoring, helping and reviewing that are recorded in\n    the commit trailers.\n\n----------------------------------------------------------------\n\nGit v2.52 Release Notes (draft)\n===============================\n\nUI, Workflows & Features\n------------------------\n\n * The \"list\" subcommand of \"git refs\" acts as a front-end for\n   \"git for-each-ref\".\n\n * \"git cmd --help-all\" now works outside repositories.\n\n * \"git diff-tree\" learned \"--max-depth\" option.\n\n * A new subcommand \"git repo\" gives users a way to grab various\n   repository characteristics.\n\n * A new command \"git last-modified\" has been added to show the closest\n   ancestor commit that touched each path.\n\n * \"git refs exists\" that works like \"git show-ref --exists\" has been\n   added.\n\n * \"repo info\" learns a short-hand option \"-z\" that is the same as\n   \"--format=nul\", and learns to report the objects format used in the\n   repository.\n\n * \"core.commentChar=auto\" that attempts to dynamically pick a\n   suitable comment character is non-workable, as it is too much\n   trouble to support for little benefit, and is marked as deprecated.\n\n * \"git send-email\" learned to drive \"git imap-send\" to store already\n   sent e-mails in an IMAP folder.\n\n * The \"promisor-remote\" capability mechanism has been updated to\n   allow the \"partialCloneFilter\" settings and the \"token\" value to be\n   communicated from the server side.\n\n * Declare that \"git init\" that is not otherwise configured uses\n   'main' as the initial branch, not 'master', starting Git 3.0.\n\n * Keep giving hint about the default initial branch name for users\n   who may be surprised after Git 3.0 switch-over.\n\n * The stash.index configuration variable can be set to make \"git stash\n   pop/apply\" pretend that it was invoked with \"--index\".\n\n * \"git fast-import\" learned that \"--signed-commits=<how>\" option that\n   corresponds to that of \"git fast-export\".\n\n * Marking a hunk 'selected' in \"git add -p\" and then splitting made\n   all the split pieces 'selected'; this has been changed to make them\n   all 'undecided', which gives better end-user experience.\n\n * Configuration variables that take a pathname as a value\n   (e.g. blame.ignorerevsfile) can be marked as optional by prefixing\n   \":(optoinal)\" before its value.\n\n * Show 'P'ipe command in \"git add -p\".\n\n * \"git sparse-checkout\" subcommand learned a new \"clean\" action to\n   prune otherwise unused working-tree files that are outside the\n   areas of interest.\n\n * \"git fast-import\" is taught to handle signed tags, just like it\n   recently learned to handle signed commits, in different ways.\n\n * A new configuration variable commitGraph.changedPaths allows to\n   turn \"--changed-paths\" on by default for \"git commit-graph\".\n\n * \"Symlink symref\" has been added to the list of things that will\n   disappear at Git 3.0 boundary.\n\n * \"git maintenance\" command learns the \"geometric\" strategy where it\n   avoids doing maintenance tasks that rebuilds everything from\n   scratch.\n\n * \"git repo structure\", a new command.\n\n * The help text and manual page of \"git bisect\" command have been\n   made consistent with each other.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * string_list_split*() family of functions have been extended to\n   simplify common use cases.\n\n * Arrays of strbuf is often a wrong data structure to use, and\n   strbuf_split*() family of functions that create them often have\n   better alternatives.  Update several code paths and replace\n   strbuf_split*().\n\n * Revision traversal limited with pathspec, like \"git log dir/*\",\n   used to ignore changed-paths Bloom filter when the pathspec\n   contained wildcards; now they take advantage of the filter when\n   they can.\n\n * Doc lint updates to encourage the newer and easier-to-use\n   `synopsis` format, with fixes to a handful of existing uses.\n\n * Remove dependency on the_repository and other globals from the\n   commit-graph code, and other changes unrelated to de-globaling.\n\n * Discord has been added to the first contribution documentation as\n   another way to ask for help.\n\n * Inspired by Ezekiel's recent effort to showcase Rust interface, the\n   hash function implementation used to hash lines have been updated\n   to the one used for ELF symbol lookup by Glibc.\n\n * Instead of scanning for the remaining items to see if there are\n   still commits to be explored in the queue, use khash to remember\n   which items are still on the queue (an unacceptable alternative is\n   to reserve one object flag bits).\n\n * The bulk-checkin code used to depend on a file-scope static\n   singleton variable, which has been updated to pass an instance\n   throughout the callchain.\n\n * The work to build on the bulk-checkin infrastructure to create many\n   objects at once in a transaction and to abstract it into the\n   generic object layer continues.\n\n * CodingGuidelines now spells out how bitfields are to be written.\n\n * Adjust to the way newer versions of cURL selectively enable tracing\n   options, so that our tests can continue to work.\n\n * The clear_alloc_state() API function was not fully clearing the\n   structure for reuse, but since nobody reuses it, replace it with a\n   variant that frees the structure as well, making the callers simpler.\n\n * \"git range-diff\" learned a way to limit the memory consumed by\n   O(N*N) cost matrix.\n\n * Some places in the code confused a variable that is *not* a boolean\n   to enable color but is an enum that records what the user requested\n   to do about color.  A couple of bugs of this sort have been fixed,\n   while the code has been cleaned up to prevent similar bugs in the\n   future.\n\n * The build procedure based on meson learned a target to only build\n   documentation, similar to \"make doc\".\n   (merge ff4ec8ded0 ps/meson-build-docs later to maint).\n\n * Dip our toes a bit to (optionally) use Rust implemented helper\n   called from our C code.\n\n * Documentation for \"git log --pretty\" options has been updated\n   to make it easier to translate.\n\n * Instead of three library archives (one for git, one for reftable,\n   and one for xdiff), roll everything into a single libgit.a archive.\n   This would help later effort to FFI into Rust.\n\n * The beginning of SHA1-SHA256 interoperability work.\n\n * Build procedure for a few credential helpers (in contrib/) have\n   been updated.\n\n * CI improvements to handle the recent Rust integration better.\n\n * The code in \"git repack\" machinery has been cleaned up to prepare\n   for incremental update of midx files.\n\n * Two slightly different ways to get at \"all the packfiles\" in API\n   has been cleaned up.\n\n * The code to walk revision graph to compute merge base has been\n   optimized.\n\n * AI guidelines has been added to our documentation set.\n\n * Contributed credential helpers (obviously in contrib/) now have \"cd\n   $there && make install\" target.\n\n * The \"MyFirstContribution\" tutorial tells the reader how to send out\n   their patches; the section gained a hint to verify the message\n   reached the mailing list.\n\n * The \"debug\" ref-backend was missing a method implementation, which\n   has been corrected.\n\n * Build procedure for Wincred credential helper has been updated.\n\n * The build procedure based on meson learned to allow builders to\n   specify the directory to install HTML documents.\n\n * Building \"git contacts\" script (in contrib/) left the resulting\n   file unexecutable, which has been corrected.\n\n\nFixes since v2.51\n-----------------\n\nUnless otherwise noted, all the changes in 2.51.X maintenance track,\nincluding security updates, are included in this release.\n\n * During interactive rebase, using 'drop' on a merge commit lead to\n   an error, which was incorrect.\n\n * \"git refs migrate\" to migrate the reflog entries from a refs\n   backend to another had a handful of bugs squashed.\n\n * \"git remote rename origin upstream\" failed to move origin/HEAD to\n   upstream/HEAD when origin/HEAD is unborn and performed other\n   renames extremely inefficiently, which has been corrected.\n   (merge 16c4fa26b9 ps/remote-rename-fix later to maint).\n\n * \"git describe\" has been optimized by using better data structure.\n   (merge 08bb69d70f rs/describe-with-prio-queue later to maint).\n\n * \"git push\" had a code path that led to BUG() but it should have\n   been a die(), as it is a response to a usual but invalid end-user\n   action to attempt pushing an object that does not exist.\n\n * Various bugs about rename handling in \"ort\" merge strategy have\n   been fixed.\n\n * \"git jump\" (in contrib/) fails to parse the diff header correctly\n   when a file has a space in its name, which has been corrected.\n   (merge 621ce9c1c6 gh/git-jump-pathname-with-sp later to maint).\n\n * \"git diff --no-index\" run inside a subdirectory under control of a\n   Git repository operated at the top of the working tree and stripped\n   the prefix from the output, and oddballs like \"-\" (stdin) did not\n   work correctly because of it.  Correct the set-up by undoing what\n   the set-up sequence did to cwd and prefix.\n\n * Various options to \"git diff\" that makes comparison ignore certain\n   aspects of the differences (like \"space changes are ignored\",\n   \"differences in lines that match these regular expressions are\n   ignored\") did not work well with \"--name-only\" and friends.\n   (merge b55e6d36eb ly/diff-name-only-with-diff-from-content later to maint).\n\n * The above caused regressions, which has been corrected.\n\n * Documentation for \"git rebase\" has been updated.\n   (merge 3f7f2b0359 je/doc-rebase later to maint).\n\n * The start_delayed_progress() function in the progress eye-candy API\n   did not clear its internal state, making an initial delay value\n   larger than 1 second ineffective, which has been corrected.\n\n * The compatObjectFormat extension is used to hide an incomplete\n   feature that is not yet usable for any purpose other than\n   developing the feature further.  Document it as such to discourage\n   its use by mere mortals.\n\n * \"git log -L...\" compared trees of multiple parents with the tree of the\n   merge result in an unnecessarily inefficient way.\n   (merge 0a15bb634c sg/line-log-merge-optim later to maint).\n\n * Under a race against another process that is repacking the\n   repository, especially a partially cloned one, \"git fetch\" may\n   mistakenly think some objects we do have are missing, which has\n   been corrected.\n\n * \"git fetch\" can clobber a symref that is dangling when the\n   remote-tracking HEAD is set to auto update, which has been\n   corrected.\n\n * \"git describe <blob>\" misbehaves and/or crashes in some corner\n   cases, which has been taught to exit with failure gracefully.\n   (merge 7c10e48e81 jk/describe-blob later to maint).\n\n * Manual page for \"gitk\" is updated with the current maintainer's\n   name.\n\n * Update the instructions for using GGG in the MyFirstContribution\n   document to say that a GitHub PR could be made against `git/git`\n   instead of `gitgitgadget/git`.\n\n * Makefile tried to run multiple \"cargo build\" which would not work\n   very well; serialize their execution to work around this problem.\n\n * \"git repack --path-walk\" lost objects in some corner cases, which\n   has been corrected.\n\n * \"git ls-files <pathspec>...\" should not necessarily have to expand\n   the index fully if a sparsified directory is excluded by the\n   pathspec; the code is taught to expand the index on demand to avoid\n   this.\n   (merge 681f26bccc ds/ls-files-lazy-unsparse later to maint).\n\n * Windows \"real-time monitoring\" interferes with the execution of\n   tests and affects negatively in both correctness and performance,\n   which has been disabled in Gitlab CI.\n\n * A broken or malicious \"git fetch\" can say that it has the same\n   object for many many times, and the upload-pack serving it can\n   exhaust memory storing them redundantly, which has been corrected.\n\n * A corner case bug in \"git log -L...\" has been corrected.\n\n * \"git rev-parse --short\" and friends failed to disambiguate two\n   objects with object names that share common prefix longer than 32\n   characters, which has been fixed.\n   (merge 8655908b9e jc/longer-disambiguation-fix later to maint).\n\n * Some among \"git add -p\" and friends ignored color.diff and/or\n   color.ui configuration variables, which is an old regression, which\n   has been corrected.\n\n * \"git subtree\" (in contrib/) did not work correctly when splitting\n   squashed subtrees, which has been improved.\n\n * Import a newer version of the clar unit testing framework.\n   (merge 93dbb6b3c5 ps/clar-updates later to maint).\n\n * \"git send-email --compose --reply-to=<address>\" used to add\n   duplicated Reply-To: header, which made mailservers unhappy.  This\n   has been corrected.\n   (merge f448f65719 nb/send-email-no-dup-reply-to later to maint).\n\n * \"git rebase -i\" failed to clean-up the commit log message when the\n   command commits the final one in a chain of \"fixup\" commands, which\n   has been corrected.\n\n * There are double frees and leaks around setup_revisions() API used\n   in \"git stash show\", which has been fixed, and setup_revisions()\n   API gained a wrapper to make it more ergonomic when using it with\n   strvec-manged argc/argv pairs.\n   (merge a04bc71725 jk/setup-revisions-freefix later to maint).\n\n * Deal more gracefully with directory / file conflicts when the files\n   backend is used for ref storage, by failing only the ones that are\n   involved in the conflict while allowing others.\n\n * \"git last-modified\" operating in non-recursive mode used to trigger\n   a BUG(), which has been corrected.\n\n * The use of \"git config get\" command to learn how ANSI color\n   sequence is for a particular type, e.g., \"git config get\n   --type=color --default=reset no.such.thing\", isn't very ergonomic.\n   (merge e4dabf4fd6 ps/config-get-color-fixes later to maint).\n\n * The \"do you still use it?\" message given by a command that is\n   deeply deprecated and allow us to suggest alternatives has been\n   updated.\n\n * Clang-format update to let our control macros be formatted the way we\n   had them traditionally, e.g., \"for_each_string_list_item()\" without\n   space before the parentheses.\n\n * A few places where a size_t value was cast to curl_off_t without\n   checking has been updated to use the existing helper function.\n\n * \"git reflog write\" did not honor the configured user.name/email\n   which has been corrected.\n\n * Handling of an empty subdirectory of .git/refs/ in the ref-files\n   backend has been corrected.\n\n * Our CI script requires \"sudo\" that can be told to preserve\n   environment, but Ubuntu replaced with \"sudo\" with an implementation\n   that lacks the feature.  Work this around by reinstalling the\n   original version.\n\n * The reftable backend learned to sanity check its on-disk data more\n   carefully.\n   (merge 466a3a1afd kn/reftable-consistency-checks later to maint).\n\n * A lot of code clean-up of xdiff.\n   Split out of a larger topic.\n   (merge 8b9c5d2e3a en/xdiff-cleanup later to maint).\n\n * \"git format-patch --range-diff=... --notes=...\" did not drive the\n   underlying range-diff with correct --notes parameter, ending up\n   comparing with different set of notes from its main patch output\n   you would get from \"git format-patch --notes=...\" for a singleton\n   patch.\n\n * The code in \"git add -p\" and friends to iterate over hunks was\n   riddled with bugs, which has been corrected.\n\n * A few more things that patch authors can do to help maintainer to\n   keep track of their topics better.\n   (merge 1a41698841 tb/doc-submitting-patches later to maint).\n\n * An earlier addition to \"git diff --no-index A B\" to limit the\n   output with pathspec after the two directories misbehaved when\n   these directories were given with a trailing slash, which has been\n   corrected.\n\n * The \"--short\" option of \"git status\" that meant output for humans\n   and \"-z\" option to show NUL delimited output format did not mix\n   well, and colored some but not all things.  The command has been\n   updated to color all elements consistently in such a case.\n\n * Unicode width table update.\n\n * GPG signing test set-up has been broken for a year, which has been\n   corrected.\n   (merge 516bf45749 jc/t1016-setup-fix later to maint).\n\n * Recent OpenSSH creates the Unix domain socket to communicate with\n   ssh-agent under $HOME instead of /tmp, which causes our test to\n   fail doe to overly long pathname in our test environment, which has\n   been worked around by using \"ssh-agent -T\".\n\n * strbuf_split*() to split a string into multiple strbufs is often a\n   wrong API to use.  A few uses of it have been removed by\n   simplifying the code.\n   (merge 2ab72a16d9 ob/gpg-interface-cleanup later to maint).\n\n * \"git shortlog\" knows \"--committer\" and \"--author\" options, which\n   the command line completion (in contrib/) did not handle well,\n   which has been corrected.\n   (merge c568fa8e1c kf/log-shortlog-completion-fix later to maint).\n\n * \"git bisect\" command did not react correctly to \"git bisect help\"\n   and \"git bisect unknown\", which has been corrected.\n   (merge 2bb3a012f3 rz/bisect-help-unknown later to maint).\n\n * The 'q'(uit) command in \"git add -p\" has been improved to quit\n   without doing any meaningless work before leaving, and giving EOF\n   (typically control-D) to the prompt is made to behave the same way.\n\n * The wildmatch code had a corner case bug that mistakenly makes\n   \"foo**/bar\" match with \"foobar\", which has been corrected.\n   (merge 1940a02dc1 jk/match-pathname-fix later to maint).\n\n * Tests did not set up GNUPGHOME correctly, which is fixed but some\n   flaky tests are exposed in t1016, which needs to be addressed\n   before this topic can move forward.\n   (merge 6cd8369ef3 tz/test-prepare-gnupghome later to maint).\n\n * The patterns used in the .gitignore files use backslash in the way\n   documented for fnmatch(3); document as such to reduce confusion.\n   (merge 8a6d158a1d jk/doc-backslash-in-exclude later to maint).\n\n * The version of macos image used in GitHub CI has been updated to\n   macos-14, as the macos-13 that we have been using got deprecated.\n   (merge 73b9cdb7c4 jc/ci-use-macos-14 later to maint).\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge 529a60a885 ua/t1517-short-help-tests later to maint).\n   (merge 22d421fed9 ac/deglobal-fmt-merge-log-config later to maint).\n   (merge a60203a015 dk/t7005-editor-updates later to maint).\n   (merge 16684b6fae ps/reftable-libgit2-cleanup later to maint).\n   (merge e5c27bd3d8 je/doc-add later to maint).\n   (merge 13296ac909 ps/object-store-midx-dedup-info later to maint).\n   (merge f9a6705d9a tc/t0450-harden later to maint).\n   (merge a66fc22bf9 rs/get-oid-with-flags-cleanup later to maint).\n   (merge 15b8abde07 js/mingw-includes-cleanup later to maint).\n   (merge 2cebca0582 tb/cat-file-objectmode-update later to maint).\n   (merge 8f487db07a kh/doc-patch-id-1 later to maint).\n   (merge f711f37b05 eb/t1016-hash-transition-fix later to maint).\n   (merge 85333aa1af jk/test-delete-gpgsig-leakfix later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.51.0 are as follows:\n\nAdam Dinwoodie (2):\n      t/t1517: mark tests that fail with GIT_TEST_INSTALLED\n      git-gui: sync Makefiles with git.git\n\nAditya Garg (3):\n      send-email: add ability to send a copy of sent emails to an IMAP folder\n      send-email: enable copying emails to an IMAP folder without actually sending them\n      docs: update sendmail docs to use more secure SMTP server for Gmail\n\nAlexander Monakov (1):\n      xdiff: optimize xdl_hash_record_verbatim\n\nAyush Chandekar (2):\n      environment: remove the global variable 'merge_log_config'\n      builtin/fmt-merge-msg: stop depending on 'the_repository'\n\nChristian Couder (20):\n      promisor-remote: refactor to get rid of 'struct strvec'\n      promisor-remote: allow a server to advertise more fields\n      promisor-remote: use string constants for 'name' and 'url' too\n      promisor-remote: refactor how we parse advertised fields\n      promisor-remote: use string_list_split() in filter_promisor_remote()\n      promisor-remote: allow a client to check fields\n      promisor-remote: use string_list_split() in mark_remotes_as_accepted()\n      gpg-interface: refactor 'enum sign_mode' parsing\n      fast-import: add '--signed-commits=<mode>' option\n      SubmittingPatches: add section about AI\n      doc: git-tag: stop focusing on GPG signed tags\n      lib-gpg: allow tests with GPGSM or GPGSSH prereq first\n      t9350: properly count annotated tags\n      fast-export: handle all kinds of tag signatures\n      fast-import: add '--signed-tags=<mode>' option\n      gpg-interface: simplify ssh fingerprint parsing\n      gpg-interface: use left shift to define GPG_VERIFY_*\n      fast-export: mark strings for translation\n      fast-import: mark strings for translation\n      gpg-interface: mark a string for translation\n\nColin Stagner (1):\n      contrib/subtree: fix split with squashed subtrees\n\nD. Ben Knoble (17):\n      parse-options: refactor flags for usage_with_options_internal\n      builtin: also setup gently for --help-all\n      t7005: use modern test style\n      t7005: stop abusing --exec-path\n      t7005: sanitize test environment for subsequent tests\n      t3903: reduce dependencies on previous tests\n      t3905: remove unneeded blank line\n      stash: refactor private config globals\n      stash: honor stash.index in apply, pop modes\n      doc: explain the impact of stash.index on --autostash options\n      parseopt: fix :(optional) at command line to only ignore missing files\n      doc: clarify command equivalence comment\n      parseopt: use boolean type for a simple flag\n      config: use boolean type for a simple flag\n      parseopt: restore const qualifier to parsed filename\n      perl: also mark git-contacts executable\n      meson: make GIT_HTML_PATH configurable\n\nDaniele Sassoli (3):\n      count-objects: document count-objects pack\n      doc: add discord to ways of getting help\n      doc: clarify which remotes can be used with GitGitGadget\n\nDavid Aguilar (1):\n      Makefile: build libgit-rs and libgit-sys serially\n\nDenton Liu (3):\n      t5516: remove surrounding empty lines in test bodies\n      remote.c: remove BUG in show_push_unqualified_ref_name_error()\n      remote.c: convert if-else ladder to switch\n\nDerrick Stolee (17):\n      path-walk: fix setup of pending objects\n      path-walk: create initializer for path lists\n      ls-files: conditionally leave index sparse\n      midx-write: only load initialized packs\n      midx-write: put failing response value back\n      midx-write: use cleanup when incremental midx fails\n      midx-write: use uint32_t for preferred_pack_idx\n      midx-write: reenable signed comparison errors\n      midx-write: simplify error cases\n      sparse-checkout: remove use of the_repository\n      sparse-checkout: add basics of 'clean' command\n      sparse-checkout: match some 'clean' behavior\n      dir: add generic \"walk all files\" helper\n      sparse-checkout: add --verbose option to 'clean'\n      sparse-index: point users to new 'clean' action\n      t: expand tests around sparse merges and clean\n      sparse-index: improve advice message instructions\n\nElijah Newren (8):\n      merge-ort: update comments to modern testfile location\n      merge-ort: drop unnecessary temporary in check_for_directory_rename()\n      t6423: document two bugs with rename-to-self testcases\n      t6423: fix missed staging of file in testcases 12i,12j,12k\n      merge-ort: clarify the interning of strings in opt->priv->path\n      merge-ort: fix incorrect file handling\n      merge-ort: fix directory rename on top of source of other rename/delete\n      Documentation/git-merge-tree.adoc: clarify the --merge-base option\n\nEmily Yang (1):\n      commit-graph: add new config for changed-paths & recommend it in scalar\n\nEric Sunshine (1):\n      gitk: fix MacOS 10.14 \"Mojave\" crash on launch\n\nEric W. Biederman (1):\n      t1016-compatObjectFormat: really freeze time for reproduciblity\n\nEzekiel Newren (14):\n      xdiff: delete static forward declarations in xprepare\n      xdiff: delete local variables and initialize/free xdfile_t directly\n      xdiff: delete unnecessary fields from xrecord_t and xdfile_t\n      xdiff: delete superfluous function xdl_get_rec() in xemit\n      xdiff: delete local variables that alias fields in xrecord_t\n      xdiff: delete struct diffdata_t\n      xdiff: delete redundant array xdfile_t.ha\n      xdiff: delete fields ha, line, size in xdlclass_t in favor of an xrecord_t\n      xdiff: delete chastore from xdfile_t\n      xdiff: rename rchg -> changed in xdfile_t\n      make: delete XDIFF_LIB, add xdiff to LIB_OBJS\n      make: delete REFTABLE_LIB, add reftable to LIB_OBJS\n      xdiff: add macros DISCARD(0), KEEP(1), INVESTIGATE(2) in xprepare.c\n      xdiff: change type of xdfile_t.changed from char to bool\n\nGreg Hurrell (2):\n      git-jump: make `diff` work with filenames containing spaces\n      mailmap: consolidate multiple addresses into one\n\nHeiko Voigt (1):\n      git-gui: provide question helper for retry fallback on Windows\n\nJacob Keller (1):\n      diff --no-index: fix logic for paths ending in '/'\n\nJean-Noël Avila (12):\n      doc: test linkgit macros for well-formedness\n      doc: check well-formedness of delimited sections\n      doc: check for absence of multiple terms in each entry of desc list\n      doc: check for absence of the form --[no-]parameter\n      doc:git-for-each-ref: fix styling and typos\n      doc lint: check that synopsis manpages have synopsis inlines\n      doc: fix asciidoc format compatibility in pretty-formats.adoc\n      doc: change the markup of paragraphs following a nested list item\n      doc: convert git-stash.adoc to synopis style\n      doc: convert git tag to synopsis style\n      doc: convert git worktree to synopsis style\n      doc: do not break sentences into \"lego\" pieces\n\nJeff King (47):\n      combine-diff: zero memory used for callback filepairs\n      diff: teach tree-diff a max-depth parameter\n      describe: pass oid struct by const pointer\n      describe: error if blob not found\n      describe: catch unborn branch in describe_blob()\n      t5510: make confusing config cleanup more explicit\n      t5510: stop changing top-level working directory\n      t5510: prefer \"git -C\" to subshell for followRemoteHEAD tests\n      refs: do not clobber dangling symrefs\n      describe: handle blob traversal with no commits\n      describe: pass commit to describe_commit()\n      fetch-pack: re-scan when double-checking graph objects\n      curl: add support for curl_global_trace() components\n      stash: pass --no-color to diff plumbing child processes\n      add-interactive: respect color.diff for diff coloring\n      add-interactive: manually fall back color config to color.ui\n      contrib/diff-highlight: mention interactive.diffFilter\n      color: use GIT_COLOR_* instead of numeric constants\n      color: return enum from git_config_colorbool()\n      grep: don't treat grep_opt.color as a strict bool\n      diff: simplify color_moved check when flushing\n      diff: don't use diff_options.use_color as a strict bool\n      diff: pass o->use_color directly to fill_metainfo()\n      diff: stop passing ecbdata->use_color as boolean\n      pretty: use format_commit_context.auto_color as colorbool\n      color: use git_colorbool enum type to store colorbools\n      color: return bool from want_color()\n      add-interactive: retain colorbool values longer\n      config: store want_color() result in a separate bool\n      stash: tell setup_revisions() to free our allocated strings\n      revision: manage memory ownership of argv in setup_revisions()\n      revision: add wrapper to setup_revisions() from a strvec\n      treewide: use setup_revisions_from_strvec() when we have a strvec\n      treewide: pass strvecs around for setup_revisions_from_strvec()\n      revision: retain argv NULL invariant in setup_revisions()\n      doc: fix indentation of refStorage item in git-config(1)\n      diff: restore redirection to /dev/null for diff_from_contents\n      status: make coloring of \"-z --short\" consistent\n      diff: send external diff output to diff_options.file\n      diff: drop save/restore of color_moved in dry-run mode\n      diff: replace diff_options.dry_run flag with NULL file\n      diff: drop dry-run redirection to /dev/null\n      diff: simplify run_external_diff() quiet logic\n      match_pathname(): reorder prefix-match check\n      match_pathname(): give fnmatch one char of prefix context\n      doc: document backslash in gitignore patterns\n      test-tool: fix leak in delete-gpgsig command\n\nJohannes Schindelin (14):\n      git gui: set GIT_ASKPASS=git-gui--askpass if not set yet\n      git-gui--askyesno: allow overriding the window title\n      git-gui--askyesno (mingw): use Git for Windows' icon, if available\n      http: offer to cast `size_t` to `curl_off_t` safely\n      imap-send: be more careful when casting to `curl_off_t`\n      http-push: avoid new compile error\n      mingw: avoid relative `#include`s\n      mingw: order `#include`s alphabetically\n      refs: forbid clang to complain about unreachable code\n      build(deps): bump actions/download-artifact from 4 to 5\n      build(deps): bump actions/checkout from 4 to 5\n      build(deps): bump actions/setup-python from 5 to 6\n      build(deps): bump actions/github-script from 7 to 8\n      ci: update {download,upload}-artifact Action versions\n\nJohannes Sixt (6):\n      rebase -i: permit 'drop' of a merge commit\n      doc/gitk: update reference to the external project\n      doc/format-patch: adjust Thunderbird MUA hint to new add-on\n      progress: pay attention to (customized) delay time\n      git-gui: fix error handling of Revert Changes command\n      t7500: fix tests with absolute path following \":(optional)\" on Windows\n\nJonathan Tan (1):\n      mailmap: change primary address for Jonathan Tan\n\nJulia Evans (26):\n      doc: git-add: clarify intro & add an example\n      doc: git-add: simplify discussion of ignored files\n      doc: git-rebase: start with an example\n      doc: git rebase: dedup merge conflict discussion\n      doc: git rebase: clarify arguments syntax\n      doc: git-rebase: move --onto explanation down\n      doc: git-rebase: update discussion of internals\n      doc: rephrase the purpose of the staging area\n      doc: git-checkout: clarify intro sentence\n      doc: git-checkout: clarify ARGUMENT DISAMBIGUATION\n      doc: git-checkout: clarify `git checkout <branch>`\n      doc: git-checkout: clarify `-b` and `-B`\n      doc: git-checkout: deduplicate --detach explanation\n      doc: git-checkout: split up restoring files section\n      doc: git-checkout: clarify restoring files section\n      doc: git-push: create PUSH RULES section\n      doc: git-push: rewrite refspec specification\n      doc: git-push: clarify intro\n      doc: add an UPSTREAM BRANCHES section to pull/push/fetch\n      doc: git-push: clarify \"where to push\"\n      doc: git-push: clarify \"what to push\"\n      doc: git-push: add explanation of `git push origin main`\n      doc: git-pull: move <repository> and <refspec> params\n      doc: git-pull: clarify options for integrating remote branch\n      doc: git-pull: delete the example\n      doc: git-pull: clarify how to exit a conflicted merge\n\nJunio C Hamano (64):\n      string-list: report programming error with BUG\n      string-list: align string_list_split() with its _in_place() counterpart\n      string-list: unify string_list_split* functions\n      string-list: optionally trim string pieces split by string_list_split*()\n      diff: simplify parsing of diff.colormovedws\n      string-list: optionally omit empty string pieces in string_list_split*()\n      string-list: split-then-remove-empty can be done while splitting\n      wt-status: avoid strbuf_split*()\n      clean: do not pass strbuf by value\n      clean: do not use strbuf_split*() [part 1]\n      clean: do not pass the whole structure when it is not necessary\n      clean: do not use strbuf_split*() [part 2]\n      merge-tree: do not use strbuf_split*()\n      notes: do not use strbuf_split*()\n      config: do not use strbuf_split()\n      environment: do not use strbuf_split*()\n      sub-process: do not use strbuf_split*()\n      trace2: trim_trailing_newline followed by trim is a no-op\n      trace2: do not use strbuf_split*()\n      diff: --no-index should ignore the worktree\n      abbrev: allow extending beyond 32 chars to disambiguate\n      config: document includeIf conditions consistently\n      Start 2.52 cycle, the first batch\n      The second batch\n      The third batch\n      The fourth batch\n      The fifth batch\n      The sixth batch\n      The seventh batch\n      The eighth batch\n      The ninth batch\n      The tenth batch\n      initial branch: give hints after switching the default name\n      The twelfth batch\n      t7500: make each piece more independent\n      The thirteenth batcn\n      The fourteenth batch\n      t7500: fix GIT_EDITOR shell snippet\n      config: values of pathname type can be prefixed with :(optional)\n      parseopt: values of pathname type can be prefixed with :(optional)\n      The fifteenth batch\n      The sixteenth batch\n      The seventeenth batch\n      t1016: make sure to use specified GPG\n      The eighteenth batch\n      The nineteenth batch\n      Prepare for 2.51.1\n      Git 2.51.1\n      The twentieth batch\n      The twenty-first batch\n      The twenty-second batch\n      diff: make sure the other caller of diff_flush_patch_quietly() is silent\n      The twenty-third batch\n      The twenty-fourth batch\n      Git 2.51.2\n      The 25th batch\n      The 26th batch\n      The 27th batch\n      Git 2.52-rc0\n      A bit more before rc1\n      parseopt: remove unreachable code\n      GitHub CI: macos-13 images are no more\n      Git 2.52-rc1\n      Git 2.52-rc2\n\nJustin Tobler (18):\n      bulk-checkin: introduce object database transaction structure\n      bulk-checkin: remove global transaction state\n      bulk-checkin: require transaction for index_blob_bulk_checkin()\n      bulk-checkin: use repository variable from transaction\n      bulk-checkin: remove ODB transaction nesting\n      builtin/update-index: end ODB transaction when --verbose is specified\n      bulk-checkin: drop flush_odb_transaction()\n      object-file: relocate ODB transaction code\n      object-file: update naming from bulk-checkin\n      odb: add transaction interface\n      clang-format: exclude control macros from SpaceBeforeParens\n      builtin/repo: rename repo_info() to cmd_repo_info()\n      ref-filter: allow NULL filter pattern\n      ref-filter: export ref_kind_from_refname()\n      builtin/repo: introduce structure subcommand\n      builtin/repo: add object counts in structure output\n      builtin/repo: add keyvalue and nul format for structure stats\n      builtin/repo: add progress meter for structure stats\n\nKIYOTA Fumiya (1):\n      completion: complete some 'git log' options\n\nKarthik Nayak (13):\n      Documentation: note styling for bit fields\n      refs/files: catch conflicts on case-insensitive file-systems\n      refs/files: use correct error type when lock exists\n      refs/files: handle F/D conflicts in case-insensitive FS\n      refs/files: handle D/F conflicts during locking\n      refs/ref-cache: fix SEGFAULT when seeking in empty directories\n      refs: remove unused headers\n      refs: move consistency check msg to generic layer\n      reftable: check for trailing newline in 'tables.list'\n      Documentation/fsck-msgids: remove duplicate msg id\n      fsck: order 'fsck_msg_type' alphabetically\n      reftable: add code to facilitate consistency checks\n      refs/reftable: add fsck check for checking the table name\n\nKnut Harald Ryager (1):\n      docs: remove stray bracket from git-clone synopsis\n\nKristoffer Haugsbakk (24):\n      doc: git-log: fix description list\n      doc: interpret-trailers: close all pairs of single quotes\n      doc: config: replace backtick with apostrophe for possessive\n      doc: add missing backtick for inline-verbatim\n      doc: remove extra backtick for inline-verbatim\n      doc: fast-import: replace literal block with paragraph\n      Makefile: don’t add whatchanged after it has been removed\n      git: add `deprecated` category to --list-cmds\n      git: move seen-alias bookkeeping into handle_alias(...)\n      git: allow alias-shadowing deprecated builtins\n      t0014: test shadowing of aliases for a sample of builtins\n      you-still-use-that??: help the user help themselves\n      whatchanged: hint about git-log(1) and aliasing\n      whatchanged: remove not-even-shorter clause\n      BreakingChanges: remove claim about whatchanged reports\n      range-diff: rename other_arg to log_arg\n      revision: add rdiff_log_arg to rev_info\n      format-patch: handle range-diff on notes correctly for single patches\n      doc: patch-id: fix accidental literal blocks\n      doc: fix accidental literal blocks\n      doc: patch-id: convert to the modern synopsis style\n      RelNotes: minor fixups before 2.51.1\n      RelNotes: sync with Git 2.51.1 fixups\n      doc: git-checkout: fix placeholder markup\n\nKyle E. Mitchell (1):\n      doc: fix formatting of function-wrap shell alias\n\nLidong Yan (3):\n      diff: ensure consistent diff behavior with ignore options\n      bloom: enable bloom filter with wildcard pathspec in revision traversal\n      diff: stop output garbled message in dry run mode\n\nLucas Seiki Oshiro (7):\n      repo: declare the repo command\n      repo: add the field references.format\n      repo: add the field layout.bare\n      repo: add the field layout.shallow\n      repo: add the --format flag\n      repo: add the flag -z as an alias for --format=nul\n      repo: add the field objects.format\n\nM Hickford (1):\n      docs/gitcredentials: describe URL prefix matching\n\nMark Levedahl (15):\n      git-gui: simplify PATH de-duplication\n      git-gui: simplify using nice(1)\n      gitk: use themed spinboxes\n      gitk: make sha1but a ttk::button\n      gitk: use config variables to define and load a theme\n      gitk: do not invoke tk_setPalette\n      gitk: use text labels for commit ID buttons\n      gitk: use text labels for next/prev search buttons\n      gitk: eliminate Interface color option from gui\n      gitk: eliminate unused ui color variables\n      gitk: add proc run_themeloader\n      gitk: add theme selection to color configuration page\n      gitk: make configuration dialog resizing useful\n      gitk: separate code blocks for configuration dialog\n      gitk: set minimum size on configuration dialog\n\nMeet Soni (19):\n      doc: factor out common option\n      builtin/for-each-ref: align usage string with the man page\n      builtin/for-each-ref: factor out core logic into a helper\n      builtin/refs: add list subcommand\n      t6300: refactor tests to be shareable\n      t: add test for git refs list subcommand\n      builtin/refs: add 'exists' subcommand\n      t1403: split 'show-ref --exists' tests into a separate file\n      t1422: refactor tests to be shareable\n      t: add test for git refs exists subcommand\n      refs: add a generic 'optimize' API\n      files-backend: implement 'optimize' action\n      reftable-backend: implement 'optimize' action\n      builtin/pack-refs: convert to use the generic refs_optimize() API\n      builtin/pack-refs: factor out core logic into a shared library\n      doc: pack-refs: factor out common options\n      builtin/refs: add optimize subcommand\n      t0601: refactor tests to be shareable\n      t: add test for git refs optimize subcommand\n\nMichael Lohmann (1):\n      builtin/reflog: respect user config in \"write\" subcommand\n\nMichael Rappazzo (2):\n      gitk: add README with usage, build, and contribution details\n      gitk: fix error when remote tracking branch is deleted\n\nMikhail Malinouski (1):\n      docs: fix typo in worktree.adoc 'extension'\n\nNeilBrown (1):\n      send-email: don't duplicate Reply-to: in intro message\n\nOlamide Caleb Bello (2):\n      gpg-interface: do not use misdesigned strbuf_split*()\n      gpg-interface: do not use misdesigned strbuf_split*()\n\nPatrick Steinhardt (113):\n      Documentation/git-reflog: convert to use synopsis type\n      builtin/reflog: improve grouping of subcommands\n      refs: export `ref_transaction_update_reflog()`\n      builtin/reflog: implement subcommand to write new entries\n      ident: fix type of string length parameter\n      refs: fix identity for migrated reflogs\n      refs/files: detect race when generating reflog entry for HEAD\n      refs: stop unsetting REF_HAVE_OLD for log-only updates\n      refs: fix invalid old object IDs when migrating reflogs\n      refs: pass refname when invoking reflog entry callback\n      refs: simplify logic when migrating reflog entries\n      builtin/remote: fix sign comparison warnings\n      builtin/remote: determine whether refs need renaming early on\n      builtin/remote: rework how remote refs get renamed\n      builtin/remote: only iterate through refs that are to be renamed\n      odb: store locality in object database sources\n      odb: allow `odb_find_source()` to fail\n      odb: consistently use \"dir\" to refer to alternate's directory\n      odb: return newly created in-memory sources\n      odb: simplify calling `link_alt_odb_entry()`\n      midx: drop redundant `struct repository` parameter\n      midx: load multi-pack indices via their source\n      midx: write multi-pack indices via their source\n      midx: stop duplicating info redundant with its owning source\n      midx: compute paths via their source\n      reftable/writer: fix type used for number of records\n      reftable/writer: drop Git-specific `QSORT()` macro\n      reftable/stack: reorder code to avoid forward declarations\n      reftable/stack: fix compiler warning due to missing braces\n      reftable/stack: allow passing flags to `reftable_stack_add()`\n      reftable/stack: handle outdated stacks when compacting\n      reftable: don't second-guess errors from flock interface\n      refs/reftable: always reload stacks when creating lock\n      commit-graph: stop using `the_hash_algo` via macros\n      commit-graph: store the hash algorithm instead of its length\n      commit-graph: refactor `parse_commit_graph()` to take a repository\n      commit-graph: stop using `the_hash_algo`\n      commit-graph: stop using `the_repository`\n      commit-graph: stop passing in redundant repository\n      gitlab-ci: disable realtime monitoring to unbreak Windows jobs\n      blame: drop explicit check for commit graph\n      revision: drop explicit check for commit graph\n      commit-graph: return the prepared commit graph from `prepare_commit_graph()`\n      commit-graph: return commit graph from `repo_find_commit_pos_in_graph()`\n      commit-graph: pass graphs that are to be merged as parameter\n      t5530: modernize tests\n      upload-pack: don't ACK non-commits repeatedly in protocol v2\n      t/unit-tests: update clar to fcbed04\n      odb: drop deprecated wrapper functions\n      meson: introduce a \"docs\" alias to compile documentation only\n      meson: print docs backend as part of the summary\n      ci: don't compile whole project when testing docs with Meson\n      t1300: write test expectations in the test's body\n      t1300: small style fixups\n      builtin/config: do not die in `get_color()`\n      builtin/config: special-case retrieving colors without a key\n      builtin/config: do not spawn pager when printing color codes\n      t/unit-tests: update to 10e96bc\n      packfile: introduce a new `struct packfile_store`\n      odb: move list of packfiles into `struct packfile_store`\n      odb: move initialization bit into `struct packfile_store`\n      odb: move packfile map into `struct packfile_store`\n      odb: move MRU list of packfiles into `struct packfile_store`\n      odb: move kept cache into `struct packfile_store`\n      packfile: reorder functions to avoid function declaration\n      packfile: refactor `prepare_packed_git()` to work on packfile store\n      packfile: split up responsibilities of `reprepare_packed_git()`\n      packfile: refactor `install_packed_git()` to work on packfile store\n      packfile: introduce function to load and add packfiles\n      packfile: move `get_multi_pack_index()` into \"midx.c\"\n      packfile: refactor `get_packed_git()` to work on packfile store\n      packfile: refactor `get_all_packs()` to work on packfile store\n      packfile: refactor `get_packed_git_mru()` to work on packfile store\n      meson: add infrastructure to build internal Rust library\n      Makefile: reorder sources after includes\n      Makefile: introduce infrastructure to build internal Rust library\n      help: report on whether or not Rust is enabled\n      varint: use explicit width for integers\n      varint: reimplement as test balloon for Rust\n      BreakingChanges: announce Rust becoming mandatory\n      ci: convert \"pedantic\" job into full build with breaking changes\n      ci: enable Rust for breaking-changes jobs\n      gitlab-ci: dedup instructions to disable realtime monitoring\n      gitlab-ci: ignore failures to disable realtime monitoring\n      gitlab-ci: drop workaround for Python certificate store on Windows\n      gitlab-ci: upload Meson test logs as JUnit reports\n      t8020: fix test failure due to indeterministic tag sorting\n      ci: fix broken jobs on Ubuntu 25.10 caused by switch to sudo-rs(1)\n      ci: deduplicate calls to `apt-get update`\n      ci: check formatting of our Rust code\n      rust/varint: add safety comments\n      ci: check for common Rust mistakes via Clippy\n      ci: verify minimum supported Rust version\n      rust: support for Windows\n      refs/files: deprecate writing symrefs as symbolic links\n      object-name: convert to use `packfile_store_get_all_packs()`\n      builtin/gc: convert to use `packfile_store_get_all_packs()`\n      builtin/grep: simplify how we preload packs\n      packfile: drop `packfile_store_get_packs()`\n      packfile: introduce macro to iterate through packs\n      packfile: rename `packfile_store_get_all_packs()`\n      t7528: work around ETOOMANY in OpenSSH 10.1 and newer\n      builtin/gc: remove global `repack` variable\n      builtin/gc: make `too_many_loose_objects()` reusable without GC config\n      builtin/maintenance: introduce \"geometric-repack\" task\n      builtin/maintenance: make the geometric factor configurable\n      builtin/maintenance: don't silently ignore invalid strategy\n      builtin/maintenance: improve readability of strategies\n      builtin/maintenance: run maintenance tasks depending on type\n      builtin/maintenance: extend \"maintenance.strategy\" to manual maintenance\n      builtin/maintenance: make \"gc\" strategy accessible\n      builtin/maintenance: introduce \"geometric\" strategy\n      t7900: fix a flaky test due to git-repack always regenerating MIDX\n\nPaulo Casaretto (1):\n      range-diff: add configurable memory limit for cost matrix\n\nPeter Krefting (1):\n      refs: add missing space in messages\n\nPhillip Wood (12):\n      xdiff: refactor xdl_hash_record()\n      breaking-changes: deprecate support for core.commentString=auto\n      config: warn on core.commentString=auto\n      commit: print advice when core.commentString=auto\n      breaking-changes: switch default branch to main\n      t4013: switch default branch name to main\n      t9902: switch default branch name to main\n      t0613: stop setting default initial branch\n      rebase -i: respect commit.cleanup when picking fixups\n      sequencer: remove VERBATIM_MSG flag\n      add -p: mark split hunks as undecided\n      add-patch: update hunk splitability after editing\n\nQueen Ediri Jessa (1):\n      MyFirstContribution: add note on confirming patches\n\nRamsay Jones (6):\n      t6137-*.sh: fix test failure on cygwin\n      doc: add some missing technical documents\n      doc: remembering-renames.adoc: fix asciidoc warnings\n      doc: sparse-checkout.adoc: fix asciidoc warnings\n      doc: commit-graph.adoc: fix up some formatting\n      doc: add large-object-promisors.adoc to the docs build\n\nRené Scharfe (15):\n      describe: use prio_queue\n      describe: use prio_queue_replace()\n      describe: use oidset in finish_depth_computation()\n      object-name: declare pointer type of extend_abbrev_len()'s 2nd parameter\n      use repo_get_oid_with_flags()\n      add-patch: improve help for options j, J, k, and K\n      add-patch: document that option J rolls over\n      add-patch: let options y, n, j, and e roll over to next undecided\n      add-patch: let options k and K roll over like j and J\n      add-patch: let options a and d roll over like y and n\n      add-patch: reset \"permitted\" at loop start\n      add-patch: fully document option P\n      commit-reach: avoid commit_list_insert_by_date()\n      add-patch: quit without skipping undecided hunks\n      add-patch: quit on EOF\n\nRuoyu Zhong (4):\n      gitk: use <Button-3> for ctx menus on macOS with Tcl 8.7+\n      gitk: fix trackpad scrolling for Tcl/Tk 8.7+\n      bisect: fix handling of `help` and invalid subcommands\n      bisect: update usage and docs to match each other\n\nSZEDER Gábor (6):\n      line-log: fix assertion error\n      line-log: show all line ranges touched by the same diff range\n      line-log: avoid unnecessary tree diffs when processing merge commits\n      line-log: get rid of the parents array in process_ranges_merge_commit()\n      line-log: initialize diff queue in process_ranges_ordinary_commit()\n      line-log: simplify condition checking for merge commits\n\nSolly (1):\n      t2401: update path checks using test_path helpers\n\nTaylor Blau (52):\n      SubmittingPatches: extend release-notes experiment to topic names\n      SubmittingPatches: guidance for multi-series efforts\n      builtin/cat-file.c: simplify calling `report_object_status()`\n      builtin/repack.c: avoid \"the_repository\" in `cmd_repack()`\n      builtin/repack.c: avoid \"the_repository\" in existing packs API\n      builtin/repack.c: avoid \"the_repository\" when taking a ref snapshot\n      builtin/repack.c: avoid \"the_repository\" when removing packs\n      builtin/repack.c: avoid \"the_repository\" when repacking promisor objects\n      builtin/repack.c: avoid \"the_hash_algo\" when deleting packs\n      builtin/repack.c: avoid \"the_hash_algo\" in `write_oid()`\n      builtin/repack: avoid \"the_hash_algo\" in `repack_promisor_objects()`\n      builtin/repack.c: avoid \"the_hash_algo\" in `finish_pack_objects_cmd()`\n      builtin/repack.c: avoid using `hash_to_hex()` in pack geometry\n      repack: introduce new compilation unit\n      builtin/repack.c: pass both pack_objects args to repack_config\n      repack: move 'delta_base_offset' to 'struct pack_objects_args'\n      repack: remove 'prepare_pack_objects' from the builtin\n      builtin/repack.c: rename many 'struct existing_packs' functions\n      repack: remove 'remove_redundant_pack' from the builtin\n      builtin/repack.c: pass \"packdir\" when removing packs\n      builtin/repack.c: avoid unnecessary numeric casts in existing_packs\n      repack: remove 'existing_packs' API from the builtin\n      builtin/repack.c: rename \"struct generated_pack_data\"\n      builtin/repack.c: factor out \"generated_pack_install\"\n      builtin/repack.c: pass \"packtmp\" to `generated_pack_populate()`\n      builtin/repack.c: provide pack locations to `generated_pack_install()`\n      repack: remove 'generated_pack' API from the builtin\n      builtin/repack.c: pass \"packtmp\" to `repack_promisor_objects()`\n      builtin/repack.c: remove \"repack_promisor_objects()\" from the builtin\n      builtin/repack.c: rename various pack_geometry functions\n      builtin/repack.c: pass 'pack_kept_objects' to `pack_geometry_init()`\n      builtin/repack.c: pass 'packdir' to `pack_geometry_remove_redundant()`\n      repack: remove pack_geometry API from the builtin\n      builtin/repack.c: remove ref snapshotting from builtin\n      builtin/repack.c: extract opts struct for 'write_midx_included_packs()'\n      builtin/repack.c: use a string_list for 'midx_pack_names'\n      repack: keep track of MIDX pack names using existing_packs\n      builtin/repack.c: reorder `remove_redundant_bitmaps()`\n      builtin/repack.c: inline `remove_redundant_bitmaps()`\n      builtin/repack.c: pass `repack_write_midx_opts` to `midx_included_packs`\n      builtin/repack.c: inline packs within `write_midx_included_packs()`\n      repack: 'write_midx_included_packs' API from the builtin\n      builtin/repack.c: introduce `struct write_pack_opts`\n      builtin/repack.c: use `write_pack_opts` within `write_cruft_pack()`\n      repack: move `find_pack_prefix()` out of the builtin\n      repack: extract `write_pack_opts_is_local()`\n      builtin/repack.c: pass `write_pack_opts` to `finish_pack_objects_cmd()`\n      repack: move `finish_pack_objects_cmd()` out of the builtin\n      repack: move `pack_kept_objects` to `struct pack_objects_args`\n      repack: move `write_filtered_pack()` out of the builtin\n      repack: move `write_cruft_pack()` out of the builtin\n      builtin/repack.c: clean up unused `#include`s\n\nThomas Uhle (3):\n      contrib/credential: harmonize Makefiles\n      contrib/credential: add install target\n      wincred: align Makefile with other Makefiles in contrib\n\nTodd Zullinger (2):\n      t/lib-gpg: add prepare_gnupghome() to create GNUPGHOME dir\n      t/lib-gpg: call prepare_gnupghome() in GPG2 prereq\n\nToon Claes (7):\n      within_depth: fix return for empty path\n      t0450: fix test for out-of-tree builds\n      last-modified: new subcommand to show when files were last modified\n      t/perf: add last-modified perf script\n      last-modified: use Bloom filters when available\n      t0450: add allowlist for builtins with missing .adoc\n      last-modified: fix bug when some paths remain unhandled\n\nTorsten Bögershausen (1):\n      unicode: update the width tables to Unicode 17\n\nUsman Akinyemi (3):\n      t/t1517: automate `git subcmd -h` tests outside a repository\n      t5200: move `update-server-info -h` test from t1517\n      t5304: move `prune -h` test from t1517\n\nXinyu Ruan (1):\n      refs: add missing remove_on_disk implementation for debug backend\n\nbrian m. carlson (10):\n      docs: note that extensions.compatobjectformat is incomplete\n      docs: update pack index v3 format\n      docs: update offset order for pack index v3\n      docs: reflect actual double signature for tags\n      docs: improve ambiguous areas of pack format documentation\n      docs: add documentation for loose objects\n      rev-parse: allow printing compatibility hash\n      fsck: consider gpgsig headers expected in tags\n      t: allow specifying compatibility hash\n      t1010: use BROKEN_OBJECTS prerequisite\n\nshejialuo (4):\n      string-list: use bool instead of int for \"exact_match\"\n      string-list: replace negative index encoding with \"exact_match\" parameter\n      string-list: change \"string_list_find_insert_index\" return type to \"size_t\"\n      refs: enable sign compare warnings check\n\nノウラ | Flare (1):\n      alloc: fix dangling pointer in alloc_state cleanup\n\n"}]}