Sync with Git 2.51.2
authorJunio C Hamano <[email protected]>
Mon, 27 Oct 2025 03:05:40 +0000 (26 20:05 -0700)
committerJunio C Hamano <[email protected]>
Mon, 27 Oct 2025 03:09:24 +0000 (26 20:09 -0700)
Signed-off-by: Junio C Hamano <[email protected]>
1  2 
Documentation/RelNotes/2.52.0.adoc

index 9785b9d,0000000..61211db
mode 100644,000000..100644
--- /dev/null
@@@ -1,414 -1,0 +1,360 @@@
-    (merge 1b5a6bfff3 jk/curl-global-trace-components later to maint).
 +Git v2.52 Release Notes
 +=======================
 +
 +UI, Workflows & Features
 +------------------------
 +
 + * The "list" subcommand of "git refs" acts as a front-end for
 +   "git for-each-ref".
 +
 + * "git cmd --help-all" now works outside repositories.
 +
 + * "git diff-tree" learned "--max-depth" option.
 +
 + * A new subcommand "git repo" gives users a way to grab various
 +   repository characteristics.
 +
 + * A new command "git last-modified" has been added to show the closest
 +   ancestor commit that touched each path.
 +
 + * "git refs exists" that works like "git show-ref --exists" has been
 +   added.
 +
 + * "repo info" learns a short-hand option "-z" that is the same as
 +   "--format=nul", and learns to report the objects format used in the
 +   repository.
 +
 + * "core.commentChar=auto" that attempts to dynamically pick a
 +   suitable comment character is non-workable, as it is too much
 +   trouble to support for little benefit, and is marked as deprecated.
 +
 + * "git send-email" learned to drive "git imap-send" to store already
 +   sent e-mails in an IMAP folder.
 +
 + * The "promisor-remote" capability mechanism has been updated to
 +   allow the "partialCloneFilter" settings and the "token" value to be
 +   communicated from the server side.
 +
 + * Declare that "git init" that is not otherwise configured uses
 +   'main' as the initial branch, not 'master', starting Git 3.0.
 +
 + * Keep giving hint about the default initial branch name for users
 +   who may be surprised after Git 3.0 switch-over.
 +
 + * The stash.index configuration variable can be set to make "git stash
 +   pop/apply" pretend that it was invoked with "--index".
 +
 + * "git fast-import" learned that "--signed-commits=<how>" option that
 +   corresponds to that of "git fast-export".
 +
 + * Marking a hunk 'selected' in "git add -p" and then splitting made
 +   all the split pieces 'selected'; this has been changed to make them
 +   all 'undecided', which gives better end-user experience.
 +
 + * Configuration variables that take a pathname as a value
 +   (e.g. blame.ignorerevsfile) can be marked as optional by prefixing
 +   ":(optoinal)" before its value.
 +
 + * Show 'P'ipe command in "git add -p".
 +
 +
 +Performance, Internal Implementation, Development Support etc.
 +--------------------------------------------------------------
 +
 + * string_list_split*() family of functions have been extended to
 +   simplify common use cases.
 +
 + * Arrays of strbuf is often a wrong data structure to use, and
 +   strbuf_split*() family of functions that create them often have
 +   better alternatives.  Update several code paths and replace
 +   strbuf_split*().
 +
 + * Revision traversal limited with pathspec, like "git log dir/*",
 +   used to ignore changed-paths Bloom filter when the pathspec
 +   contained wildcards; now they take advantage of the filter when
 +   they can.
 +
 + * Doc lint updates to encourage the newer and easier-to-use
 +   `synopsis` format, with fixes to a handful of existing uses.
 +
 + * Remove dependency on the_repository and other globals from the
 +   commit-graph code, and other changes unrelated to de-globaling.
 +
 + * Discord has been added to the first contribution documentation as
 +   another way to ask for help.
 +
 + * Inspired by Ezekiel's recent effort to showcase Rust interface, the
 +   hash function implementation used to hash lines have been updated
 +   to the one used for ELF symbol lookup by Glibc.
 +
 + * Instead of scanning for the remaining items to see if there are
 +   still commits to be explored in the queue, use khash to remember
 +   which items are still on the queue (an unacceptable alternative is
 +   to reserve one object flag bits).
 +
 + * The bulk-checkin code used to depend on a file-scope static
 +   singleton variable, which has been updated to pass an instance
 +   throughout the callchain.
 +
 + * The work to build on the bulk-checkin infrastructure to create many
 +   objects at once in a transaction and to abstract it into the
 +   generic object layer continues.
 +
 + * CodingGuidelines now spells out how bitfields are to be written.
 +
 + * Adjust to the way newer versions of cURL selectively enable tracing
 +   options, so that our tests can continue to work.
