{"thread":{"id":"63118","subject":"[ANNOUNCE] Git v2.49.0","startedAt":"2025-03-14T17:16:42Z","lastAt":"2025-03-17T18:49:16Z","messageCount":6,"participants":["Junio C Hamano","Josh Steadmon","brian m. carlson","rsbecker@nexbridge.com"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"514275","messageId":"xmqqfrjfilc8.fsf@gitster.g","threadId":"63118","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.49.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-03-14T17:16:39Z","receivedAt":"2025-03-14T17:16:42Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The latest feature release Git v2.49.0 is now available at the\nusual places.  It is comprised of 460 non-merge commits since\nv2.48.0, contributed by 89 people, 24 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.49.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.48.0 are as follows.\nWelcome to the Git development community!\n\n  Adam Murray, ambar chakravartty, Andrew Carter, Ayush Chandekar,\n  David Mandelberg, Eliah Kagan, Evan Martin, Gabriel Amaral,\n  Igor Todorovski, James J. Raden, Jared Van Bortel, Koakuma,\n  Lucas Oshiro, Lucas Seiki Oshiro, Matteo Bagnolini, Mikhail T.,\n  Olga Pilipenco, Peter Georg, Ross Goldberg, Roy Eldar, Ruggero\n  Turra, seoyeon-kwon, Tamara Lazerka, and Tuomas Ahola.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Adam Dinwoodie, Adam Johnson, Alecs King, Alexander Shopov,\n  Arkadii Yakovets, Bagas Sanjaya, Bence Ferdinandy, brian\n  m. carlson, Calvin Wan, Christian Couder, Christian Hesse,\n  David Aguilar, D. Ben Knoble, Derrick Stolee, Elijah Newren,\n  Emir SARI, Eric Sunshine, Jacob Keller, Jakub Wilk, Jan Palus,\n  Jean-Noël Avila, Jeff King, Jiang Xin, Johannes Schindelin,\n  Jonathan Tan, Josh Steadmon, Julian Prein, Junio C Hamano,\n  Justin Tobler, Karsten Blees, Karthik Nayak, Kate Golovanova,\n  Kyle Lippincott, Lumynous, Martin Ågren, Matthew Hughes, Meet\n  Soni, M Hickford, Michael Haggerty, Mike Hommey, Nika Layzell,\n  Patrick Steinhardt, Peter Krefting, Peter Oliver, Philippe Blain,\n  Phillip Wood, Piotr Szlazak, Ralf Thielow, Randall S. Becker,\n  Renato Botelho, René Scharfe, Sam James, Scott Chacon, Sebastian\n  Schuberth, Seyi Kuforiji, Sören Krecker, Taylor Blau, Teng Long,\n  Todd Zullinger, Toon Claes, Usman Akinyemi, Vũ Tiến Hưng,\n  Yi-Jyun Pan, ZheNing Hu, 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.49 Release Notes\n=======================\n\nUI, Workflows & Features\n------------------------\n\n * Completion script updates for zsh\n\n * \"git pack-objects\" and its wrapper \"git repack\" learned an option\n   to use an alternative path-hash function to improve delta-base\n   selection to produce a packfile with deeper history than window\n   size.\n\n * \"git gc\" learned the \"--expire-to\" option and passes it down to\n   underlying \"git repack\".\n\n * \"[help] autocorrect = 1\" used to be a way to say \"please wait for\n   0.1 second after suggesting a typofix of the command name before\n   running that command\"; now it means \"yes, if there is a plausible\n   typofix for the command name, please run it immediately\".\n\n * \"git clone\" learned to make a shallow clone for a single commit\n   that is not necessarily be at the tip of any branch.\n\n * Lazy-loading missing files in a blobless clone on demand is costly\n   as it tends to be one-blob-at-a-time.  \"git backfill\" is introduced\n   to help bulk-download necessary files beforehand.\n\n * \"git push --atomic --porcelain\" used to ignore failures from the\n   other side, losing the error status from the child process, which\n   has been corrected.\n\n * \"git rev-list --missing=\" learned to accept \"print-info\" that gives\n   known details expected of the missing objects, like path and type.\n\n * Comes with an updated \"gitk\".\n\n * The documentation of \"git commit\" and \"git rebase\" now refer to\n   commit titles as such, not \"subject\".\n\n * The value of \"uname -s\" is by default sent over the wire as a part\n   of the \"version\" capability.\n\n * \"git refs migrate\" can optionally be told not to migrate the reflog.\n\n * The netrc support (via the cURL library) for the HTTP transport has\n   been re-enabled.\n\n * Removal of \".git/branches\" and \".git/remotes\" support in the\n   BreakingChanges document has been further clarified.\n\n * What happens to submodules during merge has been documented in a\n   bit more detail.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * More -Wsign-compare fixes.\n\n * meson-based build now supports the unsafe-sha1 build knob.\n\n * The meson-based build procedure covers contrib/ and other places as\n   well.\n\n * The code to check LSan results has been simplified and made more\n   robust.\n   (merge 164a2516eb jk/lsan-race-ignore-false-positive later to maint).\n\n * More code paths have a repository passed through the callchain,\n   instead of assuming the primary the_repository object.\n\n * Move a few more unit tests to the clar test framework.\n\n * Introduce a new API to visit objects in batches based on a common\n   path, or by type.\n\n * Following the procedure we established to introduce breaking\n   changes for Git 3.0, allow an early opt-in for removing support of\n   $GIT_DIR/branches/ and $GIT_DIR/remotes/ directories to configure\n   remotes.\n\n * The code paths to interact with zlib has been cleaned up in\n   preparation for building with zlib-ng.\n\n * Foreign language interface for Rust into our code base has been added.\n\n * All the documentation .txt files have been renamed to .adoc to help\n   content aware editors.\n\n * \"git difftool\" code clean-up.\n\n * Rename processing in the recursive merge backend has seen a micro\n   optimization.\n\n * The path.[ch] API takes an explicit repository parameter passed\n   throughout the callchain, instead of relying on the_repository\n   singleton instance.\n\n * Large-object promisor protocol extension has been introduced.\n\n * The editorconfig file is updated to tell us that bash scripts are\n   similar to general Bourne shell scripts.\n\n * Meson-based build procedure forgot to build some docs, which has\n   been corrected.\n\n\nFixes since v2.48\n-----------------\n\n * \"git submodule\" learned various ways to spell the same option,\n   e.g. \"--branch=B\" can be spelled \"--branch B\" or \"-bB\".\n   (merge b86f0f9071 re/submodule-parse-opt later to maint).\n\n * Tweak the help text used for the option value placeholders by\n   parse-options API so that translations can customize the \"<>\"\n   placeholder signal (e.g. \"--option=<value>\").\n   (merge 5b34dd08d0 as/long-option-help-i18n later to maint).\n\n * CI jobs gave sporadic failures, which turns out that that the\n   object finalization code was giving an error when it did not have\n   to.\n   (merge d7fcbe2c56 ps/object-collision-check later to maint).\n\n * The code to compute \"unique\" name used git_rand() which can fail or\n   get stuck; the callsite does not require cryptographic security.\n   Introduce the \"insecure\" mode and use it appropriately.\n   (merge 0b4f8afef6 ps/reftable-get-random-fix later to maint).\n\n * A misconfigured \"fsck.skiplist\" configuration variable was not\n   diagnosed as an error, which has been corrected.\n   (merge ca7158076f jt/fsck-skiplist-parse-fix later to maint).\n\n * Extended SHA-1 expression parser did not work well when a branch\n   with an unusual name (e.g. \"foo{bar\") is involved.\n   (merge 191f0c8db2 en/object-name-with-funny-refname-fix later to maint).\n\n * The meson build procedure looked for the 'version-def.h' file in a\n   wrong directory, which has been corrected.\n   (merge 4771501c0a tc/meson-use-our-version-def-h later to maint).\n\n * The meson build procedure for Documentation/technical/ hierarchy was\n   missing necessary dependencies, which has been corrected.\n   (merge 1dca492edd sj/meson-doc-technical-dependency-fix later to maint).\n\n * The \"instaweb\" bound only to local IP address without \"--local\" and\n   to all addresses with \"--local\", which was the other way around, when\n   using Python's http.server class, which has been corrected.\n   (merge 76baf97fa1 ak/instaweb-python-port-binding-fix later to maint).\n\n * Document that it is insecure to use Personal Access Tokens, which\n   some hosting providers take as username/password, embedded in URLs.\n   (merge a90ff409f0 mh/doc-credential-helpers-with-pat later to maint).\n\n * The help text from \"git $cmd -h\" appear on the standard output for\n   some $cmd and the standard error for others.  The built-in commands\n   have been fixed to show them on the standard output consistently.\n   (merge f66d1423f5 jc/show-usage-help later to maint).\n\n * The meson-driven build is now aware of \"git-subtree\" housed in\n   contrib/subtree hierarchy.\n   (merge 8454b42f94 ps/build-meson-subtree later to maint).\n\n * It was possible for \"git unpack-objects\" and \"git index-pack\" to\n   make an unaligned access, which has been corrected.\n   (merge 98046591b9 jk/pack-header-parse-alignment-fix later to maint).\n\n * The \"cache\" credential back-end did not handle authtype correctly,\n   which has been corrected.\n   (merge 0b43274850 mh/credential-cache-authtype-request-fix later to maint).\n\n * \"git branch --sort=...\" and \"git for-each-ref --format=... --sort=...\"\n   did not work as expected with some atoms, which has been corrected.\n   (merge c5490ce9d1 rs/ref-fitler-used-atoms-value-fix later to maint).\n\n * reflog entries for symbolic ref updates were broken, which has been\n   corrected.\n   (merge 3519492430 kn/reflog-symref-fix later to maint).\n\n * The trace2 code was not prepared to show a configuration variable\n   that is set to true using the valueless true syntax, which has been\n   corrected.\n   (merge 2fd367cf63 am/trace2-with-valueless-true later to maint).\n\n * The \"git refs migrate\" command did not migrate the reflog for\n   refs/stash, which is the contents of the stashes, which has been\n   corrected.\n   (merge a0bea0978f ps/reflog-migration-with-logall-fix later to maint).\n\n * Doc and short-help text for \"show-index\" has been clarified to\n   stress that the command reads its data from the standard input.\n   (merge 49edce4ff9 jc/show-index-h-update later to maint).\n\n * The API around choosing to use unsafe variant of SHA-1\n   implementation has been updated in an attempt to make it harder to\n   abuse.\n   (merge 04292c3796 tb/unsafe-hash-cleanup later to maint).\n\n * Fix bugs in an earlier attempt to fix \"git refs migration\".\n   (merge f11f0a5a2d kn/reflog-migration-fix-fix later to maint).\n\n * The code path used when \"git fetch\" fetches from a bundle file\n   closed the same file descriptor twice, which sometimes broke things\n   unexpectedly when the file descriptor was reused, which has been\n   corrected.\n   (merge 9a84794ad8 js/bundle-unbundle-fd-reuse-fix later to maint).\n\n * \"git init\" to reinitialize a repository that already exists cannot\n   change the hash function and ref backends; such a request is\n   silently ignored now.\n   (merge 7e88640cd1 ps/setup-reinit-fixes later to maint).\n\n * \"git apply\" internally uses unsigned long for line numbers and uses\n   strtoul() to parse numbers on the hunk headers.  It however forgot\n   to check parse errors.\n   (merge a206058fda pw/apply-ulong-overflow-check later to maint).\n\n * Two CI tasks, whitespace check and style check, work on the\n   difference from the base version and the version being checked, but\n   the base was computed incorrectly in GitLab CI in some cases, which\n   has been corrected.\n   (merge acc4fb302b jt/gitlab-ci-base-fix later to maint).\n\n * \"git repack --keep-unreachable\" to send unreachable objects to the\n   main pack \"git repack -ad\" produces did not work when there is no\n   existing packs, which has been corrected.\n   (merge 414c82300a ps/repack-keep-unreachable-in-unpacked-repo later to maint).\n\n * Going into a secondary worktree and asking \"is the main worktree\n   bare?\" did not work correctly when per-worktree configuration\n   option was in use, which has been corrected.\n\n * Fetching into a bare repository incorrectly assumed it always used\n   a mirror layout when deciding to update remote-tracking HEAD, which\n   has been corrected.\n   (merge 93dc16483a bf/fetch-set-head-fix later to maint).\n\n * A thunderbird helper script lost its bashism.\n   (merge 59d26bd961 bc/contrib-thunderbird-patch-inline-fix later to maint).\n\n * The -G/-S options to the \"diff\" family of commands caused us to hit\n   a BUG() when they get no values; they have been corrected.\n   (merge a620046b29 bc/diff-reject-empty-arg-to-pickaxe later to maint).\n\n * \"git merge-tree --stdin\" has been improved (including a workaround\n   for a deadlock).\n   (merge 6a9ae81015 pw/merge-tree-stdin-deadlock-fix later to maint).\n\n * Correct the default target in Documentation/Makefile, and\n   future-proof all Makefiles from similar breakages by declaring the\n   default target (which happens to be \"all\") upfront.\n   (merge 5309c1e9fb ad/set-default-target-in-makefiles later to maint).\n\n * \"git check-mailmap\" used to segfault when queried without human\n   readable name.\n   (merge bb60c52131 jk/check-mailmap-wo-name-fix later to maint).\n\n * Support for renaming of symbolic links on Windows has been improved.\n\n * \"git rebase -i\" failed to allow rewording an empty commit that has\n   been fast-forwarded.\n   (merge af8fc7be10 pw/rebase-i-ff-empty-commit later to maint).\n\n * The use of \"paste\" command for aggregating the test results have\n   been corrected.\n   (merge ce98863204 dk/test-aggregate-results-paste-fix later to maint).\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge ddb5287894 jk/t7407-use-test-grep later to maint).\n   (merge 21e1b44865 aj/difftool-config-doc-fix later to maint).\n   (merge 6a63995335 mh/gitattr-doc-markup-fix later to maint).\n   (merge 43850dcf9c sk/unit-test-hash later to maint).\n   (merge 4ad47d2de3 jc/cli-doc-option-and-config later to maint).\n   (merge 2d0ff147e5 jp/t8002-printf-fix later to maint).\n   (merge 69666e6746 ja/doc-restore-markup-update later to maint).\n   (merge d11d003ba5 sk/strlen-returns-size_t later to maint).\n   (merge 77b2d29e91 ja/doc-notes-markup-updates later to maint).\n   (merge 6979bf6f8f jk/combine-diff-cleanup later to maint).\n   (merge 8705c9bd13 kn/pack-write-with-reduced-globals later to maint).\n   (merge 087740d65a ps/leakfixes-0129 later to maint).\n   (merge 6bba6f604b jp/doc-trailer-config later to maint).\n   (merge f1cc562b77 lo/t7603-path-is-file-update later to maint).\n   (merge 45761988ac en/doc-renormalize later to maint).\n   (merge 832f56f06a jc/doc-boolean-synonyms later to maint).\n   (merge 3eeed876a9 ac/doc-http-ssl-type-config later to maint).\n   (merge c268e3285d jc/breaking-changes-early-adopter-option later to maint).\n   (merge 0d03fda6a5 pb/doc-follow-remote-head later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.48.0 are as follows:\n\nAdam Dinwoodie (1):\n      Makefile: set default goals in makefiles\n\nAdam Johnson (1):\n      difftool docs: restore correct position of tool list\n\nAdam Murray (1):\n      trace2: prevent segfault on config collection with valueless true\n\nAlecs King (1):\n      instaweb: fix ip binding for the python http.server\n\nAlexander Shopov (2):\n      parse-options: localize mark-up of placeholder text in the short help\n      l10n: bg.po: Updated Bulgarian translation (5836t)\n\nAndrew Carter (1):\n      docs: indicate http.sslCertType and sslKeyType\n\nArkadii Yakovets (1):\n      l10n: uk: add 2.49 translation\n\nAyush Chandekar (1):\n      t6423: fix suppression of Git’s exit code in tests\n\nBagas Sanjaya (1):\n      l10n: po-id for 2.49\n\nBence Ferdinandy (2):\n      fetch set_head: refactor to use remote directly\n      fetch set_head: fix non-mirror remotes in bare repositories\n\nCalvin Wan (1):\n      libgit: add higher-level libgit crate\n\nChristian Couder (3):\n      Add 'promisor-remote' capability to protocol v2\n      promisor-remote: check advertised name or URL\n      doc: add technical design doc for large object promisors\n\nD. Ben Knoble (2):\n      completion: repair config completion for Zsh\n      t/aggregate-results: fix paste(1) invocation\n\nDavid Aguilar (11):\n      help: show the suggested command when help.autocorrect is false\n      help: add \"show\" as a valid configuration value\n      difftool: eliminate use of global variables\n      difftool: eliminate use of the_repository\n      difftool: eliminate use of USE_THE_REPOSITORY_VARIABLE\n      xdiff: move sign comparison warning guard into each file\n      xdiff: avoid signed vs. unsigned comparisons in xdiffi.c\n      xdiff: avoid signed vs. unsigned comparisons in xemit.c\n      xdiff: avoid signed vs. unsigned comparisons in xhistogram.c\n      xdiff: avoid signed vs. unsigned comparisons in xpatience.c\n      xdiff: avoid signed vs. unsigned comparisons in xutils.c\n\nDavid Mandelberg (1):\n      editorconfig: add .bash extension\n\nDerrick Stolee (18):\n      path-walk: introduce an object walk by path\n      test-lib-functions: add test_cmp_sorted\n      t6601: add helper for testing path-walk API\n      path-walk: allow consumer to specify object types\n      path-walk: visit tags and cached objects\n      path-walk: mark trees and blobs as UNINTERESTING\n      path-walk: reorder object visits\n      pack-objects: add --name-hash-version option\n      repack: add --name-hash-version option\n      pack-objects: add GIT_TEST_NAME_HASH_VERSION\n      p5313: add size comparison test\n      test-tool: add helper for name-hash values\n      pack-objects: prevent name hash version change\n      backfill: add builtin boilerplate\n      backfill: basic functionality and tests\n      backfill: add --min-batch-size=<n> option\n      backfill: add --sparse option\n      backfill: assume --sparse when sparse-checkout is enabled\n\nEliah Kagan (1):\n      compat/mingw: rename the symlink, not the target\n\nElijah Newren (3):\n      object-name: fix resolution of object names containing curly braces\n      object-name: be more strict in parsing describe-like output\n      doc: clarify the intent of the renormalize option in the merge machinery\n\nEmir SARI (1):\n      l10n: tr: Update Turkish translations for 2.49.0\n\nJacob Keller (1):\n      mailmap: fix check-mailmap with full mailmap line\n\nJames J. Raden (1):\n      gitk: make the \"list references\" default window width wider\n\nJan Palus (1):\n      t8002: fix ambiguous printf conversion specifications\n\nJean-Noël Avila (8):\n      doc: convert git-notes to new documentation format\n      doc: convert git-restore to new style format\n      doc: apply new documentation guidelines to git commit\n      doc: the mode param of -u of git commit is optional\n      doc: make more direct explanations in git commit options\n      doc: convert git commit config to new format\n      doc: migrate git-commit manpage secondary files to new format\n      l10n: fr: 2.49 round 2\n\nJeff King (25):\n      test-lib: invert return value of check_test_results_san_file_empty\n      test-lib: simplify lsan results check\n      test-lib: add a few comments to LSan log checking\n      t7407: use test_grep\n      run_diff_files(): delay allocation of combine_diff_path\n      combine-diff: add combine_diff_path_new()\n      tree-diff: clear parent array in path_appendnew()\n      combine-diff: use pointer for parent paths\n      diff: add a comment about combine_diff_path.parent.path\n      run_diff_files(): de-mystify the size of combine_diff_path struct\n      tree-diff: drop path_appendnew() alloc optimization\n      tree-diff: pass whole path string to path_appendnew()\n      tree-diff: inline path_appendnew()\n      combine-diff: drop public declaration of combine_diff_path_size()\n      tree-diff: drop list-tail argument to diff_tree_paths()\n      tree-diff: use the name \"tail\" to refer to list tail\n      tree-diff: simplify emit_path() list management\n      tree-diff: make list tail-passing more explicit\n      t0012: optionally check that \"-h\" output goes to stdout\n      packfile: factor out --pack_header argument parsing\n      parse_pack_header_option(): avoid unaligned memory writes\n      index-pack, unpack-objects: use get_be32() for reading pack header\n      index-pack, unpack-objects: use skip_prefix to avoid magic number\n      path-walk: drop redundant parse_tree() call\n      ci: set CI_JOB_IMAGE for coverity job\n\nJiang Xin (5):\n      t5548: refactor to reuse setup_upstream() function\n      t5548: refactor test cases by resetting upstream\n      t5548: add porcelain push test cases for dry-run mode\n      send-pack: new return code \"ERROR_SEND_PACK_BAD_REF_STATUS\"\n      send-pack: gracefully close the connection for atomic push\n\nJohannes Schindelin (18):\n      mingw: drop bogus (and unneeded) declaration of `_pgmptr`\n      credential_format(): also encode <host>[:<port>]\n      credential: sanitize the user prompt\n      credential: disallow Carriage Returns in the protocol by default\n      Git 2.40.4\n      Git 2.41.3\n      Git 2.42.4\n      Git 2.43.6\n      Git 2.45.3\n      Git 2.44.3\n      Git 2.46.3\n      Git 2.47.2\n      gitk(Windows): avoid inadvertently calling executables in the worktree\n      gitk: fix arrow keys in input fields with Tcl/Tk >= 8.6\n      bundle: avoid closing file descriptor twice\n      ident: stop assuming that `gw_gecos` is writable\n      meson: fix sorting\n      cmake: generalize the handling of the `CLAR_TEST_OBJS` list\n\nJonathan Tan (1):\n      pack-objects: create new name-hash function version\n\nJosh Steadmon (3):\n      common-main: split init and exit code into new files\n      libgit-sys: introduce Rust wrapper for libgit.a\n      libgit-sys: also export some config_set functions\n\nJulian Prein (1):\n      config.txt: add trailer.* variables\n\nJunio C Hamano (40):\n      ci: remove 'Upload failed tests' directories' step from linux32 jobs\n      compat/regex: fix argument order to calloc(3)\n      show-index: the short help should say the command reads from its input\n      sign-compare: avoid comparing ptrdiff with an int/unsigned\n      Git 2.48.1\n      Start the Git 2.49 cycle\n      The first batch\n      gitcli: document that command line trumps config and env\n      parse-options: add show_usage_with_options_if_asked()\n      usage: add show_usage_if_asked()\n      builtins: send usage_with_options() help text to standard output\n      oddballs: send usage() help text to standard output\n      builtin: send usage() help text to standard output\n      bswap.h: squelch potential sparse -Wcast-truncate warnings\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      doc: centrally document various ways tospell `true` and `false`\n      The tenth batch\n      The eleventh batch\n      The twelfth batch\n      The thirteenth batch\n      The fourteenth batch\n      BreakingChanges: clarify branches/ and remotes/\n      Git 2.49-rc0\n      A bit more post -rc0\n      doc: fix build-docdep.perl\n      A few more before -rc1\n      BreakingChanges: clarify the procedure\n      refs: show --no-reflog in the help text\n      Git 2.49-rc1\n      A few more after -rc1\n      Git 2.49-rc2\n      A bit more updates after -rc2\n      Git 2.49\n\nJustin Tobler (4):\n      fsck: reject misconfigured fsck.skipList\n      ci: fix base commit fallback for check-whitespace and check-style\n      rev-list: add print-info action to print missing object path\n      rev-list: extend print-info to print missing object type\n\nKarsten Blees (1):\n      gitk: Unicode file name support\n\nKarthik Nayak (12):\n      reftable: write correct max_update_index to header\n      pack-write: pass hash_algo to `fixup_pack_header_footer()`\n      pack-write: pass repository to `index_pack_lockfile()`\n      pack-write: pass hash_algo to `write_idx_file()`\n      pack-write: pass hash_algo to `write_rev_file()`\n      pack-write: pass hash_algo to internal functions\n      refs: mark `ref_transaction_update_reflog()` as static\n      refs: use 'uint64_t' for 'ref_update.index'\n      reftable: prevent 'update_index' changes after adding records\n      refs: fix creation of reflog entries for symrefs\n      refs/reftable: fix uninitialized memory access of `max_index`\n      builtin/refs: add '--no-reflog' flag to drop reflogs\n\nLucas Oshiro (1):\n      t7603: replace test -f by test_path_is_file\n\nLucas Seiki Oshiro (1):\n      merge-strategies.adoc: detail submodule merge\n\nM Hickford (5):\n      credential-cache: respect authtype capability\n      docs: list popular credential helpers\n      docs: discuss caching personal access tokens\n      doc: use 'title' consistently\n      contrib/credential: fix compilation of wincred helper with MSVC\n\nMartin Ågren (1):\n      git-clone doc: fix indentation\n\nMatteo Bagnolini (1):\n      t7110: replace `test -f` with `test_path_is_*` helpers\n\nMatthew Hughes (1):\n      docs: fix typesetting of merge driver placeholders\n\nMeet Soni (8):\n      remote: rename function omit_name_by_refspec\n      refspec: relocate refname_matches_negative_refspec_item\n      remote: rename query_refspecs functions\n      refspec: relocate matching related functions\n      refspec: relocate apply_refspecs and related funtions\n      remote: relocate valid_remote_name\n      merge-recursive: optimize time complexity for process_renames\n      refspec: clarify function naming and documentation\n\nMike Hommey (1):\n      connect: address -Wsign-compare warnings\n\nOlga Pilipenco (1):\n      worktree: detect from secondary worktree if main worktree is bare\n\nPatrick Steinhardt (141):\n      t7300: work around platform-specific behaviour with long paths on MinGW\n      progress: stop using `the_repository`\n      pager: stop using `the_repository`\n      trace: stop using `the_repository`\n      serve: stop using `the_repository`\n      send-pack: stop using `the_repository`\n      server-info: stop using `the_repository`\n      diagnose: stop using `the_repository`\n      mailinfo: stop using `the_repository`\n      credential: stop using `the_repository`\n      resolve-undo: stop using `the_repository`\n      tmp-objdir: stop using `the_repository`\n      add-interactive: stop using `the_repository`\n      graph: stop using `the_repository`\n      match-trees: stop using `the_repository`\n      prio-queue: fix type of `insertion_ctr`\n      commit-reach: fix index used to loop through unsigned integer\n      commit-reach: fix type of `min_commit_date`\n      commit-reach: use `size_t` to track indices in `remove_redundant()`\n      commit-reach: use `size_t` to track indices in `get_reachable_subset()`\n      builtin/log: use `size_t` to track indices\n      builtin/log: fix remaining -Wsign-compare warnings\n      shallow: fix -Wsign-compare warnings\n      commit-reach: use `size_t` to track indices when computing merge bases\n      object-file: fix race in object collision check\n      meson: consistenlty spell 'CommonCrypto'\n      meson: deduplicate access to SHA1/SHA256 backend options\n      meson: require SecurityFramework when it's used as SHA1 backend\n      meson: simplify conditions for HTTPS and SHA1 dependencies\n      meson: add missing dots for build options\n      meson: wire up unsafe SHA1 backend\n      meson: provide a summary of configured backends\n      object-file: rename variables in `check_collision()`\n      object-file: don't special-case missing source file in collision check\n      object-file: retry linking file into place when occluding file vanishes\n      wrapper: allow generating insecure random bytes\n      reftable/stack: accept insecure random bytes\n      t0060: fix EBUSY in MinGW when setting up runtime prefix\n      t7422: fix flaky test caused by buffered stdout\n      github: adapt containerized jobs to be rootless\n      github: convert all Linux jobs to be containerized\n      github: simplify computation of the job's distro\n      gitlab-ci: remove the \"linux-old\" job\n      gitlab-ci: add linux32 job testing against i386\n      ci: stop special-casing for Ubuntu 16.04\n      ci: use latest Ubuntu release\n      ci: remove stale code for Azure Pipelines\n      contrib/subtree: fix building docs\n      meson: introduce build option for contrib\n      meson: wire up the git-subtree(1) command\n      meson: stop disabling -Wsign-compare\n      reftable/record: drop unused `print` function pointer\n      reftable/record: handle overflows when decoding varints\n      reftable/basics: adjust `common_prefix_size()` to return `size_t`\n      reftable/basics: adjust `hash_size()` to return `uint32_t`\n      reftable/block: adapt header and footer size to return a `size_t`\n      reftable/block: adjust type of the restart length\n      reftable/blocksource: adjust type of the block length\n      reftable/blocksource: adjust `read_block()` to return `ssize_t`\n      reftable: address trivial -Wsign-compare warnings\n      refs: fix migration of reflogs respecting \"core.logAllRefUpdates\"\n      Makefile: wire up build option for deprecated features\n      ci: merge linux-gcc-default into linux-gcc\n      ci: repurpose \"linux-gcc\" job for deprecations\n      builtin/pack-redundant: remove subcommand with breaking changes\n      GIT-VERSION-GEN: simplify computing the dirty marker\n      GIT-VERSION-GEN: allow running without input and output files\n      meson: populate project version via GIT-VERSION-GEN\n      meson: fix dependencies for generated headers\n      meson: wire up development environments\n      meson: wire up generation of distribution archive\n      meson: wire up fuzzers\n      meson: make the CSPRNG backend configurable\n      meson: fix compilation with Visual Studio\n      ci: raise error when Meson generates warnings\n      ci: wire up Visual Studio build with Meson\n      remote: announce removal of \"branches/\" and \"remotes/\"\n      compat: drop `uncompress2()` compatibility shim\n      git-compat-util: drop `z_const` define\n      compat: introduce new \"zlib.h\" header\n      git-compat-util: move include of \"compat/zlib.h\" into \"git-zlib.h\"\n      compat/zlib: provide `deflateBound()` shim centrally\n      compat/zlib: provide stubs for `deflateSetHeader()`\n      git-zlib: cast away potential constness of `next_in` pointer\n      compat/zlib: allow use of zlib-ng as backend\n      ci: switch linux-musl to use Meson\n      ci: make \"linux-musl\" job use zlib-ng\n      unix-socket: fix memory leak when chdir(3p) fails\n      scalar: free result of `remote_default_branch()`\n      t0001: remove duplicate test\n      setup: fix reinit of repos with incompatible GIT_DEFAULT_REF_FORMAT\n      setup: fix reinit of repos with incompatible GIT_DEFAULT_HASH\n      hash: convert hashing context to a structure\n      hash: stop typedeffing the hash context\n      hash: provide generic wrappers to update hash contexts\n      global: adapt callers to use generic hash context helpers\n      t5504: modernize test by moving heredocs into test bodies\n      t5548: add new porcelain test cases\n      t5543: atomic push reports exit code failure\n      builtin/repack: fix `--keep-unreachable` when there are no packs\n      path: refactor `repo_common_path()` family of functions\n      path: refactor `repo_git_path()` family of functions\n      path: refactor `repo_worktree_path()` family of functions\n      submodule: refactor `submodule_to_gitdir()` to accept a repo\n      path: refactor `repo_submodule_path()` family of functions\n      path: drop unused `strbuf_git_path()` function\n      path: drop `git_pathdup()` in favor of `repo_git_path()`\n      path: drop `git_path_buf()` in favor of `repo_git_path_replace()`\n      worktree: return allocated string from `get_worktree_git_dir()`\n      path: drop `git_common_path()` in favor of `repo_common_path()`\n      GIT-BUILD-OPTIONS: propagate project's source directory\n      contrib/credential: fix \"netrc\" tests with out-of-tree builds\n      contrib/credential: fix compiling \"libsecret\" helper\n      contrib/credential: fix compilation of \"osxkeychain\" helper\n      meson: wire up credential helpers\n      meson: wire up git-contacts(1)\n      meson: wire up static analysis via Coccinelle\n      gitk: extract script to build executable\n      gitk: introduce support for the Meson build system\n      ci: fix propagating UTF-8 test locale in musl-based Meson job\n      ci: exercise credential helpers\n      meson: fix exec path with enabled runtime prefix\n      meson: fix OpenSSL fallback when not explicitly required\n      meson: inline the static 'git' library\n      meson: simplify use of the common-main library\n      meson: introduce `libgit_curl` dependency\n      meson: stop linking libcurl into all executables\n      meson: drop separate version library\n      meson: improve PATH handling\n      meson: improve handling of `sane_tool_path` option\n      meson: prevent finding sed(1) in a loop\n      meson: fix overwritten `git` variable\n      meson: consistently use custom program paths to resolve programs\n      gitlab-ci: restrict maximum number of link jobs on Windows\n      gitlab-ci: fix \"msvc-meson\" test job succeeding despite test failures\n      rerere: let `rerere_path()` write paths into a caller-provided buffer\n      path: drop `git_path()` in favor of `repo_git_path()`\n      repo-settings: introduce function to clear struct\n      environment: move access to \"core.hooksPath\" into repo settings\n      environment: move access to \"core.sharedRepository\" into repo settings\n      path: adjust last remaining users of `the_repository`\n\nPeter Krefting (1):\n      l10n: sv.po: Update Swedish translation\n\nPeter Oliver (2):\n      meson: bump minimum required Perl version to 5.26.0\n      meson: fix Perl version check for Meson versions before 1.7.0\n\nPhilippe Blain (2):\n      config/remote.txt: reunite 'severOption' description paragraphs\n      config/remote.txt: improve wording for 'remote.<name>.followRemoteHEAD'\n\nPhillip Wood (9):\n      apply: detect overflow when parsing hunk header\n      rebase -i: reword empty commit after fast-forward\n      merge-tree --stdin: flush stdout to avoid deadlock\n      merge-tree: remove redundant code\n      merge-tree: only use basic merge config\n      merge-tree: improve docs for --stdin\n      merge-tree: fix link formatting in html docs\n      meson: fix building technical and howto docs\n      docs: fix repository-layout when building with breaking changes\n\nPiotr Szlazak (1):\n      doc: documentation for http.uploadarchive config option\n\nRalf Thielow (1):\n      l10n: update German translation\n\nRené Scharfe (5):\n      ref-filter: move ahead-behind bases into used_atom\n      ref-filter: move is-base tip to used_atom\n      ref-filter: remove ref_format_clear()\n      commit: avoid parent list buildup in clear_commit_marks_many()\n      reftable: release name on reftable_reader_new() error\n\nRoy Eldar (7):\n      git-submodule.sh: improve parsing of some long options\n      git-submodule.sh: improve parsing of short options\n      git-submodule.sh: get rid of isnumber\n      git-submodule.sh: get rid of unused variable\n      git-submodule.sh: add some comments\n      git-submodule.sh: improve variables readability\n      git-submodule.sh: rename some variables\n\nRuggero Turra (1):\n      l10n: it: fix spelling of \"sorgente\" (Italian for \"source\")\n\nSam James (1):\n      meson: fix missing deps for technical articles\n\nScott Chacon (1):\n      help: interpret boolean string values for help.autocorrect\n\nSebastian Schuberth (1):\n      gitk: Use an external icon file on Windows\n\nSeyi Kuforiji (13):\n      t/unit-tests: convert hash to use clar test framework\n      t/unit-tests: handle dashes in test suite filenames\n      t/unit-tests: convert mem-pool test to use clar test framework\n      t/unit-tests: adapt priority queue test to use clar test framework\n      t/unit-tests: convert reftable tree test to use clar test framework\n      t/unit-tests: convert hashmap test to use clar test framework\n      t/unit-tests: adapt example decorate test to use clar test framework\n      t/unit-tests: convert strbuf test to use clar test framework\n      t/unit-tests: convert strcmp-offset test to use clar test framework\n      t/unit-tests: implement clar specific oid helper functions\n      t/unit-tests: convert oid-array test to use clar test framework\n      t/unit-tests: convert oidmap test to use clar test framework\n      t/unit-tests: convert oidtree test to use clar test framework\n\nSören Krecker (1):\n      date.c: Fix type missmatch warings from msvc\n\nTaylor Blau (10):\n      t/helper/test-tool: implement sha1-unsafe helper\n      csum-file: store the hash algorithm as a struct field\n      csum-file.c: extract algop from hashfile_checksum_valid()\n      hash.h: introduce `unsafe_hash_algo()`\n      csum-file.c: use unsafe_hash_algo()\n      t/helper/test-hash.c: use unsafe_hash_algo()\n      csum-file: introduce hashfile_checkpoint_init()\n      hash.h: drop unsafe_ function variants\n      Makefile: remove accidental recipe prefix in conditional\n      fetch: fix following tags when fetching specific OID\n\nTeng Long (1):\n      l10n: zh_CN: updated translation for 2.49\n\nTodd Zullinger (37):\n      doc: update howto-index.sh for .adoc extensions\n      contrib/contacts: rename .txt to .adoc\n      contrib/subtree: rename .txt to .adoc\n      t0450: *.txt -> *.adoc fixes\n      .gitattributes: more *.txt -> *.adoc updates\n      doc: remove unneeded .gitattributes\n      Makefile: update reference to technical/racy-git.adoc\n      README: *.txt -> *.adoc fixes\n      CodingGuidelines: *.txt -> *.adoc fixes\n      MyFirstContribution: *.txt -> *.adoc fixes\n      MyFirstObjectWalk: *.txt -> *.adoc fixes\n      howto/new-command: update reference to builtin docs\n      technical/partial-clone: update reference to rev-list-options.adoc\n      doc: *.txt -> *.adoc fixes\n      advice.h: *.txt -> *.adoc fixes\n      apply.c: *.txt -> *.adoc fixes\n      builtin.h: *.txt -> *.adoc fixes\n      config.c: *.txt -> *.adoc fixes\n      contrib/long-running-filter: *.txt -> *.adoc fixes\n      diff.h: *.txt -> *.adoc fixes\n      diffcore.h: *.txt -> *.adoc fixes\n      fsck.h: *.txt -> *.adoc fixes\n      list-objects-filter-options.h: *.txt -> *.adoc fixes\n      object-name.c: *.txt -> *.adoc fixes\n      parse-options.h: *.txt -> *.adoc fixes\n      pseudo-merge.h: *.txt -> *.adoc fixes\n      refs.h: *.txt -> *.adoc fixes\n      setup.c: *.txt -> *.adoc fixes\n      simple-ipc.h: *.txt -> *.adoc fixes\n      t/helper/test-rot13-filter.c: *.txt -> *.adoc fixes\n      t6012: *.txt -> *.adoc fixes\n      t6434: *.txt -> *.adoc fixes\n      trace2.h: *.txt -> *.adoc fixes\n      trace2/tr2_sysenv.c: *.txt -> *.adoc fixes\n      transport.h: *.txt -> *.adoc fixes\n      unpack-trees.c: *.txt -> *.adoc fixes\n      xdiff: *.txt -> *.adoc fixes\n\nToon Claes (10):\n      meson: ensure correct version-def.h is used\n      clone: refactor wanted_peer_refs()\n      clone: cut down on global variables in clone.c\n      clone: add tags refspec earlier to fetch refspec\n      clone: make it possible to specify --tags\n      clone: introduce struct clone_opts in builtin/clone.c\n      parse-options: introduce die_for_incompatible_opt2()\n      builtin/clone: teach git-clone(1) the --revision= option\n      help: include git-zlib.h to print zlib version\n      help: print zlib-ng version number\n\nTuomas Ahola (1):\n      l10n: sv.po: Fix Swedish typos\n\nUsman Akinyemi (7):\n      builtin/update-server-info: remove the_repository global variable\n      version: replace manual ASCII checks with isprint() for clarity\n      version: refactor redact_non_printables()\n      version: refactor get_uname_info()\n      version: extend get_uname_info() to hide system details\n      t5701: add setup test to remove side-effect dependency\n      agent: advertise OS name via agent capability\n\nVũ Tiến Hưng (1):\n      l10n: Updated translation for vi-2.49\n\nYi-Jyun Pan (1):\n      l10n: zh_TW: Git 2.49.0 round 1\n\nZheNing Hu (1):\n      gc: add `--expire-to` option\n\nambar chakravartty (1):\n      t5401: prefer test_path_is_* helper function\n\nbrian m. carlson (8):\n      doc: update gitignore for .adoc extension\n      editorconfig: add .adoc extension\n      gitattributes: mark AsciiDoc files as LF-only\n      doc: use .adoc extension for AsciiDoc files\n      Remove obsolete \".txt\" extensions for AsciiDoc files\n      thunderbird-patch-inline: avoid bashism\n      diff: don't crash with empty argument to -G or -S\n      http: allow using netrc for WebDAV-based HTTP protocol\n\nseoyeon-kwon (1):\n      l10n: ko: fix minor typo in Korean translation\n\n"},{"id":"514299","messageId":"4zi3re4viluih7qwvwlu7mp3j6e6gjexz2bppa5am45nnqkezz@7vtwmyrfdwvi","threadId":"63118","inReplyTo":"xmqqfrjfilc8.fsf@gitster.g","subject":"Problems publishing Rust crates (was: [ANNOUNCE] Git v2.49.0)","fromName":"Josh Steadmon","fromEmail":"steadmon@google.com","sentAt":"2025-03-14T19:43:32Z","receivedAt":"2025-03-14T19:43:39Z","isPatch":false,"sender":{"key":"steadmon@google.com","avatar":"https://avatars.githubusercontent.com/u/2654920?v=4"},"body":"On 2025.03.14 10:16, Junio C Hamano wrote:\n>  * Foreign language interface for Rust into our code base has been added.\n\nUnfortunately, I've run into problems publishing the new crates to\ncrates.io. Specifically, the build process for `cargo publish` is\ndifferent from `cargo build` in that the root of the repository is not\nincluded, and therefore our build.rs scripts cannot find the top-level\nMakefile or any of the Git sources outside of `contrib/libgit-*`.\n\nTo prevent squatters from stealing the libgit* crate names, I've\npublished placeholder crates, which we can replace once we've fixed the\nbuild issues.\n"},{"id":"514302","messageId":"Z9SNuI6hSpKEfv5A@tapette.crustytoothpaste.net","threadId":"63118","inReplyTo":"4zi3re4viluih7qwvwlu7mp3j6e6gjexz2bppa5am45nnqkezz@7vtwmyrfdwvi","subject":"Re: Problems publishing Rust crates (was: [ANNOUNCE] Git v2.49.0)","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2025-03-14T20:12:40Z","receivedAt":"2025-03-14T20:12:43Z","isPatch":false,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"On 2025-03-14 at 19:43:32, Josh Steadmon wrote:\n> On 2025.03.14 10:16, Junio C Hamano wrote:\n> >  * Foreign language interface for Rust into our code base has been added.\n> \n> Unfortunately, I've run into problems publishing the new crates to\n> crates.io. Specifically, the build process for `cargo publish` is\n> different from `cargo build` in that the root of the repository is not\n> included, and therefore our build.rs scripts cannot find the top-level\n> Makefile or any of the Git sources outside of `contrib/libgit-*`.\n> \n> To prevent squatters from stealing the libgit* crate names, I've\n> published placeholder crates, which we can replace once we've fixed the\n> build issues.\n\nThanks, that seems fine for now.  I'll note that we're technically not\nrequired to even publish them on crates.io since Git repositories are\nsupported, although of course crates.io would be convenient, and we can\ndecide later on how to handle this most appropriately.\n\nI think `cargo package` should do most (but not all) of the same checks,\nso we can use that as a testcase to see how things work and explore some\noptions.  We can even run it in CI if we like to avoid problems down the\nline.\n-- \nbrian m. carlson (they/them or he/him)\nToronto, Ontario, CA\n"},{"id":"514317","messageId":"xmqq34fffihq.fsf@gitster.g","threadId":"63118","inReplyTo":"4zi3re4viluih7qwvwlu7mp3j6e6gjexz2bppa5am45nnqkezz@7vtwmyrfdwvi","subject":"Re: Problems publishing Rust crates","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-03-14T20:46:25Z","receivedAt":"2025-03-14T20:46:27Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Josh Steadmon <steadmon@google.com> writes:\n\n> To prevent squatters from stealing the libgit* crate names, I've\n> published placeholder crates, which we can replace once we've fixed the\n> build issues.\n\nThanks for being proactive.  Very much appreciated.\n"},{"id":"514362","messageId":"01cf01db95e7$e78aaa10$b69ffe30$@nexbridge.com","threadId":"63118","inReplyTo":"xmqqfrjfilc8.fsf@gitster.g","subject":"RE: [ANNOUNCE] Git v2.49.0","fromName":"","fromEmail":"rsbecker@nexbridge.com","sentAt":"2025-03-15T20:21:53Z","receivedAt":"2025-03-15T20:22:03Z","isPatch":false,"sender":{"key":"randall.becker@nexbridge.ca","avatar":"https://avatars.githubusercontent.com/u/28956764?v=4"},"body":"On March 14, 2025 1:17 PM, Junio C Hamano wrote:\n>The latest feature release Git v2.49.0 is now available at the usual places.  It is\n>comprised of 460 non-merge commits since v2.48.0, contributed by 89 people, 24\n>of which are new faces [*].\n>\n>The tarballs are found at:\n>\n>    https://www.kernel.org/pub/software/scm/git/\n\nNonStop builds are now available for this release.\n\nThanks,\nRandall\n\n"},{"id":"514429","messageId":"y53krdpxppjsc7qnua6otf7e7vx5yxhiyzilacie5a6vsle3s4@qhvmyqyf63jq","threadId":"63118","inReplyTo":"4zi3re4viluih7qwvwlu7mp3j6e6gjexz2bppa5am45nnqkezz@7vtwmyrfdwvi","subject":"Re: Problems publishing Rust crates (was: [ANNOUNCE] Git v2.49.0)","fromName":"Josh Steadmon","fromEmail":"steadmon@google.com","sentAt":"2025-03-17T18:49:09Z","receivedAt":"2025-03-17T18:49:16Z","isPatch":false,"sender":{"key":"steadmon@google.com","avatar":"https://avatars.githubusercontent.com/u/2654920?v=4"},"body":"On 2025.03.14 12:43, Josh Steadmon wrote:\n> On 2025.03.14 10:16, Junio C Hamano wrote:\n> >  * Foreign language interface for Rust into our code base has been added.\n> \n> Unfortunately, I've run into problems publishing the new crates to\n> crates.io. Specifically, the build process for `cargo publish` is\n> different from `cargo build` in that the root of the repository is not\n> included, and therefore our build.rs scripts cannot find the top-level\n> Makefile or any of the Git sources outside of `contrib/libgit-*`.\n> \n> To prevent squatters from stealing the libgit* crate names, I've\n> published placeholder crates, which we can replace once we've fixed the\n> build issues.\n\nI have some pre-RFC-quality fixes for this. I'll need to split them up\ninto logical changes, add some explanation and discuss alternatives\nconsidered, etc. I should be able to send them to the list sometime\ntomorrow.\n"}]}