| Git 2.32 Release Notes | 
 | ====================== | 
 |  | 
 | Backward compatibility notes | 
 | ---------------------------- | 
 |  | 
 |  * ".gitattributes", ".gitignore", and ".mailmap" files that are | 
 |    symbolic links are ignored. | 
 |  | 
 |  * "git apply --3way" used to first attempt a straight application, | 
 |    and only fell back to the 3-way merge algorithm when the stright | 
 |    application failed.  Starting with this version, the command will | 
 |    first try the 3-way merge algorithm and only when it fails (either | 
 |    resulting with conflict or the base versions of blobs are missing), | 
 |    falls back to the usual patch application. | 
 |  | 
 |  | 
 | Updates since v2.31 | 
 | ------------------- | 
 |  | 
 | UI, Workflows & Features | 
 |  | 
 |  * It does not make sense to make ".gitattributes", ".gitignore" and | 
 |    ".mailmap" symlinks, as they are supposed to be usable from the | 
 |    object store (think: bare repositories where HEAD:.mailmap etc. are | 
 |    used).  When these files are symbolic links, we used to read the | 
 |    contents of the files pointed by them by mistake, which has been | 
 |    corrected. | 
 |  | 
 |  * "git stash show" learned to optionally show untracked part of the | 
 |    stash. | 
 |  | 
 |  * "git log --format='...'" learned "%(describe)" placeholder. | 
 |  | 
 |  * "git repack" so far has been only capable of repacking everything | 
 |    under the sun into a single pack (or split by size).  A cleverer | 
 |    strategy to reduce the cost of repacking a repository has been | 
 |    introduced. | 
 |  | 
 |  * The http codepath learned to let the credential layer to cache the | 
 |    password used to unlock a certificate that has successfully been | 
 |    used. | 
 |  | 
 |  * "git commit --fixup=<commit>", which was to tweak the changes made | 
 |    to the contents while keeping the original log message intact, | 
 |    learned "--fixup=(amend|reword):<commit>", that can be used to | 
 |    tweak both the message and the contents, and only the message, | 
 |    respectively. | 
 |  | 
 |  * "git send-email" learned to honor the core.hooksPath configuration. | 
 |  | 
 |  * "git format-patch -v<n>" learned to allow a reroll count that is | 
 |    not an integer. | 
 |  | 
 |  * "git commit" learned "--trailer <key>[=<value>]" option; together | 
 |    with the interpret-trailers command, this will make it easier to | 
 |    support custom trailers. | 
 |  | 
 |  * "git clone --reject-shallow" option fails the clone as soon as we | 
 |    notice that we are cloning from a shallow repository. | 
 |  | 
 |  * A configuration variable has been added to force tips of certain | 
 |    refs to be given a reachability bitmap. | 
 |  | 
 |  * "gitweb" learned "e-mail privacy" feature to redact strings that | 
 |    look like e-mail addresses on various pages. | 
 |  | 
 |  * "git apply --3way" has always been "to fall back to 3-way merge | 
 |    only when straight application fails". Swap the order of falling | 
 |    back so that 3-way is always attempted first (only when the option | 
 |    is given, of course) and then straight patch application is used as | 
 |    a fallback when it fails. | 
 |  | 
 |  * "git apply" now takes "--3way" and "--cached" at the same time, and | 
 |    work and record results only in the index. | 
 |  | 
 |  * The command line completion (in contrib/) has learned that | 
 |    CHERRY_PICK_HEAD is a possible pseudo-ref. | 
 |  | 
 |  * Userdiff patterns for "Scheme" has been added. | 
 |  | 
 |  * "git log" learned "--diff-merges=<style>" option, with an | 
 |    associated configuration variable log.diffMerges. | 
 |  | 
 |  * "git log --format=..." placeholders learned %ah/%ch placeholders to | 
 |    request the --date=human output. | 
 |  | 
 |  * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the | 
 |    system-wide configuration file with GIT_CONFIG_SYSTEM that lets | 
 |    users specify from which file to read the system-wide configuration | 
 |    (setting it to an empty file would essentially be the same as | 
 |    setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the | 
 |    per-user configuration in $HOME/.gitconfig. | 
 |  | 
 |  * "git add" and "git rm" learned not to touch those paths that are | 
 |    outside of sparse checkout. | 
 |  | 
 |  * "git rev-list" learns the "--filter=object:type=<type>" option, | 
 |    which can be used to exclude objects of the given kind from the | 
 |    packfile generated by pack-objects. | 
 |  | 
 |  * The command line completion (in contrib/) for "git stash" has been | 
 |    updated. | 
 |  | 
 |  * "git subtree" updates. | 
 |  | 
 |  * It is now documented that "format-patch" skips merges. | 
 |  | 
 |  * Options to "git pack-objects" that take numeric values like | 
 |    --window and --depth should not accept negative values; the input | 
 |    validation has been tightened. | 
 |  | 
 |  * The way the command line specified by the trailer.<token>.command | 
 |    configuration variable receives the end-user supplied value was | 
 |    both error prone and misleading.  An alternative to achieve the | 
 |    same goal in a safer and more intuitive way has been added, as | 
 |    the trailer.<token>.cmd configuration variable, to replace it. | 
 |  | 
 |  * "git add -i --dry-run" does not dry-run, which was surprising.  The | 
 |    combination of options has taught to error out. | 
 |  | 
 |  * "git push" learns to discover common ancestor with the receiving | 
 |    end over protocol v2.  This will hopefully make "git push" as | 
 |    efficient as "git fetch" in avoiding objects from getting | 
 |    transferred unnecessarily. | 
 |  | 
 |  * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to | 
 |    control how lines ending with CRLF wrapped in base64 or qp are | 
 |    handled. | 
 |  | 
 |  | 
 | Performance, Internal Implementation, Development Support etc. | 
 |  | 
 |  * Rename detection rework continues. | 
 |  | 
 |  * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with | 
 |    prerequisites to catch broken tests that depend on the side effects | 
 |    of optional pieces, but did not work at all when negative | 
 |    prerequisites were involved. | 
 |    (merge 27d578d904 jk/fail-prereq-testfix later to maint). | 
 |  | 
 |  * "git diff-index" codepath has been taught to trust fsmonitor status | 
 |    to reduce number of lstat() calls. | 
 |    (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint). | 
 |  | 
 |  * Reorganize Makefile to allow building git.o and other essential | 
 |    objects without extra stuff needed only for testing. | 
 |  | 
 |  * Preparatory API changes for parallel checkout. | 
 |  | 
 |  * A simple IPC interface gets introduced to build services like | 
 |    fsmonitor on top. | 
 |  | 
 |  * Fsck API clean-up. | 
 |  | 
 |  * SECURITY.md that is facing individual contributors and end users | 
 |    has been introduced.  Also a procedure to follow when preparing | 
 |    embargoed releases has been spelled out. | 
 |    (merge 09420b7648 js/security-md later to maint). | 
 |  | 
 |  * Optimize "rev-list --use-bitmap-index --objects" corner case that | 
 |    uses negative tags as the stopping points. | 
 |  | 
 |  * CMake update for vsbuild. | 
 |  | 
 |  * An on-disk reverse-index to map the in-pack location of an object | 
 |    back to its object name across multiple packfiles is introduced. | 
 |  | 
 |  * Generate [ec]tags under $(QUIET_GEN). | 
 |  | 
 |  * Clean-up codepaths that implements "git send-email --validate" | 
 |    option and improves the message from it. | 
 |  | 
 |  * The last remnant of gettext-poison has been removed. | 
 |  | 
 |  * The test framework has been taught to optionally turn the default | 
 |    merge strategy to "ort" throughout the system where we use | 
 |    three-way merges internally, like cherry-pick, rebase etc., | 
 |    primarily to enhance its test coverage (the strategy has been | 
 |    available as an explicit "-s ort" choice). | 
 |  | 
 |  * A bit of code clean-up and a lot of test clean-up around userdiff | 
 |    area. | 
 |  | 
 |  * Handling of "promisor packs" that allows certain objects to be | 
 |    missing and lazily retrievable has been optimized (a bit). | 
 |  | 
 |  * When packet_write() fails, we gave an extra error message | 
 |    unnecessarily, which has been corrected. | 
 |  | 
 |  * The checkout machinery has been taught to perform the actual | 
 |    write-out of the files in parallel when able. | 
 |  | 
 |  * Show errno in the trace output in the error codepath that calls | 
 |    read_raw_ref method. | 
 |  | 
 |  * Effort to make the command line completion (in contrib/) safe with | 
 |    "set -u" continues. | 
 |  | 
 |  * Tweak a few tests for "log --format=..." that show timestamps in | 
 |    various formats. | 
 |  | 
 |  * The reflog expiry machinery has been taught to emit trace events. | 
 |  | 
 |  * Over-the-wire protocol learns a new request type to ask for object | 
 |    sizes given a list of object names. | 
 |  | 
 |  | 
 | Fixes since v2.31 | 
 | ----------------- | 
 |  | 
 |  * The fsmonitor interface read from its input without making sure | 
 |    there is something to read from.  This bug is new in 2.31 | 
 |    timeframe. | 
 |  | 
 |  * The data structure used by fsmonitor interface was not properly | 
 |    duplicated during an in-core merge, leading to use-after-free etc. | 
 |  | 
 |  * "git bisect" reimplemented more in C during 2.30 timeframe did not | 
 |    take an annotated tag as a good/bad endpoint well.  This regression | 
 |    has been corrected. | 
 |  | 
 |  * Fix macros that can silently inject unintended null-statements. | 
 |  | 
 |  * CALLOC_ARRAY() macro replaces many uses of xcalloc(). | 
 |  | 
 |  * Update insn in Makefile comments to run fuzz-all target. | 
 |  | 
 |  * Fix a corner case bug in "git mv" on case insensitive systems, | 
 |    which was introduced in 2.29 timeframe. | 
 |  | 
 |  * We had a code to diagnose and die cleanly when a required | 
 |    clean/smudge filter is missing, but an assert before that | 
 |    unnecessarily fired, hiding the end-user facing die() message. | 
 |    (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint). | 
 |  | 
 |  * Update C code that sets a few configuration variables when a remote | 
 |    is configured so that it spells configuration variable names in the | 
 |    canonical camelCase. | 
 |    (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint). | 
 |  | 
 |  * A new configuration variable has been introduced to allow choosing | 
 |    which version of the generation number gets used in the | 
 |    commit-graph file. | 
 |    (merge 702110aac6 ds/commit-graph-generation-config later to maint). | 
 |  | 
 |  * Perf test update to work better in secondary worktrees. | 
 |    (merge 36e834abc1 jk/perf-in-worktrees later to maint). | 
 |  | 
 |  * Updates to memory allocation code around the use of pcre2 library. | 
 |    (merge c1760352e0 ab/grep-pcre2-allocfix later to maint). | 
 |  | 
 |  * "git -c core.bare=false clone --bare ..." would have segfaulted, | 
 |    which has been corrected. | 
 |    (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint). | 
 |  | 
 |  * When "git checkout" removes a path that does not exist in the | 
 |    commit it is checking out, it wasn't careful enough not to follow | 
 |    symbolic links, which has been corrected. | 
 |    (merge fab78a0c3d mt/checkout-remove-nofollow later to maint). | 
 |  | 
 |  * A few option description strings started with capital letters, | 
 |    which were corrected. | 
 |    (merge 5ee90326dc cc/downcase-opt-help later to maint). | 
 |  | 
 |  * Plug or annotate remaining leaks that trigger while running the | 
 |    very basic set of tests. | 
 |    (merge 68ffe095a2 ah/plugleaks later to maint). | 
 |  | 
 |  * The hashwrite() API uses a buffering mechanism to avoid calling | 
 |    write(2) too frequently. This logic has been refactored to be | 
 |    easier to understand. | 
 |    (merge ddaf1f62e3 ds/clarify-hashwrite later to maint). | 
 |  | 
 |  * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn | 
 |    the editor as expected (e.g. "revert --no-edit" after a conflict | 
 |    still asked to edit the message), which has been corrected. | 
 |    (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint). | 
 |  | 
 |  * "git daemon" has been tightened against systems that take backslash | 
 |    as directory separator. | 
 |    (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint). | 
 |  | 
 |  * A NULL-dereference bug has been corrected in an error codepath in | 
 |    "git for-each-ref", "git branch --list" etc. | 
 |    (merge c685450880 jk/ref-filter-segfault-fix later to maint). | 
 |  | 
 |  * Streamline the codepath to fix the UTF-8 encoding issues in the | 
 |    argv[] and the prefix on macOS. | 
 |    (merge c7d0e61016 tb/precompose-prefix-simplify later to maint). | 
 |  | 
 |  * The command-line completion script (in contrib/) had a couple of | 
 |    references that would have given a warning under the "-u" (nounset) | 
 |    option. | 
 |    (merge c5c0548d79 vs/completion-with-set-u later to maint). | 
 |  | 
 |  * When "git pack-objects" makes a literal copy of a part of existing | 
 |    packfile using the reachability bitmaps, its update to the progress | 
 |    meter was broken. | 
 |    (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint). | 
 |  | 
 |  * The dependencies for config-list.h and command-list.h were broken | 
 |    when the former was split out of the latter, which has been | 
 |    corrected. | 
 |    (merge 56550ea718 sg/bugreport-fixes later to maint). | 
 |  | 
 |  * "git push --quiet --set-upstream" was not quiet when setting the | 
 |    upstream branch configuration, which has been corrected. | 
 |    (merge f3cce896a8 ow/push-quiet-set-upstream later to maint). | 
 |  | 
 |  * The prefetch task in "git maintenance" assumed that "git fetch" | 
 |    from any remote would fetch all its local branches, which would | 
 |    fetch too much if the user is interested in only a subset of | 
 |    branches there. | 
 |    (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint). | 
 |  | 
 |  * Clarify that pathnames recorded in Git trees are most often (but | 
 |    not necessarily) encoded in UTF-8. | 
 |    (merge 9364bf465d ab/pathname-encoding-doc later to maint). | 
 |  | 
 |  * "git --config-env var=val cmd" weren't accepted (only | 
 |    --config-env=var=val was). | 
 |    (merge c331551ccf ps/config-env-option-with-separate-value later to maint). | 
 |  | 
 |  * When the reachability bitmap is in effect, the "do not lose | 
 |    recently created objects and those that are reachable from them" | 
 |    safety to protect us from races were disabled by mistake, which has | 
 |    been corrected. | 
 |    (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint). | 
 |  | 
 |  * Cygwin pathname handling fix. | 
 |    (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint). | 
 |  | 
 |  * "git rebase --[no-]reschedule-failed-exec" did not work well with | 
 |    its configuration variable, which has been corrected. | 
 |    (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint). | 
 |  | 
 |  * Portability fix for command line completion script (in contrib/). | 
 |    (merge f2acf763e2 si/zsh-complete-comment-fix later to maint). | 
 |  | 
 |  * "git repack -A -d" in a partial clone unnecessarily loosened | 
 |    objects in promisor pack. | 
 |  | 
 |  * "git bisect skip" when custom words are used for new/old did not | 
 |    work, which has been corrected. | 
 |  | 
 |  * A few variants of informational message "Already up-to-date" has | 
 |    been rephrased. | 
 |    (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint). | 
 |  | 
 |  * "git submodule update --quiet" did not propagate the quiet option | 
 |    down to underlying "git fetch", which has been corrected. | 
 |    (merge 62af4bdd42 nc/submodule-update-quiet later to maint). | 
 |  | 
 |  * Document that our test can use "local" keyword. | 
 |    (merge a84fd3bcc6 jc/test-allows-local later to maint). | 
 |  | 
 |  * The word-diff mode has been taught to work better with a word | 
 |    regexp that can match an empty string. | 
 |    (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint). | 
 |  | 
 |  * "git p4" learned to find branch points more efficiently. | 
 |    (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint). | 
 |  | 
 |  * When "git update-ref -d" removes a ref that is packed, it left | 
 |    empty directories under $GIT_DIR/refs/ for | 
 |    (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint). | 
 |  | 
 |  * "git clean" and "git ls-files -i" had confusion around working on | 
 |    or showing ignored paths inside an ignored directory, which has | 
 |    been corrected. | 
 |    (merge b548f0f156 en/dir-traversal later to maint). | 
 |  | 
 |  * The handling of "%(push)" formatting element of "for-each-ref" and | 
 |    friends was broken when the same codepath started handling | 
 |    "%(push:<what>)", which has been corrected. | 
 |    (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint). | 
 |  | 
 |  * The bash prompt script (in contrib/) did not work under "set -u". | 
 |    (merge 5c0cbdb107 en/prompt-under-set-u later to maint). | 
 |  | 
 |  * The "chainlint" feature in the test framework is a handy way to | 
 |    catch common mistakes in writing new tests, but tends to get | 
 |    expensive.  An knob to selectively disable it has been introduced | 
 |    to help running tests that the developer has not modified. | 
 |    (merge 2d86a96220 jk/test-chainlint-softer later to maint). | 
 |  | 
 |  * The "rev-parse" command did not diagnose the lack of argument to | 
 |    "--path-format" option, which was introduced in v2.31 era, which | 
 |    has been corrected. | 
 |    (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint). | 
 |  | 
 |  * Other code cleanup, docfix, build fix, etc. | 
 |    (merge f451960708 dl/cat-file-doc-cleanup later to maint). | 
 |    (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint). | 
 |    (merge ea7e63921c jr/doc-ignore-typofix later to maint). | 
 |    (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint). | 
 |    (merge 42efa1231a jk/filter-branch-sha256 later to maint). | 
 |    (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint). | 
 |    (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint). | 
 |    (merge 47957485b3 ab/read-tree later to maint). | 
 |    (merge 2be927f3d1 ab/diff-no-index-tests later to maint). | 
 |    (merge 76593c09bb ab/detox-gettext-tests later to maint). | 
 |    (merge 28e29ee38b jc/doc-format-patch-clarify later to maint). | 
 |    (merge fc12b6fdde fm/user-manual-use-preface later to maint). | 
 |    (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint). | 
 |    (merge 61a7660516 hn/reftable-tables-doc-update later to maint). | 
 |    (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint). | 
 |    (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint). | 
 |    (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint). | 
 |    (merge 7a14acdbe6 po/diff-patch-doc later to maint). | 
 |    (merge f91371b948 pw/patience-diff-clean-up later to maint). | 
 |    (merge 3a7f0908b6 mt/clean-clean later to maint). | 
 |    (merge d4e2d15a8b ab/streaming-simplify later to maint). | 
 |    (merge 0e59f7ad67 ah/merge-ort-i18n later to maint). | 
 |    (merge e6f68f62e0 ls/typofix later to maint). |