1Git 2.22 Release Notes 2====================== 3 4Updates since v2.21 5------------------- 6 7UI, Workflows & Features 8 9 * "git checkout --no-overlay" can be used to trigger a new mode of 10 checking out paths out of the tree-ish, that allows paths that 11 match the pathspec that are in the current index and working tree 12 and are not in the tree-ish. 13 14 * The %(trailers) formatter in "git log --format=..." now allows to 15 optionally pick trailers selectively by keyword, show only values, 16 etc. 17 18 * Four new configuration variables {author,committer}.{name,email} 19 have been introduced to override user.{name,email} in more specific 20 cases. 21 22 * Command-line completion (in contrib/) learned to tab-complete the 23 "git submodule absorbgitdirs" subcommand. 24 25 * "git branch" learned a new subcommand "--show-current". 26 27 * Output from "diff --cc" did not show the original paths when the 28 merge involved renames. A new option adds the paths in the 29 original trees to the output. 30 31 * The command line completion (in contrib/) has been taught to 32 complete more subcommand parameters. 33 34 * The final report from "git bisect" used to show the suspected 35 culprit using a raw "diff-tree", with which there is no output for 36 a merge commit. This has been updated to use a more modern and 37 human readable output that still is concise enough. 38 39 * "git rebase --rebase-merges" replaces its old "--preserve-merges" 40 option; the latter is now marked as deprecated. 41 42 * Error message given while cloning with --recurse-submodules has 43 been updated. 44 45 * The completion helper code now pays attention to repository-local 46 configuration (when available), which allows --list-cmds to honour 47 a repository specific setting of completion.commands, for example. 48 49 * "git mergetool" learned to offer Sublime Merge (smerge) as one of 50 its backends. 51 52 * A new hook "post-index-change" is called when the on-disk index 53 file changes, which can help e.g. a virtualized working tree 54 implementation. 55 56 * "git difftool" can now run outside a repository. 57 58 * "git checkout -m <other>" was about carrying the differences 59 between HEAD and the working-tree files forward while checking out 60 another branch, and ignored the differences between HEAD and the 61 index. The command has been taught to abort when the index and the 62 HEAD are different. 63 64 * A progress indicator has been added to the "index-pack" step, which 65 often makes users wait for completion during "git clone". 66 67 * "git submodule" learns "set-branch" subcommand that allows the 68 submodule.*.branch settings to be modified. 69 70 * "git merge-recursive" backend recently learned a new heuristics to 71 infer file movement based on how other files in the same directory 72 moved. As this is inherently less robust heuristics than the one 73 based on the content similarity of the file itself (rather than 74 based on what its neighbours are doing), it sometimes gives an 75 outcome unexpected by the end users. This has been toned down to 76 leave the renamed paths in higher/conflicted stages in the index so 77 that the user can examine and confirm the result. 78 79 * "git tag" learned to give an advice suggesting it might be a 80 mistake when creating an annotated or signed tag that points at 81 another tag. 82 83 * The "git pack-objects" command learned to report the number of 84 objects it packed via the trace2 mechanism. 85 86 * The list of conflicted paths shown in the editor while concluding a 87 conflicted merge was shown above the scissors line when the 88 clean-up mode is set to "scissors", even though it was commented 89 out just like the list of updated paths and other information to 90 help the user explain the merge better. 91 92 * The trace2 tracing facility learned to auto-generate a filename 93 when told to log to a directory. 94 95 * "git clone" learned a new --server-option option when talking over 96 the protocol version 2. 97 98 * The connectivity bitmaps are created by default in bare 99 repositories now; also the pathname hash-cache is created by 100 default to avoid making crappy deltas when repacking. 101 102 * "git branch new A...B" and "git checkout -b new A...B" have been 103 taught that in their contexts, the notation A...B means "the merge 104 base between these two commits", just like "git checkout A...B" 105 detaches HEAD at that commit. 106 107 * Update "git difftool" and "git mergetool" so that the combinations 108 of {diff,merge}.{tool,guitool} configuration variables serve as 109 fallback settings of each other in a sensible order. 110 111 * The "--dir-diff" mode of "git difftool" is not useful in "--no-index" 112 mode; they are now explicitly marked as mutually incompatible. 113 114 115Performance, Internal Implementation, Development Support etc. 116 117 * The diff machinery, one of the oldest parts of the system, which 118 long predates the parse-options API, uses fairly long and complex 119 handcrafted option parser. This is being rewritten to use the 120 parse-options API. 121 122 * The implementation of pack-redundant has been updated for 123 performance in a repository with many packfiles. 124 125 * A more structured way to obtain execution trace has been added. 126 127 * "git prune" has been taught to take advantage of reachability 128 bitmap when able. 129 130 * The command line parser of "git commit-tree" has been rewritten to 131 use the parse-options API. 132 133 * Suggest GitGitGadget instead of submitGit as a way to submit 134 patches based on GitHub PR to us. 135 136 * The test framework has been updated to help developers by making it 137 easier to run most of the tests under different versions of 138 over-the-wire protocols. 139 140 * Dev support update to make it easier to compare two formatted 141 results from our documentation. 142 143 * The scripted "git rebase" implementation has been retired. 144 145 * "git multi-pack-index verify" did not scale well with the number of 146 packfiles, which is being improved. 147 148 * "git stash" has been rewritten in C. 149 150 * The "check-docs" Makefile target to support developers has been 151 updated. 152 153 * The tests have been updated not to rely on the abbreviated option 154 names the parse-options API offers, to protect us from an 155 abbreviated form of an option that used to be unique within the 156 command getting non-unique when a new option that share the same 157 prefix is added. 158 159 * The scripted version of "git rebase -i" wrote and rewrote the todo 160 list many times during a single step of its operation, and the 161 recent C-rewrite made a faithful conversion of the logic to C. The 162 implementation has been updated to carry necessary information 163 around in-core to avoid rewriting the same file over and over 164 unnecessarily. 165 166 * Test framework update to more robustly clean up leftover files and 167 processes after tests are done. 168 169 * Conversion from unsigned char[20] to struct object_id continues. 170 171 * While running "git diff" in a lazy clone, we can upfront know which 172 missing blobs we will need, instead of waiting for the on-demand 173 machinery to discover them one by one. The code learned to aim to 174 achieve better performance by batching the request for these 175 promised blobs. 176 177 * During an initial "git clone --depth=..." partial clone, it is 178 pointless to spend cycles for a large portion of the connectivity 179 check that enumerates and skips promisor objects (which by 180 definition is all objects fetched from the other side). This has 181 been optimized out. 182 183 * Mechanically and systematically drop "extern" from function 184 declarlation. 185 186 * The script to aggregate perf result unconditionally depended on 187 libjson-perl even though it did not have to, which has been 188 corrected. 189 190 * The internal implementation of "git rebase -i" has been updated to 191 avoid forking a separate "rebase--interactive" process. 192 193 * Allow DEP and ASLR for Windows build to for security hardening. 194 195 * Performance test framework has been broken and measured the version 196 of Git that happens to be on $PATH, not the specified one to 197 measure, for a while, which has been corrected. 198 199 * Optionally "make coccicheck" can feed multiple source files to 200 spatch, gaining performance while spending more memory. 201 202 * Attempt to use an abbreviated option in "git clone --recurs" is 203 responded by a request to disambiguate between --recursive and 204 --recurse-submodules, which is bad because these two are synonyms. 205 The parse-options API has been extended to define such synonyms 206 more easily and not produce an unnecessary failure. 207 208 * A pair of private functions in http.c that had names similar to 209 fread/fwrite did not return the number of elements, which was found 210 to be confusing. 211 212 * Update collision-detecting SHA-1 code to build properly on HP-UX. 213 214 215Fixes since v2.21 216----------------- 217 218 * "git prune-packed" did not notice and complain against excess 219 arguments given from the command line, which now it does. 220 (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint). 221 222 * Split-index fix. 223 (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint). 224 225 * "git diff --no-index" may still want to access Git goodies like 226 --ext-diff and --textconv, but so far these have been ignored, 227 which has been corrected. 228 (merge 287ab28bfa jk/diff-no-index-initialize later to maint). 229 230 * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes 231 a bug in the latter (lack of authentication retry) and generally 232 improves the code base. 233 (merge a97d00799a jt/http-auth-proto-v2-fix later to maint). 234 235 * The include file compat/bswap.h has been updated so that it is safe 236 to (accidentally) include it more than once. 237 (merge 33aa579a55 jk/guard-bswap-header later to maint). 238 239 * The set of header files used by "make hdr-check" unconditionally 240 included sha256/gcrypt.h, even when it is not used, causing the 241 make target to fail. We now skip it when GCRYPT_SHA256 is not in 242 use. 243 (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint). 244 245 * The Makefile uses 'find' utility to enumerate all the *.h header 246 files, which is expensive on platforms with slow filesystems; it 247 now optionally uses "ls-files" if working within a repository, 248 which is a trick similar to how all sources are enumerated to run 249 ETAGS on. 250 (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint). 251 252 * "git rebase" that was reimplemented in C did not set ORIG_HEAD 253 correctly, which has been corrected. 254 (merge cbd29ead92 js/rebase-orig-head-fix later to maint). 255 256 * Dev support. 257 (merge f545737144 js/stress-test-ui-tweak later to maint). 258 259 * CFLAGS now can be tweaked when invoking Make while using 260 DEVELOPER=YesPlease; this did not work well before. 261 (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint). 262 263 * "git fsck --connectivity-only" omits computation necessary to sift 264 the objects that are not reachable from any of the refs into 265 unreachable and dangling. This is now enabled when dangling 266 objects are requested (which is done by default, but can be 267 overridden with the "--no-dangling" option). 268 (merge 8d8c2a5aef jk/fsck-doc later to maint). 269 270 * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX), 271 the upload-pack that runs on the other end that hangs up after 272 detecting an error could cause "git fetch" to die with a signal, 273 which led to a flakey test. "git fetch" now ignores SIGPIPE during 274 the network portion of its operation (this is not a problem as we 275 check the return status from our write(2)s). 276 (merge 143588949c jk/no-sigpipe-during-network-transport later to maint). 277 278 * A recent update broke "is this object available to us?" check for 279 well-known objects like an empty tree (which should yield "yes", 280 even when there is no on-disk object for an empty tree), which has 281 been corrected. 282 (merge f06ab027ef jk/virtual-objects-do-exist later to maint). 283 284 * The setup code has been cleaned up to avoid leaks around the 285 repository_format structure. 286 (merge e8805af1c3 ma/clear-repository-format later to maint). 287 288 * "git config --type=color ..." is meant to replace "git config --get-color" 289 but there is a slight difference that wasn't documented, which is 290 now fixed. 291 (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint). 292 293 * When the "clean" filter can reduce the size of a huge file in the 294 working tree down to a small "token" (a la Git LFS), there is no 295 point in allocating a huge scratch area upfront, but the buffer is 296 sized based on the original file size. The convert mechanism now 297 allocates very minimum and reallocates as it receives the output 298 from the clean filter process. 299 (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint). 300 301 * "git rebase" uses the refs/rewritten/ hierarchy to store its 302 intermediate states, which inherently makes the hierarchy per 303 worktree, but it didn't quite work well. 304 (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint). 305 306 * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch 307 output as it should. This has been corrected. 308 (merge 05314efaea jk/line-log-with-patch later to maint). 309 310 * "git worktree add" used to do a "find an available name with stat 311 and then mkdir", which is race-prone. This has been fixed by using 312 mkdir and reacting to EEXIST in a loop. 313 (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint). 314 315 * Build update for SHA-1 with collision detection. 316 (merge 07a20f569b jk/sha1dc later to maint). 317 318 * Build procedure has been fixed around use of asciidoctor instead of 319 asciidoc. 320 (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint). 321 322 * remote-http transport did not anonymize URLs reported in its error 323 messages at places. 324 (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint). 325 326 * Error messages given from the http transport have been updated so 327 that they can be localized. 328 (merge ed8b4132c8 js/remote-curl-i18n later to maint). 329 330 * "git init" forgot to read platform-specific repository 331 configuration, which made Windows port to ignore settings of 332 core.hidedotfiles, for example. 333 334 * A corner-case object name ambiguity while the sequencer machinery 335 is working (e.g. "rebase -i -x") has been fixed. 336 337 * "git format-patch" did not diagnose an error while opening the 338 output file for the cover-letter, which has been corrected. 339 (merge 2fe95f494c jc/format-patch-error-check later to maint). 340 341 * "git checkout -f <branch>" while the index has an unmerged path 342 incorrectly left some paths in an unmerged state, which has been 343 corrected. 344 345 * A corner case bug in the refs API has been corrected. 346 (merge d3322eb28b jk/refs-double-abort later to maint). 347 348 * Unicode update. 349 (merge 584b62c37b bb/unicode-12 later to maint). 350 351 * dumb-http walker has been updated to share more error recovery 352 strategy with the normal codepath. 353 354 * A buglet in configuration parser has been fixed. 355 (merge 19e7fdaa58 nd/include-if-wildmatch later to maint). 356 357 * The documentation for "git read-tree --reset -u" has been updated. 358 (merge b5a0bd694c nd/read-tree-reset-doc later to maint). 359 360 * Code clean-up around a much-less-important-than-it-used-to-be 361 update_server_info() funtion. 362 (merge b3223761c8 jk/server-info-rabbit-hole later to maint). 363 364 * The message given when "git commit -a <paths>" errors out has been 365 updated. 366 (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint). 367 368 * "git cherry-pick --options A..B", after giving control back to the 369 user to ask help resolving a conflicted step, did not honor the 370 options it originally received, which has been corrected. 371 372 * Various glitches in "git gc" around reflog handling have been fixed. 373 374 * The code to read from commit-graph file has been cleanup with more 375 careful error checking before using data read from it. 376 377 * Performance fix around "git fetch" that grabs many refs. 378 (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint). 379 380 * Protocol v2 support in "git fetch-pack" of shallow clones has been 381 corrected. 382 383 * Performance fix around "git blame", especially in a linear history 384 (which is the norm we should optimize for). 385 (merge f892014943 dk/blame-keep-origin-blob later to maint). 386 387 * Performance fix for "rev-list --parents -- pathspec". 388 (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint). 389 390 * Updating the display with progress message has been cleaned up to 391 deal better with overlong messages. 392 (merge 545dc345eb sg/overlong-progress-fix later to maint). 393 394 * "git blame -- path" in a non-bare repository starts blaming from 395 the working tree, and the same command in a bare repository errors 396 out because there is no working tree by definition. The command 397 has been taught to instead start blaming from the commit at HEAD, 398 which is more useful. 399 (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint). 400 401 * An underallocation in the code to read the untracked cache 402 extension has been corrected. 403 (merge 3a7b45a623 js/untracked-cache-allocfix later to maint). 404 405 * The code is updated to check the result of memory allocation before 406 it is used in more places, by using xmalloc and/or xcalloc calls. 407 (merge 999b951b28 jk/xmalloc later to maint). 408 409 * The GETTEXT_POISON test option has been quite broken ever since it 410 was made runtime-tunable, which has been fixed. 411 (merge f88b9cb603 jc/gettext-test-fix later to maint). 412 413 * Test fix on APFS that is incapable of store paths in Latin-1. 414 (merge 3889149619 js/iso8895-test-on-apfs later to maint). 415 416 * "git submodule foreach <command> --quiet" did not pass the option 417 down correctly, which has been corrected. 418 (merge a282f5a906 nd/submodule-foreach-quiet later to maint). 419 420 * "git send-email" has been taught to use quoted-printable when the 421 payload contains carriage-return. The use of the mechanism is in 422 line with the design originally added the codepath that chooses QP 423 when the payload has overly long lines. 424 (merge 74d76a1701 bc/send-email-qp-cr later to maint). 425 426 * The recently added feature to add addresses that are on 427 anything-by: trailers in 'git send-email' was found to be way too 428 eager and considered nonsense strings as if they can be legitimate 429 beginning of *-by: trailer. This has been tightened. 430 431 * Builds with gettext broke on recent macOS w/ Homebrew, which 432 seems to have stopped including from /usr/local/include; this 433 has been corrected. 434 (merge 92a1377a2a js/macos-gettext-build later to maint). 435 436 * Running "git add" on a repository created inside the current 437 repository is an explicit indication that the user wants to add it 438 as a submodule, but when the HEAD of the inner repository is on an 439 unborn branch, it cannot be added as a submodule. Worse, the files 440 in its working tree can be added as if they are a part of the outer 441 repository, which is not what the user wants. These problems are 442 being addressed. 443 (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint). 444 445 * "git cherry-pick" run with the "-x" or the "--signoff" option used 446 to (and more importantly, ought to) clean up the commit log message 447 with the --cleanup=space option by default, but this has been 448 broken since late 2017. This has been fixed. 449 450 * When given a tag that points at a commit-ish, "git replace --graft" 451 failed to peel the tag before writing a replace ref, which did not 452 make sense because the old graft mechanism the feature wants to 453 mimick only allowed to replace one commit object with another. 454 This has been fixed. 455 (merge ee521ec4cb cc/replace-graft-peel-tags later to maint). 456 457 * Code tightening against a "wrong" object appearing where an object 458 of a different type is expected, instead of blindly assuming that 459 the connection between objects are correctly made. 460 (merge 97dd512af7 tb/unexpected later to maint). 461 462 * An earlier update for MinGW and Cygwin accidentally broke MSVC build, 463 which has been fixed. 464 (merge 22c3634c0f ss/msvc-path-utils-fix later to maint). 465 466 * %(push:track) token used in the --format option to "git 467 for-each-ref" and friends was not showing the right branch, which 468 has been fixed. 469 (merge c646d0934e dr/ref-filter-push-track-fix later to maint). 470 471 * "make check-docs", "git help -a", etc. did not account for cases 472 where a particular build may deliberately omit some subcommands, 473 which has been corrected. 474 475 * The logic to tell if a Git repository has a working tree protects 476 "git branch -D" from removing the branch that is currently checked 477 out by mistake. The implementation of this logic was broken for 478 repositories with unusual name, which unfortunately is the norm for 479 submodules these days. This has been fixed. 480 (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint). 481 482 * AIX shared the same build issues with other BSDs around fileno(fp), 483 which has been corrected. 484 (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint). 485 486 * The autoconf generated configure script failed to use the right 487 gettext() implementations from -libintl by ignoring useless stub 488 implementations shipped in some C library, which has been 489 corrected. 490 (merge b71e56a683 vk/autoconf-gettext later to maint). 491 492 * Fix index-pack perf test so that the repeated invocations always 493 run in an empty repository, which emulates the initial clone 494 situation better. 495 (merge 775c71e16d jk/p5302-avoid-collision-check-cost later to maint). 496 497 * A "ls-files" that emulates "find" to enumerate files in the working 498 tree resulted in duplicated Makefile rules that caused the build to 499 issue an unnecessary warning during a trial build after merge 500 conflicts are resolved in working tree *.h files but before the 501 resolved results are added to the index. This has been corrected. 502 503 * "git chery-pick" (and "revert" that shares the same runtime engine) 504 that deals with multiple commits got confused when the final step 505 gets stopped with a conflict and the user concluded the sequence 506 with "git commit". Attempt to fix it by cleaning up the state 507 files used by these commands in such a situation. 508 (merge 4a72486de9 pw/clean-sequencer-state-upon-final-commit later to maint). 509 510 * On a filesystem like HFS+, the names of the refs stored as filesystem 511 entities may become different from what the end-user expects, just 512 like files in the working tree get "renamed". Work around the 513 mismatch by paying attention to the core.precomposeUnicode 514 configuration. 515 (merge 8e712ef6fc en/unicode-in-refnames later to maint). 516 517 * The code to generate the multi-pack idx file was not prepared to 518 see too many packfiles and ran out of open file descriptor, which 519 has been corrected. 520 521 * To run tests for Git SVN, our scripts for CI used to install the 522 git-svn package (in the hope that it would bring in the right 523 dependencies). This has been updated to install the more direct 524 dependency, namely, libsvn-perl. 525 (merge db864306cf sg/ci-libsvn-perl later to maint). 526 527 * "git cvsexportcommit" running on msys did not expect cvsnt showed 528 "cvs status" output with CRLF line endings. 529 530 * The fsmonitor interface got out of sync after the in-core index 531 file gets discarded, which has been corrected. 532 (merge 398a3b0899 js/fsmonitor-refresh-after-discarding-index later to maint). 533 534 * "git status" did not know that the "label" instruction in the 535 todo-list "rebase -i -r" uses should not be shown as a hex object 536 name. 537 538 * A prerequiste check in the test suite to see if a working jgit is 539 available was made more robust. 540 (merge abd0f28983 tz/test-lib-check-working-jgit later to maint). 541 542 * The codepath to parse :<path> that obtains the object name for an 543 indexed object has been made more robust. 544 545 * Code cleanup, docfix, build fix, etc. 546 (merge 11f470aee7 jc/test-yes-doc later to maint). 547 (merge 90503a240b js/doc-symref-in-proto-v1 later to maint). 548 (merge 5c326d1252 jk/unused-params later to maint). 549 (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint). 550 (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint). 551 (merge 1ede45e44b en/merge-options-doc later to maint). 552 (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint). 553 (merge c271dc28fd nd/no-more-check-racy later to maint). 554 (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint). 555 (merge bb101aaf0c rd/attr.c-comment-typofix later to maint). 556 (merge 716a5af812 rd/gc-prune-doc-fix later to maint). 557 (merge 50b206371d js/untravis-windows later to maint). 558 (merge dbf47215e3 js/rebase-recreate-merge later to maint). 559 (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint). 560 (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint). 561 (merge af91b0230c dl/ignore-docs later to maint). 562 (merge 59a06e947b ra/t3600-test-path-funcs later to maint). 563 (merge e041d0781b ar/t4150-remove-cruft later to maint). 564 (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint). 565 (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint). 566 (merge ed31851fa6 ab/doc-misc-typofixes later to maint). 567 (merge a7256debd4 nd/checkout-m-doc-update later to maint). 568 (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint). 569 (merge 0b918b75af sg/t5318-cleanup later to maint). 570 (merge 68ed71b53c cb/doco-mono later to maint). 571 (merge a34dca2451 nd/interpret-trailers-docfix later to maint). 572 (merge cf7b857a77 en/fast-import-parsing-fix later to maint). 573 (merge fe61ccbc35 po/rerere-doc-fmt later to maint). 574 (merge ffea0248bf po/describe-not-necessarily-7 later to maint). 575 (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint). 576 (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint). 577 (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint). 578 (merge d8083e4180 km/t3000-retitle later to maint). 579 (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint). 580 (merge da9ca955a7 jk/ls-files-doc-markup-fix later to maint). 581 (merge 6804ba3a58 cw/diff-highlight later to maint). 582 (merge 1a8787144d nd/submodule-helper-incomplete-line-fix later to maint). 583 (merge d9ef573837 jk/apache-lsan later to maint). 584 (merge c871fbee2b js/t6500-use-windows-pid-on-mingw later to maint). 585 (merge ce4c7bfc90 bl/t4253-exit-code-from-format-patch later to maint). 586 (merge 397a46db78 js/t5580-unc-alternate-test later to maint). 587 (merge d4907720a2 cm/notes-comment-fix later to maint). 588 (merge 9dde06de13 cb/http-push-null-in-message-fix later to maint).