{"thread":{"id":"63978","subject":"[ANNOUNCE] Git v2.51.0","startedAt":"2025-08-18T17:01:39Z","lastAt":"2025-08-18T17:01:39Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"524351","messageId":"xmqqikikk1hr.fsf@gitster.g","threadId":"63978","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.51.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-08-18T17:01:36Z","receivedAt":"2025-08-18T17:01:39Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The latest feature release Git v2.51.0 is now available at the\nusual places.  It is comprised of 506 non-merge commits since\nv2.50.1, contributed by 91 people, 21 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.51.0'\ntag 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.50.1 are as follows.\nWelcome to the Git development community!\n\n  Brett A C Sheffield, chenjianhu, Gareth Fenn, Hoyoung Lee,\n  Ilya Grigoriev, irecca.kun@gmail.com, Isabella Caselli, Jakub\n  Ječmínek, Jan Mazur, Jinyao Guo, Jonas Brandstötter, Jörg\n  Thalheim, Leon Michalak, Mikel Forcada, Patrik Weiskircher,\n  redoste, Rodrigo Michelassi, Russell Hanneken, Ryan Hodges,\n  Timur Sultanaev, and Vasilii Iakliushin.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Aditya Garg, Alexander Shopov, Arkadii Yakovets, Ayush\n  Chandekar, Bagas Sanjaya, Brad Smith, brian m. carlson,\n  Carlo Marcelo Arenas Belón, Christian Couder, Collin Funk,\n  Denton Liu, Derrick Stolee, Elijah Newren, Emir SARI, Eric\n  Sunshine, Fangyi Zhou, Ghanshyam Thakkar, Han Young, hms5232,\n  Jacob Keller, Jean-Noël Avila, Jeff King, Johannes Schindelin,\n  Johannes Sixt, Jouke Witteveen, Junio C Hamano, Justin Tobler,\n  Karthik Nayak, Kate Golovanova, Kevin Brodsky, K Jayatheerth,\n  Kristoffer Haugsbakk, Kyle Lippincott, Lidong Yan, Lucas\n  Seiki Oshiro, Lumynous, Mark Levedahl, Martin Ågren, Martin\n  Storsjö, Matthias Aßhauer, Maxim Cournoyer, Michael Rappazzo,\n  Orgad Shaneh, Ori Avtalion, Oswald Buddenhagen, Øystein Walle,\n  Patrick Steinhardt, Peter Krefting, Phil Hord, Phillip Wood,\n  Ramsay Jones, Raymond E. Pasco, Renato Botelho, René Scharfe,\n  Rodrigo Carvalho, Sebastian Andrzej Siewior, Seyi Kuforiji,\n  shejialuo, Siddharth Asthana, Stan Hu, SZEDER Gábor, Takashi\n  Iwai, Taylor Blau, Teng Long, Todd Zullinger, Toon Claes,\n  Victoria Dye, Vũ Tiến Hưng, Yi-Jyun Pan, and 依云.\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.51 Release Notes\n=======================\n\nUI, Workflows & Features\n------------------------\n\n * Userdiff patterns for the R language have been added.\n\n * Documentation for \"git send-email\" has been updated with a bit more\n   credential helper and OAuth information.\n\n * \"git cat-file --batch\" learns to understand %(objectmode) atom to\n   allow the caller to tell missing objects (due to repository\n   corruption) and submodules (whose commit objects are OK to be\n   missing) apart.\n\n * \"git diff --no-index dirA dirB\" can limit the comparison with\n   pathspec at the end of the command line, just like normal \"git\n   diff\".\n\n * \"git subtree\" (in contrib/) learned to grok GPG signing its commits.\n\n * \"git whatchanged\" that is longer to type than \"git log --raw\"\n   which is its modern rough equivalent has outlived its usefulness\n   more than 10 years ago.  Plan to deprecate and remove it.\n\n * An interchange format for stash entries is defined, and subcommand\n   of \"git stash\" to import/export has been added.\n\n * \"git merge/pull\" has been taught the \"--compact-summary\" option to\n   use the compact-summary format, intead of diffstat, when showing\n   the summary of the incoming changes.\n\n * \"git imap-send\" has been broken for a long time, which has been\n   resurrected and then taught to talk OAuth2.0 etc.\n\n * Some error messages from \"git imap-send\" has been updated.\n\n * When \"git daemon\" sees a signal while attempting to accept() a new\n   client, instead of retrying, it skipped it by mistake, which has\n   been corrected.\n\n * The reftable ref backend has matured enough; Git 3.0 will make it\n   the default format in a newly created repositories by default.\n\n * \"netrc\" credential helper has been improved to understand textual\n   service names (like smtp) in addition to the numeric port numbers\n   (like 25).\n\n * Lift the limitation to use changed-path filter in \"git log\" so that\n   it can be used for a pathspec with multiple literal paths.\n\n * Clean up the way how signature on commit objects are exported to\n   and imported from fast-import stream.\n\n * Remove unsupported, unused, and unsupportable old option from \"git\n   log\".\n\n * Document recently added \"git imap-send --list\" with an example.\n\n * \"git pull\" learned to pay attention to pull.autostash configuration\n   variable, which overrides rebase/merge.autostash.\n\n * \"git for-each-ref\" learns \"--start-after\" option to help\n   applications that want to page its output.\n\n * \"git switch\" and \"git restore\" are declared to be no longer\n   experimental.\n\n * \"git -c alias.foo=bar foo -h baz\" reported \"'foo' is aliased to\n   'bar'\" and then went on to run \"git foo -h baz\", which was\n   unexpected.  Tighten the rule so that alias expansion is reported\n   only when \"-h\" is the sole option.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * \"git pack-objects\" learned to find delta bases from blobs at the\n   same path, using the --path-walk API.\n\n * CodingGuidelines update.\n\n * Add settings for Solaris 10 & 11.\n\n * Meson-based build/test framework now understands TAP output\n   generated by our tests.\n\n * \"Do not explicitly initialize to zero\" rule has been clarified in\n   the CodingGuidelines document.\n\n * A test helper \"test_seq\" function learned the \"-f <fmt>\" option,\n   which allowed us to simplify a lot of test scripts.\n\n * A lot of stale stuff has been removed from the contrib/ hierarchy.\n\n * \"git push\" and \"git fetch\" are taught to update refs in batches to\n   gain performance.\n\n * Some code paths in \"git prune\" used to ignore the passed-in\n   repository object and used the `the_repository` singleton instance\n   instead, which has been corrected.\n\n * Update \".clang-format\" and \".editorconfig\" to match our style guide\n   a bit better.\n\n * \"make coccicheck\" succeeds even when spatch made suggestions, which\n   has been updated to fail in such a case.\n\n * Code clean-up around object access API.\n\n * Define .precision to more canned parse-options type to avoid bugs\n   coming from using a variable with a wrong type to capture the\n   parsed values.\n\n * Flipping the default hash function to SHA-256 at Git 3.0 boundary\n   is planned.\n\n * Declare weather-balloon we raised for \"bool\" type 18 months ago a\n   success and officially allow using the type in our codebase.\n\n * GIT_TEST_INSTALLED was not honored in the recent topic related to\n   SHA256 hashes, which has been corrected.\n\n * The pop_most_recent_commit() function can have quite expensive\n   worst case performance characteristics, which has been optimized by\n   using prio-queue data structure.\n\n * Move structure definition from unrelated header file to where it\n   belongs.\n\n * To help our developers, document what C99 language features are\n   being considered for adoption, in addition to what past experiments\n   have already decided.\n\n * The reftable unit tests are now ported to the \"clar\" unit testing\n   framework.\n\n * Redefine where the multi-pack-index sits in the object subsystem,\n   which recently was restructured to allow multiple backends that\n   support a single object source that belongs to one repository.  A\n   MIDX does span multiple \"object sources\".\n\n * Reduce implicit assumption and dependence on the_repository in the\n   object-file subsystem.\n\n\nFixes since v2.50\n-----------------\n\nUnless otherwise noted, all the changes in 2.50.X maintenance track,\nincluding security updates, are included in this release.\n\n * A memory-leak in an error code path has been plugged.\n   (merge 7082da85cb ly/commit-graph-graph-write-leakfix later to maint).\n\n * A memory-leak in an error code path has been plugged.\n   (merge aedebdb6b9 ly/fetch-pack-leakfix later to maint).\n\n * Some leftover references to documentation source files that no\n   longer exist, due to recent \".txt\" -> \".adoc\" renaming, have been\n   corrected.\n   (merge 3717a5775a jw/doc-txt-to-adoc-refs later to maint).\n\n * \"git stash -p <pathspec>\" improvements.\n   (merge 468817bab2 pw/stash-p-pathspec-fixes later to maint).\n\n * \"git send-email\" incremented its internal message counter when a\n   message was edited, which made logic that treats the first message\n   specially misbehave, which has been corrected.\n   (merge 2cc27b3501 ag/send-email-edit-threading-fix later to maint).\n\n * \"git stash\" recorded a wrong branch name when submodules are\n   present in the current checkout, which has been corrected.\n   (merge ffb36c64f2 kj/stash-onbranch-submodule-fix later to maint).\n\n * When asking to apply mailmap to both author and committer field\n   while showing a commit object, the field that appears later was not\n   correctly parsed and replaced, which has been corrected.\n   (merge abf94a283f sa/multi-mailmap-fix later to maint).\n\n * \"git maintenance\" lacked the care \"git gc\" had to avoid holding\n   onto the repository lock for too long during packing refs, which\n   has been remedied.\n   (merge 1b5074e614 ps/maintenance-ref-lock later to maint).\n\n * Avoid regexp_constraint and instead use comparison_constraint when\n   listing functions to exclude from application of coccinelle rules,\n   as spatch can be built with different regexp engine X-<.\n   (merge f2ad545813 jc/cocci-avoid-regexp-constraint later to maint).\n\n * Updating submodules from the upstream did not work well when\n   submodule's HEAD is detached, which has been improved.\n   (merge ca62f524c1 jk/submodule-remote-lookup-cleanup later to maint).\n\n * Remove unnecessary check from \"git daemon\" code.\n   (merge 0c856224d2 cb/daemon-fd-check-fix later to maint).\n\n * Use of sysctl() system call to learn the total RAM size used on\n   BSDs has been corrected.\n   (merge 781c1cf571 cb/total-ram-bsd-fix later to maint).\n\n * Drop FreeBSD 4 support and declare that we support only FreeBSD 12\n   or later, which has memmem() supported.\n   (merge 0392f976a7 bs/config-mak-freebsd later to maint).\n\n * A diff-filter with negative-only specification like \"git log\n   --diff-filter=d\" did not trigger correctly, which has been fixed.\n   (merge 375ac087c5 jk/all-negative-diff-filter-fix later to maint).\n\n * A failure to open the index file for writing due to conflicting\n   access did not state what went wrong, which has been corrected.\n   (merge 9455397a5c hy/read-cache-lock-error-fix later to maint).\n\n * Tempfile removal fix in the codepath to sign commits with SSH keys.\n   (merge 4498127b04 re/ssh-sign-buffer-fix later to maint).\n\n * Code and test clean-up around string-list API.\n   (merge 6e5b26c3ff sj/string-list later to maint).\n\n * \"git apply -N\" should start from the current index and register\n   only new files, but it instead started from an empty index, which\n   has been corrected.\n   (merge 2b49d97fcb rp/apply-intent-to-add-fix later to maint).\n\n * Leakfix with a new and a bit invasive test on pack-bitmap files.\n   (merge bfd5522e98 ly/load-bitmap-leakfix later to maint).\n\n * \"git fetch --prune\" used to be O(n^2) expensive when there are many\n   refs, which has been corrected.\n   (merge 87d8d8c5d0 ph/fetch-prune-optim later to maint).\n\n * When a ref creation at refs/heads/foo/bar fails, the files backend\n   now removes refs/heads/foo/ if the directory is otherwise not used.\n   (merge a3a7f20516 ps/refs-files-remove-empty-parent later to maint).\n\n * \"pack-objects\" has been taught to avoid pointing into objects in\n   cruft packs from midx.\n\n * \"git remote\" now detects remote names that overlap with each other\n   (e.g., remote nickname \"outer\" and \"outer/inner\" are used at the\n   same time), as it will lead to overlapping remote-tracking\n   branches.\n   (merge a5a727c448 jk/remote-avoid-overlapping-names later to maint).\n\n * The gpg.program configuration variable, which names a pathname to\n   the (custom) GPG compatible program, can now be spelled with ~tilde\n   expansion.\n   (merge 7d275cd5c0 jb/gpg-program-variable-is-a-pathname later to maint).\n\n * Our <sane-ctype.h> header file relied on that the system-supplied\n   <ctype.h> header is not later included, which would override our\n   macro definitions, but \"amazon linux\" broke this assumption.  Fix\n   this by preemptively including <ctype.h> near the beginning of\n   <sane-ctype.h> ourselves.\n   (merge 9d3b33125f ps/sane-ctype-workaround later to maint).\n\n * Clean-up compat/bswap.h mess.\n   (merge f4ac32c03a ss/compat-bswap-revamp later to maint).\n\n * Meson-based build did not handle libexecdir setting correctly,\n   which has been corrected.\n   (merge 056dbe8612 rj/meson-libexecdir-fix later to maint).\n\n * Document that we do not require \"real\" name when signing your\n   patches off.\n   (merge 1f0fed312a bc/contribution-under-non-real-names later to maint).\n\n * \"git commit\" that concludes a conflicted merge failed to notice and remove\n   existing comment added automatically (like \"# Conflicts:\") when the\n   core.commentstring is set to 'auto'.\n   (merge 92b7c7c9f5 ac/auto-comment-char-fix later to maint).\n\n * \"git rebase -i\" with bogus rebase.instructionFormat configuration\n   failed to produce the todo file after recording the state files,\n   leading to confused \"git status\"; this has been corrected.\n   (merge ade14bffd7 ow/rebase-verify-insn-fmt-before-initializing-state later to maint).\n\n * A few file descriptors left unclosed upon program completion in a\n   few test helper programs are now closed.\n   (merge 0f1b33815b hl/test-helper-fd-close later to maint).\n\n * Interactive prompt code did not correctly strip CRLF from the end\n   of line on Windows.\n   (merge 711a20827b js/prompt-crlf-fix later to maint).\n\n * The config API had a set of convenience wrapper functions that\n   implicitly use the_repository instance; they have been removed and\n   inlined at the calling sites.\n\n * \"git add/etc -p\" now honor the diff.context configuration variable,\n   and also they learn to honor the -U<n> command-line option.\n   (merge 2b3ae04011 lm/add-p-context later to maint).\n\n * The case where a new submodule takes a path where there used to be a\n   completely different subproject is now dealt with a bit better than\n   before.\n   (merge 5ed8c5b465 kj/renamed-submodule later to maint).\n\n * The deflate codepath in \"git archive --format=zip\" had a\n   longstanding bug coming from misuse of zlib API, which has been\n   corrected.\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge b257adb571 lo/my-first-ow-doc-update later to maint).\n   (merge 8b34b6a220 ly/sequencer-update-squash-is-fixup-only later to maint).\n   (merge 5dceb8bd05 ly/do-not-localize-bug-messages later to maint).\n   (merge 61372dd613 ly/commit-buffer-reencode-leakfix later to maint).\n   (merge 81cd1eef7d ly/pack-bitmap-root-leakfix later to maint).\n   (merge bfc9f9cc64 ly/submodule-update-failure-leakfix later to maint).\n   (merge 65dff89c6b ma/doc-diff-cc-headers later to maint).\n   (merge efb61591ee jm/bundle-uri-debug-output-to-fp later to maint).\n   (merge a3d278bb64 ly/prepare-show-merge-leakfix later to maint).\n   (merge 1fde1c5daf ac/preload-index-wo-the-repository later to maint).\n   (merge 855cfc65ae rm/t2400-modernize later to maint).\n   (merge 2939494284 ly/run-builtin-use-passed-in-repo later to maint).\n   (merge ff73f375bb jg/mailinfo-leakfix later to maint).\n   (merge 996f14c02b jj/doc-branch-markup-fix later to maint).\n   (merge 1e77de1864 cb/ci-freebsd-update-to-14.3 later to maint).\n   (merge b0e9d25865 jk/fix-leak-send-pack later to maint).\n   (merge f3a9558c8c bs/remote-helpers-doc-markup-fix later to maint).\n   (merge c4e9775c60 kh/doc-config-subcommands later to maint).\n   (merge de404249ab ps/perlless-test-fixes later to maint).\n   (merge 953049eed8 ts/merge-orig-head-doc-fix later to maint).\n   (merge 0c83bbc704 rj/freebsd-sysinfo-build-fix later to maint).\n   (merge ad7780b38f ps/doc-pack-refs-auto-with-files-backend-fix later to maint).\n   (merge f4fa8a3687 rh/doc-glob-pathspec-fix later to maint).\n   (merge b27be108c8 ja/doc-git-log-markup later to maint).\n   (merge 14d7583beb pw/config-kvi-remove-path later to maint).\n   (merge f31abb421d jc/do-not-scan-argv-without-parsing later to maint).\n   (merge 26552cb62a jk/unleak-reflog-expire-entry later to maint).\n   (merge 339d95fda9 jc/ci-print-test-failures-fix later to maint).\n   (merge 8c3add51a8 cb/meson-avoid-broken-macos-pcre2 later to maint).\n   (merge 5247da07b8 ps/meson-clar-decls-fix later to maint).\n   (merge f3ef347bb2 ch/t7450-recursive-clone-test-fix later to maint).\n   (merge 4ac3302a1a jc/doc-release-vs-clear later to maint).\n   (merge 3bdd897413 ms/meson-with-ancient-git-wo-ls-files-dedup later to maint).\n   (merge cca758d324 kh/doc-fast-import-historical later to maint).\n   (merge 9b0781196a jc/test-hashmap-is-still-here later to maint).\n   (merge 1bad05bacc jk/revert-squelch-compiler-warning later to maint).\n   (merge 3a7e783d9c dl/squelch-maybe-uninitialized later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.50.1 are as follows:\n\nAditya Garg (22):\n      docs: add credential helper for yahoo and link Google's sendgmail tool\n      docs: improve formatting in git-send-email documentation\n      docs: remove credential helper links for emails from gitcredentials\n      docs: make the purpose of using app password for Gmail more clear in send-email\n      send-email: fix bug resulting in broken threads if a message is edited\n      send-email: show the new message id assigned by outlook in the logs\n      imap-send: fix bug causing cfg->folder being set to NULL\n      imap-send: fix memory leak in case auth_cram_md5 fails\n      imap-send: gracefully fail if CRAM-MD5 authentication is requested without OpenSSL\n      imap-send: add support for OAuth2.0 authentication\n      imap-send: add PLAIN authentication method to OpenSSL\n      imap-send: enable specifying the folder using the command line\n      imap-send: add ability to list the available folders\n      imap-send: display port alongwith host when git credential is invoked\n      imap-send: display the destination mailbox when sending a message\n      imap-send: fix minor mistakes in the logs\n      docs: link OpenSSL's verify(1) manual page to know about -CAfile and -CApath options\n      docs: add outlookidfix config option to sendemail documentation\n      docs: add an OAuth2.0 credential helper for AOL accounts\n      docs: add a paragraph explaining the `sendmailCmd` option of sendemail\n      docs: mention possible options for Proton Mail users\n      docs: explain how to use `git imap-send --list` command to get a list of available folders\n\nAlexander Shopov (6):\n      git-gui i18n: Updated Bulgarian translation (578t)\n      gitk i18n: Update Bulgarian translation (322t)\n      gitk i18n: Remove the locations within the Bulgarian translation\n      git-gui i18n: Update Bulgarian translation (557t)\n      git-gui i18n: Remove the locations within the Bulgarian translation\n      l10n: bg.po: Updated Bulgarian translation (5856t)\n\nArkadii Yakovets (1):\n      l10n: uk: add 2.51 translation\n\nAyush Chandekar (6):\n      environment: remove the global variable 'core_preload_index'\n      preload-index: stop depending on 'the_repository'\n      repository: move 'repository_format_precious_objects' to repo scope\n      builtin/prune: stop depending on 'the_repository'\n      commit: avoid scanning trailing comments when 'core.commentChar' is \"auto\"\n      config: set comment_line_str to \"#\" when core.commentChar=auto\n\nBagas Sanjaya (1):\n      l10n: po-id for 2.51\n\nBrad Smith (1):\n      config.mak.uname: update settings for Solaris 10 and 11\n\nBrett A C Sheffield (1):\n      gitremote-helpers.adoc: fix formatting\n\nCarlo Marcelo Arenas Belón (14):\n      daemon: remove unnecesary restriction for listener fd\n      daemon: correctly handle soft accept() errors in service_loop\n      ci: update FreeBSD image to 14.3\n      config.mak.uname: set NO_MEMMEM only for functional version\n      build: retire NO_UINTMAX_T\n      builtin/gc: correct total_ram calculation with HAVE_BSD_SYSCTL\n      compat/mingw: allow sigaction(SIGCHLD)\n      daemon: use sigaction() to install child_handler()\n      meson: work around broken system PCRE2 dependency in macOS\n      git-gui: remove uname_O in Makefile\n      git-gui: fix dependency of GITGUI_MAIN on generator\n      git-gui: retire Git Gui.app\n      git-gui: honor TCLTK_PATH in git-gui--askpass\n      git-gui: ensure own version of git-gui--askpass is used\n\nChristian Couder (2):\n      fast-(import|export): improve on commit signature output format\n      t9350: redirect input to only fast-import\n\nCollin Funk (1):\n      CodingGuidelines: document formatting of similar config variables.\n\nDenton Liu (1):\n      t/unit-tests/clar: fix -Wmaybe-uninitialized with -Og\n\nDerrick Stolee (13):\n      pack-objects: extract should_attempt_deltas()\n      pack-objects: add --path-walk option\n      pack-objects: update usage to match docs\n      p5313: add performance tests for --path-walk\n      pack-objects: introduce GIT_TEST_PACK_PATH_WALK\n      t5538: add tests to confirm deltas in shallow pushes\n      repack: add --path-walk option\n      pack-objects: enable --path-walk via config\n      scalar: enable path-walk during push via config\n      pack-objects: refactor path-walk delta phase\n      pack-objects: thread the path-based compression\n      path-walk: add new 'edge_aggressive' option\n      pack-objects: allow --shallow and --path-walk\n\nEmir SARI (1):\n      l10n: tr: Update Turkish translations for 2.51.0\n\nHan Young (2):\n      read-cache: report lock error when refreshing index\n      blame: remove parameter detailed in get_commit_info()\n\nHoyoung Lee (1):\n      t/helper/test-truncate: close file descriptor after truncation\n\nIlya Grigoriev (1):\n      gitk: Mention globs in description of preference to hide custom refs\n\nJacob Keller (12):\n      pathspec: add match_leading_pathspec variant\n      pathspec: add flag to indicate operation without repository\n      diff --no-index: support limiting by pathspec\n      remote: remove branch->merge_name and fix branch_release()\n      remote: fix tear down of struct remote\n      dir: move starts_with_dot(_dot)_slash to dir.h\n      remote: remove the_repository from some functions\n      submodule--helper: improve logic for fallback remote name\n      submodule: move get_default_remote_submodule()\n      submodule: look up remotes by URL first\n      send-pack: clean up extra_have oid array\n      reflog: close leak of reflog expire entry\n\nJakub Ječmínek (1):\n      doc: improve formatting in branch section\n\nJan Mazur (1):\n      bundle-uri: send debug output to given FILE * stream\n\nJean-Noël Avila (10):\n      doc: convert git-log to new documentation format\n      doc: git-log convert rev-list-description to new doc format\n      doc: git-log: convert line range options to new doc format\n      doc: git-log: convert line range format to new doc format\n      doc: git-log: convert rev list options to new doc format\n      doc: git-log: convert pretty options to new doc format\n      doc: git-log: convert pretty formats to new doc format\n      doc: git-log: convert diff options to new doc format\n      doc: git-log: convert log config to new doc format\n      l10n: fr translation update for v2.51.0\n\nJeff King (11):\n      t7422: replace confusing printf with echo\n      test-lib: teach test_seq the -f option\n      setup_revisions(): turn on diffs for all-negative diff filter\n      remote: detect collisions in remote names\n      revision: drop early output option\n      test-delta: handle errors with die()\n      test-delta: use strbufs to hold input files\n      test-delta: close output descriptor after use\n      t7510: use $PWD instead of $(pwd) inside PATH\n      revert: initialize const value\n      remote: bail early from set_head() if missing remote name\n\nJinyao Guo (1):\n      mailinfo.c: fix memory leak in function handle_content_type()\n\nJohannes Schindelin (4):\n      mingw: drop Windows 7-specific work-around\n      mingw_rename: support ReFS on Windows 2022\n      mingw: support Windows Server 2016 again\n      cmake: accommodate for `UNIT_TEST_SOURCES`\n\nJohannes Sixt (5):\n      git-gui: do not end the commit message with an empty line\n      gitk: choosefont - remove a stray debugging line\n      gitk: remove header of now empty section \"General options\"\n      gitk: avoid duplicated upstream refs\n      interactive: do strip trailing CRLF from input\n\nJonas Brandstötter (2):\n      gpg-interface: expand gpg.program as a path\n      t7510: add test cases for non-absolute gpg program\n\nJouke Witteveen (1):\n      doc: update references to renamed AsciiDoc files\n\nJunio C Hamano (44):\n      you-still-use-that??: help deprecating commands for removal\n      doc: prepare for a world without whatchanged\n      tests: prepare for a world without whatchanged\n      whatchanged: require --i-still-use-this\n      whatchanged: remove when built with WITH_BREAKING_CHANGES\n      whatschanged: list it in BreakingChanges document\n      CodingGuidelines: let BSS do its job\n      merge/pull: add the \"--compact-summary\" option\n      merge/pull: extend merge.stat configuration variable to cover --compact-summary\n      Start 2.51 cycle, the first batch\n      diff-no-index: do not reference .d_type member of struct dirent\n      The second batch\n      cocci: matching (multiple) identifiers\n      coccicheck: fail \"make\" when it fails\n      The third batch\n      The fourth batch\n      The fifth batch\n      send-pack: clean-up even when taking an early exit\n      The sixth batch\n      The seventh batch\n      The eighth batch\n      The ninth batch\n      The tenth batch\n      The eleventh batch\n      ci: allow github-actions print test failures again\n      The twelfth batch\n      rev-list: make \"struct rev_list_info\" static to the only user\n      rev-list: update a NEEDSWORK comment\n      The thirteenth batch\n      CodingGuidelines: document test balloons in flight\n      fixup! submodule: prevent overwriting .gitmodules on path reuse\n      fixup! submodule: skip redundant active entries when pattern covers path\n      The fourteenth batch\n      The fifteenth batch\n      test-hashmap: document why it is no longer used but still there\n      CodingGuidelines: clarify that S_release() does not reinitialize\n      The sixteenth batch\n      The seventeenth batch, just before -rc0\n      Git 2.51-rc0\n      A bit more after -rc0\n      Git 2.51-rc1\n      A few hotfixes before -rc2\n      Git 2.51-rc2\n      Git 2.51\n\nJustin Tobler (2):\n      builtin: unmark git-switch and git-restore as experimental\n      archive: flush deflate stream until Z_STREAM_END\n\nJörg Thalheim (2):\n      imap-send: fix confusing 'store' terminology in error message\n      imap-send: improve error messages with configuration hints\n\nK Jayatheerth (3):\n      stash: fix incorrect branch name in stash message\n      submodule: prevent overwriting .gitmodules on path reuse\n      submodule: skip redundant active entries when pattern covers path\n\nKarthik Nayak (20):\n      refs: add function to translate errors to strings\n      fetch: use batched reference updates\n      send-pack: fix memory leak around duplicate refs\n      receive-pack: use batched reference updates\n      refs/files: skip updates with errors in batched updates\n      receive-pack: handle reference deletions separately\n      clang-format: set 'ColumnLimit' to 0\n      clang-format: add 'RemoveBracesLLVM' to the main config\n      meson: add rule to run 'git clang-format'\n      refs: expose `ref_iterator` via 'refs.h'\n      ref-cache: remove unused function 'find_ref_entry()'\n      refs: selectively set prefix in the seek functions\n      ref-filter: remove unnecessary else clause\n      for-each-ref: introduce a '--start-after' option\n      ref-cache: set prefix_state when seeking\n      ref-cache: use 'size_t' instead of int for length\n      for-each-ref: fix documentation argument ordering\n      for-each-ref: reword the documentation for '--start-after'\n      t6302: add test combining '--start-after' with '--exclude'\n      ref-filter: use REF_ITERATOR_SEEK_SET_PREFIX instead of '1'\n\nKristoffer Haugsbakk (6):\n      config: document --[no-]show-names\n      config: use --value=<pattern> consistently\n      config: document --[no-]value\n      config: use --value instead of value-pattern\n      config: mention --url in the synopsis\n      doc: fast-import: contextualize the hardware cost\n\nKyle Lippincott (1):\n      test-lib: respect GIT_TEST_INSTALLED when querying default hash\n\nLeon Michalak (4):\n      t: use test_grep in t3701 and t4055\n      t: use test_config in t4055\n      add-patch: respect diff.context configuration\n      add-patch: add diff.context command line overrides\n\nLidong Yan (17):\n      sequencer: replace error() with BUG() in update_squash_messages ()\n      BUG(): remove leading underscore of the format string\n      builtin/fetch-pack: cleanup before return error\n      commit-graph: fix start_delayed_progress() leak\n      repo_logmsg_reencode: fix memory leak when use repo_logmsg_reencode ()\n      builtin/submodule--helper: fix leak when remote_submodule_branch() failed\n      pack-bitmap: remove checks before bitmap_free\n      revision: fix memory leak in prepare_show_merge()\n      git.c: remove the_repository dependence in run_builtin()\n      pack-bitmap: reword comments in test_bitmap_commits()\n      pack-bitmap: add load corrupt bitmap test\n      bloom: add test helper to return murmur3 hash\n      bloom: rename function operates on bloom_key\n      bloom: replace struct bloom_key * with struct bloom_keyvec\n      revision: make helper for pathspec to bloom keyvec\n      bloom: optimize multiple pathspec items in revision\n      pull: add pull.autoStash config option\n\nLucas Seiki Oshiro (2):\n      MyFirstContribution: use struct repository in examples\n      MyFirstContribution: add walken.c to meson.build\n\nMark Levedahl (58):\n      gitk: require git >= 2.20\n      gitk: remove code targeting git <= 1.7.2\n      gitk: Make TclTk 8.6 the minimum, allow 8.7\n      gitk: remove implementations for Tcl/Tk < 8.6\n      gitk: use $config_variables as list for save/restore\n      gitk: always use themed Tk (ttk)\n      gitk: replace ${NS} with ttk\n      gitk: remove non-ttk support code\n      gitk: separate x11 / win32 / aqua Mouse bindings\n      gitk: wheel scrolling multiplier preference\n      gitk: mousewheel scrolling functions for Tk 8.6\n      gitk: update win32 scrolling for Tk 8.6 / TIP 171\n      gitk: update x11 scrolling for TclTk 8.6 / TIP 171\n      gitk: update aqua scrolling for TclTk 8.6 / TIP171\n      gitk: set config dialog color swatches in one place\n      gitk: allow horizontal commit-graph scrolling\n      gitk: restore ui colors after cancelling config dialog\n      gitk: update scrolling for TclTk 8.7+ / TIP 474\n      gitk: switch to -translation binary\n      gitk: Tcl9 doesn't expand ~, use $env(HOME)\n      gitk: use -profile tcl8 for file input with Tcl 9\n      gitk: use -profile tcl8 on encoding conversions\n      gitk: allow Tcl/Tk 9.0+\n      git-gui: require git >= 2.36\n      git-gui: Make TclTk 8.6 the minimum, allow 8.7\n      git-gui: git ls-files knows --exclude-standard\n      git-gui: git-diff-index always knows submodules\n      git-gui: use git-branch --show-current\n      git-gui: git rev-parse knows show_toplevel\n      git-gui: git-blame understands -w and textconv\n      git-gui: git-diff knows submodules and textconv\n      git-gui: git merge understands --strategy=recursive\n      git-gui: git-remote is always available\n      git-gui: use git_init to create new repository dir\n      git-gui: remove unused git-version\n      git-gui: remove unreachable Tk 8.4 code\n      git-gui: remove redundant check for Tk >= 8.5\n      git-gui: always use themed widgets from ttk\n      git-gui: remove ${NS} indirection for ttk\n      git-gui: do not add directories to PATH on Windows\n      git-gui: let nice work on Windows\n      git-gui: Windows tk_getSaveFile is not useful for shortcuts\n      git-gui: remove non-ttk code\n      git-gui: use git-clone\n      git-gui: default to full copy for linked worktrees\n      git-gui: use dashless 'git cmd' form for read/write\n      git-gui: remove procs gitexec and _git_cmd\n      git-gui: eliminate _search_exe\n      git-gui: use /cmd/git-gui.exe for shortcut\n      git-gui: assure -eofchar {} on all channels\n      git-gui: translation binary defines iso8859-1\n      git-gui: replace encoding binary with iso8859-1\n      git-gui: do not mix -translation binary and -encoding\n      git-gui: remove EOL translation for gets\n      git-gui: themed.tcl: use full namespace for color\n      git-gui: use -profile tcl8 for file input with Tcl 9\n      git-gui: use -profile tcl8 on encoding conversions\n      git-gui: Allow Tcl 9.0\n\nMartin Storsjö (1):\n      meson: tolerate errors from git ls-files --deduplicate\n\nMartin Ågren (1):\n      diff-generate-patch.adoc: drop spurious backticks\n\nMatthias Aßhauer (1):\n      mingw_open_existing: handle directories better\n\nMaxim Cournoyer (3):\n      contrib: use a more portable shebang for git-credential-netrc\n      contrib: warn for invalid netrc file ports in git-credential-netrc\n      contrib: better support symbolic port names in git-credential-netrc\n\nMichael Rappazzo (4):\n      gitk: sort by ref type on the 'tags and heads' view\n      gitk: make 'sort-refs-by-type' optional and persistent\n      gitk: separate upstream refs when using the sort-by-type option\n      gitk: filter invisible upstream refs from reference list\n\nMikel Forcada (1):\n      l10n: Update Catalan Translation for Git 2.51-rc2\n\nOrgad Shaneh (1):\n      git-gui: strip the commit message after running commit-msg hook\n\nOri Avtalion (1):\n      gitk: Add user preference to hide specific references\n\nPatrick Steinhardt (111):\n      contrib: remove \"remotes2config.sh\"\n      contrib: remove \"examples\" directory\n      contrib: remove remote-helper stubs\n      contrib: remove \"thunderbird-patch-inline\"\n      contrib: remove \"hooks\" directory\n      contrib: remove \"mw-to-git\"\n      contrib: remove \"persistent-https\" remote helper\n      contrib: remove \"git-resurrect.sh\"\n      contrib: remove \"emacs\" directory\n      contrib: remove \"git-new-workdir\"\n      contrib: remove some scripts in \"stats\" directory\n      t: stop announcing prereqs\n      t: silence output from `test_create_repo()`\n      t9822: use prereq to check for ISO-8859-1 support\n      t983*: use prereq to check for Python-specific git-p4(1) support\n      t/test-lib: don't print shell traces to stdout\n      t/test-lib: fix TAP format for BASH_XTRACEFD warning\n      t7815: fix unexpectedly passing test on macOS\n      test-lib: fail on unexpectedly passing tests\n      meson: introduce kwargs variable for tests\n      meson: parse TAP output generated by our tests\n      builtin/gc: use designated field initializers for maintenance tasks\n      builtin/gc: drop redundant local variable\n      builtin/maintenance: centralize configuration of explicit tasks\n      builtin/maintenance: mark \"--task=\" and \"--schedule=\" as incompatible\n      builtin/maintenance: stop modifying global array of tasks\n      builtin/maintenance: extract function to run tasks\n      builtin/maintenance: fix typedef for function pointers\n      builtin/maintenance: split into foreground and background tasks\n      builtin/maintenance: fix locking race with refs and reflogs tasks\n      usage: allow dying without writing an error message\n      builtin/gc: avoid global state in `gc_before_repack()`\n      builtin/maintenance: fix locking race when handling \"gc\" task\n      object-store: rename `raw_object_store` to `object_database`\n      object-store: rename `object_directory` to `odb_source`\n      object-store: rename files to \"odb.{c,h}\"\n      odb: introduce parent pointers\n      odb: get rid of `the_repository` in `find_odb()`\n      odb: get rid of `the_repository` in `assert_oid_type()`\n      odb: get rid of `the_repository` in `odb_mkstemp()`\n      odb: get rid of `the_repository` when handling alternates\n      odb: get rid of `the_repository` in `for_each()` functions\n      odb: get rid of `the_repository` when handling the primary source\n      odb: get rid of `the_repository` when handling submodule sources\n      odb: trivial refactorings to get rid of `the_repository`\n      odb: rename `oid_object_info()`\n      odb: rename `repo_read_object_file()`\n      odb: rename `has_object()`\n      odb: rename `pretend_object_file()`\n      odb: rename `read_object_with_reference()`\n      BreakingChanges: announce switch to \"reftable\" format\n      setup: use \"reftable\" format when experimental features are enabled\n      t4150: fix warning printed by awk due to escaped '\\@'\n      t5333: fix missing terminator for sed(1) 's' command\n      docs/git-pack-refs: document heuristic used for packing loose refs\n      refs/files: remove empty parent dirs when ref creation fails\n      t1006: fix broken TAP format\n      meson: stop discovering native version of Python\n      meson: stop printing 'https' option twice in our summaries\n      meson: improve summary of auto-detected features\n      meson: clean up unnecessary variables\n      meson: fix lookup of shell on MINGW64\n      sane-ctype: fix compiler error on Amazon Linux 2\n      meson: update subproject wrappers\n      ci: use Meson's new `--slice` option\n      midx: start tracking per object database source\n      packfile: refactor `prepare_packed_git_one()` to work on sources\n      midx: stop using linked list when closing MIDX\n      packfile: refactor `get_multi_pack_index()` to work on sources\n      packfile: stop using linked MIDX list in `find_pack_entry()`\n      packfile: stop using linked MIDX list in `get_all_packs()`\n      midx: remove now-unused linked list of multi-pack indices\n      object-file: fix -Wsign-compare warnings\n      object-file: stop using `the_hash_algo`\n      object-file: get rid of `the_repository` in `has_loose_object()`\n      object-file: inline `check_and_freshen()` functions\n      object-file: get rid of `the_repository` when freshening objects\n      object-file: get rid of `the_repository` in `loose_object_info()`\n      object-file: get rid of `the_repository` in `finalize_object_file()`\n      loose: write loose objects map via their source\n      odb: introduce `odb_write_object()`\n      object-file: get rid of `the_repository` when writing objects\n      object-file: inline `for_each_loose_file_in_objdir_buf()`\n      object-file: remove declaration for `for_each_file_in_obj_subdir()`\n      object-file: get rid of `the_repository` in loose object iterators\n      object-file: get rid of `the_repository` in `read_loose_object()`\n      object-file: get rid of `the_repository` in `force_object_loose()`\n      object-file: get rid of `the_repository` in index-related functions\n      config: drop `git_config()` wrapper\n      config: drop `git_config_clear()` wrapper\n      config: drop `git_config_get()` wrapper\n      config: drop `git_config_get_value()` wrapper\n      config: drop `git_config_get_value()` wrapper\n      config: drop `git_config_get_string_multi()` wrapper\n      config: drop `git_config_get_string()` wrapper\n      config: drop `git_config_get_string()` wrapper\n      config: drop `git_config_get_int()` wrapper\n      config: drop `git_config_get_ulong()` wrapper\n      config: drop `git_config_get_bool()` wrapper\n      config: drop `git_config_set_in_file()` wrapper\n      config: drop `git_config_set_gently()` wrapper\n      config: drop `git_config_set()` wrapper\n      config: drop `git_config_set_in_file_gently()` wrapper\n      config: drop `git_config_set_multivar_in_file_gently()` wrapper\n      config: drop `git_config_get_multivar_gently()` wrapper\n      config: drop `git_config_set_multivar()` wrapper\n      config: remove unused `the_repository` wrappers\n      config: move Git config parsing into \"environment.c\"\n      config: fix sign comparison warnings\n      meson: ensure correct \"clar-decls.h\" header is used\n      Documentation/RelNotes/2.51.0: improve wording for a couple entries\n\nPatrik Weiskircher (2):\n      contrib/subtree: parse using --stuck-long\n      contrib/subtree: add -S/--gpg-sign\n\nPeter Krefting (1):\n      l10n: sv.po: Update Swedish translation\n\nPhil Hord (3):\n      fetch-prune: optimize dangling-ref reporting\n      refs: remove old refs_warn_dangling_symref\n      clean up interface for refs_warn_dangling_symrefs\n\nPhillip Wood (6):\n      stash: allow \"git stash -p <pathspec>\" to assume push again\n      stash: allow \"git stash [<options>] --patch <pathspec>\" to assume push\n      config: remove unneeded struct field\n      CodingGuidelines: allow the use of bool\n      git-compat-util: convert string predicates to return bool\n      strbuf: convert predicates to return bool\n\nRamsay Jones (4):\n      test-lib: add missing prerequisites for Darwin\n      build: fix FreeBSD build when sysinfo compat library installed\n      meson: fix installation when -Dlibexexdir is set\n      po/meson.build: add missing 'ga' language code\n\nRaymond E. Pasco (4):\n      apply: read in the index in --intent-to-add mode\n      apply: only write intents to add for new files\n      t4140: test apply --intent-to-add interactions\n      apply docs: clarify wording for --intent-to-add\n\nRené Scharfe (13):\n      parse-options: require PARSE_OPT_NOARG for OPTION_BITOP\n      parse-options: add precision handling for PARSE_OPT_CMDMODE\n      parse-options: add precision handling for OPTION_SET_INT\n      parse-options: add precision handling for OPTION_BIT\n      parse-options: add precision handling for OPTION_NEGBIT\n      parse-options: add precision handling for OPTION_BITOP\n      parse-options: add precision handling for OPTION_COUNTUP\n      commit: convert pop_most_recent_commit() to prio_queue\n      prio-queue: add prio_queue_replace()\n      commit: use prio_queue_replace() in pop_most_recent_commit()\n      git: show alias info only with lone -h\n      for-each-ref: call --start-after argument \"marker\"\n      merge: don't document non-existing --compact-summary argument\n\nRodrigo Carvalho (1):\n      userdiff: add support for R programming language\n\nRodrigo Michelassi (1):\n      t2400: replace 'test -[efd]' with 'test_path_is_*'\n\nRussell Hanneken (1):\n      doc: correct doc for glob pathspec\n\nSebastian Andrzej Siewior (5):\n      bswap.h: add support for __BYTE_ORDER__\n      bswap.h: define GIT_LITTLE_ENDIAN on msvc as little endian\n      bswap.h: always overwrite ntohl/ ntohll macros\n      bswap.h: remove optimized x86 version of bswap32/64\n      bswap.h: provide a built-in based version of bswap32/64 if possible\n\nSeyi Kuforiji (10):\n      t/unit-tests: implement clar specific reftable test helper functions\n      t/unit-tests: convert reftable basics test to use clar test framework\n      t/unit-tests: convert reftable block test to use clar\n      t/unit-tests: convert reftable merged test to use clar\n      t/unit-tests: convert reftable pq test to use clar\n      t/unit-tests: convert reftable table test to use clar\n      t/unit-tests: convert reftable readwrite test to use clar\n      t/unit-tests: convert reftable record test to use clar\n      t/unit-tests: convert reftable stack test to use clar\n      t/unit-tests: finalize migration of reftable-related tests\n\nSiddharth Asthana (1):\n      cat-file: fix mailmap application for different author and committer\n\nTakashi Iwai (3):\n      gitk: Add support of SHA256 repositories\n      git-gui: Replace null_sha1 with nullid\n      git-gui: Add support of SHA256 repo\n\nTaylor Blau (11):\n      pack-objects: use standard option incompatibility functions\n      pack-objects: limit scope in 'add_object_entry_from_pack()'\n      pack-objects: factor out handling '--stdin-packs'\n      pack-objects: declare 'rev_info' for '--stdin-packs' earlier\n      pack-objects: perform name-hash traversal for unpacked objects\n      pack-objects: fix typo in 'show_object_pack_hint()'\n      pack-objects: swap 'show_{object,commit}_pack_hint'\n      pack-objects: introduce '--stdin-packs=follow'\n      repack: exclude cruft pack(s) from the MIDX where possible\n      pack-bitmap: fix memory leak if load_bitmap() failed\n      Documentation/RelNotes: use .adoc extension for new security releases\n\nTeng Long (1):\n      l10n: zh_CN: updated translation for 2.51\n\nTimur Sultanaev (1):\n      docs: correct ORIG_HEAD example in \"git merge\" documentation\n\nTodd Zullinger (1):\n      t: avoid git config syntax from newer releases\n\nVictoria Dye (3):\n      t1006: update 'run_tests' to test generic object specifiers\n      cat-file: add %(objectmode) atom\n      cat-file.c: add batch handling for submodules\n\nVũ Tiến Hưng (1):\n      l10n: Updated translation for vi-2.51\n\nYi-Jyun Pan (1):\n      l10n: zh_TW: Git 2.51\n\nbrian m. carlson (16):\n      object-name: make get_oid quietly return an error\n      builtin/stash: factor out revision parsing into a function\n      builtin/stash: provide a way to export stashes to a ref\n      builtin/stash: provide a way to import stashes from a ref\n      hash: add a constant for the default hash algorithm\n      hash: add a constant for the legacy hash algorithm\n      builtin: use default hash when outside a repository\n      Use legacy hash for legacy formats\n      setup: use the default algorithm to initialize repo format\n      t: default to compile-time default hash if not set\n      t1007: choose the built-in hash outside of a repo\n      t4042: choose the built-in hash outside of a repo\n      t5300: choose the built-in hash outside of a repo\n      help: add a build option for default hash\n      Enable SHA-256 by default in breaking changes mode\n      SubmittingPatches: allow non-real name contributions\n\nchenjianhu (1):\n      t7450: inspect the correct path a broken code would write to\n\nredoste (1):\n      ssh signing: don't detach the filename strbuf from key_file tempfile\n\nshejialuo (8):\n      string-list: fix sign compare warnings for loop iterator\n      string-list: remove unused \"insert_at\" parameter from add_entry\n      string-list: return index directly when inserting an existing element\n      string-list: enable sign compare warnings check\n      u-string-list: move \"test_split\" into \"u-string-list.c\"\n      u-string-list: move \"test_split_in_place\" to \"u-string-list.c\"\n      u-string-list: move \"filter string\" test to \"u-string-list.c\"\n      u-string-list: move \"remove duplicates\" test to \"u-string-list.c\"\n\nØystein Walle (1):\n      rebase: write script before initializing state\n\n"}]}