| Git v2.38 Release Notes | 
 | ======================= | 
 |  | 
 | UI, Workflows & Features | 
 |  | 
 |  * "git remote show [-n] frotz" now pays attention to negative | 
 |    pathspec. | 
 |  | 
 |  * "git push" sometimes performs poorly when reachability bitmaps are | 
 |    used, even in a repository where other operations are helped by | 
 |    bitmaps.  The push.useBitmaps configuration variable is introduced | 
 |    to allow disabling use of reachability bitmaps only for "git push". | 
 |  | 
 |  * "git grep -m<max-hits>" is a way to limit the hits shown per file. | 
 |  | 
 |  * "git merge-tree" learned a new mode where it takes two commits and | 
 |    computes a tree that would result in the merge commit, if the | 
 |    histories leading to these two commits were to be merged. | 
 |  | 
 |  * "git mv A B" in a sparsely populated working tree can be asked to | 
 |    move a path between directories that are "in cone" (i.e. expected | 
 |    to be materialized in the working tree) and "out of cone" | 
 |    (i.e. expected to be hidden).  The handling of such cases has been | 
 |    improved. | 
 |  | 
 |  * Earlier, HTTP transport clients learned to tell the server side | 
 |    what locale they are in by sending Accept-Language HTTP header, but | 
 |    this was done only for some requests but not others. | 
 |  | 
 |  * Introduce a safe.barerepository configuration variable that | 
 |    allows users to forbid discovery of bare repositories. | 
 |  | 
 |  * Various messages that come from the pack-bitmap codepaths have been | 
 |    tweaked. | 
 |  | 
 |  * "git rebase -i" learns to update branches whose tip appear in the | 
 |    rebased range with "--update-refs" option. | 
 |  | 
 |  * "git ls-files" learns the "--format" option to tweak its output. | 
 |  | 
 |  * "git cat-file" learned an option to use the mailmap when showing | 
 |    commit and tag objects. | 
 |  | 
 |  * When "git merge" finds that it cannot perform a merge, it should | 
 |    restore the working tree to the state before the command was | 
 |    initiated, but in some corner cases it didn't. | 
 |  | 
 |  * Operating modes like "--batch" of "git cat-file" command learned to | 
 |    take NUL-terminated input, instead of one-item-per-line. | 
 |  | 
 |  * "git rm" has become more aware of the sparse-index feature. | 
 |  | 
 |  * "git rev-list --disk-usage" learned to take an optional value | 
 |    "human" to show the reported value in human-readable format, like | 
 |    "3.40MiB". | 
 |  | 
 |  * The "diagnose" feature to create a zip archive for diagnostic | 
 |    material has been lifted from "scalar" and made into a feature of | 
 |    "git bugreport". | 
 |  | 
 |  * The namespaces used by "log --decorate" from "refs/" hierarchy by | 
 |    default has been tightened. | 
 |  | 
 |  * "git rev-list --ancestry-path=C A..B" is a natural extension of | 
 |    "git rev-list A..B"; instead of choosing a subset of A..B to those | 
 |    that have ancestry relationship with A, it lets a subset with | 
 |    ancestry relationship with C. | 
 |  | 
 |  * "scalar" now enables built-in fsmonitor on enlisted repositories, | 
 |    when able. | 
 |  | 
 |  * The bash prompt (in contrib/) learned to optionally indicate when | 
 |    the index is unmerged. | 
 |  | 
 |  * "git clone" command learned the "--bundle-uri" option to coordinate | 
 |    with hosting sites the use of pre-prepared bundle files. | 
 |  | 
 |  * "git range-diff" learned to honor pathspec argument if given. | 
 |  | 
 |  * "git format-patch --from=<ident>" can be told to add an in-body | 
 |    "From:" line even for commits that are authored by the given | 
 |    <ident> with "--force-in-body-from" option. | 
 |  | 
 |  * The built-in fsmonitor refuses to work on a network mounted | 
 |    repositories; a configuration knob for users to override this has | 
 |    been introduced. | 
 |  | 
 |  * The "scalar" addition from Microsoft is now part of the core Git | 
 |    installation. | 
 |  | 
 |  | 
 | Performance, Internal Implementation, Development Support etc. | 
 |  | 
 |  * Collection of what is referenced by objects in promisor packs have | 
 |    been optimized to inspect these objects in the in-pack order. | 
 |  | 
 |  * Introduce a helper to see if a branch is already being worked on | 
 |    (hence should not be newly checked out in a working tree), which | 
 |    performs much better than the existing find_shared_symref() to | 
 |    replace many uses of the latter. | 
 |  | 
 |  * Teach "git archive" to (optionally and then by default) avoid | 
 |    spawning an external "gzip" process when creating ".tar.gz" (and | 
 |    ".tgz") archives. | 
 |  | 
 |  * Allow large objects read from a packstream to be streamed into a | 
 |    loose object file straight, without having to keep it in-core as a | 
 |    whole. | 
 |  | 
 |  * Further preparation to turn git-submodule.sh into a builtin | 
 |    continues. | 
 |  | 
 |  * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp | 
 |    macro, which would improve maintainability and readability. | 
 |  | 
 |  * Teach "make all" to build gitweb as well. | 
 |  | 
 |  * Tweak tests so that they still work when the "git init" template | 
 |    did not create .git/info directory. | 
 |  | 
 |  * Add Coccinelle rules to detect the pattern of initializing and then | 
 |    finalizing a structure without using it in between at all, which | 
 |    happens after code restructuring and the compilers fail to | 
 |    recognize as an unused variable. | 
 |  | 
 |  * The code to convert between GPG trust level strings and internal | 
 |    constants we use to represent them have been cleaned up. | 
 |  | 
 |  * Support for libnettle as SHA256 implementation has been added. | 
 |  | 
 |  * The way "git multi-pack" uses parse-options API has been improved. | 
 |  | 
 |  * A Coccinelle rule (in contrib/) to encourage use of COPY_ARRAY | 
 |    macro has been improved. | 
 |  | 
 |  * API tweak to make it easier to run fuzz testing on commit-graph parser. | 
 |  | 
 |  * Omit fsync-related trace2 entries when their values are all zero. | 
 |  | 
 |  * The codepath to write multi-pack index has been taught to release a | 
 |    large chunk of memory that holds an array of objects in the packs, | 
 |    as soon as it is done with the array, to reduce memory consumption. | 
 |  | 
 |  * Add a level of redirection to array allocation API in xdiff part, | 
 |    to make it easier to share with the libgit2 project. | 
 |  | 
 |  * "git fetch" client logs the partial clone filter used in the trace2 | 
 |    output. | 
 |  | 
 |  * The "bundle URI" design gets documented. | 
 |  | 
 |  * The common ancestor negotiation exchange during a "git fetch" | 
 |    session now leaves trace log. | 
 |  | 
 |  * Test portability improvements. | 
 |    (merge 4d1d843be7 mt/rot13-in-c later to maint). | 
 |  | 
 |  * The "subcommand" mode is introduced to parse-options API and update | 
 |    the command line parser of Git commands with subcommands. | 
 |  | 
 |  * The pack bitmap file gained a bitmap-lookup table to speed up | 
 |    locating the necessary bitmap for a given commit. | 
 |  | 
 |  * The assembly version of SHA-1 implementation for PPC has been | 
 |    removed. | 
 |  | 
 |  * The server side that responds to "git fetch" and "git clone" | 
 |    request has been optimized by allowing it to send objects in its | 
 |    object store without recomputing and validating the object names. | 
 |  | 
 |  * Annotate function parameters that are not used (but cannot be | 
 |    removed for structural reasons), to prepare us to later compile | 
 |    with -Wunused warning turned on. | 
 |  | 
 |  * Share the text used to explain configuration variables used by "git | 
 |    <subcmd>" in "git help <subcmd>" with the text from "git help config". | 
 |  | 
 |  * "git mv A B" in a sparsely populated working tree can be asked to | 
 |    move a path from a directory that is "in cone" to another directory | 
 |    that is "out of cone".  Handling of such a case has been improved. | 
 |  | 
 |  * The chainlint script for our tests has been revamped. | 
 |  | 
 |  | 
 | Fixes since v2.37 | 
 | ----------------- | 
 |  | 
 |  * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't | 
 |    correctly record a removed file to the index, which was fixed. | 
 |  | 
 |  * Certain diff options are currently ignored when combined-diff is | 
 |    shown; mark them as incompatible with the feature. | 
 |  | 
 |  * Adjust technical/bitmap-format to be formatted by AsciiDoc, and | 
 |    add some missing information to the documentation. | 
 |  | 
 |  * Fixes for tests when the source directory has unusual characters in | 
 |    its path, e.g. whitespaces, double-quotes, etc. | 
 |  | 
 |  * "git mktree --missing" lazily fetched objects that are missing from | 
 |    the local object store, which was totally unnecessary for the purpose | 
 |    of creating the tree object(s) from its input. | 
 |  | 
 |  * Give _() markings to fatal/warning/usage: labels that are shown in | 
 |    front of these messages. | 
 |  | 
 |  * References to commands-to-be-typed-literally in "git rebase" | 
 |    documentation mark-up have been corrected. | 
 |  | 
 |  * In a non-bare repository, the behavior of Git when the | 
 |    core.worktree configuration variable points at a directory that has | 
 |    a repository as its subdirectory, regressed in Git 2.27 days. | 
 |  | 
 |  * Recent update to vimdiff layout code has been made more robust | 
 |    against different end-user vim settings. | 
 |  | 
 |  * Plug various memory leaks, both in the main code and in test-tool | 
 |    commands. | 
 |  | 
 |  * Fixes a long-standing corner case bug around directory renames in | 
 |    the merge-ort strategy. | 
 |  | 
 |  * The resolve-undo information in the index was not protected against | 
 |    GC, which has been corrected. | 
 |  | 
 |  * A corner case bug where lazily fetching objects from a promisor | 
 |    remote resulted in infinite recursion has been corrected. | 
 |  | 
 |  * "git clone" from a repository with some ref whose HEAD is unborn | 
 |    did not set the HEAD in the resulting repository correctly, which | 
 |    has been corrected. | 
 |  | 
 |  * An earlier attempt to plug leaks placed a clean-up label to jump to | 
 |    at a bogus place, which as been corrected. | 
 |  | 
 |  * Variable quoting fix in the vimdiff driver of "git mergetool" | 
 |  | 
 |  * "git shortlog -n" relied on the underlying qsort() to be stable, | 
 |    which shouldn't have.  Fixed. | 
 |  | 
 |  * A fix for a regression in test framework. | 
 |  | 
 |  * mkstemp() emulation on Windows has been improved. | 
 |  | 
 |  * Add missing documentation for "include" and "includeIf" features in | 
 |    "git config" file format, which incidentally teaches the command | 
 |    line completion to include them in its offerings. | 
 |  | 
 |  * Avoid "white/black-list" in documentation and code comments. | 
 |  | 
 |  * Workaround for a compiler warning against use of die() in | 
 |    osx-keychain (in contrib/). | 
 |  | 
 |  * Workaround for a false positive compiler warning. | 
 |  | 
 |  * "git p4" working on UTF-16 files on Windows did not implement | 
 |    CRLF-to-LF conversion correctly, which has been corrected. | 
 |  | 
 |  * "git p4" did not handle non-ASCII client name well, which has been | 
 |    corrected. | 
 |  | 
 |  * "rerere-train" script (in contrib/) used to honor commit.gpgSign | 
 |    while recreating the throw-away merges. | 
 |  | 
 |  * "git checkout" miscounted the paths it updated, which has been | 
 |    corrected. | 
 |  | 
 |  * Fix for a bug that makes write-tree to fail to write out a | 
 |    non-existent index as a tree, introduced in 2.37. | 
 |  | 
 |  * There was a bug in the codepath to upgrade generation information | 
 |    in commit-graph from v1 to v2 format, which has been corrected. | 
 |  | 
 |  * Gitweb had legacy URL shortener that is specific to the way | 
 |    projects hosted on kernel.org used to (but no longer) work, which | 
 |    has been removed. | 
 |  | 
 |  * Fix build procedure for Windows that uses CMake so that it can pick | 
 |    up the shell interpreter from local installation location. | 
 |  | 
 |  * Conditionally allow building Python interpreter on Windows | 
 |  | 
 |  * Fix to lstat() emulation on Windows. | 
 |  | 
 |  * Older gcc with -Wall complains about the universal zero initializer | 
 |    "struct s = { 0 };" idiom, which makes developers' lives | 
 |    inconvenient (as -Werror is enabled by DEVELOPER=YesPlease).  The | 
 |    build procedure has been tweaked to help these compilers. | 
 |  | 
 |  * Plug memory leaks in the failure code path in the "merge-ort" merge | 
 |    strategy backend. | 
 |  | 
 |  * "git symbolic-ref symref non..sen..se" is now diagnosed as an error. | 
 |  | 
 |  * A follow-up fix to a fix for a regression in 2.36 around hooks. | 
 |  | 
 |  * Avoid repeatedly running getconf to ask libc version in the test | 
 |    suite, and instead just as it once per script. | 
 |  | 
 |  * Platform-specific code that determines if a directory is OK to use | 
 |    as a repository has been taught to report more details, especially | 
 |    on Windows. | 
 |  | 
 |  * "vimdiff3" regression fix. | 
 |  | 
 |  * "git fsck" reads mode from tree objects but canonicalizes the mode | 
 |    before passing it to the logic to check object sanity, which has | 
 |    hid broken tree objects from the checking logic.  This has been | 
 |    corrected, but to help existing projects with broken tree objects | 
 |    that they cannot fix retroactively, the severity of anomalies this | 
 |    code detects has been demoted to "info" for now. | 
 |  | 
 |  * Fixes to sparse index compatibility work for "reset" and "checkout" | 
 |    commands. | 
 |  | 
 |  * An earlier optimization discarded a tree-object buffer that is | 
 |    still in use, which has been corrected. | 
 |  | 
 |  * Fix deadlocks between main Git process and subprocess spawned via | 
 |    the pipe_command() API, that can kill "git add -p" that was | 
 |    reimplemented in C recently. | 
 |  | 
 |  * The sequencer machinery translated messages left in the reflog by | 
 |    mistake, which has been corrected. | 
 |  | 
 |  * xcalloc(), imitating calloc(), takes "number of elements of the | 
 |    array", and "size of a single element", in this order.  A call that | 
 |    does not follow this ordering has been corrected. | 
 |  | 
 |  * The preload-index codepath made copies of pathspec to give to | 
 |    multiple threads, which were left leaked. | 
 |  | 
 |  * Update the version of Ubuntu used for GitHub Actions CI from 18.04 | 
 |    to 22.04. | 
 |  | 
 |  * The auto-stashed local changes created by "git merge --autostash" | 
 |    was mixed into a conflicted state left in the working tree, which | 
 |    has been corrected. | 
 |  | 
 |  * Multi-pack index got corrupted when preferred pack changed from one | 
 |    pack to another in a certain way, which has been corrected. | 
 |    (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint). | 
 |  | 
 |  * The clean-up of temporary files created via mks_tempfile_dt() was | 
 |    racy and attempted to unlink() the leading directory when signals | 
 |    are involved, which has been corrected. | 
 |    (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint). | 
 |  | 
 |  * FreeBSD portability fix for "git maintenance" that spawns "crontab" | 
 |    to schedule tasks. | 
 |    (merge ee69e7884e bc/gc-crontab-fix later to maint). | 
 |  | 
 |  * Those who use diff-so-fancy as the diff-filter noticed a regression | 
 |    or two in the code that parses the diff output in the built-in | 
 |    version of "add -p", which has been corrected. | 
 |    (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint). | 
 |  | 
 |  * Segfault fix-up to an earlier fix to the topic to teach "git reset" | 
 |    and "git checkout" work better in a sparse checkout. | 
 |    (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint). | 
 |  | 
 |  * "git diff --no-index A B" managed its the pathnames of its two | 
 |    input files rather haphazardly, sometimes leaking them.  The | 
 |    command line argument processing has been straightened out to clean | 
 |    it up. | 
 |    (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint). | 
 |  | 
 |  * "git rev-list --verify-objects" ought to inspect the contents of | 
 |    objects and notice corrupted ones, but it didn't when the commit | 
 |    graph is in use, which has been corrected. | 
 |    (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint). | 
 |  | 
 |  * More fixes to "add -p" | 
 |    (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint). | 
 |  | 
 |  * The parser in the script interface to parse-options in "git | 
 |    rev-parse" has been updated to diagnose a bogus input correctly. | 
 |    (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint). | 
 |  | 
 |  * The code that manages list-object-filter structure, used in partial | 
 |    clones, leaked the instances, which has been plugged. | 
 |    (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint). | 
 |  | 
 |  * Fix another UI regression in the reimplemented "add -p". | 
 |    (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint). | 
 |  | 
 |  * "git fetch" over protocol v2 sent an incorrect ref prefix request | 
 |    to the server and made "git pull" with configured fetch refspec | 
 |    that does not cover the remote branch to merge with fail, which has | 
 |    been corrected. | 
 |    (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint). | 
 |  | 
 |  * A result from opendir() was leaking in the commit-graph expiration | 
 |    codepath, which has been plugged. | 
 |    (merge 12f1ae5324 ml/commit-graph-expire-dir-leak-fix later to maint). | 
 |  | 
 |  * Just like we have coding guidelines, we now have guidelines for | 
 |    reviewers. | 
 |    (merge e01b851923 vd/doc-reviewing-guidelines later to maint). | 
 |  | 
 |  * Other code cleanup, docfix, build fix, etc. | 
 |    (merge 77b9e85c0f vd/fix-perf-tests later to maint). | 
 |    (merge 0682bc43f5 jk/test-crontab-fixes later to maint). | 
 |    (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint). |