| 1 | Git v2.38 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | |
| 6 | * "git remote show [-n] frotz" now pays attention to negative |
| 7 | pathspec. |
| 8 | |
| 9 | * "git push" sometimes performs poorly when reachability bitmaps are |
| 10 | used, even in a repository where other operations are helped by |
| 11 | bitmaps. The push.useBitmaps configuration variable is introduced |
| 12 | to allow disabling use of reachability bitmaps only for "git push". |
| 13 | |
| 14 | * "git grep -m<max-hits>" is a way to limit the hits shown per file. |
| 15 | |
| 16 | * "git merge-tree" learned a new mode where it takes two commits and |
| 17 | computes a tree that would result in the merge commit, if the |
| 18 | histories leading to these two commits were to be merged. |
| 19 | |
| 20 | * "git mv A B" in a sparsely populated working tree can be asked to |
| 21 | move a path between directories that are "in cone" (i.e. expected |
| 22 | to be materialized in the working tree) and "out of cone" |
| 23 | (i.e. expected to be hidden). The handling of such cases has been |
| 24 | improved. |
| 25 | |
| 26 | * Earlier, HTTP transport clients learned to tell the server side |
| 27 | what locale they are in by sending Accept-Language HTTP header, but |
| 28 | this was done only for some requests but not others. |
| 29 | |
| 30 | * Introduce a safe.barerepository configuration variable that |
| 31 | allows users to forbid discovery of bare repositories. |
| 32 | |
| 33 | * Various messages that come from the pack-bitmap codepaths have been |
| 34 | tweaked. |
| 35 | |
| 36 | * "git rebase -i" learns to update branches whose tip appear in the |
| 37 | rebased range with "--update-refs" option. |
| 38 | |
| 39 | * "git ls-files" learns the "--format" option to tweak its output. |
| 40 | |
| 41 | * "git cat-file" learned an option to use the mailmap when showing |
| 42 | commit and tag objects. |
| 43 | |
| 44 | * When "git merge" finds that it cannot perform a merge, it should |
| 45 | restore the working tree to the state before the command was |
| 46 | initiated, but in some corner cases it didn't. |
| 47 | |
| 48 | * Operating modes like "--batch" of "git cat-file" command learned to |
| 49 | take NUL-terminated input, instead of one-item-per-line. |
| 50 | |
| 51 | * "git rm" has become more aware of the sparse-index feature. |
| 52 | |
| 53 | * "git rev-list --disk-usage" learned to take an optional value |
| 54 | "human" to show the reported value in human-readable format, like |
| 55 | "3.40MiB". |
| 56 | |
| 57 | * The "diagnose" feature to create a zip archive for diagnostic |
| 58 | material has been lifted from "scalar" and made into a feature of |
| 59 | "git bugreport". |
| 60 | |
| 61 | * The namespaces used by "log --decorate" from "refs/" hierarchy by |
| 62 | default has been tightened. |
| 63 | |
| 64 | * "git rev-list --ancestry-path=C A..B" is a natural extension of |
| 65 | "git rev-list A..B"; instead of choosing a subset of A..B to those |
| 66 | that have ancestry relationship with A, it lets a subset with |
| 67 | ancestry relationship with C. |
| 68 | |
| 69 | * "scalar" now enables built-in fsmonitor on enlisted repositories, |
| 70 | when able. |
| 71 | |
| 72 | * The bash prompt (in contrib/) learned to optionally indicate when |
| 73 | the index is unmerged. |
| 74 | |
| 75 | * "git clone" command learned the "--bundle-uri" option to coordinate |
| 76 | with hosting sites the use of pre-prepared bundle files. |
| 77 | |
| 78 | * "git range-diff" learned to honor pathspec argument if given. |
| 79 | |
| 80 | * "git format-patch --from=<ident>" can be told to add an in-body |
| 81 | "From:" line even for commits that are authored by the given |
| 82 | <ident> with "--force-in-body-from" option. |
| 83 | |
| 84 | * The built-in fsmonitor refuses to work on a network mounted |
| 85 | repositories; a configuration knob for users to override this has |
| 86 | been introduced. |
| 87 | |
| 88 | * The "scalar" addition from Microsoft is now part of the core Git |
| 89 | installation. |
| 90 | |
| 91 | |
| 92 | Performance, Internal Implementation, Development Support etc. |
| 93 | |
| 94 | * Collection of what is referenced by objects in promisor packs have |
| 95 | been optimized to inspect these objects in the in-pack order. |
| 96 | |
| 97 | * Introduce a helper to see if a branch is already being worked on |
| 98 | (hence should not be newly checked out in a working tree), which |
| 99 | performs much better than the existing find_shared_symref() to |
| 100 | replace many uses of the latter. |
| 101 | |
| 102 | * Teach "git archive" to (optionally and then by default) avoid |
| 103 | spawning an external "gzip" process when creating ".tar.gz" (and |
| 104 | ".tgz") archives. |
| 105 | |
| 106 | * Allow large objects read from a packstream to be streamed into a |
| 107 | loose object file straight, without having to keep it in-core as a |
| 108 | whole. |
| 109 | |
| 110 | * Further preparation to turn git-submodule.sh into a builtin |
| 111 | continues. |
| 112 | |
| 113 | * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp |
| 114 | macro, which would improve maintainability and readability. |
| 115 | |
| 116 | * Teach "make all" to build gitweb as well. |
| 117 | |
| 118 | * Tweak tests so that they still work when the "git init" template |
| 119 | did not create .git/info directory. |
| 120 | |
| 121 | * Add Coccinelle rules to detect the pattern of initializing and then |
| 122 | finalizing a structure without using it in between at all, which |
| 123 | happens after code restructuring and the compilers fail to |
| 124 | recognize as an unused variable. |
| 125 | |
| 126 | * The code to convert between GPG trust level strings and internal |
| 127 | constants we use to represent them have been cleaned up. |
| 128 | |
| 129 | * Support for libnettle as SHA256 implementation has been added. |
| 130 | |
| 131 | * The way "git multi-pack" uses parse-options API has been improved. |
| 132 | |
| 133 | * A Coccinelle rule (in contrib/) to encourage use of COPY_ARRAY |
| 134 | macro has been improved. |
| 135 | |
| 136 | * API tweak to make it easier to run fuzz testing on commit-graph parser. |
| 137 | |
| 138 | * Omit fsync-related trace2 entries when their values are all zero. |
| 139 | |
| 140 | * The codepath to write multi-pack index has been taught to release a |
| 141 | large chunk of memory that holds an array of objects in the packs, |
| 142 | as soon as it is done with the array, to reduce memory consumption. |
| 143 | |
| 144 | * Add a level of redirection to array allocation API in xdiff part, |
| 145 | to make it easier to share with the libgit2 project. |
| 146 | |
| 147 | * "git fetch" client logs the partial clone filter used in the trace2 |
| 148 | output. |
| 149 | |
| 150 | * The "bundle URI" design gets documented. |
| 151 | |
| 152 | * The common ancestor negotiation exchange during a "git fetch" |
| 153 | session now leaves trace log. |
| 154 | |
| 155 | * Test portability improvements. |
| 156 | (merge 4d1d843be7 mt/rot13-in-c later to maint). |
| 157 | |
| 158 | * The "subcommand" mode is introduced to parse-options API and update |
| 159 | the command line parser of Git commands with subcommands. |
| 160 | |
| 161 | * The pack bitmap file gained a bitmap-lookup table to speed up |
| 162 | locating the necessary bitmap for a given commit. |
| 163 | |
| 164 | * The assembly version of SHA-1 implementation for PPC has been |
| 165 | removed. |
| 166 | |
| 167 | * The server side that responds to "git fetch" and "git clone" |
| 168 | request has been optimized by allowing it to send objects in its |
| 169 | object store without recomputing and validating the object names. |
| 170 | |
| 171 | * Annotate function parameters that are not used (but cannot be |
| 172 | removed for structural reasons), to prepare us to later compile |
| 173 | with -Wunused warning turned on. |
| 174 | |
| 175 | * Share the text used to explain configuration variables used by "git |
| 176 | <subcmd>" in "git help <subcmd>" with the text from "git help config". |
| 177 | |
| 178 | * "git mv A B" in a sparsely populated working tree can be asked to |
| 179 | move a path from a directory that is "in cone" to another directory |
| 180 | that is "out of cone". Handling of such a case has been improved. |
| 181 | |
| 182 | * The chainlint script for our tests has been revamped. |
| 183 | |
| 184 | |
| 185 | Fixes since v2.37 |
| 186 | ----------------- |
| 187 | |
| 188 | * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't |
| 189 | correctly record a removed file to the index, which was fixed. |
| 190 | |
| 191 | * Certain diff options are currently ignored when combined-diff is |
| 192 | shown; mark them as incompatible with the feature. |
| 193 | |
| 194 | * Adjust technical/bitmap-format to be formatted by AsciiDoc, and |
| 195 | add some missing information to the documentation. |
| 196 | |
| 197 | * Fixes for tests when the source directory has unusual characters in |
| 198 | its path, e.g. whitespaces, double-quotes, etc. |
| 199 | |
| 200 | * "git mktree --missing" lazily fetched objects that are missing from |
| 201 | the local object store, which was totally unnecessary for the purpose |
| 202 | of creating the tree object(s) from its input. |
| 203 | |
| 204 | * Give _() markings to fatal/warning/usage: labels that are shown in |
| 205 | front of these messages. |
| 206 | |
| 207 | * References to commands-to-be-typed-literally in "git rebase" |
| 208 | documentation mark-up have been corrected. |
| 209 | |
| 210 | * In a non-bare repository, the behavior of Git when the |
| 211 | core.worktree configuration variable points at a directory that has |
| 212 | a repository as its subdirectory, regressed in Git 2.27 days. |
| 213 | |
| 214 | * Recent update to vimdiff layout code has been made more robust |
| 215 | against different end-user vim settings. |
| 216 | |
| 217 | * Plug various memory leaks, both in the main code and in test-tool |
| 218 | commands. |
| 219 | |
| 220 | * Fixes a long-standing corner case bug around directory renames in |
| 221 | the merge-ort strategy. |
| 222 | |
| 223 | * The resolve-undo information in the index was not protected against |
| 224 | GC, which has been corrected. |
| 225 | |
| 226 | * A corner case bug where lazily fetching objects from a promisor |
| 227 | remote resulted in infinite recursion has been corrected. |
| 228 | |
| 229 | * "git clone" from a repository with some ref whose HEAD is unborn |
| 230 | did not set the HEAD in the resulting repository correctly, which |
| 231 | has been corrected. |
| 232 | |
| 233 | * An earlier attempt to plug leaks placed a clean-up label to jump to |
| 234 | at a bogus place, which as been corrected. |
| 235 | |
| 236 | * Variable quoting fix in the vimdiff driver of "git mergetool" |
| 237 | |
| 238 | * "git shortlog -n" relied on the underlying qsort() to be stable, |
| 239 | which shouldn't have. Fixed. |
| 240 | |
| 241 | * A fix for a regression in test framework. |
| 242 | |
| 243 | * mkstemp() emulation on Windows has been improved. |
| 244 | |
| 245 | * Add missing documentation for "include" and "includeIf" features in |
| 246 | "git config" file format, which incidentally teaches the command |
| 247 | line completion to include them in its offerings. |
| 248 | |
| 249 | * Avoid "white/black-list" in documentation and code comments. |
| 250 | |
| 251 | * Workaround for a compiler warning against use of die() in |
| 252 | osx-keychain (in contrib/). |
| 253 | |
| 254 | * Workaround for a false positive compiler warning. |
| 255 | |
| 256 | * "git p4" working on UTF-16 files on Windows did not implement |
| 257 | CRLF-to-LF conversion correctly, which has been corrected. |
| 258 | |
| 259 | * "git p4" did not handle non-ASCII client name well, which has been |
| 260 | corrected. |
| 261 | |
| 262 | * "rerere-train" script (in contrib/) used to honor commit.gpgSign |
| 263 | while recreating the throw-away merges. |
| 264 | |
| 265 | * "git checkout" miscounted the paths it updated, which has been |
| 266 | corrected. |
| 267 | |
| 268 | * Fix for a bug that makes write-tree to fail to write out a |
| 269 | non-existent index as a tree, introduced in 2.37. |
| 270 | |
| 271 | * There was a bug in the codepath to upgrade generation information |
| 272 | in commit-graph from v1 to v2 format, which has been corrected. |
| 273 | |
| 274 | * Gitweb had legacy URL shortener that is specific to the way |
| 275 | projects hosted on kernel.org used to (but no longer) work, which |
| 276 | has been removed. |
| 277 | |
| 278 | * Fix build procedure for Windows that uses CMake so that it can pick |
| 279 | up the shell interpreter from local installation location. |
| 280 | |
| 281 | * Conditionally allow building Python interpreter on Windows |
| 282 | |
| 283 | * Fix to lstat() emulation on Windows. |
| 284 | |
| 285 | * Older gcc with -Wall complains about the universal zero initializer |
| 286 | "struct s = { 0 };" idiom, which makes developers' lives |
| 287 | inconvenient (as -Werror is enabled by DEVELOPER=YesPlease). The |
| 288 | build procedure has been tweaked to help these compilers. |
| 289 | |
| 290 | * Plug memory leaks in the failure code path in the "merge-ort" merge |
| 291 | strategy backend. |
| 292 | |
| 293 | * "git symbolic-ref symref non..sen..se" is now diagnosed as an error. |
| 294 | |
| 295 | * A follow-up fix to a fix for a regression in 2.36 around hooks. |
| 296 | |
| 297 | * Avoid repeatedly running getconf to ask libc version in the test |
| 298 | suite, and instead just as it once per script. |
| 299 | |
| 300 | * Platform-specific code that determines if a directory is OK to use |
| 301 | as a repository has been taught to report more details, especially |
| 302 | on Windows. |
| 303 | |
| 304 | * "vimdiff3" regression fix. |
| 305 | |
| 306 | * "git fsck" reads mode from tree objects but canonicalizes the mode |
| 307 | before passing it to the logic to check object sanity, which has |
| 308 | hid broken tree objects from the checking logic. This has been |
| 309 | corrected, but to help existing projects with broken tree objects |
| 310 | that they cannot fix retroactively, the severity of anomalies this |
| 311 | code detects has been demoted to "info" for now. |
| 312 | |
| 313 | * Fixes to sparse index compatibility work for "reset" and "checkout" |
| 314 | commands. |
| 315 | |
| 316 | * An earlier optimization discarded a tree-object buffer that is |
| 317 | still in use, which has been corrected. |
| 318 | |
| 319 | * Fix deadlocks between main Git process and subprocess spawned via |
| 320 | the pipe_command() API, that can kill "git add -p" that was |
| 321 | reimplemented in C recently. |
| 322 | |
| 323 | * The sequencer machinery translated messages left in the reflog by |
| 324 | mistake, which has been corrected. |
| 325 | |
| 326 | * xcalloc(), imitating calloc(), takes "number of elements of the |
| 327 | array", and "size of a single element", in this order. A call that |
| 328 | does not follow this ordering has been corrected. |
| 329 | |
| 330 | * The preload-index codepath made copies of pathspec to give to |
| 331 | multiple threads, which were left leaked. |
| 332 | |
| 333 | * Update the version of Ubuntu used for GitHub Actions CI from 18.04 |
| 334 | to 22.04. |
| 335 | |
| 336 | * The auto-stashed local changes created by "git merge --autostash" |
| 337 | was mixed into a conflicted state left in the working tree, which |
| 338 | has been corrected. |
| 339 | |
| 340 | * Multi-pack index got corrupted when preferred pack changed from one |
| 341 | pack to another in a certain way, which has been corrected. |
| 342 | (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint). |
| 343 | |
| 344 | * The clean-up of temporary files created via mks_tempfile_dt() was |
| 345 | racy and attempted to unlink() the leading directory when signals |
| 346 | are involved, which has been corrected. |
| 347 | (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint). |
| 348 | |
| 349 | * FreeBSD portability fix for "git maintenance" that spawns "crontab" |
| 350 | to schedule tasks. |
| 351 | (merge ee69e7884e bc/gc-crontab-fix later to maint). |
| 352 | |
| 353 | * Those who use diff-so-fancy as the diff-filter noticed a regression |
| 354 | or two in the code that parses the diff output in the built-in |
| 355 | version of "add -p", which has been corrected. |
| 356 | (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint). |
| 357 | |
| 358 | * Segfault fix-up to an earlier fix to the topic to teach "git reset" |
| 359 | and "git checkout" work better in a sparse checkout. |
| 360 | (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint). |
| 361 | |
| 362 | * "git diff --no-index A B" managed its the pathnames of its two |
| 363 | input files rather haphazardly, sometimes leaking them. The |
| 364 | command line argument processing has been straightened out to clean |
| 365 | it up. |
| 366 | (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint). |
| 367 | |
| 368 | * "git rev-list --verify-objects" ought to inspect the contents of |
| 369 | objects and notice corrupted ones, but it didn't when the commit |
| 370 | graph is in use, which has been corrected. |
| 371 | (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint). |
| 372 | |
| 373 | * More fixes to "add -p" |
| 374 | (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint). |
| 375 | |
| 376 | * The parser in the script interface to parse-options in "git |
| 377 | rev-parse" has been updated to diagnose a bogus input correctly. |
| 378 | (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint). |
| 379 | |
| 380 | * The code that manages list-object-filter structure, used in partial |
| 381 | clones, leaked the instances, which has been plugged. |
| 382 | (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint). |
| 383 | |
| 384 | * Fix another UI regression in the reimplemented "add -p". |
| 385 | (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint). |
| 386 | |
| 387 | * "git fetch" over protocol v2 sent an incorrect ref prefix request |
| 388 | to the server and made "git pull" with configured fetch refspec |
| 389 | that does not cover the remote branch to merge with fail, which has |
| 390 | been corrected. |
| 391 | (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint). |
| 392 | |
| 393 | * A result from opendir() was leaking in the commit-graph expiration |
| 394 | codepath, which has been plugged. |
| 395 | (merge 12f1ae5324 ml/commit-graph-expire-dir-leak-fix later to maint). |
| 396 | |
| 397 | * Just like we have coding guidelines, we now have guidelines for |
| 398 | reviewers. |
| 399 | (merge e01b851923 vd/doc-reviewing-guidelines later to maint). |
| 400 | |
| 401 | * Other code cleanup, docfix, build fix, etc. |
| 402 | (merge 77b9e85c0f vd/fix-perf-tests later to maint). |
| 403 | (merge 0682bc43f5 jk/test-crontab-fixes later to maint). |
| 404 | (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint). |