| 1 | Git v2.47 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | ------------------------ |
| 6 | |
| 7 | * Many Porcelain commands that internally use the merge machinery |
| 8 | were taught to consistently honor the diff.algorithm configuration. |
| 9 | |
| 10 | * A few descriptions in "git show-ref -h" have been clarified. |
| 11 | |
| 12 | * A 'P' command to "git add -p" that passes the patch hunk to the |
| 13 | pager has been added. |
| 14 | |
| 15 | * "git grep -W" omits blank lines that follow the found function at |
| 16 | the end of the file, just like it omits blank lines before the next |
| 17 | function. |
| 18 | |
| 19 | * The value of http.proxy can have "path" at the end for a socks |
| 20 | proxy that listens to a unix-domain socket, but we started to |
| 21 | discard it when we taught proxy auth code path to use the |
| 22 | credential helpers, which has been corrected. |
| 23 | |
| 24 | * The code paths to compact multiple reftable files have been updated |
| 25 | to correctly deal with multiple compaction triggering at the same |
| 26 | time. |
| 27 | |
| 28 | * Support to specify ref backend for submodules has been enhanced. |
| 29 | |
| 30 | * "git svn" has been taught about svn:global-ignores property |
| 31 | recent versions of Subversion has. |
| 32 | |
| 33 | * The default object hash and ref backend format used to be settable |
| 34 | only with explicit command line option to "git init" and |
| 35 | environment variables, but now they can be configured in the user's |
| 36 | global and system wide configuration. |
| 37 | |
| 38 | * "git send-email" learned "--translate-aliases" option that reads |
| 39 | addresses from the standard input and emits the result of applying |
| 40 | aliases on them to the standard output. |
| 41 | |
| 42 | * 'git for-each-ref' learned a new "--format" atom to find the branch |
| 43 | that the history leading to a given commit "%(is-base:<commit>)" is |
| 44 | likely based on. |
| 45 | |
| 46 | * The command line prompt support used to be littered with bash-isms, |
| 47 | which has been corrected to work with more shells. |
| 48 | |
| 49 | * Support for the RUNTIME_PREFIX feature has been added to z/OS port. |
| 50 | |
| 51 | * "git send-email" learned "--mailmap" option to allow rewriting the |
| 52 | recipient addresses. |
| 53 | |
| 54 | * "git mergetool" learned to use VSCode as a merge backend. |
| 55 | |
| 56 | * "git pack-redundant" has been marked for removal in Git 3.0. |
| 57 | |
| 58 | * One-line messages to "die" and other helper functions will get LF |
| 59 | added by these helper functions, but many existing messages had an |
| 60 | unnecessary LF at the end, which have been corrected. |
| 61 | |
| 62 | * The "scalar clone" command learned the "--no-tags" option. |
| 63 | |
| 64 | * The environment GIT_ADVICE has been intentionally kept undocumented |
| 65 | to discourage its use by interactive users. Add documentation to |
| 66 | help tool writers. |
| 67 | |
| 68 | * "git apply --3way" learned to take "--ours" and other options. |
| 69 | |
| 70 | |
| 71 | Performance, Internal Implementation, Development Support etc. |
| 72 | -------------------------------------------------------------- |
| 73 | |
| 74 | * A build tweak knob has been simplified by not setting the value |
| 75 | that is already the default; another unused one has been removed. |
| 76 | |
| 77 | * A CI job that use clang-format to check coding style issues in new |
| 78 | code has been added. |
| 79 | |
| 80 | * The reviewing guidelines document now explicitly encourages people |
| 81 | to give positive reviews and how. |
| 82 | |
| 83 | * Test script linter has been updated to catch an attempt to use |
| 84 | one-shot export construct "VAR=VAL func" for shell functions (which |
| 85 | does not work for some shells) better. |
| 86 | |
| 87 | * Some project conventions have been added to CodingGuidelines. |
| 88 | |
| 89 | * In the refs subsystem, implicit reliance of the_repository has been |
| 90 | eliminated; the repository associated with the ref store object is |
| 91 | used instead. |
| 92 | |
| 93 | * Various tests in reftable library have been rewritten using the unit test |
| 94 | framework. |
| 95 | |
| 96 | * A test that fails on an unusually slow machine was found, and made |
| 97 | less likely to cause trouble by lengthening the expiry value it |
| 98 | uses. |
| 99 | |
| 100 | * An existing test of hashmap API has been rewritten with the |
| 101 | unit-test framework. |
| 102 | |
| 103 | * A policy document that describes platform support levels and |
| 104 | expectation on platform stakeholders has been introduced. |
| 105 | |
| 106 | * The refs API has been taught to give symref target information to |
| 107 | the users of ref iterators, allowing for-each-ref and friends to |
| 108 | avoid an extra ref_resolve_* API call per a symbolic ref. |
| 109 | |
| 110 | * Unit-test framework has learned a simple control structure to allow |
| 111 | embedding test statements in-line instead of having to create a new |
| 112 | function to contain them. |
| 113 | |
| 114 | * Incremental updates of multi-pack index files is getting worked on. |
| 115 | |
| 116 | * Use of API functions that implicitly depend on the_repository |
| 117 | object in the config subsystem has been rewritten to pass a |
| 118 | repository object through the callchain. |
| 119 | |
| 120 | * Unused parameters have been either marked as UNUSED to squelch |
| 121 | -Wunused warnings or dropped from many functions.. |
| 122 | |
| 123 | * The code in the reftable library has been cleaned up by discarding |
| 124 | unused "generic" interface. |
| 125 | |
| 126 | * The underlying machinery for "git diff-index" has long been made to |
| 127 | expand the sparse index as needed, but the command fully expanded |
| 128 | the sparse index upfront, which now has been taught not to do. |
| 129 | |
| 130 | * More trace2 events at key points on push and fetch code paths have |
| 131 | been added. |
| 132 | |
| 133 | * Make our codebase compilable with the -Werror=unused-parameter |
| 134 | option. |
| 135 | |
| 136 | * "git cat-file" works well with the sparse-index, and gets marked as |
| 137 | such. |
| 138 | |
| 139 | * CI started failing completely for linux32 jobs, as the step to |
| 140 | upload failed test directory uses GitHub actions that is deprecated |
| 141 | and is now disabled. |
| 142 | |
| 143 | * Import clar unit tests framework libgit2 folks invented for our |
| 144 | use. |
| 145 | |
| 146 | * The error messages from the test script checker have been improved. |
| 147 | |
| 148 | * The convention to calling into built-in command implementation has |
| 149 | been updated to pass the repository, if known, together with the |
| 150 | prefix value. |
| 151 | |
| 152 | * "git apply" had custom buffer management code that predated before |
| 153 | use of strbuf got widespread, which has been updated to use strbuf, |
| 154 | which also plugged some memory leaks. |
| 155 | |
| 156 | * The reftable backend learned to more efficiently handle exclude |
| 157 | patterns while enumerating the refs. |
| 158 | |
| 159 | * CI updates. FreeBSD image has been updated to 13.4. |
| 160 | (merge 2eeb29702e cb/ci-freebsd-13-4 later to maint). |
| 161 | |
| 162 | * Give timeout to the locking code to write to reftable, instead of |
| 163 | failing on the first failure without retrying. |
| 164 | |
| 165 | * The checksum at the tail of files are now computed without |
| 166 | collision detection protection. This is safe as the consumer of |
| 167 | the information to protect itself from replay attacks checks for |
| 168 | hash collisions independently. |
| 169 | |
| 170 | |
| 171 | Fixes since v2.46 |
| 172 | ----------------- |
| 173 | |
| 174 | * "git add -p" by users with diff.suppressBlankEmpty set to true |
| 175 | failed to parse the patch that represents an unmodified empty line |
| 176 | with an empty line (not a line with a single space on it), which |
| 177 | has been corrected. |
| 178 | |
| 179 | * "git checkout --ours" (no other arguments) complained that the |
| 180 | option is incompatible with branch switching, which is technically |
| 181 | correct, but found confusing by some users. It now says that the |
| 182 | user needs to give pathspec to specify what paths to checkout. |
| 183 | |
| 184 | * It has been documented that we avoid "VAR=VAL shell_func" and why. |
| 185 | |
| 186 | * "git rebase --help" referred to "offset" (the difference between |
| 187 | the location a change was taken from and the change gets replaced) |
| 188 | incorrectly and called it "fuzz", which has been corrected. |
| 189 | |
| 190 | * "git notes add -m '' --allow-empty" and friends that take prepared |
| 191 | data to create notes should not invoke an editor, but it started |
| 192 | doing so since Git 2.42, which has been corrected. |
| 193 | |
| 194 | * An expensive operation to prepare tracing was done in re-encoding |
| 195 | code path even when the tracing was not requested, which has been |
| 196 | corrected. |
| 197 | |
| 198 | * More leakfixes. |
| 199 | |
| 200 | * The credential helper to talk to OSX keychain sometimes sent |
| 201 | garbage bytes after the username, which has been corrected. |
| 202 | |
| 203 | * A recent update broke "git ls-remote" used outside a repository, |
| 204 | which has been corrected. |
| 205 | |
| 206 | * The patch parser in 'git apply' has been a bit more lenient against |
| 207 | unexpected mode bits, like 100664, recorded on extended header lines. |
| 208 | |
| 209 | * "git config --value=foo --fixed-value section.key newvalue" barfed |
| 210 | when the existing value in the configuration file used the |
| 211 | valueless true syntax, which has been corrected. |
| 212 | |
| 213 | * The patch parser in "git patch-id" has been tightened to avoid |
| 214 | getting confused by lines that look like a patch header in the log |
| 215 | message. |
| 216 | |
| 217 | * "git reflog expire" failed to honor annotated tags when computing |
| 218 | reachable commits. |
| 219 | |
| 220 | * A flakey test and incorrect calls to strtoX() functions have been |
| 221 | fixed. |
| 222 | |
| 223 | * Follow-up on 2.45.1 regression fix. |
| 224 | |
| 225 | * "git rev-list ... | git diff-tree -p --remerge-diff --stdin" should |
| 226 | behave more or less like "git log -p --remerge-diff" but instead it |
| 227 | crashed, forgetting to prepare a temporary object store needed. |
| 228 | |
| 229 | * "git bundle unbundle" outside a repository triggered a BUG() |
| 230 | unnecessarily, which has been corrected. |
| 231 | |
| 232 | * Maintenance tasks other than "gc" now properly go background when |
| 233 | "git maintenance" runs them. |
| 234 | |
| 235 | * We created a useless pseudo-merge reachability bitmap that is about |
| 236 | 0 commits, and attempted to include commits that are not in packs, |
| 237 | which made no sense. These bugs have been corrected. |
| 238 | (merge a72dfab8b8 tb/pseudo-merge-bitmap-fixes later to maint). |
| 239 | |
| 240 | * "git rebase -x --quiet" was not quiet, which was corrected. |
| 241 | |
| 242 | * The code path for compacting reftable files saw some bugfixes |
| 243 | against concurrent operation. |
| 244 | |
| 245 | * The code forgot to discard unnecessary in-core commit buffer data |
| 246 | for commits that "git log --skip=<number>" traversed but omitted |
| 247 | from the output, which has been corrected. |
| 248 | |
| 249 | * "git verify-pack" and "git index-pack" started dying outside a |
| 250 | repository, which has been corrected. |
| 251 | |
| 252 | * A data corruption bug when multi-pack-index is used and the same |
| 253 | objects are stored in multiple packfiles has been corrected. |
| 254 | |
| 255 | * "git pack-refs --auto" for the files backend was too aggressive, |
| 256 | which has been a bit tamed. |
| 257 | (merge c3459ae9ef ps/pack-refs-auto-heuristics later to maint). |
| 258 | |
| 259 | * A file descriptor left open is now properly closed when "git |
| 260 | sparse-checkout" updates the sparse patterns. |
| 261 | |
| 262 | * In a few corner cases "git diff --exit-code" failed to report |
| 263 | "changes" (e.g., renamed without any content change), which has |
| 264 | been corrected. |
| 265 | |
| 266 | * Cygwin does have /dev/tty support that is needed by things like |
| 267 | single-key input mode. |
| 268 | |
| 269 | * The interpret-trailers command failed to recognise the end of the |
| 270 | message when the commit log ends in an incomplete line. |
| 271 | |
| 272 | * "git rebase --autostash" failed to resurrect the autostashed |
| 273 | changes when the command gets aborted after giving back control |
| 274 | asking for hlep in conflict resolution. |
| 275 | (merge bf6ab087d1 pw/rebase-autostash-fix later to maint). |
| 276 | |
| 277 | * The "imap-send" now allows to be compiled with NO_OPENSSL and |
| 278 | OPENSSL_SHA1 defined together. |
| 279 | (merge 997950a750 jk/no-openssl-with-openssl-sha1 later to maint). |
| 280 | |
| 281 | * The support to customize build options to adjust for older versions |
| 282 | and/or older systems for the interop tests has been improved. |
| 283 | (merge 22ef5f02a8 jk/interop-test-build-options later to maint). |
| 284 | |
| 285 | * Update the character width table for Unicode 16. |
| 286 | (merge 44dc651132 bb/unicode-width-table-16 later to maint). |
| 287 | |
| 288 | * In Git 2.39, Git.pm stopped working in a bare repository, which has |
| 289 | been corrected. |
| 290 | (merge d3edb0bdde jk/git-pm-bare-repo-fix later to maint). |
| 291 | |
| 292 | * When a remote-helper dies before Git writes to it, SIGPIPE killed |
| 293 | Git silently. We now explain the situation a bit better to the end |
| 294 | user in our error message. |
| 295 | (merge 6e7fac9bca jk/diag-unexpected-remote-helper-death later to maint). |
| 296 | |
| 297 | * A few usability fixes to "git jump" (in contrib/). |
| 298 | (merge 083b82544d jk/jump-quickfix-fixes later to maint). |
| 299 | |
| 300 | * "git diff --exit-code" ignored modified binary files, which has |
| 301 | been corrected. |
| 302 | (merge 9a41735af6 rs/diff-exit-code-binary later to maint). |
| 303 | |
| 304 | * When a subprocess to work in a submodule spawned by "git submodule" |
| 305 | fails with SIGPIPE, the parent Git process caught the death of it, |
| 306 | but gave a generic "failed to work in that submodule", which was |
| 307 | misleading. We now behave as if the parent got SIGPIPE and die. |
| 308 | (merge 082caf527e pw/submodule-process-sigpipe later to maint). |
| 309 | |
| 310 | * "git archive" with pathspec magic that uses the attribute |
| 311 | information did not work well, which has been corrected. |
| 312 | (merge 296743a7ca rs/archive-with-attr-pathspec-fix later to maint). |
| 313 | |
| 314 | * Background tasks "git maintenance" runs may need to use credential |
| 315 | information when going over the network, but a credential helper |
| 316 | may work only in an interactive environment, and end up blocking a |
| 317 | scheduled task waiting for UI. Credential helpers can now behave |
| 318 | differently when they are not running interactively. |
| 319 | (merge b9183b0a02 ds/background-maintenance-with-credential later to maint). |
| 320 | |
| 321 | * "git --git-dir=nowhere cmd" failed to properly notice that it |
| 322 | wasn't in any repository while processing includeIf.onbranch |
| 323 | configuration and instead crashed. |
| 324 | |
| 325 | * When "git sparse-checkout disable" turns a sparse checkout into a |
| 326 | regular checkout, the index is fully expanded. This totally |
| 327 | expected behaviour however had an "oops, we are expanding the |
| 328 | index" advice message, which has been corrected. |
| 329 | (merge 537e516a39 ds/sparse-checkout-expansion-advice later to maint). |
| 330 | |
| 331 | * macOS with fsmonitor daemon can hang forever when a submodule is |
| 332 | involved, which has been corrected. |
| 333 | |
| 334 | * Other code cleanup, docfix, build fix, etc. |
| 335 | (merge be10ac7037 jc/mailinfo-header-cleanup later to maint). |
| 336 | (merge 4460e052e0 jc/range-diff-lazy-setup later to maint). |
| 337 | (merge 0627c58e7a ak/typofixes later to maint). |
| 338 | (merge 83799f1500 jk/t9001-deflake later to maint). |
| 339 | (merge e02cc08a88 ak/typofix-2.46-maint later to maint). |
| 340 | (merge 5c5d29e1c4 ps/ci-gitlab-upgrade later to maint). |
| 341 | (merge 9c4c840901 jc/doc-discarding-stalled-topics later to maint). |
| 342 | (merge 5e6f359f6b ds/read-cache-mempool-leakfix later to maint). |