| 1 | Git 2.32 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Backward compatibility notes |
| 5 | ---------------------------- |
| 6 | |
| 7 | * ".gitattributes", ".gitignore", and ".mailmap" files that are |
| 8 | symbolic links are ignored. |
| 9 | |
| 10 | * "git apply --3way" used to first attempt a straight application, |
| 11 | and only fell back to the 3-way merge algorithm when the stright |
| 12 | application failed. Starting with this version, the command will |
| 13 | first try the 3-way merge algorithm and only when it fails (either |
| 14 | resulting with conflict or the base versions of blobs are missing), |
| 15 | falls back to the usual patch application. |
| 16 | |
| 17 | |
| 18 | Updates since v2.31 |
| 19 | ------------------- |
| 20 | |
| 21 | UI, Workflows & Features |
| 22 | |
| 23 | * It does not make sense to make ".gitattributes", ".gitignore" and |
| 24 | ".mailmap" symlinks, as they are supposed to be usable from the |
| 25 | object store (think: bare repositories where HEAD:.mailmap etc. are |
| 26 | used). When these files are symbolic links, we used to read the |
| 27 | contents of the files pointed by them by mistake, which has been |
| 28 | corrected. |
| 29 | |
| 30 | * "git stash show" learned to optionally show untracked part of the |
| 31 | stash. |
| 32 | |
| 33 | * "git log --format='...'" learned "%(describe)" placeholder. |
| 34 | |
| 35 | * "git repack" so far has been only capable of repacking everything |
| 36 | under the sun into a single pack (or split by size). A cleverer |
| 37 | strategy to reduce the cost of repacking a repository has been |
| 38 | introduced. |
| 39 | |
| 40 | * The http codepath learned to let the credential layer to cache the |
| 41 | password used to unlock a certificate that has successfully been |
| 42 | used. |
| 43 | |
| 44 | * "git commit --fixup=<commit>", which was to tweak the changes made |
| 45 | to the contents while keeping the original log message intact, |
| 46 | learned "--fixup=(amend|reword):<commit>", that can be used to |
| 47 | tweak both the message and the contents, and only the message, |
| 48 | respectively. |
| 49 | |
| 50 | * "git send-email" learned to honor the core.hooksPath configuration. |
| 51 | |
| 52 | * "git format-patch -v<n>" learned to allow a reroll count that is |
| 53 | not an integer. |
| 54 | |
| 55 | * "git commit" learned "--trailer <key>[=<value>]" option; together |
| 56 | with the interpret-trailers command, this will make it easier to |
| 57 | support custom trailers. |
| 58 | |
| 59 | * "git clone --reject-shallow" option fails the clone as soon as we |
| 60 | notice that we are cloning from a shallow repository. |
| 61 | |
| 62 | * A configuration variable has been added to force tips of certain |
| 63 | refs to be given a reachability bitmap. |
| 64 | |
| 65 | * "gitweb" learned "e-mail privacy" feature to redact strings that |
| 66 | look like e-mail addresses on various pages. |
| 67 | |
| 68 | * "git apply --3way" has always been "to fall back to 3-way merge |
| 69 | only when straight application fails". Swap the order of falling |
| 70 | back so that 3-way is always attempted first (only when the option |
| 71 | is given, of course) and then straight patch application is used as |
| 72 | a fallback when it fails. |
| 73 | |
| 74 | * "git apply" now takes "--3way" and "--cached" at the same time, and |
| 75 | work and record results only in the index. |
| 76 | |
| 77 | * The command line completion (in contrib/) has learned that |
| 78 | CHERRY_PICK_HEAD is a possible pseudo-ref. |
| 79 | |
| 80 | * Userdiff patterns for "Scheme" has been added. |
| 81 | |
| 82 | * "git log" learned "--diff-merges=<style>" option, with an |
| 83 | associated configuration variable log.diffMerges. |
| 84 | |
| 85 | * "git log --format=..." placeholders learned %ah/%ch placeholders to |
| 86 | request the --date=human output. |
| 87 | |
| 88 | * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the |
| 89 | system-wide configuration file with GIT_CONFIG_SYSTEM that lets |
| 90 | users specify from which file to read the system-wide configuration |
| 91 | (setting it to an empty file would essentially be the same as |
| 92 | setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the |
| 93 | per-user configuration in $HOME/.gitconfig. |
| 94 | |
| 95 | * "git add" and "git rm" learned not to touch those paths that are |
| 96 | outside of sparse checkout. |
| 97 | |
| 98 | * "git rev-list" learns the "--filter=object:type=<type>" option, |
| 99 | which can be used to exclude objects of the given kind from the |
| 100 | packfile generated by pack-objects. |
| 101 | |
| 102 | * The command line completion (in contrib/) for "git stash" has been |
| 103 | updated. |
| 104 | |
| 105 | * "git subtree" updates. |
| 106 | |
| 107 | * It is now documented that "format-patch" skips merges. |
| 108 | |
| 109 | * Options to "git pack-objects" that take numeric values like |
| 110 | --window and --depth should not accept negative values; the input |
| 111 | validation has been tightened. |
| 112 | |
| 113 | * The way the command line specified by the trailer.<token>.command |
| 114 | configuration variable receives the end-user supplied value was |
| 115 | both error prone and misleading. An alternative to achieve the |
| 116 | same goal in a safer and more intuitive way has been added, as |
| 117 | the trailer.<token>.cmd configuration variable, to replace it. |
| 118 | |
| 119 | * "git add -i --dry-run" does not dry-run, which was surprising. The |
| 120 | combination of options has taught to error out. |
| 121 | |
| 122 | * "git push" learns to discover common ancestor with the receiving |
| 123 | end over protocol v2. This will hopefully make "git push" as |
| 124 | efficient as "git fetch" in avoiding objects from getting |
| 125 | transferred unnecessarily. |
| 126 | |
| 127 | * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to |
| 128 | control how lines ending with CRLF wrapped in base64 or qp are |
| 129 | handled. |
| 130 | |
| 131 | |
| 132 | Performance, Internal Implementation, Development Support etc. |
| 133 | |
| 134 | * Rename detection rework continues. |
| 135 | |
| 136 | * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with |
| 137 | prerequisites to catch broken tests that depend on the side effects |
| 138 | of optional pieces, but did not work at all when negative |
| 139 | prerequisites were involved. |
| 140 | (merge 27d578d904 jk/fail-prereq-testfix later to maint). |
| 141 | |
| 142 | * "git diff-index" codepath has been taught to trust fsmonitor status |
| 143 | to reduce number of lstat() calls. |
| 144 | (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint). |
| 145 | |
| 146 | * Reorganize Makefile to allow building git.o and other essential |
| 147 | objects without extra stuff needed only for testing. |
| 148 | |
| 149 | * Preparatory API changes for parallel checkout. |
| 150 | |
| 151 | * A simple IPC interface gets introduced to build services like |
| 152 | fsmonitor on top. |
| 153 | |
| 154 | * Fsck API clean-up. |
| 155 | |
| 156 | * SECURITY.md that is facing individual contributors and end users |
| 157 | has been introduced. Also a procedure to follow when preparing |
| 158 | embargoed releases has been spelled out. |
| 159 | (merge 09420b7648 js/security-md later to maint). |
| 160 | |
| 161 | * Optimize "rev-list --use-bitmap-index --objects" corner case that |
| 162 | uses negative tags as the stopping points. |
| 163 | |
| 164 | * CMake update for vsbuild. |
| 165 | |
| 166 | * An on-disk reverse-index to map the in-pack location of an object |
| 167 | back to its object name across multiple packfiles is introduced. |
| 168 | |
| 169 | * Generate [ec]tags under $(QUIET_GEN). |
| 170 | |
| 171 | * Clean-up codepaths that implements "git send-email --validate" |
| 172 | option and improves the message from it. |
| 173 | |
| 174 | * The last remnant of gettext-poison has been removed. |
| 175 | |
| 176 | * The test framework has been taught to optionally turn the default |
| 177 | merge strategy to "ort" throughout the system where we use |
| 178 | three-way merges internally, like cherry-pick, rebase etc., |
| 179 | primarily to enhance its test coverage (the strategy has been |
| 180 | available as an explicit "-s ort" choice). |
| 181 | |
| 182 | * A bit of code clean-up and a lot of test clean-up around userdiff |
| 183 | area. |
| 184 | |
| 185 | * Handling of "promisor packs" that allows certain objects to be |
| 186 | missing and lazily retrievable has been optimized (a bit). |
| 187 | |
| 188 | * When packet_write() fails, we gave an extra error message |
| 189 | unnecessarily, which has been corrected. |
| 190 | |
| 191 | * The checkout machinery has been taught to perform the actual |
| 192 | write-out of the files in parallel when able. |
| 193 | |
| 194 | * Show errno in the trace output in the error codepath that calls |
| 195 | read_raw_ref method. |
| 196 | |
| 197 | * Effort to make the command line completion (in contrib/) safe with |
| 198 | "set -u" continues. |
| 199 | |
| 200 | * Tweak a few tests for "log --format=..." that show timestamps in |
| 201 | various formats. |
| 202 | |
| 203 | * The reflog expiry machinery has been taught to emit trace events. |
| 204 | |
| 205 | * Over-the-wire protocol learns a new request type to ask for object |
| 206 | sizes given a list of object names. |
| 207 | |
| 208 | |
| 209 | Fixes since v2.31 |
| 210 | ----------------- |
| 211 | |
| 212 | * The fsmonitor interface read from its input without making sure |
| 213 | there is something to read from. This bug is new in 2.31 |
| 214 | timeframe. |
| 215 | |
| 216 | * The data structure used by fsmonitor interface was not properly |
| 217 | duplicated during an in-core merge, leading to use-after-free etc. |
| 218 | |
| 219 | * "git bisect" reimplemented more in C during 2.30 timeframe did not |
| 220 | take an annotated tag as a good/bad endpoint well. This regression |
| 221 | has been corrected. |
| 222 | |
| 223 | * Fix macros that can silently inject unintended null-statements. |
| 224 | |
| 225 | * CALLOC_ARRAY() macro replaces many uses of xcalloc(). |
| 226 | |
| 227 | * Update insn in Makefile comments to run fuzz-all target. |
| 228 | |
| 229 | * Fix a corner case bug in "git mv" on case insensitive systems, |
| 230 | which was introduced in 2.29 timeframe. |
| 231 | |
| 232 | * We had a code to diagnose and die cleanly when a required |
| 233 | clean/smudge filter is missing, but an assert before that |
| 234 | unnecessarily fired, hiding the end-user facing die() message. |
| 235 | (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint). |
| 236 | |
| 237 | * Update C code that sets a few configuration variables when a remote |
| 238 | is configured so that it spells configuration variable names in the |
| 239 | canonical camelCase. |
| 240 | (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint). |
| 241 | |
| 242 | * A new configuration variable has been introduced to allow choosing |
| 243 | which version of the generation number gets used in the |
| 244 | commit-graph file. |
| 245 | (merge 702110aac6 ds/commit-graph-generation-config later to maint). |
| 246 | |
| 247 | * Perf test update to work better in secondary worktrees. |
| 248 | (merge 36e834abc1 jk/perf-in-worktrees later to maint). |
| 249 | |
| 250 | * Updates to memory allocation code around the use of pcre2 library. |
| 251 | (merge c1760352e0 ab/grep-pcre2-allocfix later to maint). |
| 252 | |
| 253 | * "git -c core.bare=false clone --bare ..." would have segfaulted, |
| 254 | which has been corrected. |
| 255 | (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint). |
| 256 | |
| 257 | * When "git checkout" removes a path that does not exist in the |
| 258 | commit it is checking out, it wasn't careful enough not to follow |
| 259 | symbolic links, which has been corrected. |
| 260 | (merge fab78a0c3d mt/checkout-remove-nofollow later to maint). |
| 261 | |
| 262 | * A few option description strings started with capital letters, |
| 263 | which were corrected. |
| 264 | (merge 5ee90326dc cc/downcase-opt-help later to maint). |
| 265 | |
| 266 | * Plug or annotate remaining leaks that trigger while running the |
| 267 | very basic set of tests. |
| 268 | (merge 68ffe095a2 ah/plugleaks later to maint). |
| 269 | |
| 270 | * The hashwrite() API uses a buffering mechanism to avoid calling |
| 271 | write(2) too frequently. This logic has been refactored to be |
| 272 | easier to understand. |
| 273 | (merge ddaf1f62e3 ds/clarify-hashwrite later to maint). |
| 274 | |
| 275 | * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn |
| 276 | the editor as expected (e.g. "revert --no-edit" after a conflict |
| 277 | still asked to edit the message), which has been corrected. |
| 278 | (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint). |
| 279 | |
| 280 | * "git daemon" has been tightened against systems that take backslash |
| 281 | as directory separator. |
| 282 | (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint). |
| 283 | |
| 284 | * A NULL-dereference bug has been corrected in an error codepath in |
| 285 | "git for-each-ref", "git branch --list" etc. |
| 286 | (merge c685450880 jk/ref-filter-segfault-fix later to maint). |
| 287 | |
| 288 | * Streamline the codepath to fix the UTF-8 encoding issues in the |
| 289 | argv[] and the prefix on macOS. |
| 290 | (merge c7d0e61016 tb/precompose-prefix-simplify later to maint). |
| 291 | |
| 292 | * The command-line completion script (in contrib/) had a couple of |
| 293 | references that would have given a warning under the "-u" (nounset) |
| 294 | option. |
| 295 | (merge c5c0548d79 vs/completion-with-set-u later to maint). |
| 296 | |
| 297 | * When "git pack-objects" makes a literal copy of a part of existing |
| 298 | packfile using the reachability bitmaps, its update to the progress |
| 299 | meter was broken. |
| 300 | (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint). |
| 301 | |
| 302 | * The dependencies for config-list.h and command-list.h were broken |
| 303 | when the former was split out of the latter, which has been |
| 304 | corrected. |
| 305 | (merge 56550ea718 sg/bugreport-fixes later to maint). |
| 306 | |
| 307 | * "git push --quiet --set-upstream" was not quiet when setting the |
| 308 | upstream branch configuration, which has been corrected. |
| 309 | (merge f3cce896a8 ow/push-quiet-set-upstream later to maint). |
| 310 | |
| 311 | * The prefetch task in "git maintenance" assumed that "git fetch" |
| 312 | from any remote would fetch all its local branches, which would |
| 313 | fetch too much if the user is interested in only a subset of |
| 314 | branches there. |
| 315 | (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint). |
| 316 | |
| 317 | * Clarify that pathnames recorded in Git trees are most often (but |
| 318 | not necessarily) encoded in UTF-8. |
| 319 | (merge 9364bf465d ab/pathname-encoding-doc later to maint). |
| 320 | |
| 321 | * "git --config-env var=val cmd" weren't accepted (only |
| 322 | --config-env=var=val was). |
| 323 | (merge c331551ccf ps/config-env-option-with-separate-value later to maint). |
| 324 | |
| 325 | * When the reachability bitmap is in effect, the "do not lose |
| 326 | recently created objects and those that are reachable from them" |
| 327 | safety to protect us from races were disabled by mistake, which has |
| 328 | been corrected. |
| 329 | (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint). |
| 330 | |
| 331 | * Cygwin pathname handling fix. |
| 332 | (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint). |
| 333 | |
| 334 | * "git rebase --[no-]reschedule-failed-exec" did not work well with |
| 335 | its configuration variable, which has been corrected. |
| 336 | (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint). |
| 337 | |
| 338 | * Portability fix for command line completion script (in contrib/). |
| 339 | (merge f2acf763e2 si/zsh-complete-comment-fix later to maint). |
| 340 | |
| 341 | * "git repack -A -d" in a partial clone unnecessarily loosened |
| 342 | objects in promisor pack. |
| 343 | |
| 344 | * "git bisect skip" when custom words are used for new/old did not |
| 345 | work, which has been corrected. |
| 346 | |
| 347 | * A few variants of informational message "Already up-to-date" has |
| 348 | been rephrased. |
| 349 | (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint). |
| 350 | |
| 351 | * "git submodule update --quiet" did not propagate the quiet option |
| 352 | down to underlying "git fetch", which has been corrected. |
| 353 | (merge 62af4bdd42 nc/submodule-update-quiet later to maint). |
| 354 | |
| 355 | * Document that our test can use "local" keyword. |
| 356 | (merge a84fd3bcc6 jc/test-allows-local later to maint). |
| 357 | |
| 358 | * The word-diff mode has been taught to work better with a word |
| 359 | regexp that can match an empty string. |
| 360 | (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint). |
| 361 | |
| 362 | * "git p4" learned to find branch points more efficiently. |
| 363 | (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint). |
| 364 | |
| 365 | * When "git update-ref -d" removes a ref that is packed, it left |
| 366 | empty directories under $GIT_DIR/refs/ for |
| 367 | (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint). |
| 368 | |
| 369 | * "git clean" and "git ls-files -i" had confusion around working on |
| 370 | or showing ignored paths inside an ignored directory, which has |
| 371 | been corrected. |
| 372 | (merge b548f0f156 en/dir-traversal later to maint). |
| 373 | |
| 374 | * The handling of "%(push)" formatting element of "for-each-ref" and |
| 375 | friends was broken when the same codepath started handling |
| 376 | "%(push:<what>)", which has been corrected. |
| 377 | (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint). |
| 378 | |
| 379 | * The bash prompt script (in contrib/) did not work under "set -u". |
| 380 | (merge 5c0cbdb107 en/prompt-under-set-u later to maint). |
| 381 | |
| 382 | * The "chainlint" feature in the test framework is a handy way to |
| 383 | catch common mistakes in writing new tests, but tends to get |
| 384 | expensive. An knob to selectively disable it has been introduced |
| 385 | to help running tests that the developer has not modified. |
| 386 | (merge 2d86a96220 jk/test-chainlint-softer later to maint). |
| 387 | |
| 388 | * The "rev-parse" command did not diagnose the lack of argument to |
| 389 | "--path-format" option, which was introduced in v2.31 era, which |
| 390 | has been corrected. |
| 391 | (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint). |
| 392 | |
| 393 | * Other code cleanup, docfix, build fix, etc. |
| 394 | (merge f451960708 dl/cat-file-doc-cleanup later to maint). |
| 395 | (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint). |
| 396 | (merge ea7e63921c jr/doc-ignore-typofix later to maint). |
| 397 | (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint). |
| 398 | (merge 42efa1231a jk/filter-branch-sha256 later to maint). |
| 399 | (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint). |
| 400 | (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint). |
| 401 | (merge 47957485b3 ab/read-tree later to maint). |
| 402 | (merge 2be927f3d1 ab/diff-no-index-tests later to maint). |
| 403 | (merge 76593c09bb ab/detox-gettext-tests later to maint). |
| 404 | (merge 28e29ee38b jc/doc-format-patch-clarify later to maint). |
| 405 | (merge fc12b6fdde fm/user-manual-use-preface later to maint). |
| 406 | (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint). |
| 407 | (merge 61a7660516 hn/reftable-tables-doc-update later to maint). |
| 408 | (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint). |
| 409 | (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint). |
| 410 | (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint). |
| 411 | (merge 7a14acdbe6 po/diff-patch-doc later to maint). |
| 412 | (merge f91371b948 pw/patience-diff-clean-up later to maint). |
| 413 | (merge 3a7f0908b6 mt/clean-clean later to maint). |
| 414 | (merge d4e2d15a8b ab/streaming-simplify later to maint). |
| 415 | (merge 0e59f7ad67 ah/merge-ort-i18n later to maint). |
| 416 | (merge e6f68f62e0 ls/typofix later to maint). |