| 1 | Git 2.25 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Updates since v2.24 |
| 5 | ------------------- |
| 6 | |
| 7 | Backward compatibility notes |
| 8 | |
| 9 | |
| 10 | UI, Workflows & Features |
| 11 | |
| 12 | * A tutorial on object enumeration has been added. |
| 13 | |
| 14 | * The branch description ("git branch --edit-description") has been |
| 15 | used to fill the body of the cover letters by the format-patch |
| 16 | command; this has been enhanced so that the subject can also be |
| 17 | filled. |
| 18 | |
| 19 | * "git rebase --preserve-merges" has been marked as deprecated; this |
| 20 | release stops advertising it in the "git rebase -h" output. |
| 21 | |
| 22 | * The code to generate multi-pack index learned to show (or not to |
| 23 | show) progress indicators. |
| 24 | |
| 25 | * "git apply --3way" learned to honor merge.conflictStyle |
| 26 | configuration variable, like merges would. |
| 27 | |
| 28 | * The custom format for "git log --format=<format>" learned the l/L |
| 29 | placeholder that is similar to e/E that fills in the e-mail |
| 30 | address, but only the local part on the left side of '@'. |
| 31 | |
| 32 | * Documentation pages for "git shortlog" now list commit limiting |
| 33 | options explicitly. |
| 34 | |
| 35 | * The patterns to detect function boundary for Elixir language has |
| 36 | been added. |
| 37 | |
| 38 | * The completion script (in contrib/) learned that the "--onto" |
| 39 | option of "git rebase" can take its argument as the value of the |
| 40 | option. |
| 41 | |
| 42 | * The userdiff machinery has been taught that "async def" is another |
| 43 | way to begin a "function" in Python. |
| 44 | |
| 45 | * "git range-diff" learned to take the "--notes=<ref>" and the |
| 46 | "--no-notes" options to control the commit notes included in the |
| 47 | log message that gets compared. |
| 48 | |
| 49 | * "git rev-parse --show-toplevel" run outside of any working tree did |
| 50 | not error out, which has been corrected. |
| 51 | |
| 52 | * A few commands learned to take the pathspec from the standard input |
| 53 | or a named file, instead of taking it as the command line |
| 54 | arguments, with the "--pathspec-from-file" option. |
| 55 | |
| 56 | * "git submodule" learned a subcommand "set-url". |
| 57 | |
| 58 | * "git log" family learned "--pretty=reference" that gives the name |
| 59 | of a commit in the format that is often used to refer to it in log |
| 60 | messages. |
| 61 | |
| 62 | * The interaction between "git clone --recurse-submodules" and |
| 63 | alternate object store was ill-designed. The documentation and |
| 64 | code have been taught to make more clear recommendations when the |
| 65 | users see failures. |
| 66 | |
| 67 | * Management of sparsely checked-out working tree has gained a |
| 68 | dedicated "sparse-checkout" command. |
| 69 | |
| 70 | * Miscellaneous small UX improvements on "git-p4". |
| 71 | |
| 72 | * "git sparse-checkout list" subcommand learned to give its output in |
| 73 | a more concise form when the "cone" mode is in effect. |
| 74 | |
| 75 | |
| 76 | Performance, Internal Implementation, Development Support etc. |
| 77 | |
| 78 | * Debugging support for lazy cloning has been a bit improved. |
| 79 | |
| 80 | * Move the definition of a set of bitmask constants from 0ctal |
| 81 | literal to (1U<<count) notation. |
| 82 | |
| 83 | * Test updates to prepare for SHA-2 transition continues. |
| 84 | |
| 85 | * Crufty code and logic accumulated over time around the object |
| 86 | parsing and low-level object access used in "git fsck" have been |
| 87 | cleaned up. |
| 88 | |
| 89 | * The implementation of "git log --graph" got refactored and then its |
| 90 | output got simplified. |
| 91 | |
| 92 | * Follow recent push to move API docs from Documentation/ to header |
| 93 | files and update config.h |
| 94 | |
| 95 | * "git bundle" has been taught to use the parse options API. "git |
| 96 | bundle verify" learned "--quiet" and "git bundle create" learned |
| 97 | options to control the progress output. |
| 98 | |
| 99 | * Handling of commit objects that use non UTF-8 encoding during |
| 100 | "rebase -i" has been improved. |
| 101 | |
| 102 | * The beginning of rewriting "git add -i" in C. |
| 103 | |
| 104 | * A label used in the todo list that are generated by "git rebase |
| 105 | --rebase-merges" is used as a part of a refname; the logic to come |
| 106 | up with the label has been tightened to avoid names that cannot be |
| 107 | used as such. |
| 108 | |
| 109 | * The logic to avoid duplicate label names generated by "git rebase |
| 110 | --rebase-merges" forgot that the machinery itself uses "onto" as a |
| 111 | label name, which must be avoided by auto-generated labels, which |
| 112 | has been corrected. |
| 113 | |
| 114 | * We have had compatibility fallback macro definitions for "PRIuMAX", |
| 115 | "PRIu32", etc. but did not for "PRIdMAX", while the code used the |
| 116 | last one apparently without any hiccup reported recently. The |
| 117 | fallback macro definitions for these <inttypes.h> macros that must |
| 118 | appear in C99 systems have been removed. |
| 119 | |
| 120 | * Recently we have declared that GIT_TEST_* variables take the |
| 121 | usual boolean values (it used to be that some used "non-empty |
| 122 | means true" and taking GIT_TEST_VAR=YesPlease as true); make |
| 123 | sure we notice and fail when non-bool strings are given to |
| 124 | these variables. |
| 125 | |
| 126 | * Users of oneway_merge() (like "reset --hard") learned to take |
| 127 | advantage of fsmonitor to avoid unnecessary lstat(2) calls. |
| 128 | |
| 129 | * Performance tweak on "git push" into a repository with many refs |
| 130 | that point at objects we have never heard of. |
| 131 | |
| 132 | * PerfTest fix to avoid stale result mixed up with the latest round |
| 133 | of test results. |
| 134 | |
| 135 | * Hide lower-level verify_signed-buffer() API as a pure helper to |
| 136 | implement the public check_signature() function, in order to |
| 137 | encourage new callers to use the correct and more strict |
| 138 | validation. |
| 139 | |
| 140 | * Unnecessary reading of state variables back from the disk during |
| 141 | sequencer operation has been reduced. |
| 142 | |
| 143 | * The code has been made to avoid gmtime() and localtime() and prefer |
| 144 | their reentrant counterparts. |
| 145 | |
| 146 | * In a repository with many packfiles, the cost of the procedure that |
| 147 | avoids registering the same packfile twice was unnecessarily high |
| 148 | by using an inefficient search algorithm, which has been corrected. |
| 149 | |
| 150 | * Redo "git name-rev" to avoid recursive calls. |
| 151 | |
| 152 | * FreeBSD CI support via Cirrus-CI has been added. |
| 153 | |
| 154 | |
| 155 | Fixes since v2.24 |
| 156 | ----------------- |
| 157 | |
| 158 | * "rebase -i" ceased to run post-commit hook by mistake in an earlier |
| 159 | update, which has been corrected. |
| 160 | |
| 161 | * "git notes copy $original" ought to copy the notes attached to the |
| 162 | original object to HEAD, but a mistaken tightening to command line |
| 163 | parameter validation made earlier disabled that feature by mistake. |
| 164 | |
| 165 | * When all files from some subdirectory were renamed to the root |
| 166 | directory, the directory rename heuristics would fail to detect that |
| 167 | as a rename/merge of the subdirectory to the root directory, which has |
| 168 | been corrected. |
| 169 | |
| 170 | * Code clean-up and a bugfix in the logic used to tell worktree local |
| 171 | and repository global refs apart. |
| 172 | (merge f45f88b2e4 sg/dir-trie-fixes later to maint). |
| 173 | |
| 174 | * "git stash save" in a working tree that is sparsely checked out |
| 175 | mistakenly removed paths that are outside the area of interest. |
| 176 | (merge 4a58c3d7f7 js/update-index-ignore-removal-for-skip-worktree later to maint). |
| 177 | |
| 178 | * "git rev-parse --git-path HEAD.lock" did not give the right path |
| 179 | when run in a secondary worktree. |
| 180 | (merge 76a53d640f js/git-path-head-dot-lock-fix later to maint). |
| 181 | |
| 182 | * "git merge --no-commit" needs "--no-ff" if you do not want to move |
| 183 | HEAD, which has been corrected in the manual page for "git bisect". |
| 184 | (merge 8dd327b246 ma/bisect-doc-sample-update later to maint). |
| 185 | |
| 186 | * "git worktree add" internally calls "reset --hard" that should not |
| 187 | descend into submodules, even when submodule.recurse configuration |
| 188 | is set, but it was affected. This has been corrected. |
| 189 | (merge 4782cf2ab6 pb/no-recursive-reset-hard-in-worktree-add later to maint). |
| 190 | |
| 191 | * Messages from die() etc. can be mixed up from multiple processes |
| 192 | without even line buffering on Windows, which has been worked |
| 193 | around. |
| 194 | (merge 116d1fa6c6 js/vreportf-wo-buffering later to maint). |
| 195 | |
| 196 | * HTTP transport had possible allocator/deallocator mismatch, which |
| 197 | has been corrected. |
| 198 | |
| 199 | * The watchman integration for fsmonitor was racy, which has been |
| 200 | corrected to be more conservative. |
| 201 | (merge dd0b61f577 kw/fsmonitor-watchman-fix later to maint). |
| 202 | |
| 203 | * Fetching from multiple remotes into the same repository in parallel |
| 204 | had a bad interaction with the recent change to (optionally) update |
| 205 | the commit-graph after a fetch job finishes, as these parallel |
| 206 | fetches compete with each other. Which has been corrected. |
| 207 | |
| 208 | * Recent update to "git stash pop" made the command empty the index |
| 209 | when run with the "--quiet" option, which has been corrected. |
| 210 | |
| 211 | * "git fetch" codepath had a big "do not lazily fetch missing objects |
| 212 | when I ask if something exists" switch. This has been corrected by |
| 213 | marking the "does this thing exist?" calls with "if not please do not |
| 214 | lazily fetch it" flag. |
| 215 | |
| 216 | * Test update to avoid wasted cycles. |
| 217 | (merge e0316695ec sg/skip-skipped-prereq later to maint). |
| 218 | |
| 219 | * Error handling after "git push" finishes sending the packdata and |
| 220 | waits for the response to the remote side has been improved. |
| 221 | (merge ad7a403268 jk/send-pack-remote-failure later to maint). |
| 222 | |
| 223 | * Some codepaths in "gitweb" that forgot to escape URLs generated |
| 224 | based on end-user input have been corrected. |
| 225 | (merge a376e37b2c jk/gitweb-anti-xss later to maint). |
| 226 | |
| 227 | * CI jobs for macOS has been made less chatty when updating perforce |
| 228 | package used during testing. |
| 229 | (merge 0dbc4a0edf jc/azure-ci-osx-fix-fix later to maint). |
| 230 | |
| 231 | * "git unpack-objects" used to show progress based only on the number |
| 232 | of received and unpacked objects, which stalled when it has to |
| 233 | handle an unusually large object. It now shows the throughput as |
| 234 | well. |
| 235 | (merge bae60ba7e9 sg/unpack-progress-throughput later to maint). |
| 236 | |
| 237 | * The sequencer machinery compared the HEAD and the state it is |
| 238 | attempting to commit to decide if the result would be a no-op |
| 239 | commit, even when amending a commit, which was incorrect, and |
| 240 | has been corrected. |
| 241 | |
| 242 | * The code to parse GPG output used to assume incorrectly that the |
| 243 | finterprint for the primary key would always be present for a valid |
| 244 | signature, which has been corrected. |
| 245 | (merge 67a6ea6300 hi/gpg-optional-pkfp-fix later to maint). |
| 246 | |
| 247 | * "git submodule status" and "git submodule status --cached" show |
| 248 | different things, but the documentation did not cover them |
| 249 | correctly, which has been corrected. |
| 250 | (merge 8d483c8408 mg/doc-submodule-status-cached later to maint). |
| 251 | |
| 252 | * "git reset --patch $object" without any pathspec should allow a |
| 253 | tree object to be given, but incorrectly required a committish, |
| 254 | which has been corrected. |
| 255 | |
| 256 | * "git submodule status" that is run from a subdirectory of the |
| 257 | superproject did not work well, which has been corrected. |
| 258 | (merge 1f3aea22c7 mg/submodule-status-from-a-subdirectory later to maint). |
| 259 | |
| 260 | * The revision walking machinery uses resources like per-object flag |
| 261 | bits that need to be reset before a new iteration of walking |
| 262 | begins, but the resources related to topological walk were not |
| 263 | cleared correctly, which has been corrected. |
| 264 | (merge 0aa0c2b2ec mh/clear-topo-walk-upon-reset later to maint). |
| 265 | |
| 266 | * TravisCI update. |
| 267 | (merge 176441bfb5 sg/osx-force-gcc-9 later to maint). |
| 268 | |
| 269 | * While running "revert" or "cherry-pick --edit" for multiple |
| 270 | commits, a recent regression incorrectly detected "nothing to |
| 271 | commit, working tree clean", instead of replaying the commits, |
| 272 | which has been corrected. |
| 273 | (merge befd4f6a81 sg/assume-no-todo-update-in-cherry-pick later to maint). |
| 274 | |
| 275 | * Work around a issue where a FD that is left open when spawning a |
| 276 | child process and is kept open in the child can interfere with the |
| 277 | operation in the parent process on Windows. |
| 278 | |
| 279 | * One kind of progress messages were always given during commit-graph |
| 280 | generation, instead of following the "if it takes more than two |
| 281 | seconds, show progress" pattern, which has been corrected. |
| 282 | |
| 283 | * "git rebase" did not work well when format.useAutoBase |
| 284 | configuration variable is set, which has been corrected. |
| 285 | |
| 286 | * The "diff" machinery learned not to lose added/removed blank lines |
| 287 | in the context when --ignore-blank-lines and --function-context are |
| 288 | used at the same time. |
| 289 | (merge 0bb313a552 rs/xdiff-ignore-ws-w-func-context later to maint). |
| 290 | |
| 291 | * The test on "fast-import" used to get stuck when "fast-import" died |
| 292 | in the middle. |
| 293 | (merge 0d9b0d7885 sg/t9300-robustify later to maint). |
| 294 | |
| 295 | * "git format-patch" can take a set of configured format.notes values |
| 296 | to specify which notes refs to use in the log message part of the |
| 297 | output. The behaviour of this was not consistent with multiple |
| 298 | --notes command line options, which has been corrected. |
| 299 | (merge e0f9095aaa dl/format-patch-notes-config-fixup later to maint). |
| 300 | |
| 301 | * "git p4" used to ignore lfs.storage configuration variable, which |
| 302 | has been corrected. |
| 303 | (merge ea94b16fb8 rb/p4-lfs later to maint). |
| 304 | |
| 305 | * Assorted fixes to the directory traversal API. |
| 306 | (merge 6836d2fe06 en/fill-directory-fixes later to maint). |
| 307 | |
| 308 | * Forbid pathnames that the platform's filesystem cannot represent on |
| 309 | MinGW. |
| 310 | (merge 4dc42c6c18 js/mingw-reserved-filenames later to maint). |
| 311 | |
| 312 | * "git rebase --signoff" stopped working when the command was written |
| 313 | in C, which has been corrected. |
| 314 | (merge 4fe7e43c53 en/rebase-signoff-fix later to maint). |
| 315 | |
| 316 | * An earlier update to Git for Windows declared that a tree object is |
| 317 | invalid if it has a path component with backslash in it, which was |
| 318 | overly strict, which has been corrected. The only protection the |
| 319 | Windows users need is to prevent such path (or any path that their |
| 320 | filesystem cannot check out) from entering the index. |
| 321 | (merge 224c7d70fa js/mingw-loosen-overstrict-tree-entry-checks later to maint). |
| 322 | |
| 323 | * The code to write split commit-graph file(s) upon fetching computed |
| 324 | bogus value for the parameter used in splitting the resulting |
| 325 | files, which has been corrected. |
| 326 | (merge 63020f175f ds/commit-graph-set-size-mult later to maint). |
| 327 | |
| 328 | * Other code cleanup, docfix, build fix, etc. |
| 329 | (merge 80736d7c5e jc/am-show-current-patch-docfix later to maint). |
| 330 | (merge 8b656572ca sg/commit-graph-usage-fix later to maint). |
| 331 | (merge 6c02042139 mr/clone-dir-exists-to-path-exists later to maint). |
| 332 | (merge 44ae131e38 sg/blame-indent-heuristics-is-now-the-default later to maint). |
| 333 | (merge 0115e5d929 dl/doc-diff-no-index-implies-exit-code later to maint). |
| 334 | (merge 270de6acbe en/t6024-style later to maint). |
| 335 | (merge 14c4776d75 ns/test-desc-typofix later to maint). |
| 336 | (merge 68d40f30c4 dj/typofix-merge-strat later to maint). |
| 337 | (merge f66e0401ab jk/optim-in-pack-idx-conversion later to maint). |
| 338 | (merge 169bed7421 rs/parse-options-dup-null-fix later to maint). |
| 339 | (merge 51bd6be32d rs/use-copy-array-in-mingw-shell-command-preparation later to maint). |
| 340 | (merge b018719927 ma/t7004 later to maint). |
| 341 | (merge 932757b0cc ar/install-doc-update-cmds-needing-the-shell later to maint). |
| 342 | (merge 46efd28be1 ep/guard-kset-tar-headers later to maint). |
| 343 | (merge 9e5afdf997 ec/fetch-mark-common-refs-trace2 later to maint). |
| 344 | (merge f0e58b3fe8 pb/submodule-update-fetches later to maint). |
| 345 | (merge 2a02262078 dl/t5520-cleanup later to maint). |
| 346 | (merge a4fb016ba1 js/pkt-line-h-typofix later to maint). |
| 347 | (merge 54a7a64613 rs/simplify-prepare-cmd later to maint). |
| 348 | (merge 3eae30e464 jk/lore-is-the-archive later to maint). |
| 349 | (merge 14b7664df8 dl/lore-is-the-archive later to maint). |
| 350 | (merge 0e40a73a4c po/bundle-doc-clonable later to maint). |
| 351 | (merge e714b898c6 as/t7812-missing-redirects-fix later to maint). |
| 352 | (merge 528d9e6d01 jk/perf-wo-git-dot-pm later to maint). |
| 353 | (merge fc42f20e24 sg/test-squelch-noise-in-commit-bulk later to maint). |
| 354 | (merge c64368e3a2 bc/t9001-zsh-in-posix-emulation-mode later to maint). |
| 355 | (merge 11de8dd7ef dr/branch-usage-casefix later to maint). |
| 356 | (merge e05e8cf074 rs/archive-zip-code-cleanup later to maint). |
| 357 | (merge 147ee35558 rs/commit-export-env-simplify later to maint). |
| 358 | (merge 4507ecc771 rs/patch-id-use-oid-to-hex later to maint). |
| 359 | (merge 51a0a4ed95 mr/bisect-use-after-free later to maint). |
| 360 | (merge cc2bd5c45d pb/submodule-doc-xref later to maint). |
| 361 | (merge df5be01669 ja/doc-markup-cleanup later to maint). |
| 362 | (merge 7c5cea7242 mr/bisect-save-pointer-to-const-string later to maint). |
| 363 | (merge 20a67e8ce9 js/use-test-tool-on-path later to maint). |
| 364 | (merge 4e61b2214d ew/packfile-syscall-optim later to maint). |
| 365 | (merge ace0f86c7f pb/clarify-line-log-doc later to maint). |
| 366 | (merge 763a59e71c en/merge-recursive-oid-eq-simplify later to maint). |
| 367 | (merge 4e2c4c0d4f do/gitweb-typofix-in-comments later to maint). |
| 368 | (merge 421c0ffb02 jb/doc-multi-pack-idx-fix later to maint). |
| 369 | (merge f8740c586b pm/am-in-body-header-doc-update later to maint). |
| 370 | (merge 5814d44d9b tm/doc-submodule-absorb-fix later to maint). |