-    (merge 4d491ade8f js/rebase-i-allow-drop-on-a-merge later to maint).
 +
 + * The clear_alloc_state() API function was not fully clearing the
 +   structure for reuse, but since nobody reuses it, replace it with a
 +   variant that frees the structure as well, making the callers simpler.
 +
 + * "git range-diff" learned a way to limit the memory consumed by
 +   O(N*N) cost matrix.
 +
 + * Some places in the code confused a variable that is *not* a boolean
 +   to enable color but is an enum that records what the user requested
 +   to do about color.  A couple of bugs of this sort have been fixed,
 +   while the code has been cleaned up to prevent similar bugs in the
 +   future.
 +
 + * The build procedure based on meson learned a target to only build
 +   documentation, similar to "make doc".
 +   (merge ff4ec8ded0 ps/meson-build-docs later to maint).
 +
 + * Dip our toes a bit to (optionally) use Rust implemented helper
 +   called from our C code.
 +
 + * Documentation for "git log --pretty" options has been updated
 +   to make it easier to translate.
 +
 + * Instead of three library archives (one for git, one for reftable,
 +   and one for xdiff), roll everything into a single libgit.a archive.
 +   This would help later effort to FFI into Rust.
 +
 + * The beginning of SHA1-SHA256 interoperability work.
 +
 + * Build procedure for a few credential helpers (in contrib/) have
 +   been updated.
 +
 +
 +Fixes since v2.51
 +-----------------
 +
 +Unless otherwise noted, all the changes in 2.51.X maintenance track,
 +including security updates, are included in this release.
 +
 + * During interactive rebase, using 'drop' on a merge commit lead to
 +   an error, which was incorrect.
-    (merge 465eff81de ps/reflog-migrate-fixes later to maint).
 +
 + * "git refs migrate" to migrate the reflog entries from a refs
 +   backend to another had a handful of bugs squashed.
-    (merge dfbfc2221b dl/push-missing-object-error later to maint).
 +
 + * "git remote rename origin upstream" failed to move origin/HEAD to
 +   upstream/HEAD when origin/HEAD is unborn and performed other
 +   renames extremely inefficiently, which has been corrected.
 +   (merge 16c4fa26b9 ps/remote-rename-fix later to maint).
 +
 + * "git describe" has been optimized by using better data structure.
 +   (merge 08bb69d70f rs/describe-with-prio-queue later to maint).
 +
 + * "git push" had a code path that led to BUG() but it should have
 +   been a die(), as it is a response to a usual but invalid end-user
 +   action to attempt pushing an object that does not exist.
-    (merge f6ecb603ff en/ort-rename-fixes later to maint).
 +
 + * Various bugs about rename handling in "ort" merge strategy have
 +   been fixed.
-    (merge e1d3d61a45 jc/diff-no-index-in-subdir later to maint).
 +
 + * "git jump" (in contrib/) fails to parse the diff header correctly
 +   when a file has a space in its name, which has been corrected.
 +   (merge 621ce9c1c6 gh/git-jump-pathname-with-sp later to maint).
 +
 + * "git diff --no-index" run inside a subdirectory under control of a
 +   Git repository operated at the top of the working tree and stripped
 +   the prefix from the output, and oddballs like "-" (stdin) did not
 +   work correctly because of it.  Correct the set-up by undoing what
 +   the set-up sequence did to cwd and prefix.
