| 1 | Git 2.24 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since v2.23 |
| 5 | ------------------- |
| 6 | |
| 7 | Backward compatibility note |
| 8 | |
| 9 | * "filter-branch" is showing its age and alternatives are available. |
| 10 | From this release, we started to discourage its use and hint |
| 11 | people about filter-repo. |
| 12 | |
| 13 | UI, Workflows & Features |
| 14 | |
| 15 | * We now have an active interim maintainer for the Git-Gui part of |
| 16 | the system. Praise and thank Pratyush Yadav for volunteering. |
| 17 | |
| 18 | * The command line parser learned "--end-of-options" notation; the |
| 19 | standard convention for scripters to have hardcoded set of options |
| 20 | first on the command line, and force the command to treat end-user |
| 21 | input as non-options, has been to use "--" as the delimiter, but |
| 22 | that would not work for commands that use "--" as a delimiter |
| 23 | between revs and pathspec. |
| 24 | |
| 25 | * A mechanism to affect the default setting for a (related) group of |
| 26 | configuration variables is introduced. |
| 27 | |
| 28 | * "git fetch" learned "--set-upstream" option to help those who first |
| 29 | clone from their private fork they intend to push to, add the true |
| 30 | upstream via "git remote add" and then "git fetch" from it. |
| 31 | |
| 32 | * Device-tree files learned their own userdiff patterns. |
| 33 | (merge 3c81760bc6 sb/userdiff-dts later to maint). |
| 34 | |
| 35 | * "git rebase --rebase-merges" learned to drive different merge |
| 36 | strategies and pass strategy specific options to them. |
| 37 | |
| 38 | * A new "pre-merge-commit" hook has been introduced. |
| 39 | |
| 40 | * Command line completion updates for "git -c var.name=val" have been |
| 41 | added. |
| 42 | |
| 43 | * The lazy clone machinery has been taught that there can be more |
| 44 | than one promisor remote and consult them in order when downloading |
| 45 | missing objects on demand. |
| 46 | |
| 47 | * The list-objects-filter API (used to create a sparse/lazy clone) |
| 48 | learned to take a combined filter specification. |
| 49 | |
| 50 | * The documentation and tests for "git format-patch" have been |
| 51 | cleaned up. |
| 52 | |
| 53 | * On Windows, the root level of UNC share is now allowed to be used |
| 54 | just like any other directory. |
| 55 | |
| 56 | * The command line completion support (in contrib/) learned about the |
| 57 | "--skip" option of "git revert" and "git cherry-pick". |
| 58 | |
| 59 | * "git rebase --keep-base <upstream>" tries to find the original base |
| 60 | of the topic being rebased and rebase on top of that same base, |
| 61 | which is useful when running the "git rebase -i" (and its limited |
| 62 | variant "git rebase -x"). |
| 63 | |
| 64 | The command also has learned to fast-forward in more cases where it |
| 65 | can instead of replaying to recreate identical commits. |
| 66 | |
| 67 | * A configuration variable tells "git fetch" to write the commit |
| 68 | graph after finishing. |
| 69 | |
| 70 | * "git add -i" has been taught to show the total number of hunks and |
| 71 | the hunks that has been processed so far when showing prompts. |
| 72 | |
| 73 | * "git fetch --jobs=<n>" allowed <n> parallel jobs when fetching |
| 74 | submodules, but this did not apply to "git fetch --multiple" that |
| 75 | fetches from multiple remote repositories. It now does. |
| 76 | |
| 77 | * The installation instruction for zsh completion script (in |
| 78 | contrib/) has been a bit improved. |
| 79 | |
| 80 | |
| 81 | Performance, Internal Implementation, Development Support etc. |
| 82 | |
| 83 | * The code to write commit-graph over given commit object names has |
| 84 | been made a bit more robust. |
| 85 | |
| 86 | * The first line of verbose output from each test piece now carries |
| 87 | the test name and number to help scanning with eyeballs. |
| 88 | |
| 89 | * Further clean-up of the initialization code. |
| 90 | |
| 91 | * xmalloc() used to have a mechanism to ditch memory and address |
| 92 | space resources as the last resort upon seeing an allocation |
| 93 | failure from the underlying malloc(), which made the code complex |
| 94 | and thread-unsafe with dubious benefit, as major memory resource |
| 95 | users already do limit their uses with various other mechanisms. |
| 96 | It has been simplified away. |
| 97 | |
| 98 | * Unnecessary full-tree diff in "git log -L" machinery has been |
| 99 | optimized away. |
| 100 | |
| 101 | * The http transport lacked some optimization the native transports |
| 102 | learned to avoid unnecessary ref advertisement, which has been |
| 103 | corrected. |
| 104 | |
| 105 | * Preparation for SHA-256 upgrade continues in the test department. |
| 106 | (merge 0c37c41d13 bc/hash-independent-tests-part-5 later to maint). |
| 107 | |
| 108 | * The memory ownership model of the "git fast-import" got |
| 109 | straightened out. |
| 110 | |
| 111 | * Output from trace2 subsystem is formatted more prettily now. |
| 112 | |
| 113 | * The internal code originally invented for ".gitignore" processing |
| 114 | got reshuffled and renamed to make it less tied to "excluding" and |
| 115 | stress more that it is about "matching", as it has been reused for |
| 116 | things like sparse checkout specification that want to check if a |
| 117 | path is "included". |
| 118 | |
| 119 | * "git stash" learned to write refreshed index back to disk. |
| 120 | |
| 121 | * Coccinelle checks are done on more source files than before now. |
| 122 | |
| 123 | * The cache-tree code has been taught to be less aggressive in |
| 124 | attempting to see if a tree object it computed already exists in |
| 125 | the repository. |
| 126 | |
| 127 | * The code to parse and use the commit-graph file has been made more |
| 128 | robust against corrupted input. |
| 129 | |
| 130 | * The hg-to-git script (in contrib/) has been updated to work with |
| 131 | Python 3. |
| 132 | |
| 133 | * Update the way build artifacts in t/helper/ directory are ignored. |
| 134 | |
| 135 | * Preparation for SHA-256 upgrade continues. |
| 136 | |
| 137 | * "git log --graph" for an octopus merge is sometimes colored |
| 138 | incorrectly, which is demonstrated and documented but not yet |
| 139 | fixed. |
| 140 | |
| 141 | * The trace2 output, when sending them to files in a designated |
| 142 | directory, can populate the directory with too many files; a |
| 143 | mechanism is introduced to set the maximum number of files and |
| 144 | discard further logs when the maximum is reached. |
| 145 | |
| 146 | * We have adopted a Code-of-conduct document. |
| 147 | (merge 3f9ef874a7 jk/coc later to maint). |
| 148 | |
| 149 | |
| 150 | Fixes since v2.23 |
| 151 | ----------------- |
| 152 | |
| 153 | * "git grep --recurse-submodules" that looks at the working tree |
| 154 | files looked at the contents in the index in submodules, instead of |
| 155 | files in the working tree. |
| 156 | (merge 6a289d45c0 mt/grep-submodules-working-tree later to maint). |
| 157 | |
| 158 | * Codepaths to walk tree objects have been audited for integer |
| 159 | overflows and hardened. |
| 160 | (merge 5aa02f9868 jk/tree-walk-overflow later to maint). |
| 161 | |
| 162 | * "git pack-refs" can lose refs that are created while running, which |
| 163 | is getting corrected. |
| 164 | (merge a613d4f817 sc/pack-refs-deletion-racefix later to maint). |
| 165 | |
| 166 | * "git checkout" and "git restore" to re-populate the index from a |
| 167 | tree-ish (typically HEAD) did not work correctly for a path that |
| 168 | was removed and then added again with the intent-to-add bit, when |
| 169 | the corresponding working tree file was empty. This has been |
| 170 | corrected. |
| 171 | |
| 172 | * Compilation fix. |
| 173 | (merge 70597e8386 rs/nedalloc-fixlets later to maint). |
| 174 | |
| 175 | * "git gui" learned to call the clean-up procedure before exiting. |
| 176 | (merge 0d88f3d2c5 py/git-gui-do-quit later to maint). |
| 177 | |
| 178 | * We promoted the "indent heuristics" that decides where to split |
| 179 | diff hunks from experimental to the default a few years ago, but |
| 180 | some stale documentation still marked it as experimental, which has |
| 181 | been corrected. |
| 182 | (merge 64e5e1fba1 sg/diff-indent-heuristic-non-experimental later to maint). |
| 183 | |
| 184 | * Fix a mismerge that happened in 2.22 timeframe. |
| 185 | (merge acb7da05ac en/checkout-mismerge-fix later to maint). |
| 186 | |
| 187 | * "git archive" recorded incorrect length in extended pax header in |
| 188 | some corner cases, which has been corrected. |
| 189 | (merge 71d41ff651 rs/pax-extended-header-length-fix later to maint). |
| 190 | |
| 191 | * On-demand object fetching in lazy clone incorrectly tried to fetch |
| 192 | commits from submodule projects, while still working in the |
| 193 | superproject, which has been corrected. |
| 194 | (merge a63694f523 jt/diff-lazy-fetch-submodule-fix later to maint). |
| 195 | |
| 196 | * Prepare get_short_oid() codepath to be thread-safe. |
| 197 | (merge 7cfcb16b0e rs/sort-oid-array-thread-safe later to maint). |
| 198 | |
| 199 | * "for-each-ref" and friends that show refs did not protect themselves |
| 200 | against ancient tags that did not record tagger names when asked to |
| 201 | show "%(taggername)", which have been corrected. |
| 202 | (merge 8b3f33ef11 mp/for-each-ref-missing-name-or-email later to maint). |
| 203 | |
| 204 | * The "git am" based backend of "git rebase" ignored the result of |
| 205 | updating ".gitattributes" done in one step when replaying |
| 206 | subsequent steps. |
| 207 | (merge 2c65d90f75 bc/reread-attributes-during-rebase later to maint). |
| 208 | |
| 209 | * Tell cURL library to use the same malloc() implementation, with the |
| 210 | xmalloc() wrapper, as the rest of the system, for consistency. |
| 211 | (merge 93b980e58f cb/curl-use-xmalloc later to maint). |
| 212 | |
| 213 | * Build fix to adjust .gitignore to unignore a path that we started to track. |
| 214 | (merge aac6ff7b5b js/visual-studio later to maint). |
| 215 | |
| 216 | * A few implementation fixes in the notes API. |
| 217 | (merge 60fe477a0b mh/notes-duplicate-entries later to maint). |
| 218 | |
| 219 | * Fix an earlier regression to "git push --all" which should have |
| 220 | been forbidden when the target remote repository is set to be a |
| 221 | mirror. |
| 222 | (merge 8e4c8af058 tg/push-all-in-mirror-forbidden later to maint). |
| 223 | |
| 224 | * Fix an earlier regression in the test suite, which mistakenly |
| 225 | stopped running HTTPD tests. |
| 226 | (merge 3960290675 sg/git-test-boolean later to maint). |
| 227 | |
| 228 | * "git rebase --autostash <upstream> <branch>", when <branch> is |
| 229 | different from the current branch, incorrectly moved the tip of the |
| 230 | current branch, which has been corrected. |
| 231 | (merge bf1e28e0ad bw/rebase-autostash-keep-current-branch later to maint). |
| 232 | |
| 233 | * Update support for Asciidoctor documentation toolchain. |
| 234 | (merge 83b0b8953e ma/asciidoctor-refmiscinfo later to maint). |
| 235 | |
| 236 | * Start using DocBook 5 (instead of DocBook 4.5) as Asciidoctor 2.0 |
| 237 | no longer works with the older one. |
| 238 | (merge f6461b82b9 bc/doc-use-docbook-5 later to maint). |
| 239 | |
| 240 | * The markup used in user-manual has been updated to work better with |
| 241 | asciidoctor. |
| 242 | (merge c4d2f6143a ma/user-manual-markup-update later to maint). |
| 243 | |
| 244 | * Make sure the grep machinery does not abort when seeing a payload |
| 245 | that is not UTF-8 even when JIT is not in use with PCRE1. |
| 246 | (merge ad7c543e3b cb/skip-utf8-check-with-pcre1 later to maint). |
| 247 | |
| 248 | * The name of the blob object that stores the filter specification |
| 249 | for sparse cloning/fetching was interpreted in a wrong place in the |
| 250 | code, causing Git to abort. |
| 251 | |
| 252 | * "git log --decorate-refs-exclude=<pattern>" was incorrectly |
| 253 | overruled when the "--simplify-by-decoration" option is used, which |
| 254 | has been corrected. |
| 255 | (merge 0cc7380d88 rs/simplify-by-deco-with-deco-refs-exclude later to maint). |
| 256 | |
| 257 | * The "upload-pack" (the counterpart of "git fetch") needs to disable |
| 258 | commit-graph when responding to a shallow clone/fetch request, but |
| 259 | the way this was done made Git panic, which has been corrected. |
| 260 | |
| 261 | * The object traversal machinery has been optimized not to load tree |
| 262 | objects when we are only interested in commit history. |
| 263 | (merge 72ed80c784 jk/list-objects-optim-wo-trees later to maint). |
| 264 | |
| 265 | * The object name parser for "Nth parent" syntax has been made more |
| 266 | robust against integer overflows. |
| 267 | (merge 59fa5f5a25 rs/nth-parent-parse later to maint). |
| 268 | |
| 269 | * The code used in following tags in "git fetch" has been optimized. |
| 270 | (merge b7e2d8bca5 ms/fetch-follow-tag-optim later to maint). |
| 271 | |
| 272 | * Regression fix for progress output. |
| 273 | (merge 2bb74b53a4 sg/progress-fix later to maint). |
| 274 | |
| 275 | * A bug in merge-recursive code that triggers when a branch with a |
| 276 | symbolic link is merged with a branch that replaces it with a |
| 277 | directory has been fixed. |
| 278 | (merge 83e3ad3b12 jt/merge-recursive-symlink-is-not-a-dir-in-way later to maint). |
| 279 | |
| 280 | * The rename detection logic sorts a list of rename source candidates |
| 281 | by similarity to pick the best candidate, which means that a tie |
| 282 | between sources with the same similarity is broken by the original |
| 283 | location in the original candidate list (which is sorted by path). |
| 284 | Force the sorting by similarity done with a stable sort, which is |
| 285 | not promised by system supplied qsort(3), to ensure consistent |
| 286 | results across platforms. |
| 287 | (merge 2049b8dc65 js/diff-rename-force-stable-sort later to maint). |
| 288 | |
| 289 | * The code to skip "UTF" and "UTF-" prefix, when computing an advice |
| 290 | message, did not work correctly when the prefix was "UTF", which |
| 291 | has been fixed. |
| 292 | (merge b181676ce9 rs/convert-fix-utf-without-dash later to maint). |
| 293 | |
| 294 | * The author names taken from SVN repositories may have extra leading |
| 295 | or trailing whitespaces, which are now munged away. |
| 296 | (merge 4ddd4bddb1 tk/git-svn-trim-author-name later to maint). |
| 297 | |
| 298 | * "git rebase -i" showed a wrong HEAD while "reword" open the editor. |
| 299 | (merge b0a3186140 pw/rebase-i-show-HEAD-to-reword later to maint). |
| 300 | |
| 301 | * A few simplification and bugfixes to PCRE interface. |
| 302 | (merge c581e4a749 ab/pcre-jit-fixes later to maint). |
| 303 | |
| 304 | * PCRE fixes. |
| 305 | (merge ff61681b46 cb/pcre1-cleanup later to maint). |
| 306 | |
| 307 | * "git range-diff" segfaulted when diff.noprefix configuration was |
| 308 | used, as it blindly expected the patch it internally generates to |
| 309 | have the standard a/ and b/ prefixes. The command now forces the |
| 310 | internal patch to be built without any prefix, not to be affected |
| 311 | by any end-user configuration. |
| 312 | (merge 937b76ed49 js/range-diff-noprefix later to maint). |
| 313 | |
| 314 | * "git stash apply" in a subdirectory of a secondary worktree failed |
| 315 | to access the worktree correctly, which has been corrected. |
| 316 | (merge dfd557c978 js/stash-apply-in-secondary-worktree later to maint). |
| 317 | |
| 318 | * The merge-recursive machinery is one of the most complex parts of |
| 319 | the system that accumulated cruft over time. This large series |
| 320 | cleans up the implementation quite a bit. |
| 321 | (merge b657047719 en/merge-recursive-cleanup later to maint). |
| 322 | |
| 323 | * Pretty-printed command line formatter (used in e.g. reporting the |
| 324 | command being run by the tracing API) had a bug that lost an |
| 325 | argument that is an empty string, which has been corrected. |
| 326 | (merge ce2d7ed2fd gs/sq-quote-buf-pretty later to maint). |
| 327 | |
| 328 | * "git range-diff" failed to handle mode-only change, which has been |
| 329 | corrected. |
| 330 | (merge 2b6a9b13ca tg/range-diff-output-update later to maint). |
| 331 | |
| 332 | * Dev support update. |
| 333 | (merge 4f3c1dc5d6 dl/allow-running-cocci-verbosely later to maint). |
| 334 | |
| 335 | * "git format-patch -o <outdir>" did an equivalent of "mkdir <outdir>" |
| 336 | not "mkdir -p <outdir>", which was corrected. |
| 337 | |
| 338 | * "git stash save" lost local changes to submodules, which has been |
| 339 | corrected. |
| 340 | (merge 556895d0c8 jj/stash-reset-only-toplevel later to maint). |
| 341 | |
| 342 | * The atomic push over smart HTTP transport did not work, which has |
| 343 | been corrected. |
| 344 | (merge 6f1194246a bc/smart-http-atomic-push later to maint). |
| 345 | |
| 346 | * Other code cleanup, docfix, build fix, etc. |
| 347 | (merge d1387d3895 en/fast-import-merge-doc later to maint). |
| 348 | (merge 1c24a54ea4 bm/repository-layout-typofix later to maint). |
| 349 | (merge 415b770b88 ds/midx-expire-repack later to maint). |
| 350 | (merge 19800bdc3f nd/diff-parseopt later to maint). |
| 351 | (merge 58166c2e9d tg/t0021-racefix later to maint). |
| 352 | (merge 7027f508c7 dl/compat-cleanup later to maint). |
| 353 | (merge e770fbfeff jc/test-cleanup later to maint). |
| 354 | (merge 1fd881d404 rs/trace2-dst-warning later to maint). |
| 355 | (merge 7e92756751 mh/http-urlmatch-cleanup later to maint). |
| 356 | (merge 9784f97321 mh/release-commit-memory-fix later to maint). |
| 357 | (merge 60d198d022 tb/banned-vsprintf-namefix later to maint). |
| 358 | (merge 80e3658647 rs/help-unknown-ref-does-not-return later to maint). |
| 359 | (merge 0a8bc7068f dt/remote-helper-doc-re-lock-option later to maint). |
| 360 | (merge 27fd1e4ea7 en/merge-options-ff-and-friends later to maint). |
| 361 | (merge 502c386ff9 sg/clean-nested-repo-with-ignored later to maint). |
| 362 | (merge 26e3d1cbea am/mailmap-andrey-mazo later to maint). |
| 363 | (merge 47b27c96fa ss/get-time-cleanup later to maint). |
| 364 | (merge dd2e50a84e jk/commit-graph-cleanup later to maint). |
| 365 | (merge 4fd39c76e6 cs/pretty-formats-doc-typofix later to maint). |
| 366 | (merge 40e747e89d dl/submodule-set-branch later to maint). |
| 367 | (merge 689a146c91 rs/commit-graph-use-list-count later to maint). |
| 368 | (merge 0eb7c37a8a js/doc-patch-text later to maint). |
| 369 | (merge 4b3aa170d1 rs/nth-switch-code-simplification later to maint). |
| 370 | (merge 0d4304c124 ah/doc-submodule-ignore-submodules later to maint). |
| 371 | (merge af78249463 cc/svn-fe-py-shebang later to maint). |
| 372 | (merge 7bd97d6dff rs/alias-use-copy-array later to maint). |
| 373 | (merge c46ebc2496 sg/travis-help-debug later to maint). |
| 374 | (merge 24c681794f ps/my-first-contribution-alphasort later to maint). |
| 375 | (merge 75b2c15435 cb/do-not-use-test-cmp-with-a later to maint). |
| 376 | (merge cda0d497e3 bw/submodule-helper-usage-fix later to maint). |
| 377 | (merge fe0ed5d5e9 am/visual-studio-config-fix later to maint). |
| 378 | (merge 2e09c01232 sg/name-rev-cutoff-underflow-fix later to maint). |
| 379 | (merge ddb3c856f3 as/shallow-slab-use-fix later to maint). |
| 380 | (merge 71f4960b91 js/mingw-spawn-with-spaces-in-path later to maint). |
| 381 | (merge 53d687bf5f ah/cleanups later to maint). |
| 382 | (merge f537485fa5 rs/test-remove-useless-debugging-cat later to maint). |
| 383 | (merge 11a3d3aadd dl/rev-list-doc-cleanup later to maint). |
| 384 | (merge d928a8388a am/t0028-utf16-tests later to maint). |
| 385 | (merge b05b40930e dl/t0000-skip-test-test later to maint). |
| 386 | (merge 03d3b1297c js/xdiffi-comment-updates later to maint). |
| 387 | (merge 57d8f4b4c7 js/doc-stash-save later to maint). |
| 388 | (merge 8c1cfd58e3 ta/t1308-typofix later to maint). |
| 389 | (merge fa364ad790 bb/utf8-wcwidth-cleanup later to maint). |
| 390 | (merge 68b69211b2 bb/compat-util-comment-fix later to maint). |
| 391 | (merge 5cc6a4be11 rs/http-push-simplify later to maint). |
| 392 | (merge a81e42d235 rs/column-use-utf8-strnwidth later to maint). |
| 393 | (merge 062a309d36 rs/remote-curl-use-argv-array later to maint). |
| 394 | (merge 3b3c79f6c9 nr/diff-highlight-indent-fix later to maint). |
| 395 | (merge 3444ec2eb2 wb/fsmonitor-bitmap-fix later to maint). |
| 396 | (merge 10da030ab7 cb/pcre2-chartables-leakfix later to maint). |
| 397 | (merge 60e6569a12 js/mingw-needs-hiding-fix later to maint). |
| 398 | (merge 52bd3e4657 rl/gitweb-blame-prev-fix later to maint). |