| 1 | Git v2.50 Release Notes |
| 2 | ======================= |
| 3 | |
| 4 | UI, Workflows & Features |
| 5 | ------------------------ |
| 6 | |
| 7 | * A post-processing filter for "diff --raw" output has been |
| 8 | introduced. |
| 9 | |
| 10 | * "git repack" learned "--combine-cruft-below-size" option that |
| 11 | controls how cruft-packs are combined. |
| 12 | |
| 13 | * TCP keepalive behaviour on http transports can now be configured by |
| 14 | calling cURL library. |
| 15 | |
| 16 | * Incrementally updating multi-pack index files. |
| 17 | |
| 18 | * "git reflog" learns "drop" subcommand, that discards the entire |
| 19 | reflog data for a ref. |
| 20 | |
| 21 | * A new userdiff driver for ".ini" format configuration files has |
| 22 | been added. |
| 23 | |
| 24 | * The job to coalesce loose objects into packfiles in "git |
| 25 | maintenance" now has configurable batch size. |
| 26 | |
| 27 | * "git clone" still gave the message about the default branch name; |
| 28 | this message has been turned into an advice message that can be |
| 29 | turned off. |
| 30 | |
| 31 | * "git rev-list" learns machine-parsable output format that delimits |
| 32 | each field with NUL. |
| 33 | |
| 34 | * "git maintenance" learns a new task to expire reflog entries. |
| 35 | |
| 36 | * Auth-related (and unrelated) error handling in send-email has been |
| 37 | made more robust. |
| 38 | |
| 39 | * Updating multiple references have only been possible in an all-or-nothing |
| 40 | fashion with transactions, but it can be more efficient to batch |
| 41 | multiple updates even when some of them are allowed to fail in a |
| 42 | best-effort manner. A new "best effort batches of updates" mode |
| 43 | has been introduced. |
| 44 | |
| 45 | * "git help --build-options" reports SHA-1 and SHA-256 backends used |
| 46 | in the build. |
| 47 | |
| 48 | * "git cat-file --batch" and friends learned to allow "--filter=" to |
| 49 | omit certain objects, just like the transport layer does. |
| 50 | |
| 51 | * "git blame --porcelain" mode now talks about unblamable lines and |
| 52 | lines that are blamed to an ignored commit. |
| 53 | |
| 54 | * The build procedure installs bash (but not zsh) completion script. |
| 55 | |
| 56 | * send-email has been updated to work better with Outlook's SMTP server. |
| 57 | |
| 58 | * "git diff --minimal" used to give non-minimal output when its |
| 59 | optimization kicked in, which has been disabled. |
| 60 | |
| 61 | * "git index-pack --fix-thin" used to abort to prevent a cycle in |
| 62 | delta chains from forming in a corner case even when there is no |
| 63 | such cycle. |
| 64 | |
| 65 | * Make repository clean-up tasks that "gc" can do available to "git |
| 66 | maintenance" front-end. |
| 67 | |
| 68 | * Bundle-URI feature did not use refs recorded in the bundle other |
| 69 | than normal branches as anchoring points to optimize the follow-up |
| 70 | fetch during "git clone"; now it is told to utilize all. |
| 71 | |
| 72 | * The `send-email` documentation has been updated with OAuth2.0 |
| 73 | related examples. |
| 74 | |
| 75 | * Two of the "scalar" subcommands that add a repository that hasn't |
| 76 | been under "scalar"'s control are taught an option not to enable the |
| 77 | scheduled maintenance on it. |
| 78 | |
| 79 | * The userdiff pattern for shell scripts has been updated to cope |
| 80 | with more bash-isms. |
| 81 | |
| 82 | * "git merge-tree" learned an option to see if it resolves cleanly |
| 83 | without actually creating a result. |
| 84 | |
| 85 | * The commit title in the "rebase -i" todo file are now prefixed with |
| 86 | '#', just like a merge commit being replayed. |
| 87 | |
| 88 | * "git receive-pack" optionally learns not to care about connectivity |
| 89 | check, which can be useful when the repository arranges to ensure |
| 90 | connectivity by some other means. |
| 91 | |
| 92 | * "git notes --help" documentation updates. |
| 93 | |
| 94 | |
| 95 | Performance, Internal Implementation, Development Support etc. |
| 96 | -------------------------------------------------------------- |
| 97 | |
| 98 | * A handful of built-in command implementations have been rewritten |
| 99 | to use the repository instance supplied by git.c:run_builtin(), its |
| 100 | caller. |
| 101 | |
| 102 | * "git fsck" becomes more careful when checking the refs. |
| 103 | |
| 104 | * "git fast-export | git fast-import" learns to deal with commit and |
| 105 | tag objects with embedded signatures a bit better. This is highly |
| 106 | experimental and the format of the data stream may change in the |
| 107 | future without compatibility guarantees. |
| 108 | |
| 109 | * The code paths to check whether a refname X is available (by seeing |
| 110 | if another ref X/Y exists, etc.) have been optimized. |
| 111 | |
| 112 | * First step of deprecating and removing merge-recursive. |
| 113 | |
| 114 | * In protocol v2 where the refs advertisement is constrained, we try |
| 115 | to tell the server side not to limit the advertisement when there |
| 116 | is no specific need to, which has been the source of confusion and |
| 117 | recent bugs. Revamp the logic to simplify. |
| 118 | |
| 119 | * Update meson based build procedure for breaking changes support. |
| 120 | |
| 121 | * Enable -Wunreachable-code for developer builds. |
| 122 | |
| 123 | * Ensure what we write in assert() does not have side effects, |
| 124 | and introduce ASSERT() macro to mark those that cannot be |
| 125 | mechanically checked for lack of side effects. |
| 126 | |
| 127 | * Give more meaningful error return values from block writer layer of |
| 128 | the reftable ref-API backend. |
| 129 | |
| 130 | * Make the code in reftable library less reliant on the service |
| 131 | routines it used to borrow from Git proper, to make it easier to |
| 132 | use by external users of the library. |
| 133 | |
| 134 | * CI update. |
| 135 | |
| 136 | * The object layer has been updated to take an explicit repository |
| 137 | instance as a parameter in more code paths. |
| 138 | |
| 139 | * Some warnings from "-Wsign-compare" for builtin/rm.c have been |
| 140 | squelched. |
| 141 | |
| 142 | * A few traditional unit tests have been rewritten to use the clar |
| 143 | framework. |
| 144 | |
| 145 | * Some warnings from "-Wsign-compare" for pathspec.c have been |
| 146 | squelched. |
| 147 | |
| 148 | * "make test" used to have a hard dependency on (basic) Perl; tests |
| 149 | have been rewritten help environment with NO_PERL test the build as |
| 150 | much as possible. |
| 151 | |
| 152 | * Remove remnants of the recursive merge strategy backend, which was |
| 153 | superseded by the ort merge strategy. |
| 154 | |
| 155 | * Optimize the code to dedup references recorded in a bundle file. |
| 156 | |
| 157 | * Update parse-options API to catch mistakes to pass address of an |
| 158 | integral variable of a wrong type/size. |
| 159 | |
| 160 | * Since a call to repo_config() can be called with repo set to NULL |
| 161 | these days, a command that is marked as RUN_SETUP in the builtin |
| 162 | command table does not have to check repo with NULL before making |
| 163 | the call. |
| 164 | |
| 165 | * Overhaul of the reftable API. |
| 166 | |
| 167 | * Reduce requirement for Perl in our documentation build and a few |
| 168 | scripts. |
| 169 | |
| 170 | * The build procedure based on Meson learned to drive the |
| 171 | benchmarking tests. |
| 172 | |
| 173 | * Code clean-up for meson-based build infrastructure. |
| 174 | |
| 175 | * Add an equivalent to "make hdr-check" target to meson based builds. |
| 176 | |
| 177 | * Further code clean-up in the object-store layer. |
| 178 | |
| 179 | * Build performance fix. |
| 180 | |
| 181 | * Teach "git send-email" to also consult `hostname -f` for mail |
| 182 | domain to compute the identity given to SMTP servers. |
| 183 | |
| 184 | * The dependency on the_repository variable has been reduced from the |
| 185 | code paths in "git replay". |
| 186 | |
| 187 | * Support to create a loose object file with unknown object type has |
| 188 | been dropped. |
| 189 | |
| 190 | * The code path to access the "packed-refs" file while "fsck" is |
| 191 | taught to mmap the file, instead of reading the whole file into |
| 192 | memory. |
| 193 | |
| 194 | * Assorted fixes for issues found with CodeQL. |
| 195 | |
| 196 | * Remove the leftover hints to the test framework to mark tests that |
| 197 | do not pass the leak checker tests, as they should no longer be |
| 198 | needed. |
| 199 | |
| 200 | * When a stale .midx file refers to .pack files that no longer exist, |
| 201 | we ended up checking for these non-existent files repeatedly, which |
| 202 | has been optimized by memoizing the non-existence. |
| 203 | |
| 204 | * Build settings have been improved for BSD based systems. |
| 205 | |
| 206 | * Newer version of libcURL detected curl_easy_setopt() calls we made |
| 207 | with platform-natural "int" when we should have used "long", which |
| 208 | all have been corrected. |
| 209 | |
| 210 | * Tests that compare $HOME and $(pwd), which should be the same |
| 211 | directory unless the tests chdir's around, would fail when the user |
| 212 | enters the test directory via symbolic links, which has been |
| 213 | corrected. |
| 214 | |
| 215 | |
| 216 | Fixes since v2.49 |
| 217 | ----------------- |
| 218 | |
| 219 | * The refname exclusion logic in the packed-ref backend has been |
| 220 | broken for some time, which confused upload-pack to advertise |
| 221 | different set of refs. This has been corrected. |
| 222 | (merge 10e8a9352b tb/refs-exclude-fixes later to maint). |
| 223 | |
| 224 | * The merge-recursive and merge-ort machinery crashed in corner cases |
| 225 | when certain renames are involved. |
| 226 | (merge 3adba40858 en/merge-process-renames-crash-fix later to maint). |
| 227 | |
| 228 | * Certain "cruft" objects would have never been refreshed when there |
| 229 | are multiple cruft packs in the repository, which has been |
| 230 | corrected. |
| 231 | (merge 08f612ba70 tb/multi-cruft-pack-refresh-fix later to maint). |
| 232 | |
| 233 | * The xdiff code on 32-bit platform misbehaved when an insanely large |
| 234 | context size is given, which has been corrected. |
| 235 | (merge d39e28e68c rs/xdiff-context-length-fix later to maint). |
| 236 | |
| 237 | * GitHub Actions CI switched on a CI/CD variable that does not exist |
| 238 | when choosing what packages to install etc., which has been |
| 239 | corrected. |
| 240 | (merge ee89f7c79d kn/ci-meson-check-build-docs-fix later to maint). |
| 241 | |
| 242 | * Using "git name-rev --stdin" as an example, improve the framework to |
| 243 | prepare tests to pretend to be in the future where the breaking |
| 244 | changes have already happened. |
| 245 | (merge de3dec1187 jc/name-rev-stdin later to maint). |
| 246 | |
| 247 | * An earlier code refactoring of the hash machinery missed a few |
| 248 | required calls to init_fn. |
| 249 | (merge d39f04b638 jh/hash-init-fixes later to maint). |
| 250 | |
| 251 | * A documentation page was left out from formatting and installation, |
| 252 | which has been corrected. |
| 253 | (merge ae85116f18 pw/build-breaking-changes-doc later to maint). |
| 254 | |
| 255 | * The bash command line completion script (in contrib/) has been |
| 256 | updated to cope with remote repository nicknames with slashes in |
| 257 | them. |
| 258 | (merge 778d2f1760 dm/completion-remote-names-fix later to maint). |
| 259 | |
| 260 | * "Dubious ownership" checks on Windows has been tightened up. |
| 261 | (merge 5bb88e89ef js/mingw-admins-are-special later to maint). |
| 262 | |
| 263 | * Layout configuration in vimdiff backend didn't work as advertised, |
| 264 | which has been corrected. |
| 265 | (merge 93bab2d04b fr/vimdiff-layout-fixes later to maint). |
| 266 | |
| 267 | * Fix our use of zlib corner cases. |
| 268 | (merge 1cb2f293f5 jk/zlib-inflate-fixes later to maint). |
| 269 | |
| 270 | * Fix lockfile contention in reftable code on Windows. |
| 271 | (merge 0a3dceabf1 ps/mingw-creat-excl-fix later to maint). |
| 272 | |
| 273 | * "git-merge-file" documentation source, which has lines that look |
| 274 | like conflict markers, lacked custom conflict marker size defined, |
| 275 | which has been corrected.. |
| 276 | (merge d3b5832381 pw/custom-conflict-marker-size-for-merge-related-docs later to maint). |
| 277 | |
| 278 | * Squelch false-positive from sparse. |
| 279 | (merge da87b58014 dd/sparse-glibc-workaround later to maint). |
| 280 | |
| 281 | * Adjust to the deprecation of use of Ubuntu 20.04 GitHub Actions CI. |
| 282 | (merge 832d9f6d0b js/ci-github-update-ubuntu later to maint). |
| 283 | |
| 284 | * Work around CI breakage due to fedora base image getting updated. |
| 285 | (merge 8a471a663b js/ci-fedora-gawk later to maint). |
| 286 | |
| 287 | * A ref transaction corner case fix. |
| 288 | (merge b9fadeead7 jt/ref-transaction-abort-fix later to maint). |
| 289 | |
| 290 | * Random build fixes. |
| 291 | (merge 85e1d6819f ps/misc-build-fixes later to maint). |
| 292 | |
| 293 | * "git fetch [<remote>]" with only the configured fetch refspec |
| 294 | should be the only thing to update refs/remotes/<remote>/HEAD, |
| 295 | but the code was overly eager to do so in other cases. |
| 296 | |
| 297 | * Incorrect sorting of refs with bytes with high-bit set on platforms |
| 298 | with signed char led to a BUG, which has been corrected. |
| 299 | |
| 300 | * "make perf" fixes. |
| 301 | (merge 1665f12fa0 pb/perf-test-fixes later to maint). |
| 302 | |
| 303 | * Doc mark-up updates. |
| 304 | (merge 5a5565ec44 ja/doc-reset-mv-rm-markup-updates later to maint). |
| 305 | |
| 306 | * Work around false positive from CodeQL checker. |
| 307 | (merge 0f558141ed js/range-check-codeql-workaround later to maint). |
| 308 | |
| 309 | * "git log --{left,right}-only A...B", when A and B does not share |
| 310 | any common ancestor, now behaves as expected. |
| 311 | (merge e7ef4be7c2 mh/left-right-limited later to maint). |
| 312 | |
| 313 | * Document the convention to disable hooks altogether by setting the |
| 314 | hooksPath configuration variable to /dev/null. |
| 315 | (merge 1b2eee94f1 ds/doc-disable-hooks later to maint). |
| 316 | |
| 317 | * Make sure outage of third-party sites that supply P4, Git-LFS, and |
| 318 | JGit we use for testing would not prevent our CI jobs from running |
| 319 | at all. |
| 320 | |
| 321 | * Various build tweaks, including CSPRNG selection on some platforms. |
| 322 | (merge cdda67de03 rj/build-tweaks later to maint). |
| 323 | |
| 324 | * Developer support fix.. |
| 325 | (merge 32b74b9809 js/git-perf-env-override later to maint). |
| 326 | |
| 327 | * Fix for scheduled maintenance tasks on platforms using launchctl. |
| 328 | (merge eb2d7beb0e jh/gc-launchctl-schedule-fix later to maint). |
| 329 | |
| 330 | * Update to arm64 Windows port (part of which had been reverted as it |
| 331 | broke builds for existing platforms, which may need to be redone in |
| 332 | future releases). |
| 333 | |
| 334 | * hashmap API clean-up to ensure hashmap_clear() leaves a cleared map |
| 335 | in a reusable state. |
| 336 | (merge 9481877de3 en/hashmap-clear-fix later to maint). |
| 337 | |
| 338 | * "git mv a a/b dst" would ask to move the directory 'a' itself, as |
| 339 | well as its contents, in a single destination directory, which is |
| 340 | a contradicting request that is impossible to satisfy. This case is |
| 341 | now detected and the command errors out. |
| 342 | (merge 974f0d4664 ps/mv-contradiction-fix later to maint). |
| 343 | |
| 344 | * Further refinement on CI messages when an optional external |
| 345 | software is unavailable (e.g. due to third-party service outage). |
| 346 | (merge 956acbefbd jc/ci-skip-unavailable-external-software later to maint). |
| 347 | |
| 348 | * Test result aggregation did not work in Meson based CI jobs. |
| 349 | (merge bd38ed5be1 ps/ci-test-aggreg-fix-for-meson later to maint). |
| 350 | |
| 351 | * Code clean-up around stale CI elements and building with Visual Studio. |
| 352 | (merge a7b060f67f js/ci-buildsystems-cleanup later to maint). |
| 353 | |
| 354 | * "git add 'f?o'" did not add 'foo' if 'f?o', an unusual pathname, |
| 355 | also existed on the working tree, which has been corrected. |
| 356 | (merge ec727e189c kj/glob-path-with-special-char later to maint). |
| 357 | |
| 358 | * The fallback implementation of open_nofollow() depended on |
| 359 | open("symlink", O_NOFOLLOW) to set errno to ELOOP, but a few BSD |
| 360 | derived systems use different errno, which has been worked around. |
| 361 | (merge f47bcc3413 cf/wrapper-bsd-eloop later to maint). |
| 362 | |
| 363 | * Use-after-free fix in the sequencer. |
| 364 | (merge 5dbaec628d pw/sequencer-reflog-use-after-free later to maint). |
| 365 | |
| 366 | * win+Meson CI pipeline, unlike other pipelines for Windows, |
| 367 | used to build artifacts in developer mode, which has been changed to |
| 368 | build them in release mode for consistency. |
| 369 | (merge 184abdcf05 js/ci-build-win-in-release-mode later to maint). |
| 370 | |
| 371 | * CI settings at GitLab has been updated to run MSVC based Meson job |
| 372 | automatically (as opposed to be done only upon manual request). |
| 373 | (merge 6389579b2f ps/ci-gitlab-enable-msvc-meson-job later to maint). |
| 374 | |
| 375 | * "git apply" and "git add -i/-p" code paths no longer unnecessarily |
| 376 | expand sparse-index while working. |
| 377 | (merge ecf9ba20e3 ds/sparse-apply-add-p later to maint). |
| 378 | |
| 379 | * Avoid adding directory path to a sparse-index tree entries to the |
| 380 | name-hash, since they would bloat the hashtable without anybody |
| 381 | querying for them. This was done already for a single threaded |
| 382 | part of the code, but now the multi-threaded code also does the |
| 383 | same. |
| 384 | (merge 2e60aabc75 am/sparse-index-name-hash-fix later to maint). |
| 385 | |
| 386 | * Recent versions of Perl started warning against "! A =~ /pattern/" |
| 387 | which does not negate the result of the matching. As it turns out |
| 388 | that the problematic function is not even called, it was removed. |
| 389 | (merge 67cae845d2 op/cvsserver-perl-warning later to maint). |
| 390 | |
| 391 | * "git apply --index/--cached" when applying a deletion patch in |
| 392 | reverse failed to give the mode bits of the path "removed" by the |
| 393 | patch to the file it creates, which has been corrected. |
| 394 | |
| 395 | * "git verify-refs" errored out in a repository in which |
| 396 | linked worktrees were prepared with Git 2.43 or lower. |
| 397 | (merge d5b3c38b8a sj/ref-contents-check-fix later to maint). |
| 398 | |
| 399 | * Update total_ram() function on BSD variants. |
| 400 | |
| 401 | * Update online_cpus() function on BSD variants. |
| 402 | |
| 403 | * Revert a botched bswap.h change that broke ntohll() functions on |
| 404 | big-endian systems with __builtin_bswap32/64(). |
| 405 | |
| 406 | * Fixes for GitHub Actions Coverity job. |
| 407 | (merge 3cc4fc1ebd js/github-ci-win-coverity-fix later to maint). |
| 408 | |
| 409 | * Other code cleanup, docfix, build fix, etc. |
| 410 | (merge 227c4f33a0 ja/doc-block-delimiter-markup-fix later to maint). |
| 411 | (merge 2bfd3b3685 ab/decorate-code-cleanup later to maint). |
| 412 | (merge 5337daddc7 am/dir-dedup-decl-of-repository later to maint). |
| 413 | (merge 554051d691 en/diff-rename-follow-fix later to maint). |
| 414 | (merge a18c18b470 en/random-cleanups later to maint). |
| 415 | (merge 5af21c9acb hj/doc-rev-list-ancestry-fix later to maint). |
| 416 | (merge 26d76ca284 aj/doc-restore-p-update later to maint). |
| 417 | (merge 2c0dcb9754 cc/lop-remote later to maint). |
| 418 | (merge 7b399322a2 ja/doc-branch-markup later to maint). |
| 419 | (merge ee434e1807 pw/doc-pack-refs-markup-fix later to maint). |
| 420 | (merge c000918eb7 tb/bitamp-typofix later to maint). |
| 421 | (merge fa8cd29676 js/imap-send-peer-cert-verify later to maint). |
| 422 | (merge 98b423bc1c rs/clear-commit-marks-simplify later to maint). |
| 423 | (merge 133d065dd6 ta/bulk-checkin-signed-compare-false-warning-fix later to maint). |
| 424 | (merge d2827dc31e es/meson-build-skip-coccinelle later to maint). |
| 425 | (merge ee8edb7156 dk/vimdiff-doc-fix later to maint). |
| 426 | (merge 107d889303 md/t1403-path-is-file later to maint). |
| 427 | (merge abd4192b07 js/comma-semicolon-confusion later to maint). |
| 428 | (merge 27b7264206 ab/environment-clean-header later to maint). |
| 429 | (merge ff4a749354 as/typofix-in-env-h-header later to maint). |
| 430 | (merge 86eef3541e az/tighten-string-array-constness later to maint). |
| 431 | (merge 25292c301d lo/remove-log-reencode-from-rev-info later to maint). |
| 432 | (merge 1aa50636fd jk/p5332-testfix later to maint). |
| 433 | (merge 42cf4ac552 ps/ci-resurrect-p4-on-github later to maint). |
| 434 | (merge 104add8368 js/diff-codeql-false-positive-workaround later to maint). |
| 435 | (merge f62977b93c en/get-tree-entry-doc later to maint). |
| 436 | (merge e5dd0a05ed ly/am-split-stgit-leakfix later to maint). |
| 437 | (merge bac220e154 rc/t1001-test-path-is-file later to maint). |
| 438 | (merge 91db6c735d ly/reftable-writer-leakfix later to maint). |
| 439 | (merge 20e4e9ad0b jc/doc-synopsis-option-markup later to maint). |
| 440 | (merge cddcee7f64 es/meson-configure-build-options-fix later to maint). |
| 441 | (merge cea9f55f00 wk/sparse-checkout-doc-fix later to maint). |