| 1 | Git v2.55 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | ------------------------ |
| 6 | |
| 7 | * Hook scripts defined via the configuration system can now be |
| 8 | configured to run in parallel. |
| 9 | |
| 10 | * The userdiff driver for the Scheme language has been extended to |
| 11 | cover other Lisp dialects. |
| 12 | |
| 13 | * Terminal control sequences coming over the sideband while talking |
| 14 | to a remote repository are mostly disabled by default, except for |
| 15 | ANSI color escape sequences. |
| 16 | |
| 17 | * "ort" merge backend improvements. |
| 18 | |
| 19 | * "git checkout -m another-branch" was invented to deal with local |
| 20 | changes to paths that are different between the current and the new |
| 21 | branch, but it gave only one chance to resolve conflicts. The command |
| 22 | was taught to create a stash to save the local changes. |
| 23 | |
| 24 | * A new builtin "git format-rev" is introduced for pretty formatting |
| 25 | one revision expression per line or commit object names found in |
| 26 | running text. |
| 27 | |
| 28 | * "git history" learned "fixup" command. |
| 29 | |
| 30 | * The internal URL parsing logic has been made accessible via a new |
| 31 | subcommand "git url-parse". |
| 32 | |
| 33 | * Misspelt proxy URL (e.g., httt://...) did not trigger any warning |
| 34 | or failure, which has been corrected. We had a regression in this |
| 35 | update that broke https:// proxies, but that has been caught and |
| 36 | corrected. |
| 37 | |
| 38 | * Document the fact that .git/info/exclude is shared across worktrees |
| 39 | linked to the same repository. |
| 40 | |
| 41 | * The command line parser for "git diff" learned a few options take |
| 42 | only non-negative integers. |
| 43 | |
| 44 | * The graph output from commands like "git log --graph" can now be |
| 45 | limited to a specified number of lanes, preventing overly wide output |
| 46 | in repositories with many branches. |
| 47 | |
| 48 | * The fsmonitor daemon has been implemented for Linux. |
| 49 | |
| 50 | * "git cat-file --batch" learns an in-line command "mailmap" |
| 51 | that lets the user toggle use of mailmap. |
| 52 | |
| 53 | * The "git pack-objects --path-walk" traversal has been integrated |
| 54 | with several object filters, including blobless and sparse filters. |
| 55 | |
| 56 | * "git push" learned to take a "remote group" name to push to, which |
| 57 | causes pushes to multiple places, just like "git fetch" would do. |
| 58 | |
| 59 | * The 'git-jump' command (in contrib/) has been taught to automatically |
| 60 | pick a mode (merge, diff, or ws) when invoked without arguments. |
| 61 | |
| 62 | * The documentation for `push.default = simple` has been clarified to |
| 63 | better explain its behavior, making it clear that it pushes the |
| 64 | current branch to a same-named branch on the remote, and detailing |
| 65 | the upstream requirements for centralized workflows. |
| 66 | |
| 67 | * The documentation for "--word-diff" has been extended with a bit of |
| 68 | implementation detail of where these different words come from. |
| 69 | |
| 70 | * "git config foo.bar=baz" is not likely to be a request to read the |
| 71 | value of such a variable with '=' in its name; rather it is plausible |
| 72 | that the user meant "git config set foo.bar baz". Give advice when |
| 73 | giving an error message. |
| 74 | |
| 75 | * "git rev-list" (and "git log" family of commands) learned a new "--max-count-oldest" |
| 76 | that picks oldest N commits in the range instead of the usual newest. |
| 77 | |
| 78 | * Various AsciiDoc markup fixes in 'git config' documentation and |
| 79 | related files to ensure lists and formatting are rendered correctly. |
| 80 | |
| 81 | |
| 82 | Performance, Internal Implementation, Development Support etc. |
| 83 | -------------------------------------------------------------- |
| 84 | |
| 85 | * Promisor remote handling has been refactored and fixed in |
| 86 | preparation for auto-configuration of advertised remotes. |
| 87 | |
| 88 | * Rust support is enabled by default (but still allows opting out); |
| 89 | in Git version 3.0, Rust will become mandatory. |
| 90 | |
| 91 | * Preparation of the xdiff/ codebase to work with Rust. |
| 92 | |
| 93 | * Use a larger buffer size in the code paths to ingest pack stream. |
| 94 | |
| 95 | * Refactor service routines in the ref subsystem backends. |
| 96 | |
| 97 | * Shrink wasted memory in Myers diff that does not account for common |
| 98 | prefix and suffix removal. |
| 99 | |
| 100 | * Enable expensive tests to catch topics that may cause breakages on |
| 101 | integration branches closer to their origin in the contributor PR |
| 102 | builds. |
| 103 | |
| 104 | * "git merge-base" optimization. |
| 105 | |
| 106 | * The limit_list() function that is one of the core part of the |
| 107 | revision traversal infrastructure has been optimized by replacing |
| 108 | its use of linear list with priority queue. |
| 109 | |
| 110 | * In a lazy clone, "git cherry" and "git grep" often fetch necessary |
| 111 | blob objects one by one from promisor remotes. It has been corrected |
| 112 | to collect necessary object names and fetch them in bulk to gain |
| 113 | reasonable performance. |
| 114 | |
| 115 | * The logic to determine that branches in an octopus merge are |
| 116 | independent has been optimized. |
| 117 | |
| 118 | * The consistency checks for the files reference backend have been updated |
| 119 | to skip lock files earlier, avoiding unnecessary parsing of |
| 120 | intermediate files. |
| 121 | |
| 122 | * The negotiation tip options in "git fetch" have been reworked to |
| 123 | allow requiring certain refs to be sent as "have" lines, and to |
| 124 | restrict negotiation to a specific set of refs. |
| 125 | |
| 126 | * The repacking code has been refactored and compaction of MIDX layers |
| 127 | have been implemented, and incremental strategy that does not require |
| 128 | all-into-one repacking has been introduced. |
| 129 | |
| 130 | * ODB transaction interface is being reworked to explicitly handle |
| 131 | object writes. |
| 132 | |
| 133 | * Add a new odb "in-memory" source that is meant to only hold |
| 134 | tentative objects (like the virtual blob object that represents the |
| 135 | working tree file used by "git blame"). |
| 136 | |
| 137 | * Many uses of the_repository has been updated to use a more |
| 138 | appropriate struct repository instance in setup.c codepath. |
| 139 | |
| 140 | * Revision traversal optimization. |
| 141 | |
| 142 | * Build update. |
| 143 | |
| 144 | * The logic to lazy-load trees from the commit-graph has been made |
| 145 | more robust by falling back to reading the commit object when |
| 146 | the commit-graph is no longer available. |
| 147 | |
| 148 | * The "name" argument in git_connect() and related functions has been |
| 149 | converted to a "service" enum to improve type safety and clarify its |
| 150 | purpose. |
| 151 | |
| 152 | * 'git restore --staged' has been optimized to avoid unnecessarily expanding |
| 153 | the sparse index when operating on paths within the sparse checkout |
| 154 | definition, by handling sparse directory entries at the tree level. |
| 155 | |
| 156 | * "git stash -p" has been optimized by reusing cached index |
| 157 | entries in its temporary index, avoiding unnecessary lstat() |
| 158 | calls on unchanged files. |
| 159 | |
| 160 | * The check for non-stale commits in the priority queue used by |
| 161 | `paint_down_to_common` and `ahead_behind` has been optimized by |
| 162 | replacing an O(N) scan with an O(1) counter, yielding performance |
| 163 | improvements in repositories with wide histories. |
| 164 | |
| 165 | * Reachability bitmap generation has been significantly optimized. By |
| 166 | reordering tree traversal, caching object positions, and refining how |
| 167 | pseudo-merge bitmaps are constructed, the performance of "git repack |
| 168 | --write-midx-bitmaps" is improved, especially for large repositories |
| 169 | and when using pseudo-merges. |
| 170 | |
| 171 | * Adding a decimal integer with strbuf_addf("%u") appears commonly; |
| 172 | they have been optimized by using a custom formatter. |
| 173 | |
| 174 | * Formatting object name in full hexadecimal form has been optimized |
| 175 | by using a new strbuf_add_oid_hex() helper function. |
| 176 | |
| 177 | * Encourage original authors to monitor the CI status. |
| 178 | |
| 179 | * The `git log -L` implementation has been refactored to use the |
| 180 | standard diff output pipeline, enabling pickaxe and diff-filter to |
| 181 | work as expected. Additionally, metadata-only diff formats like |
| 182 | --raw and --name-only are now supported with -L. |
| 183 | |
| 184 | * The loose object source has been refactored into a proper `struct |
| 185 | odb_source`. |
| 186 | |
| 187 | * Guidelines on how to write a cover letter for a multi-patch series |
| 188 | have been added to SubmittingPatches, which also got a new marker |
| 189 | to separate the section for typofixes. |
| 190 | |
| 191 | * The setup logic to discover and configure repositories has been |
| 192 | refactored, and the initialization of the object database has been |
| 193 | centralized. |
| 194 | |
| 195 | * Many core configuration variables have been migrated from global |
| 196 | variables into 'repo_config_values' to tie them to a specific |
| 197 | repository instance, avoiding cross-repository state leakage. |
| 198 | |
| 199 | * Streaming revision walks have been optimized by using a priority queue |
| 200 | for date-sorting commits, speeding up walks repositories with many |
| 201 | merges. |
| 202 | |
| 203 | * A recent regression in t7527 that broke TAP output has been fixed, |
| 204 | some other test noise that also broke TAP output has been silenced, |
| 205 | and 'prove' is now configured to fail on invalid TAP output to |
| 206 | prevent future regressions. |
| 207 | |
| 208 | * A handful of inappropriate uses of the_repository have been |
| 209 | rewritten to use the right repository structure instance in the |
| 210 | unpack-trees.c codepath. |
| 211 | |
| 212 | * "git index-pack" has been optimized by retaining child bases in the |
| 213 | delta cache instead of immediately freeing them, letting the existing |
| 214 | cache limit policy decide eviction. |
| 215 | |
| 216 | * `git ls-files --modified` and `git ls-files --deleted` have been |
| 217 | optimized to filter with pathspec before calling lstat() when there is |
| 218 | only a single pathspec item, avoiding unnecessary filesystem access |
| 219 | for entries that will not be shown. |
| 220 | |
| 221 | * The UNUSED macro in 'compat/posix.h' has been updated to use a |
| 222 | newly introduced GIT_CLANG_PREREQ macro for compiler version |
| 223 | checks, and the existing GIT_GNUC_PREREQ macro has been modernized |
| 224 | to use explicit major/minor comparisons rather than bit-shifting. |
| 225 | |
| 226 | * Wean the Windows builds in GitLab CI procedure away from |
| 227 | (unfortunately unreliable) Chocolatey to install dependencies. |
| 228 | (merge 0e7b51fed2 ps/gitlab-ci-windows later to maint). |
| 229 | |
| 230 | * Build-fix for 32-bit Windows. |
| 231 | |
| 232 | * Xcode 15 and later has a linker set to complain when the same library |
| 233 | archive is listed twice on the command line. Squelch the annoyance. |
| 234 | |
| 235 | |
| 236 | Fixes since v2.54 |
| 237 | ----------------- |
| 238 | |
| 239 | * Code clean-up to use the right instance of a repository instance in |
| 240 | calls inside refs subsystem. |
| 241 | (merge 57c590feb9 sp/refs-reduce-the-repository later to maint). |
| 242 | |
| 243 | * The check that implements the logic to see if an in-core cache-tree |
| 244 | is fully ready to write out a tree object was broken, which has |
| 245 | been corrected. |
| 246 | (merge 521731213c dl/cache-tree-fully-valid-fix later to maint). |
| 247 | |
| 248 | * The test suite harness and many individual test scripts have been |
| 249 | updated to work correctly when 'set -e' is in effect, which helps |
| 250 | detect misspelled test commands. |
| 251 | (merge ffe8005b9d ps/test-set-e-clean later to maint). |
| 252 | |
| 253 | * Revert a recent change that introduced a regression to help mksh users. |
| 254 | |
| 255 | * Update various GitHub Actions versions. |
| 256 | |
| 257 | * Avoid hitting the pathname limit for socks proxy socket during the |
| 258 | test.. |
| 259 | |
| 260 | * To help Windows 10 installations, avoid removing files whose |
| 261 | contents are still mmap()'ed. |
| 262 | |
| 263 | * The 'git backfill' command now rejects revision-limiting options that |
| 264 | are incompatible with its operation, uses standard documentation for |
| 265 | revision ranges, and includes blobs from boundary commits by default |
| 266 | to improve performance of subsequent operations. |
| 267 | (merge a1ad4a0fca en/backfill-fixes-and-edges later to maint). |
| 268 | |
| 269 | * "git grep" update. |
| 270 | (merge 9ff4b5ab1b rs/grep-column-only-match-fix later to maint). |
| 271 | |
| 272 | * Headers from glibc 2.43 when used with clang does not allow |
| 273 | disabling C11 language features, causing build failures.. |
| 274 | |
| 275 | * The 'http.emptyAuth=auto' configuration now correctly attempts |
| 276 | Negotiate authentication before falling back to manual credentials. |
| 277 | This allows seamless Kerberos ticket-based authentication without |
| 278 | requiring users to explicitly set 'http.emptyAuth=true'. |
| 279 | (merge 4919938d28 mc/http-emptyauth-negotiate-fix later to maint). |
| 280 | |
| 281 | * Ramifications of turning off commit-graph has been documented a bit |
| 282 | more clearly. |
| 283 | (merge 48c855bb8f kh/doc-commit-graph later to maint). |
| 284 | |
| 285 | * "git rebase --update-refs", when used with an rebase.instructionFormat |
| 286 | with "%d" (describe) in it, tried to update local branch HEAD by |
| 287 | mistake, which has been corrected. |
| 288 | (merge 106b6885c7 ag/rebase-update-refs-limit-to-branches later to maint). |
| 289 | |
| 290 | * Tweak the way how sideband messages from remote are printed while |
| 291 | we talk with a remote repository to avoid tickling terminal |
| 292 | emulator glitches. |
| 293 | (merge 31e8fcabd8 rs/sideband-clear-line-before-print later to maint). |
| 294 | |
| 295 | * The configuration variable submodule.fetchJobs was not read correctly, |
| 296 | which has been corrected. |
| 297 | (merge aa45a5902f sj/submodule-update-clone-config-fix later to maint). |
| 298 | |
| 299 | * Update code paths that assumed "unsigned long" was long enough for |
| 300 | "size_t". |
| 301 | (merge 7a094d68a2 js/objects-larger-than-4gb-on-windows later to maint). |
| 302 | |
| 303 | * Stop using unmaintained custom allocator in Windows build which was |
| 304 | the last user of the code. |
| 305 | |
| 306 | * The computation to shorten the filenames shown in diffstat measured |
| 307 | width of individual UTF-8 characters to add up, but forgot to take |
| 308 | into account error cases (e.g., an invalid UTF-8 sequence, or a |
| 309 | control character). |
| 310 | (merge 09d86a3b98 en/diffstat-utf8-truncation-fix later to maint). |
| 311 | |
| 312 | * Some tests assume that bare repository accesses are by default |
| 313 | allowed; rewrite some of them to avoid the assumption, rewrite |
| 314 | others to explicitly set safe.bareRepository to allow them. |
| 315 | (merge 985b38ca6c js/adjust-tests-to-explicitly-access-bare-repo later to maint). |
| 316 | |
| 317 | * Signing commit with custom encoding was passing the data to be |
| 318 | signed at a wrong stage in the pipeline, which has been corrected. |
| 319 | (merge 7735d7eee3 bc/sign-commit-with-custom-encoding later to maint). |
| 320 | |
| 321 | * Further update to the i18n alias support to avoid regressions. |
| 322 | |
| 323 | * "git fetch --deepen=<n>" in a full clone truncated the history to <n> |
| 324 | commits deep, which has been corrected to be a no-op instead. |
| 325 | (merge 2431f5e0e5 sp/shallow-deepen-on-non-shallow-repo-fix later to maint). |
| 326 | |
| 327 | * "git maintenance" that goes background did not use the lockfile to |
| 328 | prevent multiple maintenance processes from running at the same |
| 329 | time, which has been corrected. |
| 330 | (merge 29364f1624 ps/maintenance-daemonize-lockfix later to maint). |
| 331 | |
| 332 | * Remove ineffective strbuf presizing that would have computed an |
| 333 | allocation that would not have fit in the available memory anyway, |
| 334 | or too small due to integer wraparound to cause immediate automatic |
| 335 | growing. |
| 336 | (merge a9ce8526dc jk/pretty-no-strbuf-presizing later to maint). |
| 337 | |
| 338 | * The HTTP walker misinterpreted the alternates file that gives an |
| 339 | absolute path when the server URL does not have the final slash |
| 340 | (i.e., "https://example.com" not "https://example.com/"). |
| 341 | (merge b92387cd55 jk/dumb-http-alternate-fix later to maint). |
| 342 | |
| 343 | * "git bisect" now uses the selected terms (e.g., old/new) more |
| 344 | consistently in its output. |
| 345 | (merge cb55991825 jr/bisect-custom-terms-in-output later to maint). |
| 346 | |
| 347 | * Update GitLab CI jobs that exercise macOS. |
| 348 | (merge 62319b49bb ps/gitlab-ci-macOS-improvements later to maint). |
| 349 | |
| 350 | * "Friday noon" asked in the morning on Sunday was parsed to be one |
| 351 | day before the specified time, which has been corrected. |
| 352 | (merge b809304101 ta/approxidate-noon-fix later to maint). |
| 353 | |
| 354 | * The GIT_WORK_TREE variable prepared to invoke the push-to-checkout |
| 355 | hook was leaking into the environment even when there was no hook |
| 356 | used and broke the default push-to-deploy (i.e., let "git checkout" |
| 357 | update the working tree only when the working tree is clean). |
| 358 | (merge 44d04e4426 ar/receive-pack-worktree-env later to maint). |
| 359 | |
| 360 | * A batch of documentation pages has been updated to use the modern |
| 361 | synopsis style. |
| 362 | (merge 2ef248ae45 ja/doc-synopsis-style-again later to maint). |
| 363 | |
| 364 | * The "promisor.quiet" configuration variable was not used from |
| 365 | relevant submodules when commands like "grep --recurse-submodules" |
| 366 | triggered a lazy fetch, which has been corrected. |
| 367 | (merge fa1468a1f7 th/promisor-quiet-per-repo later to maint). |
| 368 | |
| 369 | * Correct use of sockaddr API in "git daemon". |
| 370 | (merge 422a5bf575 st/daemon-sockaddr-fixes later to maint). |
| 371 | |
| 372 | * A memory leak in `fetch_and_setup_pack_index()` when verification of |
| 373 | the downloaded pack index fails has been plugged. Also an obsolete |
| 374 | `unlink()` call on parse failure has been cleaned up. |
| 375 | |
| 376 | * In t3070-wildmatch, "via ls-files" test variants with patterns |
| 377 | containing backslash escapes are now skipped on Windows, avoiding 36 |
| 378 | test failures caused by pathspec separator conversion. |
| 379 | (merge 8c84e6802c kk/wildmatch-windows-ls-files-prereq later to maint). |
| 380 | |
| 381 | * A linker warning on macOS when building with Xcode 16.3 or newer has |
| 382 | been avoided by passing -fno-common to the compiler when a |
| 383 | sufficiently new linker is detected. |
| 384 | (merge 5cd4d0d850 hn/macos-linker-warning later to maint). |
| 385 | |
| 386 | * Documentation and tests have been added to clarify that Git's internal |
| 387 | raw timestamp format requires a `@` prefix for values less than |
| 388 | 100,000,000 to prevent ambiguity with other formats like YYYYMMDD. |
| 389 | (merge 4018dc29ee ls/doc-raw-timestamp-prefix later to maint). |
| 390 | |
| 391 | * Wording used in "format-patch --subject-prefix" documentation |
| 392 | has been improved. |
| 393 | (merge 4a1eb9304a lo/doc-format-patch-subject-prefix later to maint). |
| 394 | |
| 395 | * Advanced emulation of kill() used on Windows in GfW has been |
| 396 | upstreamed to improve the symptoms like left-behind .lock files and |
| 397 | that fails to let the child clean-up itself when it gets killed. |
| 398 | (merge 363f1d8b3a js/win-kill-child-more-gently later to maint). |
| 399 | |
| 400 | * The 'git describe --contains --all' command has been fixed to |
| 401 | properly honor the '--match' and '--exclude' options by passing |
| 402 | them down to 'git name-rev' with the appropriate reference |
| 403 | prefixes. |
| 404 | (merge 1891707d1b jk/describe-contains-all-match-fix later to maint). |
| 405 | |
| 406 | * Various typos, grammatical errors, and duplicated words in both |
| 407 | documentation and code comments have been corrected. |
| 408 | (merge dc6068df67 wy/docs-typofixes later to maint). |
| 409 | |
| 410 | * The subprocess handshake during startup has been made gentler by using |
| 411 | packet_read_line_gently() instead of packet_read_line() to prevent the |
| 412 | parent Git process from dying abruptly when a configured subprocess |
| 413 | (e.g., a clean/smudge filter) fails to start. |
| 414 | (merge 061a68e443 mm/subprocess-handshake-fix later to maint). |
| 415 | |
| 416 | * The TSAN race in transfer_debug() within transport-helper.c has been |
| 417 | resolved by initializing the debug flag early in |
| 418 | bidirectional_transfer_loop() before spawning worker threads, allowing |
| 419 | the removal of a TSAN suppression. |
| 420 | (merge 85704eda18 ps/transport-helper-tsan-fix later to maint). |
| 421 | |
| 422 | * 'git describe' has been taught to pass the 'refs/tags/' prefix down to |
| 423 | the ref iterator when '--all' is not requested, avoiding unnecessary |
| 424 | iteration over non-tag refs. |
| 425 | (merge 55088ac8a4 td/describe-tag-iteration later to maint). |
| 426 | |
| 427 | * compute_reachable_generation_numbers() in commit-graph used a 32-bit |
| 428 | integer to accumulate parent generations, which is OK for generation |
| 429 | number v1 (topological levels), but with generation number v2 |
| 430 | (adjusted committer timestamps), it truncated timestamps beyond |
| 431 | 2106. Fixed by widening the accumulator to timestamp_t. |
| 432 | (merge fbcc5408fc en/commit-graph-timestamp-fix later to maint). |
| 433 | |
| 434 | * Other code cleanup, docfix, build fix, etc. |
| 435 | (merge 80f4b802e9 ja/doc-difftool-synopsis-style later to maint). |
| 436 | (merge b96490241e jc/doc-timestamps-in-stat later to maint). |
| 437 | (merge ef85286e51 ss/t7004-unhide-git-failures later to maint). |
| 438 | (merge 7584d10bc2 mf/format-patch-cover-letter-format-docfix later to maint). |
| 439 | (merge 8547908eb3 pw/rename-to-get-current-worktree later to maint). |
| 440 | (merge 890229b3f3 sg/t6112-unwanted-tilde-expansion-fix later to maint). |
| 441 | (merge ab9753e7bc kh/doc-restore-double-underscores-fix later to maint). |
| 442 | (merge 4a9e097228 za/t2000-modernise-more later to maint). |
| 443 | (merge b635fd0725 kh/doc-log-decorate-list later to maint). |
| 444 | (merge 65ea197dca jk/commit-sign-overflow-fix later to maint). |
| 445 | (merge 3ccb16052a jk/apply-leakfix later to maint). |
| 446 | (merge 5e6e8dc786 tb/pseudo-merge-bugfixes later to maint). |
| 447 | (merge 6d09e798bc pb/doc-diff-format-updates later to maint). |
| 448 | (merge 34a891a2d3 rs/trailer-fold-optim later to maint). |
| 449 | (merge 499f9048e0 ps/t3903-cover-stash-include-untracked later to maint). |
| 450 | (merge b56ab270aa jk/sq-dequote-cleanup later to maint). |
| 451 | (merge 29d9fdcf10 rs/use-builtin-add-overflow-explicitly-on-clang later to maint). |
| 452 | (merge d9982e8290 ed/check-connected-close-err-fd-2.53 later to maint). |
| 453 | (merge 1740cc35d0 ed/check-connected-close-err-fd later to maint). |
| 454 | (merge f4d7eb3d1c sp/doc-range-diff-takes-notes later to maint). |
| 455 | (merge 83e7f3bd2b kh/free-commit-list later to maint). |
| 456 | (merge d1b72b29e9 am/doc-tech-hash-typofix later to maint). |
| 457 | (merge 014c454799 ak/typofixes later to maint). |
| 458 | (merge 522ea8ef7d js/osxkeychain-build-wo-rust later to maint). |
| 459 | (merge e8f12e0e95 jc/t1400-fifo-cleanup later to maint). |
| 460 | (merge 0bf506efd4 kw/gitattributes-typofix later to maint). |