-    (merge 623f7af2 jk/diff-from-contents-fix later to maint).
-    (merge 3da4413d jc/diff-from-contents-fix later to maint).
 +
 + * Various options to "git diff" that makes comparison ignore certain
 +   aspects of the differences (like "space changes are ignored",
 +   "differences in lines that match these regular expressions are
 +   ignored") did not work well with "--name-only" and friends.
 +   (merge b55e6d36eb ly/diff-name-only-with-diff-from-content later to maint).
 +
 + * The above caused regressions, which has been corrected.
-    (merge 457534d041 js/progress-delay-fix later to maint).
 +
 + * Documentation for "git rebase" has been updated.
 +   (merge 3f7f2b0359 je/doc-rebase later to maint).
 +
 + * The start_delayed_progress() function in the progress eye-candy API
 +   did not clear its internal state, making an initial delay value
 +   larger than 1 second ineffective, which has been corrected.
-    (merge 716d905792 bc/doc-compat-object-format-not-working later to maint).
 +
 + * The compatObjectFormat extension is used to hide an incomplete
 +   feature that is not yet usable for any purpose other than
 +   developing the feature further.  Document it as such to discourage
 +   its use by mere mortals.
-    (merge 8f32a5a6c0 jk/fetch-check-graph-objects-fix later to maint).
 +
 + * "git log -L..." compared trees of multiple parents with the tree of the
 +   merge result in an unnecessarily inefficient way.
 +   (merge 0a15bb634c sg/line-log-merge-optim later to maint).
 +
 + * Under a race against another process that is repacking the
 +   repository, especially a partially cloned one, "git fetch" may
 +   mistakenly think some objects we do have are missing, which has
 +   been corrected.
-    (merge bcb20dda83 js/doc-gitk-history later to maint).
 +
 + * "git fetch" can clobber a symref that is dangling when the
 +   remote-tracking HEAD is set to auto update, which has been
 +   corrected.
 +
 + * "git describe <blob>" misbehaves and/or crashes in some corner
 +   cases, which has been taught to exit with failure gracefully.
 +   (merge 7c10e48e81 jk/describe-blob later to maint).
 +
 + * Manual page for "gitk" is updated with the current maintainer's
 +   name.
-    (merge 37001cdbc4 ds/doc-ggg-pr-fork-clarify later to maint).
 +
 + * Update the instructions for using GGG in the MyFirstContribution
 +   document to say that a GitHub PR could be made against `git/git`
 +   instead of `gitgitgadget/git`.
-    (merge 0eeacde50e da/cargo-serialize later to maint).
 +
 + * Makefile tried to run multiple "cargo build" which would not work
 +   very well; serialize their execution to work around this problem.
-    (merge 93afe9b060 ds/path-walk-repack-fix later to maint).
 +
 + * "git repack --path-walk" lost objects in some corner cases, which
 +   has been corrected.
-    (merge 608cf5b793 ps/gitlab-ci-disable-windows-monitoring later to maint).
 +
 + * "git ls-files <pathspec>..." should not necessarily have to expand
 +   the index fully if a sparsified directory is excluded by the
 +   pathspec; the code is taught to expand the index on demand to avoid
 +   this.
 +   (merge 681f26bccc ds/ls-files-lazy-unsparse later to maint).
 +
 + * Windows "real-time monitoring" interferes with the execution of
 +   tests and affects negatively in both correctness and performance,
 +   which has been disabled in Gitlab CI.
-    (merge 88a2dc68c8 ps/upload-pack-oom-protection later to maint).
 +
 + * A broken or malicious "git fetch" can say that it has the same
 +   object for many many times, and the upload-pack serving it can
 +   exhaust memory storing them redundantly, which has been corrected.
-    (merge e3106998ff sg/line-log-boundary-fixes later to maint).
 +
 + * A corner case bug in "git log -L..." has been corrected.
-    (merge 1092cd6435 jk/add-i-color later to maint).
 +
 + * "git rev-parse --short" and friends failed to disambiguate two
 +   objects with object names that share common prefix longer than 32
 +   characters, which has been fixed.
 +   (merge 8655908b9e jc/longer-disambiguation-fix later to maint).
 +
 + * Some among "git add -p" and friends ignored color.diff and/or
 +   color.ui configuration variables, which is an old regression, which
 +   has been corrected.
-    (merge 82a0a73e15 pw/rebase-i-cleanup-fix later to maint).
 +
 + * "git subtree" (in contrib/) did not work correctly when splitting
 +   squashed subtrees, which has been improved.
 +
 + * Import a newer version of the clar unit testing framework.
 +   (merge 93dbb6b3c5 ps/clar-updates later to maint).
 +
 + * "git send-email --compose --reply-to=<address>" used to add
 +   duplicated Reply-To: header, which made mailservers unhappy.  This
 +   has been corrected.
 +   (merge f448f65719 nb/send-email-no-dup-reply-to later to maint).
 +
 + * "git rebase -i" failed to clean-up the commit log message when the
 +   command commits the final one in a chain of "fixup" commands, which
 +   has been corrected.
-    (merge 948b2ab0d8 kn/refs-files-case-insensitive later to maint).
 +
 + * There are double frees and leaks around setup_revisions() API used
 +   in "git stash show", which has been fixed, and setup_revisions()
 +   API gained a wrapper to make it more ergonomic when using it with
 +   strvec-manged argc/argv pairs.
 +   (merge a04bc71725 jk/setup-revisions-freefix later to maint).
 +
 + * Deal more gracefully with directory / file conflicts when the files
 +   backend is used for ref storage, by failing only the ones that are
 +   involved in the conflict while allowing others.
-    (merge 54a60e5b38 kh/you-still-use-whatchanged-fix later to maint).
 +
 + * "git last-modified" operating in non-recursive mode used to trigger
 +   a BUG(), which has been corrected.
 +
 + * The use of "git config get" command to learn how ANSI color
 +   sequence is for a particular type, e.g., "git config get
 +   --type=color --default=reset no.such.thing", isn't very ergonomic.
 +   (merge e4dabf4fd6 ps/config-get-color-fixes later to maint).
 +
 + * The "do you still use it?" message given by a command that is
 +   deeply deprecated and allow us to suggest alternatives has been
 +   updated.
-    (merge 3721541d35 jt/clang-format-foreach-wo-space-before-parenthesis later to maint).
 +
 + * Clang-format update to let our control macros be formatted the way we
 +   had them traditionally, e.g., "for_each_string_list_item()" without
 +   space before the parentheses.
-    (merge ecc5749578 js/curl-off-t-fixes later to maint).
 +
 + * A few places where a size_t value was cast to curl_off_t without
 +   checking has been updated to use the existing helper function.
-    (merge fddb484255 ps/ci-avoid-broken-sudo-on-ubuntu later to maint).
 +
 + * "git reflog write" did not honor the configured user.name/email
 +   which has been corrected.
 +
 + * Handling of an empty subdirectory of .git/refs/ in the ref-files
 +   backend has been corrected.
 +
 + * Our CI script requires "sudo" that can be told to preserve
 +   environment, but Ubuntu replaced with "sudo" with an implementation
 +   that lacks the feature.  Work this around by reinstalling the
 +   original version.
-    (merge c0bec06cfe jk/diff-no-index-with-pathspec-fix later to maint).
 +
 + * The reftable backend learned to sanity check its on-disk data more
 +   carefully.
 +   (merge 466a3a1afd kn/reftable-consistency-checks later to maint).
 +
 + * A lot of code clean-up of xdiff.
 +   Split out of a larger topic.
 +   (merge 8b9c5d2e3a en/xdiff-cleanup later to maint).
 +
 + * "git format-patch --range-diff=... --notes=..." did not drive the
 +   underlying range-diff with correct --notes parameter, ending up
 +   comparing with different set of notes from its main patch output
 +   you would get from "git format-patch --notes=..." for a singleton
 +   patch.
 +
 + * The code in "git add -p" and friends to iterate over hunks was
 +   riddled with bugs, which has been corrected.
 +
 + * A few more things that patch authors can do to help maintainer to
 +   keep track of their topics better.
 +   (merge 1a41698841 tb/doc-submitting-patches later to maint).
 +
 + * An earlier addition to "git diff --no-index A B" to limit the
 +   output with pathspec after the two directories misbehaved when
 +   these directories were given with a trailing slash, which has been
 +   corrected.
-    (merge 50927f4f68 jk/status-z-short-fix later to maint).
 +
 + * The "--short" option of "git status" that meant output for humans
 +   and "-z" option to show NUL delimited output format did not mix
 +   well, and colored some but not all things.  The command has been
 +   updated to color all elements consistently in such a case.
-    (merge 330a54099e tb/unicode-width-table-17 later to maint).
 +
 + * Unicode width table update.
-    (merge b7fb2194b9 ps/t7528-ssh-agent-uds-workaround later to maint).
 +
 + * GPG signing test set-up has been broken for a year, which has been
 +   corrected.
 +   (merge 516bf45749 jc/t1016-setup-fix later to maint).
 +
 + * Recent OpenSSH creates the Unix domain socket to communicate with
 +   ssh-agent under $HOME instead of /tmp, which causes our test to
 +   fail doe to overly long pathname in our test environment, which has
 +   been worked around by using "ssh-agent -T".
-    (merge 823d537fa7 kh/doc-git-log-markup-fix later to maint).
-    (merge cf7efa4f33 rj/t6137-cygwin-fix later to maint).
 +
 + * Other code cleanup, docfix, build fix, etc.
-    (merge 741f36c7d9 kr/clone-synopsis-fix later to maint).
 +   (merge 529a60a885 ua/t1517-short-help-tests later to maint).
 +   (merge 22d421fed9 ac/deglobal-fmt-merge-log-config later to maint).
-    (merge 7d4a5fef7d ds/doc-count-objects-fix later to maint).
 +   (merge a60203a015 dk/t7005-editor-updates later to maint).
-    (merge f38786baa7 ja/asciidoc-doctor-verbatim-fixes later to maint).
-    (merge 374579c6d4 kh/doc-interpret-trailers-markup-fix later to maint).
-    (merge 44dce6541c kh/doc-config-typofix later to maint).
-    (merge 785628b173 js/doc-sending-patch-via-thunderbird later to maint).
 +   (merge 16684b6fae ps/reftable-libgit2-cleanup later to maint).
-    (merge 2f4bf83ffc km/alias-doc-markup-fix later to maint).
-    (merge b0d97aac19 kh/doc-markup-fixes later to maint).
 +   (merge e5c27bd3d8 je/doc-add later to maint).
 +   (merge 13296ac909 ps/object-store-midx-dedup-info later to maint).
-    (merge c25651aefd ds/midx-write-fixes later to maint).
-    (merge 069c15d256 rs/object-name-extend-abbrev-len-update later to maint).
-    (merge bf5c224537 mm/worktree-doc-typofix later to maint).
-    (merge 31397bc4f7 kh/doc-fast-import-markup-fix later to maint).
-    (merge ac7096723b jc/doc-includeif-hasconfig-remote-url-fix later to maint).
-    (merge fafc9b08b8 ag/doc-sendmail-gmail-example-update later to maint).
 +   (merge f9a6705d9a tc/t0450-harden later to maint).
-    (merge e1d062e8ba ps/odb-clean-stale-wrappers later to maint).
-    (merge fdd21ba116 mh/doc-credential-url-prefix later to maint).
-    (merge 1c573a3451 en/doc-merge-tree-describe-merge-base later to maint).
-    (merge 84a6bf7965 ja/doc-markup-attached-paragraph-fix later to maint).
-    (merge 399694384b kh/doc-patch-id-markup-fix later to maint).
 +   (merge a66fc22bf9 rs/get-oid-with-flags-cleanup later to maint).
-    (merge 3860985105 js/unreachable-workaround-for-no-symlink-head later to maint).
-    (merge b3ac6e737d kh/doc-continued-paragraph-fix later to maint).
 +   (merge 15b8abde07 js/mingw-includes-cleanup later to maint).
-    (merge 96978d7545 js/ci-github-actions-update later to maint).
-    (merge 0c4f1346ca so/t2401-use-test-path-helpers later to maint).
 +   (merge 2cebca0582 tb/cat-file-objectmode-update later to maint).