| 1 | Git v2.42 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | |
| 6 | * "git pack-refs" learns "--include" and "--exclude" to tweak the ref |
| 7 | hierarchy to be packed using pattern matching. |
| 8 | |
| 9 | * 'git worktree add' learned how to create a worktree based on an |
| 10 | orphaned branch with `--orphan`. |
| 11 | |
| 12 | * "git pack-objects" learned to invoke a new hook program that |
| 13 | enumerates extra objects to be used as anchoring points to keep |
| 14 | otherwise unreachable objects in cruft packs. |
| 15 | |
| 16 | * Add more "git var" for toolsmiths to learn various locations Git is |
| 17 | configured with either via the configuration or hard-coded defaults. |
| 18 | |
| 19 | * 'git notes append' was taught '--separator' to specify string to insert |
| 20 | between paragraphs. |
| 21 | |
| 22 | * The "git for-each-ref" family of commands learned placeholders |
| 23 | related to GPG signature verification. |
| 24 | |
| 25 | * "git diff --no-index" learned to read from named pipes as if they |
| 26 | were regular files, to allow "git diff <(process) <(substitution)" |
| 27 | some shells support. |
| 28 | |
| 29 | * Help newbies by suggesting that there are cases where force-pushing |
| 30 | is a valid and sensible thing to update a branch at a remote |
| 31 | repository, rather than reconciling with merge/rebase. |
| 32 | |
| 33 | * "git blame --contents=file" has been taught to work in a bare |
| 34 | repository. |
| 35 | |
| 36 | * "git branch -f X" to repoint the branch X said that X was "checked |
| 37 | out" in another worktree, even when branch X was not and instead |
| 38 | being bisected or rebased. The message was reworded to say the |
| 39 | branch was "in use". |
| 40 | |
| 41 | * Tone down the warning on SHA-256 repositories being an experimental |
| 42 | curiosity. We do not have support for them to interoperate with |
| 43 | traditional SHA-1 repositories, but at this point, we do not plan |
| 44 | to make breaking changes to SHA-256 repositories and there is no |
| 45 | longer need for such a strongly phrased warning. |
| 46 | |
| 47 | |
| 48 | Performance, Internal Implementation, Development Support etc. |
| 49 | |
| 50 | * "git diff-tree" has been taught to take advantage of the |
| 51 | sparse-index feature. |
| 52 | |
| 53 | * Clang's sanitizer implementation seems to work better than GCC's. |
| 54 | (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint). |
| 55 | |
| 56 | * The object traversal using reachability bitmap done by |
| 57 | "pack-object" has been tweaked to take advantage of the fact that |
| 58 | using "boundary" commits as representative of all the uninteresting |
| 59 | ones can save quite a lot of object enumeration. |
| 60 | |
| 61 | * discover_git_directory() no longer touches the_repository. |
| 62 | |
| 63 | * "git worktree" learned to work better with sparse index feature. |
| 64 | |
| 65 | * When the external merge driver is killed by a signal, its output |
| 66 | should not be trusted as a resolution with conflicts that is |
| 67 | proposed by the driver, but the code did. |
| 68 | |
| 69 | * The set-up code for the get_revision() API now allows feeding |
| 70 | options like --all and --not in the --stdin mode. |
| 71 | |
| 72 | * Move functions that are not about pure string manipulation out of |
| 73 | strbuf.[ch] |
| 74 | |
| 75 | * "imap-send" codepaths got cleaned up to get rid of unused |
| 76 | parameters. |
| 77 | |
| 78 | * Enumerating refs in the packed-refs file, while excluding refs that |
| 79 | match certain patterns, has been optimized. |
| 80 | |
| 81 | * Mark-up unused parameters in the code so that we can eventually |
| 82 | enable -Wunused-parameter by default. |
| 83 | |
| 84 | * Instead of inventing a custom counter variables for debugging, |
| 85 | use existing trace2 facility in the fsync customization codepath. |
| 86 | |
| 87 | * "git branch --list --format=<format>" and friends are taught |
| 88 | a new "%(describe)" placeholder. |
| 89 | |
| 90 | * Clarify how to choose the starting point for a new topic in |
| 91 | developer guidance document. |
| 92 | |
| 93 | * The implementation of "get_sha1_hex()" that reads a hexadecimal |
| 94 | string that spells a full object name has been extended to cope |
| 95 | with any hash function used in the repository, but the "sha1" in |
| 96 | its name survived. Rename it to get_hash_hex(), a name that is |
| 97 | more consistent within its friends like get_hash_hex_algop(). |
| 98 | |
| 99 | * Command line parser fix, and a small parse-options API update. |
| 100 | |
| 101 | |
| 102 | Fixes since v2.41 |
| 103 | ----------------- |
| 104 | |
| 105 | * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the |
| 106 | command failed, so that the user can salvage what they typed. |
| 107 | (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint). |
| 108 | |
| 109 | * The "-s" (silent, squelch) option of the "diff" family of commands |
| 110 | did not interact with other options that specify the output format |
| 111 | well. This has been cleaned up so that it will clear all the |
| 112 | formatting options given before. |
| 113 | (merge 9d484b92ed jc/diff-s-with-other-options later to maint). |
| 114 | |
| 115 | * Update documentation regarding Coccinelle patches. |
| 116 | (merge 3bd0097cfc gc/doc-cocci-updates later to maint). |
| 117 | |
| 118 | * Some atoms that can be used in "--format=<format>" for "git ls-tree" |
| 119 | were not supported by "git ls-files", even though they were relevant |
| 120 | in the context of the latter. |
| 121 | (merge 4d28c4f75f zh/ls-files-format-atoms later to maint). |
| 122 | |
| 123 | * Document more pseudo-refs and teach the command line completion |
| 124 | machinery to complete AUTO_MERGE. |
| 125 | (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint). |
| 126 | |
| 127 | * "git submodule" code trusted the data coming from the config (and |
| 128 | the in-tree .gitmodules file) too much without validating, leading |
| 129 | to NULL dereference if the user mucks with a repository (e.g. |
| 130 | submodule.<name>.url is removed). This has been corrected. |
| 131 | (merge fbc806acd1 tb/submodule-null-deref-fix later to maint). |
| 132 | |
| 133 | * The value of config.worktree is per-repository, but has been kept |
| 134 | in a singleton global variable per process. This has been OK as |
| 135 | most Git operations interacted with a single repository at a time, |
| 136 | but not right for operations like recursive "grep" that want to |
| 137 | access multiple repositories from a single process without forking. |
| 138 | |
| 139 | The global variable has been eliminated and made into a member in |
| 140 | the per-repository data structure. |
| 141 | (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint). |
| 142 | |
| 143 | * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf. |
| 144 | (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint). |
| 145 | |
| 146 | * Introduce a mechanism to disable replace refs globally and per |
| 147 | repository. |
| 148 | (merge 9c7d1b057f ds/disable-replace-refs later to maint). |
| 149 | |
| 150 | * "git cat-file --batch" and friends learned "-Z" that uses NUL |
| 151 | delimiter for both input and output. |
| 152 | (merge f79e18849b ps/cat-file-null-output later to maint). |
| 153 | |
| 154 | * The reimplemented "git add -i" did not honor color.ui configuration. |
| 155 | (merge 6f74648cea ds/add-i-color-configuration-fix later to maint). |
| 156 | |
| 157 | * Compilation fix for platforms without D_TYPE in struct dirent. |
| 158 | (merge 03bf92b9bf as/dtype-compilation-fix later to maint). |
| 159 | |
| 160 | * Suggest to refrain from using hex literals that are non-portable |
| 161 | when writing printf(1) format strings. |
| 162 | (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint). |
| 163 | |
| 164 | * Simplify error message when run-command fails to start a command. |
| 165 | (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint). |
| 166 | |
| 167 | * Gracefully deal with a stale MIDX file that lists a packfile that |
| 168 | no longer exists. |
| 169 | (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint). |
| 170 | |
| 171 | * Even when diff.ignoreSubmodules tells us to ignore submodule |
| 172 | changes, "git commit" with an index that already records changes to |
| 173 | submodules should include the submodule changes in the resulting |
| 174 | commit, but it did not. |
| 175 | (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint). |
| 176 | |
| 177 | * When "git commit --trailer=..." invokes the interpret-trailers |
| 178 | machinery, it knows what it feeds to interpret-trailers is a full |
| 179 | log message without any patch, but failed to express that by |
| 180 | passing the "--no-divider" option, which has been corrected. |
| 181 | (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint). |
| 182 | |
| 183 | * Avoid breakage of "git pack-objects --cruft" due to inconsistency |
| 184 | between the way the code enumerates packfiles in the repository. |
| 185 | (merge 73320e49ad tb/collect-pack-filenames-fix later to maint). |
| 186 | |
| 187 | * We create .pack and then .idx, we consider only packfiles that have |
| 188 | .idx usable (those with only .pack are not ready yet), so we should |
| 189 | remove .idx before removing .pack for consistency. |
| 190 | (merge 0dd1324a73 ds/remove-idx-before-pack later to maint). |
| 191 | |
| 192 | * Partially revert a sanity check that the rest of the config code |
| 193 | was not ready, to avoid triggering it in a corner case. |
| 194 | (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint). |
| 195 | |
| 196 | * "git apply" punts when it is fed too large a patch input; the error |
| 197 | message it gives when it happens has been clarified. |
| 198 | (merge 42612e18d2 pw/apply-too-large later to maint). |
| 199 | |
| 200 | * During a cherry-pick or revert session that works on multiple |
| 201 | commits, "git status" did not give correct information, which has |
| 202 | been corrected. |
| 203 | (merge a096a889f4 jk/cherry-pick-revert-status later to maint). |
| 204 | |
| 205 | * A few places failed to differentiate the case where the index is |
| 206 | truly empty (nothing added) and we haven't yet read from the |
| 207 | on-disk index file, which have been corrected. |
| 208 | (merge 2ee045eea1 js/empty-index-fixes later to maint). |
| 209 | |
| 210 | * "git bugreport" tests did not test what it wanted to test, which |
| 211 | has been corrected. |
| 212 | (merge 1aa92b8500 ma/t0091-fixup later to maint). |
| 213 | |
| 214 | * Code snippets in a tutorial document no longer compiled after |
| 215 | recent header shuffling, which have been corrected. |
| 216 | (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint). |
| 217 | |
| 218 | * "git ls-files '(attr:X)D/'" that triggers the common prefix |
| 219 | optimization codepath failed to read from "D/.gitattributes", |
| 220 | which has been corrected. |
| 221 | (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint). |
| 222 | |
| 223 | * "git fsck --no-progress" still spewed noise from the commit-graph |
| 224 | subsystem, which has been corrected. |
| 225 | (merge 9281cd07f0 tb/fsck-no-progress later to maint). |
| 226 | |
| 227 | * Various offset computation in the code that accesses the packfiles |
| 228 | and other data in the object layer has been hardened against |
| 229 | arithmetic overflow, especially on 32-bit systems. |
| 230 | (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint). |
| 231 | |
| 232 | * Names of MinGW header files are spelled in mixed case in some |
| 233 | source files, but the build host can be using case sensitive |
| 234 | filesystem with header files with their name spelled in all |
| 235 | lowercase. |
| 236 | (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint). |
| 237 | |
| 238 | * Update message mark-up for i18n in "git bundle". |
| 239 | (merge bbb6acd998 dk/bundle-i18n-more later to maint). |
| 240 | |
| 241 | * "git tag --list --points-at X" showed tags that directly refers to |
| 242 | object X, but did not list a tag that points at such a tag, which |
| 243 | has been corrected. |
| 244 | |
| 245 | * "./configure --with-expat=no" did not work as a way to refuse use |
| 246 | of the expat library on a system with the library installed, which |
| 247 | has been corrected. |
| 248 | (merge fb8f7269c2 ah/autoconf-fixes later to maint). |
| 249 | |
| 250 | * When the user edits "rebase -i" todo file so that it starts with a |
| 251 | "fixup", which would make it invalid, the command truncated the |
| 252 | rest of the file before giving an error and returning the control |
| 253 | back to the user. Stop truncating to make it easier to correct |
| 254 | such a malformed todo file. |
| 255 | (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint). |
| 256 | |
| 257 | * Rewrite the description of giving a custom command to the |
| 258 | submodule.<name>.update configuration variable. |
| 259 | (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint). |
| 260 | |
| 261 | * Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on |
| 262 | its traditional API, by using its EVP API instead. |
| 263 | (merge bda9c12073 ew/hash-with-openssl-evp later to maint). |
| 264 | |
| 265 | * Exclude "." from the set of characters to be removed from the |
| 266 | beginning and the end of the human-readable name. |
| 267 | (merge 1c04cb0744 bc/ident-dot-is-no-longer-crud-letter later to maint). |
| 268 | |
| 269 | * "git bisect visualize" stopped running "gitk" on Git for Windows |
| 270 | when the command was reimplemented in C around Git 2.34 timeframe. |
| 271 | This has been corrected. |
| 272 | (merge fff1594fa7 ma/locate-in-path-for-windows later to maint). |
| 273 | |
| 274 | * "git rebase -i" with a series of squash/fixup, when one of the |
| 275 | steps stopped in conflicts and ended up getting skipped, did not |
| 276 | handle the accumulated commit log messages, which has been |
| 277 | corrected. |
| 278 | (merge 6ce7afe163 pw/rebase-skip-commit-message-fix later to maint). |
| 279 | |
| 280 | * Adjust to newer Term::ReadLine to prevent it from breaking |
| 281 | the interactive prompt code in send-email. |
| 282 | (merge c016726c2d jk/send-email-with-new-readline later to maint). |
| 283 | |
| 284 | * Windows updates. |
| 285 | (merge 0050f8e401 ds/maintenance-on-windows-fix later to maint). |
| 286 | |
| 287 | * Correct use of lstat() that assumed a failing call would not |
| 288 | clobber the statbuf. |
| 289 | (merge 72695d8214 st/mv-lstat-fix later to maint). |
| 290 | |
| 291 | * Other code cleanup, docfix, build fix, etc. |
| 292 | (merge 51f9d2e563 sa/doc-ls-remote later to maint). |
| 293 | (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint). |
| 294 | (merge f7e063f326 ps/fetch-cleanups later to maint). |
| 295 | (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint). |
| 296 | (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint). |
| 297 | (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint). |
| 298 | (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint). |
| 299 | (merge aeee1408ce kh/use-default-notes-doc later to maint). |
| 300 | (merge 3b8724bce6 jc/test-modernization later to maint). |
| 301 | (merge 447a3b7331 jc/test-modernization-2 later to maint). |
| 302 | (merge d57fa7fc73 la/doc-interpret-trailers later to maint). |
| 303 | (merge 548afb0d9a la/docs-typofixes later to maint). |
| 304 | (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint). |
| 305 | (merge 6c26da8404 mh/credential-erase-improvements later to maint). |
| 306 | (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint). |
| 307 | (merge 80d32e84b5 rj/leakfixes later to maint). |
| 308 | (merge 0a868031ed pb/complete-diff-options later to maint). |
| 309 | (merge d4f28279ad jc/doc-hash-object-types later to maint). |
| 310 | (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint). |
| 311 | (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint). |
| 312 | (merge 3e81b896f7 rs/packet-length-simplify later to maint). |
| 313 | (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint). |
| 314 | (merge 3437f549dd jr/gitignore-doc-example-markup later to maint). |
| 315 | (merge 947ebd62a0 jc/am-parseopt-fix later to maint). |
| 316 | (merge e12cb98e1e jc/branch-parseopt-fix later to maint). |
| 317 | (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint). |
| 318 | (merge a2dad4868b jc/transport-parseopt-fix later to maint). |
| 319 | (merge 68cbb20e73 jc/parse-options-show-branch later to maint). |
| 320 | (merge 3821eb6c3d jc/parse-options-reset later to maint). |
| 321 | (merge c48af99a3e bb/trace2-comment-fix later to maint). |
| 322 | (merge c95ae3ff9c rs/describe-parseopt-fix later to maint). |
| 323 | (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint). |
| 324 | (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint). |
| 325 | (merge d089a06421 rs/bundle-parseopt-cleanup later to maint). |
| 326 | (merge 823839bda1 ew/sha256-gcrypt-leak-fixes later to maint). |
| 327 | (merge a5c01603b3 bc/ignore-clangd-cache later to maint). |
| 328 | (merge 12009a182b js/allow-t4000-to-be-indented-with-spaces later to maint). |
| 329 | (merge b3dcd24b8a jc/send-email-pre-process-fix later to maint). |