{"thread":{"id":"64814","subject":"[ANNOUNCE] Git v2.53.0-rc0","startedAt":"2026-01-15T17:35:48Z","lastAt":"2026-01-15T17:35:48Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"533975","messageId":"xmqqv7h2bwy6.fsf@gitster.g","threadId":"64814","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.53.0-rc0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-01-15T17:35:45Z","receivedAt":"2026-01-15T17:35:48Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"An early preview release Git v2.53.0-rc0 is now available for\ntesting at the usual places.  It is comprised of 329 non-merge\ncommits since v2.52.0, contributed by 52 people, 15 of which are\nnew 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.53.0-rc0' 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.52.0 are as follows.\nWelcome to the Git development community!\n\n  Adrian Ratiu, Ben Stav, correctmost, David Bohman, David Macek,\n  Deveshi Dwivedi, Greg Funni, Jean-Noël Avila via GitGitGadget,\n  Paul Tarjan, Paul Wintz, Petter Sælen, Pushkar Singh, Sam\n  Bostock, Yee Cheng Chin, and Zhelyo Zhelev.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Aaron Plattner, Anders Kaseorg, Antonin Delpeuch, brian\n  m. carlson, Carlo Marcelo Arenas Belón, Christian Couder,\n  D. Ben Knoble, Derrick Stolee, Elijah Newren, Emily Shaffer,\n  Eric Sunshine, Ezekiel Newren, Han Jiang, Jean-Noël Avila,\n  Jeff King, Jiang Xin, Johannes Schindelin, Johannes Sixt,\n  Julia Evans, Junio C Hamano, Justin Tobler, Karthik Nayak, K\n  Jayatheerth, Koji Nakamaru, Kristoffer Haugsbakk, Lucas Seiki\n  Oshiro, Mark Levedahl, Matthew Hughes, Michael Rappazzo, Patrick\n  Steinhardt, Phillip Wood, Queen Ediri Jessa, René Scharfe,\n  Siddharth Asthana, Taylor Blau, Tobias Boesch, and Toon Claes.\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.53 Release Notes (draft)\n===============================\n\nUI, Workflows & Features\n------------------------\n\n * \"git maintenance\" command learned \"is-needed\" subcommand to tell if\n   it is necessary to perform various maintenance tasks.\n\n * \"git replay\" (experimental) learned to perform ref updates itself\n   in a transaction by default, instead of emitting where each refs\n   should point at and leaving the actual update to another command.\n\n * \"git blame\" learns \"--diff-algorithm=<algo>\" option.\n\n * \"git repo info\" learned \"--all\" option.\n\n * Both \"git apply\" and \"git diff\" learn a new whitespace error class,\n   \"incomplete-line\".\n\n * Add a new manual that describes the data model.\n\n * \"git fast-import\" learns \"--strip-if-invalid\" option to drop\n   invalid cryptographic signature from objects.\n\n * The use of \"revision\" (a connected set of commits) has been\n   clarified in the \"git replay\" documentation.\n\n * A help message from \"git branch\" now mentions \"git help\" instead of\n   \"man\" when suggesting to read some documentation.\n\n * \"git repo struct\" learned to take \"-z\" as a synonym to \"--format=nul\".\n\n * More object database related information are shown in \"git repo\n   structure\" output.\n\n * Improve the error message when a bad argument is given to the\n   `--onto` option of \"git replay\".  Test coverage of \"git replay\" has\n   been improved.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * The list of packfiles used in a running Git process is moved from\n   the packed_git structure into the packfile store.\n\n * Some ref backend storage can hold not just the object name of an\n   annotated tag, but the object name of the object the tag points at.\n   The code to handle this information has been streamlined.\n\n * As \"git diff --quiet\" only cares about the existence of any\n   changes, disable rename/copy detection to skip more expensive\n   processing whose result will be discarded anyway.\n\n * A part of code paths that deals with loose objects has been cleaned\n   up.\n\n * \"make strip\" has been taught to strip \"scalar\" as well as \"git\".\n\n * Dockerised jobs at the GitHub Actions CI have been taught to show\n   more details of failed tests.\n\n * Code refactoring around object database sources.\n\n * Halve the memory consumed by artificial filepairs created during\n   \"git diff --find-copioes-harder\", also making the operation run\n   faster.\n\n * The \"git_istream\" abstraction has been revamped to make it easier\n   to interface with pluggable object database design.\n\n * Rewrite the only use of \"mktemp()\" that is subject to TOCTOU race\n   and Stop using the insecure \"mktemp()\" function.\n   (merge 10bba537c4 rs/ban-mktemp later to maint).\n\n * In-code comment update to clarify that single-letter options are\n   outside of the scope of command line completion script.\n   (merge dc8a00fafe jc/completion-no-single-letter-options later to maint).\n\n * MEMZERO_ARRAY() helper is introduced to avoid clearing only the\n   first N bytes of an N-element array whose elements are larger than\n   a byte.\n\n * \"git diff-files -R --find-copies-harder\" has been taught to use\n   the potential copy sources from the index correctly.\n\n * Require C99 style flexible array member support from all platforms.\n\n * The code path that enumerates promisor objects have been optimized\n   to skip pointlessly parsing blob objects.\n\n * Prepare test suite for Git for Windows that supports symbolic\n   links.\n\n * Use hook API to replace ad-hoc invocation of hook scripts with the\n   run_command() API.\n\n * Import newer version of \"clar\", unit testing framework.\n   (merge 84071a6dea ps/clar-integers later to maint).\n\n\nFixes since v2.52\n-----------------\n\n * Ever since we added whitespace rules for this project, we misspelt\n   an entry, which has been corrected.\n   (merge 358e94dc70 jc/gitattributes-whitespace-no-indent-fix later to maint).\n\n * The code to expand attribute macros has been rewritten to avoid\n   recursion to avoid running out of stack space in an uncontrolled\n   way.\n   (merge 42ed046866 jk/attr-macroexpand-wo-recursion later to maint).\n\n * Adding a repository that uses a different hash function is a no-no,\n   but \"git submodule add\" did nt prevent it, which has been corrected.\n   (merge 6fe288bfbc bc/submodule-force-same-hash later to maint).\n\n * An earlier check added to osx keychain credential helper to avoid\n   storing the credential itself supplied was overeager and rejected\n   credential material supplied by other helper backends that it would\n   have wanted to store, which has been corrected.\n   (merge 4580bcd235 kn/osxkeychain-idempotent-store-fix later to maint).\n\n * The \"git repo structure\" subcommand tried to align its output but\n   mixed up byte count and display column width, which has been\n   corrected.\n   (merge 7a03a10a3a jx/repo-struct-utf8width-fix later to maint).\n\n * Yet another corner case fix around renames in the \"ort\" merge\n   strategy.\n   (merge a562d90a35 en/ort-rename-another-fix later to maint).\n\n * Test leakfix.\n   (merge 14b561e768 jk/test-mktemp-leakfix later to maint).\n\n * Update a version of action used at the GitHub Actrions CI.\n   (merge cd99203f86 js/ci-github-setup-go-update later to maint).\n\n * The \"return errno = EFOO, -1\" construct, which is heavily used in\n   compat/mingw.c and triggers warnings under \"-Wcomma\", has been\n   rewritten to avoid the warnings.\n   (merge af3919816f js/mingw-assign-comma-fix later to maint).\n\n * Makefile based build have recently been updated to build a\n   libgit.a that also has reftable and xdiff objects; CMake based\n   build procedure has been updated to match.\n   (merge b0d5c88cca js/cmake-libgit-fix later to maint).\n\n * Under-allocation fix.\n   (merge d22a488482 js/wincred-get-credential-alloc-fix later to maint).\n\n * \"git worktree list\" attempts to show paths to worktrees while\n   aligning them, but miscounted display columns for the paths when\n   non-ASCII characters were involved, which has been corrected.\n   (merge 08dfa59835 pw/worktree-list-display-width-fix later to maint).\n\n * \"Windows+meson\" job at the GitHub Actions CI was hard to debug, as\n   it did not show and save failed test artifacts, which has been\n   corrected.\n   (merge 17bd1108ea jk/ci-windows-meson-test-fix later to maint).\n\n * Emulation code clean-up.\n   (merge 2367c6bcd6 gf/win32-pthread-cond-wait-err later to maint).\n\n * Various issues detected by Asan have been corrected.\n   (merge a031b6181a jk/asan-bonanza later to maint).\n\n * \"git config get --path\" segfaulted on an \":(optional)path\" that\n   does not exist, which has been corrected.\n   (merge 0bd16856ff jc/optional-path later to maint).\n\n * The \"--committer-date-is-author-date\" option of \"git am/rebase\" is\n   a misguided one.  The documentation is updated to discourage its\n   use.\n   (merge fbf3d0669f kh/doc-committer-date-is-author-date later to maint).\n\n * The option help text given by \"git config unset -h\" described\n   the \"--all\" option to \"replace\", not \"unset\", multiple variables,\n   which has been corrected.\n   (merge 18bf67b753 rs/config-unset-opthelp-fix later to maint).\n\n * The error message given by \"git config set\", when the variable\n   being updated has more than one values defined, used old style \"git\n   config\" syntax with an incorrect option in its hint, both of which\n   have been corrected.\n   (merge df963f0df4 rs/config-set-multi-error-message-fix later to maint).\n\n * \"git replay\" forgot to omit the \"gpgsig-sha256\" extended header\n   from the resulting commit the same way it omits \"gpgsig\", which has\n   been corrected.\n   (merge 9f3a115087 pw/replay-exclude-gpgsig-fix later to maint).\n\n * A few tests have been updated to work under the shell compatible\n   mode of zsh.\n   (merge a92f243a94 bc/zsh-testsuite later to maint).\n\n * The way patience diff finds LCS has been optimized.\n   (merge c7e3b8085b yc/xdiff-patience-optim later to maint).\n\n * Recent optimization to \"last-modified\" command introduced use of\n   uninitialized block of memory, which has been corrected.\n   (merge fe4e60759b tc/last-modified-active-paths-optimization later to maint).\n\n * \"git last-modified\" used to mishandle \"--\" to mark the beginning of\n   pathspec, which has been corrected.\n   (merge 05491b90ce js/last-modified-with-sparse-checkouts later to maint).\n\n * Emulation code clean-up.\n   (merge 42aa7603aa gf/win32-pthread-cond-init later to maint).\n\n * \"git submodule add\" to add a submodule under <name> segfaulted,\n   when a submodule.<name>.something is already in .gitmodules file\n   without defining where its submodule.<name>.path is, which has been\n   corrected.\n   (merge dd8e8c786e jc/submodule-add later to maint).\n\n * \"git fetch\" that involves fetching tags, when a tag being fetched\n   needs to overwrite existing one, failed to fetch other tags, which\n   has been corrected.\n   (merge b7b17ec8a6 kn/fix-fetch-backfill-tag-with-batched-ref-updates later to maint).\n\n * Document \"rev-list --filter-provided-objects\" better.\n   (merge 6d8dc99478 jt/doc-rev-list-filter-provided-objects later to maint).\n\n * Even when there is no changes in the packfile and no need to\n   recompute bitmaps, \"git repack\" recomputed and updated the MIDX\n   file, which has been corrected.\n   (merge 6ce9d558ce ps/repack-avoid-noop-midx-rewrite later to maint).\n\n * Update HTTP tests to adjust for changes in curl 8.18.0\n   (merge 17f4b01da7 jk/test-curl-updates later to maint).\n\n * Workaround the \"iconv\" shipped as part of macOS, which is broken\n   handling stateful ISO/IEC 2022 encoded strings.\n   (merge cee341e9dd rs/macos-iconv-workaround later to maint).\n\n * Running \"git diff\" with \"--name-only\" and other options that allows\n   us not to look at the blob contents, while objects that are lazily\n   fetched from a promisor remote, caused use-after-free, which has\n   been corrected.\n\n * The ort merge machinery hit an assertion failure in a history with\n   criss-cross merges renamed a directory and a non-directory, which\n   has been corrected.\n   (merge 979ee83e8a en/ort-recursive-d-f-conflict-fix later to maint).\n\n * Diagnose invalid bundle-URI that lack the URI entry, instead of\n   crashing.\n   (merge 7796c14a1a sb/bundle-uri-without-uri later to maint).\n\n * Mailmap update for Karsten\n   (merge e97678c4ef js/mailmap-karsten-blees later to maint).\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge 46207a54cc qj/doc-http-bad-want-response later to maint).\n   (merge df90eccd93 kh/doc-commit-extra-references later to maint).\n   (merge f18aa68861 rs/xmkstemp-simplify later to maint).\n   (merge fddba8f737 ja/doc-synopsis-style later to maint).\n   (merge 22ce0cb639 en/xdiff-cleanup-2 later to maint).\n   (merge 8ef7355a8f je/doc-pull later to maint).\n   (merge 48176f953f jc/capability-leak later to maint).\n   (merge 8cbbdc92f7 kh/doc-pre-commit-fix later to maint).\n   (merge d4bc39a4d9 mh/doc-config-gui-gcwarning later to maint).\n   (merge 41d425008a kh/doc-send-email-paragraph-fix later to maint).\n   (merge d4b732899e jc/macports-darwinports later to maint).\n   (merge bab391761d kj/pull-options-decl-cleanup later to maint).\n   (merge 007b8994d4 rs/t4014-git-version-string-fix later to maint).\n   (merge 4ce170c522 ds/doc-scalar-config later to maint).\n   (merge a0c813951a jc/doc-commit-signoff-config later to maint).\n   (merge 8ee262985a ja/doc-misc-fixes later to maint).\n   (merge 1722c2244b mh/doc-core-attributesfile later to maint).\n   (merge c469ca26c5 dk/ci-rust-fix later to maint).\n   (merge 12f0be0857 gf/clear-path-cache-cleanup later to maint).\n   (merge 949df6ed6b js/test-func-comment-fix later to maint).\n   (merge 93f894c001 bc/checkout-error-message-fix later to maint).\n   (merge abf05d856f rs/show-branch-prio-queue later to maint).\n   (merge 06188ea5f3 rs/parse-config-expiry-simplify later to maint).\n   (merge 861dbb1586 dd/t5403-modernise later to maint).\n   (merge acffc5e9e5 ja/doc-synopsis-style-more later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.52.0 are as follows:\n\nAaron Plattner (2):\n      object: apply skip_hash and discard_tree optimizations to unknown blobs too\n      packfile: skip hash checks in add_promisor_object()\n\nAdrian Ratiu (3):\n      run-command: add first helper for pp child states\n      reference-transaction: use hook API instead of run-command\n      hook: allow overriding the ungroup option\n\nAntonin Delpeuch (2):\n      xdiff: add 'minimal' to XDF_DIFF_ALGORITHM_MASK\n      blame: make diff algorithm configurable\n\nChristian Couder (3):\n      fast-import: refactor finalize_commit_buffer()\n      commit: refactor verify_commit_buffer()\n      fast-import: add 'strip-if-invalid' mode to --signed-commits=<mode>\n\nD. Ben Knoble (1):\n      rust: build correctly without GNU sed\n\nDavid Macek (1):\n      wincred: avoid memory corruption\n\nDerrick Stolee (6):\n      scalar: annotate config file with \"set by scalar\"\n      scalar: use index.skipHash=true for performance\n      scalar: remove stale config values\n      scalar: alphabetize and simplify config\n      scalar: document config settings\n      diff: avoid segfault with freed entries\n\nDeveshi Dwivedi (1):\n      t5403: use test_path_is_file instead of test -f\n\nElijah Newren (5):\n      t6429: update comment to mention correct tool\n      merge-ort: remove debugging crud\n      merge-ort: fix failing merges in special corner case\n      Documentation/git-replay.adoc: fix errors around revision range\n      merge-ort: fix corner case recursive submodule/directory conflict handling\n\nEmily Shaffer (8):\n      run-command: add stdin callback for parallelization\n      hook: provide stdin via callback\n      hook: convert 'post-rewrite' hook in sequencer.c to hook API\n      transport: convert pre-push to hook API\n      run-command: allow capturing of collated output\n      hooks: allow callers to capture output\n      receive-pack: convert update hooks to new API\n      receive-pack: convert receive hooks to hook API\n\nEzekiel Newren (10):\n      doc: define unambiguous type mappings across C and Rust\n      xdiff: use ptrdiff_t for dstart/dend\n      xdiff: make xrecord_t.ptr a uint8_t instead of char\n      xdiff: use size_t for xrecord_t.size\n      xdiff: use unambiguous types in xdl_hash_record()\n      xdiff: split xrecord_t.ha into line_hash and minimal_perfect_hash\n      xdiff: make xdfile_t.nrec a size_t instead of long\n      xdiff: make xdfile_t.nreff a size_t instead of long\n      xdiff: change rindex from long to size_t in xdfile_t\n      xdiff: rename rindex -> reference_index\n\nGreg Funni (4):\n      win32: return error if SleepConditionVariableCS fails\n      win32: pthread_cond_init should return a value\n      repository: remove duplicate free of cache->squash_msg\n      refs: dereference the value of the required pointer\n\nJean-Noël Avila (10):\n      doc: convert git fetch to synopsis style\n      doc: convert git pull to synopsis style\n      doc: convert git push to synopsis style\n      doc: fix asciidoc markup issues in several files\n      doc: correct minor wording issues\n      doc: fix t0450-txt-doc-vs-help to select only first synopsis block\n      doc: convert git-status to synopsis style\n      doc: convert git-status tables to AsciiDoc format\n      doc: convert git stage to use synopsis block\n      doc: convert git-remote to synopsis style\n\nJean-Noël Avila via GitGitGadget (1):\n      doc: pull-fetch-param typofix\n\nJeff King (16):\n      attr: avoid recursion when expanding attribute macros\n      read-cache: drop submodule check from add_to_cache()\n      compat/mmap: mark unused argument in git_munmap()\n      pack-bitmap: handle name-hash lookups in incremental bitmaps\n      Makefile: turn on NO_MMAP when building with ASan\n      cache-tree: avoid strtol() on non-string buffer\n      fsck: assert newline presence in fsck_ident()\n      fsck: avoid strcspn() in fsck_ident()\n      fsck: remove redundant date timestamp check\n      fsck: avoid parse_timestamp() on buffer that isn't NUL-terminated\n      t: enable ASan's strict_string_checks option\n      unit-test: ignore --no-chain-lint\n      ci(windows-meson-test): handle options and output like other test jobs\n      test-mktemp: plug memory and descriptor leaks\n      t5551: handle trailing slashes in expected cookies output\n      t5563: add missing end-of-line in HTTP header\n\nJiang Xin (2):\n      t/unit-tests: add UTF-8 width tests for CJK chars\n      builtin/repo: fix table alignment for UTF-8 characters\n\nJohannes Schindelin (18):\n      make strip: include `scalar`\n      cmake: stop trying to build the reftable and xdiff libraries\n      mingw: avoid the comma operator\n      ci: bump actions/setup-go from 5 to 6\n      ci(dockerized): do show the result of failing tests again\n      last-modified: support sparse checkouts\n      t9700: accommodate for Windows paths\n      apply: symbolic links lack a \"trustable executable bit\"\n      mingw: special-case `open(symlink, O_CREAT | O_EXCL)`\n      t0001: handle `diff --no-index` gracefully\n      t0301: another fix for Windows compatibility\n      t0600: fix incomplete prerequisite for a test case\n      t1006: accommodate for symlink support in MSYS2\n      t1305: skip symlink tests that do not apply to Windows\n      t6423: introduce Windows-specific handling for symlinking to /dev/null\n      t7800: work around the MSYS path conversion on Windows\n      test_detect_ref_format: fix comment\n      .mailmap: replace Karsten Blees' default address\n\nJohannes Sixt (4):\n      Revert \"gitk: Only restore window size from ~/.gitk, not position\"\n      gitk: persist position and size of the Tags and Heads window\n      gitk: fix a 'continue' statement outside a loop to 'return'\n      gitk: show unescaped file names on 'rename' and 'copy' lines\n\nJulia Evans (3):\n      doc: add an explanation of Git's data model\n      doc: remove stray text in Git data model\n      doc: git-pull: fix 'git --rebase abort' typo\n\nJunio C Hamano (45):\n      t7004: do not chdir around in the main process\n      .gitattributes: remove misspelled no-op whitespace attribute\n      whitespace: correct bit assignment comments\n      diff: emit_line_ws_markup() if/else style fix\n      diff: correct suppress_blank_empty hack\n      diff: keep track of the type of the last line seen\n      diff: refactor output of incomplete line\n      diff: call emit_callback ecbdata everywhere\n      diff: update the way rewrite diff handles incomplete lines\n      apply: revamp the parsing of incomplete lines\n      whitespace: allocate a few more bits and define WS_INCOMPLETE_LINE\n      apply: check and fix incomplete lines\n      diff: highlight and error out on incomplete lines\n      attr: enable incomplete-line whitespace error for this project\n      Start 2.53 cycle\n      config: mark otherwise unused function as file-scope static\n      The second batch\n      The third batch\n      config: really pretend missing :(optional) value is not there\n      config: really treat missing optional path as not configured\n      submodule add: sanity check existing .gitmodules\n      The fourth batch\n      The fifth batch\n      The sixth batch\n      completion: clarify support for short options and arguments\n      connect: plug protocol capability leak\n      The seventh batch\n      Makefile: help macOS novices by mentioning MacPorts\n      FLEX_ARRAY: require platforms to support the C99 syntax\n      coccicheck: emit the contents of cocci patch\n      cocci: use MEMZERO_ARRAY() a bit more\n      The eighth batch\n      The ninth batch\n      The 10th batch\n      commit: document that $command.signoff will not be added\n      odb: do not use \"blank\" substitute for NULL\n      signoff-option: linkify the reference to gitfaq\n      The 11th batch\n      The 12th batch\n      The 13th batch\n      The 14th batch\n      The 15th batch\n      The 16th batch\n      The 17th batch\n      Git 2.53-rc0\n\nJustin Tobler (8):\n      docs: clarify git-rev-list(1) --filter behavior\n      builtin/repo: group per-type object values into struct\n      strbuf: split out logic to humanise byte values\n      builtin/repo: humanise count values in structure output\n      builtin/repo: add inflated object info to keyvalue structure output\n      builtin/repo: add inflated object info to structure table\n      builtin/repo: add disk size info to keyvalue stucture output\n      builtin/repo: add object disk size info to structure table\n\nK Jayatheerth (1):\n      pull: move options[] array into function scope\n\nKarthik Nayak (11):\n      refs: move to using the '.optimize' functions\n      refs: rename 'pack_refs_opts' to 'refs_optimize_opts'\n      t/pack-refs-tests: move the 'test_done' to callees\n      reftable/stack: return stack segments directly\n      reftable/stack: add function to check if optimization is required\n      refs: add a `optimize_required` field to `struct ref_storage_be`\n      maintenance: add checking logic in `pack_refs_condition()`\n      maintenance: add 'is-needed' subcommand\n      fetch: extract out reference committing logic\n      fetch: fix non-conflicting tags not being committed\n      fetch: fix failed batched updates skipping operations\n\nKoji Nakamaru (1):\n      osxkeychain: avoid incorrectly skipping store operation\n\nKristoffer Haugsbakk (14):\n      doc: commit: link to git-status(1) on all format options\n      doc: warn against --committer-date-is-author-date\n      branch: advice using git-help(1) instead of man(1)\n      doc: join default pre-commit paragraphs\n      doc: send-email: fix broken list continuation\n      doc: replay: mention no output on conflicts\n      replay: improve --contained and add to doc\n      doc: replay: link section using markup\n      replay: remove dead code and rearrange\n      replay: find *onto only after testing for ref name\n      replay: die descriptively when invalid commit-ish is given\n      replay: improve code comment and die message\n      replay: die if we cannot parse object\n      t3650: add more regression tests for failure conditions\n\nLucas Seiki Oshiro (5):\n      repo: factor out field printing to dedicated function\n      repo: add --all to git-repo-info\n      repo: remove blank line from Documentation/git-repo.adoc\n      repo: use [--format=... | -z] instead of [-z] in git-repo-info synopsis\n      repo: add -z as an alias for --format=nul to git-repo-structure\n\nMatthew Hughes (2):\n      config: document 'gui.GCWarning'\n      docs: note the type of core.attributesfile\n\nPatrick Steinhardt (85):\n      packfile: use a `strmap` to store packs by name\n      packfile: move the MRU list into the packfile store\n      http: refactor subsystem to use `packfile_list`s\n      packfile: fix approximation of object counts\n      builtin/pack-objects: simplify logic to find kept or nonlocal objects\n      packfile: move list of packs into the packfile store\n      packfile: always add packfiles to MRU when adding a pack\n      packfile: track packs via the MRU list exclusively\n      odb: fix subtle logic to check whether an alternate is usable\n      odb: introduce `odb_source_new()`\n      odb: adjust naming to free object sources\n      object-file: move `fetch_if_missing`\n      object-file: introduce `struct odb_source_loose`\n      object-file: move loose object cache into loose source\n      object-file: hide internals when we need to reprepare loose sources\n      object-file: move loose object map into loose source\n      object-file: read objects via the loose object source\n      object-file: rename `has_loose_object()`\n      object-file: refactor freshening of objects\n      object-file: rename `write_object_file()`\n      object-file: refactor writing objects via a stream\n      refs: introduce wrapper struct for `each_ref_fn`\n      refs: introduce `.ref` field for the base iterator\n      refs: fully reset `struct ref_iterator::ref` on iteration\n      refs: refactor reference status flags\n      refs: expose peeled object ID via the iterator\n      upload-pack: convert to use `reference_get_peeled_oid()`\n      ref-filter: propagate peeled object ID\n      builtin/show-ref: convert to use `reference_get_peeled_oid()`\n      refs: drop `current_ref_iter` hack\n      refs: drop infrastructure to peel via iterators\n      object: add flag to `peel_object()` to verify object type\n      refs: don't store peeled object IDs for invalid tags\n      ref-filter: detect broken tags when dereferencing them\n      ref-filter: parse objects on demand\n      ref-filter: fix stale parsed objects\n      object: fix performance regression when peeling tags\n      path: move `enter_repo()` into \"setup.c\"\n      setup: convert `set_git_dir()` to have file scope\n      odb: adopt logic to close object databases\n      odb: refactor `odb_clear()` to `odb_free()`\n      streaming: rename `git_istream` into `odb_read_stream`\n      streaming: drop the `open()` callback function\n      streaming: propagate final object type via the stream\n      streaming: explicitly pass packfile info when streaming a packed object\n      streaming: allocate stream inside the backend-specific logic\n      streaming: create structure for in-core object streams\n      streaming: create structure for loose object streams\n      streaming: create structure for packed object streams\n      streaming: create structure for filtered object streams\n      streaming: move zlib stream into backends\n      packfile: introduce function to read object info from a store\n      streaming: rely on object sources to create object stream\n      streaming: get rid of `the_repository`\n      streaming: make the `odb_read_stream` definition public\n      streaming: move logic to read loose objects streams into backend\n      streaming: move logic to read packed objects streams into backend\n      streaming: refactor interface to be object-database-centric\n      streaming: move into object database subsystem\n      streaming: drop redundant type and size pointers\n      odb: move logic to disable ref updates into repo\n      oidset: introduce `oidset_equal()`\n      builtin/index-pack: fix deferred fsck outside repos\n      t/helper: stop setting up `the_repository` repeatedly\n      http-push: stop setting up `the_repository` for each reference\n      odb: handle initialization of sources in `odb_new()`\n      chdir-notify: add function to unregister listeners\n      odb: handle changing a repository's commondir\n      odb: handle recreation of quarantine directories\n      t/unit-tests: update clar to 39f11fe\n      t/unit-tests: demonstrate use of integer comparison assertions\n      gitattributes: disable blank-at-eof errors for clar test expectations\n      midx: fix `BUG()` when getting preferred pack without a reverse index\n      midx-write: extract function to test whether MIDX needs updating\n      midx-write: skip rewriting MIDX with `--stdin-packs` unless needed\n      odb: refactor parsing of alternates to be self-contained\n      odb: resolve relative alternative paths when parsing\n      odb: move computation of normalized objdir into `alt_odb_usable()`\n      odb: stop splitting alternate in `odb_add_to_alternates_file()`\n      odb: remove mutual recursion when parsing alternates\n      odb: drop forward declaration of `read_info_alternates()`\n      odb: read alternates via sources\n      odb: write alternates via sources\n      builtin/gc: fix condition for whether to write commit graphs\n      odb: properly close sources before freeing them\n\nPaul Tarjan (1):\n      t7800: fix racy \"difftool --dir-diff syncs worktree\" test\n\nPhillip Wood (3):\n      worktree list: fix column spacing\n      worktree list: quote paths\n      replay: do not copy \"gpgsign-sha256\" header\n\nPushkar Singh (1):\n      t1300: use test helpers instead of `test` command\n\nQueen Ediri Jessa (1):\n      doc: clarify server behavior for invalid 'want' lines in HTTP protocol\n\nRené Scharfe (35):\n      diff: disable rename detection with --quiet\n      wrapper: simplify xmkstemp()\n      config: fix suggestion for failed set of multi-valued option\n      config: fix short help of unset flags\n      diff-index: don't queue unchanged filepairs with diff_change()\n      wrapper: add git_mkdtemp()\n      compat: use git_mkdtemp()\n      compat: remove mingw_mktemp()\n      banned.h: ban mktemp(3)\n      compat: remove gitmkdtemp()\n      replay: move onto NULL check before first use\n      t4014: support Git version strings with spaces\n      diff-files: fix copy detection\n      revision: export commit_stack\n      log: use commit_stack\n      midx: use commit_stack\n      name-rev: use commit_stack\n      remote: use commit_stack for local_commits\n      remote: use commit_stack for sent_tips\n      remote: use commit_stack for src_commits\n      test-reach: use commit_stack\n      commit: add commit_stack_init()\n      pack-bitmap-write: use commit_stack\n      shallow: use commit_stack\n      commit: add commit_stack_grow()\n      commit-graph: use commit_stack\n      commit-reach: use commit_stack\n      macOS: make Homebrew use configurable\n      macOS: use iconv from Homebrew if needed and present\n      show-branch: use prio_queue\n      config: use git_parse_int() in git_config_get_expiry_in_days()\n      tag: use algo of repo parameter in parse_tag_buffer()\n      tag: support arbitrary repositories in gpg_verify_tag()\n      tag: support arbitrary repositories in parse_tag()\n      tag: stop using the_repository\n\nSam Bostock (1):\n      bundle-uri: validate that bundle entries have a uri\n\nSiddharth Asthana (3):\n      replay: use die_for_incompatible_opt2() for option validation\n      replay: make atomic ref updates the default behavior\n      replay: add replay.refAction config option\n\nTobias Boesch (1):\n      gitk: add external diff file rename detection\n\nToon Claes (6):\n      last-modified: fix use of uninitialized memory\n      meson: ignore subprojects/.wraplock\n      meson: only detect ICONV_OMITS_BOM if possible\n      meson: use is_cross_build() where possible\n      git-compat-util: introduce MEMZERO_ARRAY() macro\n      contrib/coccinelle: pass include paths to spatch(1)\n\nYee Cheng Chin (1):\n      xdiff: optimize patience diff's LCS search\n\nbrian m. carlson (4):\n      object-file: disallow adding submodules of different hash algo\n      t0614: use numerical comparison with test_line_count\n      t5564: fix test hang under zsh's sh mode\n      checkout: quote invalid treeish in error message\n\n"}]}