| 1 | Git 2.20 Release Notes |
| 2 | ====================== |
| 3 | |
| 4 | Backward Compatibility Notes |
| 5 | ---------------------------- |
| 6 | |
| 7 | * "git branch -l <foo>" used to be a way to ask a reflog to be |
| 8 | created while creating a new branch, but that is no longer the |
| 9 | case. It is a short-hand for "git branch --list <foo>" now. |
| 10 | |
| 11 | * "git push" into refs/tags/* hierarchy is rejected without getting |
| 12 | forced, but "git fetch" (misguidedly) used the "fast forwarding" |
| 13 | rule used for the refs/heads/* hierarchy; this has been corrected, |
| 14 | which means some fetches of tags that did not fail with older |
| 15 | version of Git will fail without "--force" with this version. |
| 16 | |
| 17 | * "git help -a" now gives verbose output (same as "git help -av"). |
| 18 | Those who want the old output may say "git help --no-verbose -a".. |
| 19 | |
| 20 | * "git cpn --help", when "cpn" is an alias to, say, "cherry-pick -n", |
| 21 | reported only the alias expansion of "cpn" in earlier versions of |
| 22 | Git. It now runs "git cherry-pick --help" to show the manual page |
| 23 | of the command, while sending the alias expansion to the standard |
| 24 | error stream. |
| 25 | |
| 26 | * "git send-email" learned to grab address-looking string on any |
| 27 | trailer whose name ends with "-by". This is a backward-incompatible |
| 28 | change. Adding "--suppress-cc=misc-by" on the command line, or |
| 29 | setting sendemail.suppresscc configuration variable to "misc-by", |
| 30 | can be used to disable this behaviour. |
| 31 | |
| 32 | |
| 33 | Updates since v2.19 |
| 34 | ------------------- |
| 35 | |
| 36 | UI, Workflows & Features |
| 37 | |
| 38 | * Running "git clone" against a project that contain two files with |
| 39 | pathnames that differ only in cases on a case insensitive |
| 40 | filesystem would result in one of the files lost because the |
| 41 | underlying filesystem is incapable of holding both at the same |
| 42 | time. An attempt is made to detect such a case and warn. |
| 43 | |
| 44 | * "git checkout -b newbranch [HEAD]" should not have to do as much as |
| 45 | checking out a commit different from HEAD. An attempt is made to |
| 46 | optimize this special case. |
| 47 | |
| 48 | * "git rev-list --stdin </dev/null" used to be an error; it now shows |
| 49 | no output without an error. "git rev-list --stdin --default HEAD" |
| 50 | still falls back to the given default when nothing is given on the |
| 51 | standard input. |
| 52 | |
| 53 | * Lift code from GitHub to restrict delta computation so that an |
| 54 | object that exists in one fork is not made into a delta against |
| 55 | another object that does not appear in the same forked repository. |
| 56 | |
| 57 | * "git format-patch" learned new "--interdiff" and "--range-diff" |
| 58 | options to explain the difference between this version and the |
| 59 | previous attempt in the cover letter (or after the three-dashes as |
| 60 | a comment). |
| 61 | |
| 62 | * "git mailinfo" used in "git am" learned to make a best-effort |
| 63 | recovery of a patch corrupted by MUA that sends text/plain with |
| 64 | format=flawed option. |
| 65 | (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint). |
| 66 | |
| 67 | * The rules used by "git push" and "git fetch" to determine if a ref |
| 68 | can or cannot be updated were inconsistent; specifically, fetching |
| 69 | to update existing tags were allowed even though tags are supposed |
| 70 | to be unmoving anchoring points. "git fetch" was taught to forbid |
| 71 | updates to existing tags without the "--force" option. |
| 72 | |
| 73 | * "git multi-pack-index" learned to detect corruption in the .midx |
| 74 | file it uses, and this feature has been integrated into "git fsck". |
| 75 | |
| 76 | * Generation of (experimental) commit-graph files have so far been |
| 77 | fairly silent, even though it takes noticeable amount of time in a |
| 78 | meaningfully large repository. The users will now see progress |
| 79 | output. |
| 80 | |
| 81 | * The minimum version of Windows supported by Windows port of Git is |
| 82 | now set to Vista. |
| 83 | |
| 84 | * The completion script (in contrib/) learned to complete a handful of |
| 85 | options "git stash list" command takes. |
| 86 | |
| 87 | * The completion script (in contrib/) learned that "git fetch |
| 88 | --multiple" only takes remote names as arguments and no refspecs. |
| 89 | |
| 90 | * "git status" learns to show progress bar when refreshing the index |
| 91 | takes a long time. |
| 92 | (merge ae9af12287 nd/status-refresh-progress later to maint). |
| 93 | |
| 94 | * "git help -a" and "git help -av" give different pieces of |
| 95 | information, and generally the "verbose" version is more friendly |
| 96 | to the new users. "git help -a" by default now uses the more |
| 97 | verbose output (with "--no-verbose", you can go back to the |
| 98 | original). Also "git help -av" now lists aliases and external |
| 99 | commands, which it did not used to. |
| 100 | |
| 101 | * Unlike "grep", "git grep" by default recurses to the whole tree. |
| 102 | The command learned "git grep --recursive" option, so that "git |
| 103 | grep --no-recursive" can serve as a synonym to setting the |
| 104 | max-depth to 0. |
| 105 | |
| 106 | * When pushing into a repository that borrows its objects from an |
| 107 | alternate object store, "git receive-pack" that responds to the |
| 108 | push request on the other side lists the tips of refs in the |
| 109 | alternate to reduce the amount of objects transferred. This |
| 110 | sometimes is detrimental when the number of refs in the alternate |
| 111 | is absurdly large, in which case the bandwidth saved in potentially |
| 112 | fewer objects transferred is wasted in excessively large ref |
| 113 | advertisement. The alternate refs that are advertised are now |
| 114 | configurable with a pair of configuration variables. |
| 115 | |
| 116 | * "git cmd --help" when "cmd" is aliased used to only say "cmd is |
| 117 | aliased to ...". Now it shows that to the standard error stream |
| 118 | and runs "git $cmd --help" where $cmd is the first word of the |
| 119 | alias expansion. |
| 120 | |
| 121 | * The documentation of "git gc" has been updated to mention that it |
| 122 | is no longer limited to "pruning away cruft" but also updates |
| 123 | ancillary files like commit-graph as a part of repository |
| 124 | optimization. |
| 125 | |
| 126 | * "git p4 unshelve" improvements. |
| 127 | |
| 128 | * The logic to select the default user name and e-mail on Windows has |
| 129 | been improved. |
| 130 | (merge 501afcb8b0 js/mingw-default-ident later to maint). |
| 131 | |
| 132 | * The "rev-list --filter" feature learned to exclude all trees via |
| 133 | "tree:0" filter. |
| 134 | |
| 135 | * "git send-email" learned to grab address-looking string on any |
| 136 | trailer whose name ends with "-by"; --suppress-cc=misc-by on the |
| 137 | command line, or setting sendemail.suppresscc configuration |
| 138 | variable to "misc-by", can be used to disable this behaviour. |
| 139 | |
| 140 | * "git mergetool" learned to take the "--[no-]gui" option, just like |
| 141 | "git difftool" does. |
| 142 | |
| 143 | * "git rebase -i" learned a new insn, 'break', that the user can |
| 144 | insert in the to-do list. Upon hitting it, the command returns |
| 145 | control back to the user. |
| 146 | |
| 147 | * New "--pretty=format:" placeholders %GF and %GP that show the GPG |
| 148 | key fingerprints have been invented. |
| 149 | |
| 150 | * On platforms with recent cURL library, http.sslBackend configuration |
| 151 | variable can be used to choose a different SSL backend at runtime. |
| 152 | The Windows port uses this mechanism to switch between OpenSSL and |
| 153 | Secure Channel while talking over the HTTPS protocol. |
| 154 | |
| 155 | * "git send-email" learned to disable SMTP authentication via the |
| 156 | "--smtp-auth=none" option, even when the smtp username is given |
| 157 | (which turns the authentication on by default). |
| 158 | |
| 159 | * A fourth class of configuration files (in addition to the |
| 160 | traditional "system wide", "per user in the $HOME directory" and |
| 161 | "per repository in the $GIT_DIR/config") has been introduced so |
| 162 | that different worktrees that share the same repository (hence the |
| 163 | same $GIT_DIR/config file) can use different customization. |
| 164 | |
| 165 | * A pattern with '**' that does not have a slash on either side used |
| 166 | to be an invalid one, but the code now treats such double-asterisks |
| 167 | the same way as two normal asterisks that happen to be adjacent to |
| 168 | each other. |
| 169 | (merge e5bbe09e88 nd/wildmatch-double-asterisk later to maint). |
| 170 | |
| 171 | * The "--no-patch" option, which can be used to get a high-level |
| 172 | overview without the actual line-by-line patch difference shown, of |
| 173 | the "range-diff" command was earlier broken, which has been |
| 174 | corrected. |
| 175 | |
| 176 | * The recently merged "rebase in C" has an escape hatch to use the |
| 177 | scripted version when necessary, but it hasn't been documented, |
| 178 | which has been corrected. |
| 179 | |
| 180 | |
| 181 | Performance, Internal Implementation, Development Support etc. |
| 182 | |
| 183 | * Developer builds now use -Wunused-function compilation option. |
| 184 | |
| 185 | * One of our CI tests to run with "unusual/experimental/random" |
| 186 | settings now also uses commit-graph and midx. |
| 187 | |
| 188 | * When there are too many packfiles in a repository (which is not |
| 189 | recommended), looking up an object in these would require |
| 190 | consulting many pack .idx files; a new mechanism to have a single |
| 191 | file that consolidates all of these .idx files is introduced. |
| 192 | |
| 193 | * "git submodule update" is getting rewritten piece-by-piece into C. |
| 194 | |
| 195 | * The code for computing history reachability has been shuffled, |
| 196 | obtained a bunch of new tests to cover them, and then being |
| 197 | improved. |
| 198 | |
| 199 | * The unpack_trees() API used in checking out a branch and merging |
| 200 | walks one or more trees along with the index. When the cache-tree |
| 201 | in the index tells us that we are walking a tree whose flattened |
| 202 | contents is known (i.e. matches a span in the index), as linearly |
| 203 | scanning a span in the index is much more efficient than having to |
| 204 | open tree objects recursively and listing their entries, the walk |
| 205 | can be optimized, which has been done. |
| 206 | |
| 207 | * When creating a thin pack, which allows objects to be made into a |
| 208 | delta against another object that is not in the resulting pack but |
| 209 | is known to be present on the receiving end, the code learned to |
| 210 | take advantage of the reachability bitmap; this allows the server |
| 211 | to send a delta against a base beyond the "boundary" commit. |
| 212 | |
| 213 | * spatch transformation to replace boolean uses of !hashcmp() to |
| 214 | newly introduced oideq() is added, and applied, to regain |
| 215 | performance lost due to support of multiple hash algorithms. |
| 216 | |
| 217 | * Fix a bug in which the same path could be registered under multiple |
| 218 | worktree entries if the path was missing (for instance, was removed |
| 219 | manually). Also, as a convenience, expand the number of cases in |
| 220 | which --force is applicable. |
| 221 | |
| 222 | * Split Documentation/config.txt for easier maintenance. |
| 223 | (merge 6014363f0b nd/config-split later to maint). |
| 224 | |
| 225 | * Test helper binaries clean-up. |
| 226 | (merge c9a1f4161f nd/test-tool later to maint). |
| 227 | |
| 228 | * Various tests have been updated to make it easier to swap the |
| 229 | hash function used for object identification. |
| 230 | (merge ae0c89d41b bc/hash-independent-tests later to maint). |
| 231 | |
| 232 | * Update fsck.skipList implementation and documentation. |
| 233 | (merge 371a655074 ab/fsck-skiplist later to maint). |
| 234 | |
| 235 | * An alias that expands to another alias has so far been forbidden, |
| 236 | but now it is allowed to create such an alias. |
| 237 | |
| 238 | * Various test scripts have been updated for style and also correct |
| 239 | handling of exit status of various commands. |
| 240 | |
| 241 | * "gc --auto" ended up calling exit(-1) upon error, which has been |
| 242 | corrected to use exit(1). Also the error reporting behaviour when |
| 243 | daemonized has been updated to exit with zero status when stopping |
| 244 | due to a previously discovered error (which implies there is no |
| 245 | point running gc to improve the situation); we used to exit with |
| 246 | failure in such a case. |
| 247 | |
| 248 | * Various codepaths in the core-ish part learned to work on an |
| 249 | arbitrary in-core index structure, not necessarily the default |
| 250 | instance "the_index". |
| 251 | (merge b3c7eef9b0 nd/the-index later to maint). |
| 252 | |
| 253 | * Code clean-up in the internal machinery used by "git status" and |
| 254 | "git commit --dry-run". |
| 255 | (merge 73ba5d78b4 ss/wt-status-committable later to maint). |
| 256 | |
| 257 | * Some environment variables that control the runtime options of Git |
| 258 | used during tests are getting renamed for consistency. |
| 259 | (merge 4231d1ba99 bp/rename-test-env-var later to maint). |
| 260 | |
| 261 | * A pair of new extensions to the index file have been introduced. |
| 262 | They allow the index file to be read in parallel for performance. |
| 263 | |
| 264 | * The oidset API was built on top of the oidmap API which in turn is |
| 265 | on the hashmap API. Replace the implementation to build on top of |
| 266 | the khash API and gain performance. |
| 267 | |
| 268 | * Over some transports, fetching objects with an exact commit object |
| 269 | name can be done without first seeing the ref advertisements. The |
| 270 | code has been optimized to exploit this. |
| 271 | |
| 272 | * In a partial clone that will lazily be hydrated from the |
| 273 | originating repository, we generally want to avoid "does this |
| 274 | object exist (locally)?" on objects that we deliberately omitted |
| 275 | when we created the clone. The cache-tree codepath (which is used |
| 276 | to write a tree object out of the index) however insisted that the |
| 277 | object exists, even for paths that are outside of the partial |
| 278 | checkout area. The code has been updated to avoid such a check. |
| 279 | |
| 280 | * To help developers, an EditorConfig file that attempts to follow |
| 281 | the project convention has been added. |
| 282 | (merge b548d698a0 bc/editorconfig later to maint). |
| 283 | |
| 284 | * The result of coverage test can be combined with "git blame" to |
| 285 | check the test coverage of code introduced recently with a new |
| 286 | 'coverage-diff' tool (in contrib/). |
| 287 | (merge 783faedd65 ds/coverage-diff later to maint). |
| 288 | |
| 289 | * An experiment to fuzz test a few areas, hopefully we can gain more |
| 290 | coverage to various areas. |
| 291 | |
| 292 | * More codepaths are moving away from hardcoded hash sizes. |
| 293 | |
| 294 | * The way the Windows port figures out the current directory has been |
| 295 | improved. |
| 296 | |
| 297 | * The way DLLs are loaded on the Windows port has been improved. |
| 298 | |
| 299 | * Some tests have been reorganized and renamed; "ls t/" now gives a |
| 300 | better overview of what is tested for these scripts than before. |
| 301 | |
| 302 | * "git rebase" and "git rebase -i" have been reimplemented in C. |
| 303 | |
| 304 | * Windows port learned to use nano-second resolution file timestamps. |
| 305 | |
| 306 | * The overly large Documentation/config.txt file have been split into |
| 307 | million little pieces. This potentially allows each individual piece |
| 308 | to be included into the manual page of the command it affects more easily. |
| 309 | |
| 310 | * Replace three string-list instances used as look-up tables in "git |
| 311 | fetch" with hashmaps. |
| 312 | |
| 313 | * Unify code to read the author-script used in "git am" and the |
| 314 | commands that use the sequencer machinery, e.g. "git rebase -i". |
| 315 | |
| 316 | * In preparation to the day when we can deprecate and remove the |
| 317 | "rebase -p", make sure we can skip and later remove tests for |
| 318 | it. |
| 319 | |
| 320 | * The history traversal used to implement the tag-following has been |
| 321 | optimized by introducing a new helper. |
| 322 | |
| 323 | * The helper function to refresh the cached stat information in the |
| 324 | in-core index has learned to perform the lstat() part of the |
| 325 | operation in parallel on multi-core platforms. |
| 326 | |
| 327 | * The code to traverse objects for reachability, used to decide what |
| 328 | objects are unreferenced and expendable, have been taught to also |
| 329 | consider per-worktree refs of other worktrees as starting points to |
| 330 | prevent data loss. |
| 331 | |
| 332 | * "git add" needs to internally run "diff-files" equivalent, and the |
| 333 | codepath learned the same optimization as "diff-files" has to run |
| 334 | lstat(2) in parallel to find which paths have been updated in the |
| 335 | working tree. |
| 336 | |
| 337 | * The procedure to install dependencies before testing at Travis CI |
| 338 | is getting revamped for both simplicity and flexibility, taking |
| 339 | advantage of the recent move to the vm-based environment. |
| 340 | |
| 341 | * The support for format-patch (and send-email) by the command-line |
| 342 | completion script (in contrib/) has been simplified a bit. |
| 343 | |
| 344 | * The revision walker machinery learned to take advantage of the |
| 345 | commit generation numbers stored in the commit-graph file. |
| 346 | |
| 347 | * The codebase has been cleaned up to reduce "#ifndef NO_PTHREADS". |
| 348 | |
| 349 | * The way -lcurl library gets linked has been simplified by taking |
| 350 | advantage of the fact that we can just ask curl-config command how. |
| 351 | |
| 352 | * Various functions have been audited for "-Wunused-parameter" warnings |
| 353 | and bugs in them got fixed. |
| 354 | |
| 355 | * A sanity check for start-up sequence has been added in the config |
| 356 | API codepath. |
| 357 | |
| 358 | * The build procedure to link for fuzzing test has been made |
| 359 | customizable with a new Makefile variable. |
| 360 | |
| 361 | * The way "git rebase" parses and forwards the command line options |
| 362 | meant for underlying "git am" has been revamped, which fixed for |
| 363 | options with parameters that were not passed correctly. |
| 364 | |
| 365 | * Our testing framework uses a special i18n "poisoned localization" |
| 366 | feature to find messages that ought to stay constant but are |
| 367 | incorrectly marked to be translated. This feature has been made |
| 368 | into a runtime option (it used to be a compile-time option). |
| 369 | |
| 370 | * "git push" used to check ambiguities between object-names and |
| 371 | refnames while processing the list of refs' old and new values, |
| 372 | which was unnecessary (as it knew that it is feeding raw object |
| 373 | names). This has been optimized out. |
| 374 | |
| 375 | * The xcurl_off_t() helper function is used to cast size_t to |
| 376 | curl_off_t, but some compilers gave warnings against the code to |
| 377 | ensure the casting is done without wraparound, when size_t is |
| 378 | narrower than curl_off_t. This warning has been squelched. |
| 379 | |
| 380 | * Code preparation to replace ulong vars with size_t vars where |
| 381 | appropriate continues. |
| 382 | |
| 383 | * The "test installed Git" mode of our test suite has been updated to |
| 384 | work better. |
| 385 | |
| 386 | * A coding convention around the Coccinelle semantic patches to have |
| 387 | two classes to ease code migration process has been proposed and |
| 388 | its support has been added to the Makefile. |
| 389 | |
| 390 | * The "container" mode of TravisCI is going away. Our .travis.yml |
| 391 | file is getting prepared for the transition. |
| 392 | (merge 32ee384be8 ss/travis-ci-force-vm-mode later to maint). |
| 393 | |
| 394 | * Our test scripts can now take the '-V' option as a synonym for the |
| 395 | '--verbose-log' option. |
| 396 | (merge a5f52c6dab sg/test-verbose-log later to maint). |
| 397 | |
| 398 | |
| 399 | Fixes since v2.19 |
| 400 | ----------------- |
| 401 | |
| 402 | * "git interpret-trailers" and its underlying machinery had a buggy |
| 403 | code that attempted to ignore patch text after commit log message, |
| 404 | which triggered in various codepaths that will always get the log |
| 405 | message alone and never get such an input. |
| 406 | (merge 66e83d9b41 jk/trailer-fixes later to maint). |
| 407 | |
| 408 | * Malformed or crafted data in packstream can make our code attempt |
| 409 | to read or write past the allocated buffer and abort, instead of |
| 410 | reporting an error, which has been fixed. |
| 411 | |
| 412 | * "git rebase -i" did not clear the state files correctly when a run |
| 413 | of "squash/fixup" is aborted and then the user manually amended the |
| 414 | commit instead, which has been corrected. |
| 415 | (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint). |
| 416 | |
| 417 | * When fsmonitor is in use, after operation on submodules updates |
| 418 | .gitmodules, we lost track of the fact that we did so and relied on |
| 419 | stale fsmonitor data. |
| 420 | (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint). |
| 421 | |
| 422 | * Fix for a long-standing bug that leaves the index file corrupt when |
| 423 | it shrinks during a partial commit. |
| 424 | (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint). |
| 425 | |
| 426 | * Further fix for O_APPEND emulation on Windows |
| 427 | (merge eeaf7ddac7 js/mingw-o-append later to maint). |
| 428 | |
| 429 | * A corner case bugfix in "git rerere" code. |
| 430 | (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint). |
| 431 | |
| 432 | * "git add ':(attr:foo)'" is not supported and is supposed to be |
| 433 | rejected while the command line arguments are parsed, but we fail |
| 434 | to reject such a command line upfront. |
| 435 | (merge 84d938b732 nd/attr-pathspec-fix later to maint). |
| 436 | |
| 437 | * Recent update broke the reachability algorithm when refs (e.g. |
| 438 | tags) that point at objects that are not commit were involved, |
| 439 | which has been fixed. |
| 440 | |
| 441 | * "git rebase" etc. in Git 2.19 fails to abort when given an empty |
| 442 | commit log message as result of editing, which has been corrected. |
| 443 | (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint). |
| 444 | |
| 445 | * The code to backfill objects in lazily cloned repository did not |
| 446 | work correctly, which has been corrected. |
| 447 | (merge e68302011c jt/lazy-object-fetch-fix later to maint). |
| 448 | |
| 449 | * Update error messages given by "git remote" and make them consistent. |
| 450 | (merge 5025425dff ms/remote-error-message-update later to maint). |
| 451 | |
| 452 | * "git update-ref" learned to make both "--no-deref" and "--stdin" |
| 453 | work at the same time. |
| 454 | (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint). |
| 455 | |
| 456 | * Recently added "range-diff" had a corner-case bug to cause it |
| 457 | segfault, which has been corrected. |
| 458 | (merge e467a90c7a tg/range-diff-corner-case-fix later to maint). |
| 459 | |
| 460 | * The recently introduced commit-graph auxiliary data is incompatible |
| 461 | with mechanisms such as replace & grafts that "breaks" immutable |
| 462 | nature of the object reference relationship. Disable optimizations |
| 463 | based on its use (and updating existing commit-graph) when these |
| 464 | incompatible features are in use in the repository. |
| 465 | (merge 829a321569 ds/commit-graph-with-grafts later to maint). |
| 466 | |
| 467 | * The mailmap file update. |
| 468 | (merge 255eb03edf jn/mailmap-update later to maint). |
| 469 | |
| 470 | * The code in "git status" sometimes hit an assertion failure. This |
| 471 | was caused by a structure that was reused without cleaning the data |
| 472 | used for the first run, which has been corrected. |
| 473 | (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint). |
| 474 | |
| 475 | * "git fetch $repo $object" in a partial clone did not correctly |
| 476 | fetch the asked-for object that is referenced by an object in |
| 477 | promisor packfile, which has been fixed. |
| 478 | |
| 479 | * A corner-case bugfix. |
| 480 | (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint). |
| 481 | |
| 482 | * Various fixes to "diff --color-moved-ws". |
| 483 | |
| 484 | * A partial clone that is configured to lazily fetch missing objects |
| 485 | will on-demand issue a "git fetch" request to the originating |
| 486 | repository to fill not-yet-obtained objects. The request has been |
| 487 | optimized for requesting a tree object (and not the leaf blob |
| 488 | objects contained in it) by telling the originating repository that |
| 489 | no blobs are needed. |
| 490 | (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint). |
| 491 | |
| 492 | * The codepath to support the experimental split-index mode had |
| 493 | remaining "racily clean" issues fixed. |
| 494 | (merge 4c490f3d32 sg/split-index-racefix later to maint). |
| 495 | |
| 496 | * "git log --graph" showing an octopus merge sometimes miscounted the |
| 497 | number of display columns it is consuming to show the merge and its |
| 498 | parent commits, which has been corrected. |
| 499 | (merge 04005834ed np/log-graph-octopus-fix later to maint). |
| 500 | |
| 501 | * "git range-diff" did not work well when the compared ranges had |
| 502 | changes in submodules and the "--submodule=log" was used. |
| 503 | |
| 504 | * The implementation of run_command() API on the UNIX platforms had a |
| 505 | bug that caused a command not on $PATH to be found in the current |
| 506 | directory. |
| 507 | (merge f67b980771 jk/run-command-notdot later to maint). |
| 508 | |
| 509 | * A mutex used in "git pack-objects" were not correctly initialized |
| 510 | and this caused "git repack" to dump core on Windows. |
| 511 | (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint). |
| 512 | |
| 513 | * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on |
| 514 | Windows would strip initial parts from the paths because they |
| 515 | were not recognized as absolute, which has been corrected. |
| 516 | (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint). |
| 517 | |
| 518 | * The receive.denyCurrentBranch=updateInstead codepath kicked in even |
| 519 | when the push should have been rejected due to other reasons, such |
| 520 | as it does not fast-forward or the update-hook rejects it, which |
| 521 | has been corrected. |
| 522 | (merge b072a25fad jc/receive-deny-current-branch-fix later to maint). |
| 523 | |
| 524 | * The logic to determine the archive type "git archive" uses did not |
| 525 | correctly kick in for "git archive --remote", which has been |
| 526 | corrected. |
| 527 | |
| 528 | * "git repack" in a shallow clone did not correctly update the |
| 529 | shallow points in the repository, leading to a repository that |
| 530 | does not pass fsck. |
| 531 | (merge 5dcfbf564c js/shallow-and-fetch-prune later to maint). |
| 532 | |
| 533 | * Some codepaths failed to form a proper URL when .gitmodules record |
| 534 | the URL to a submodule repository as relative to the repository of |
| 535 | superproject, which has been corrected. |
| 536 | (merge e0a862fdaf sb/submodule-url-to-absolute later to maint). |
| 537 | |
| 538 | * "git fetch" over protocol v2 into a shallow repository failed to |
| 539 | fetch full history behind a new tip of history that was diverged |
| 540 | before the cut-off point of the history that was previously fetched |
| 541 | shallowly. |
| 542 | |
| 543 | * The command line completion machinery (in contrib/) has been |
| 544 | updated to allow the completion script to tweak the list of options |
| 545 | that are reported by the parse-options machinery correctly. |
| 546 | (merge 276b49ff34 nd/completion-negation later to maint). |
| 547 | |
| 548 | * Operations on promisor objects make sense in the context of only a |
| 549 | small subset of the commands that internally use the revisions |
| 550 | machinery, but the "--exclude-promisor-objects" option were taken |
| 551 | and led to nonsense results by commands like "log", to which it |
| 552 | didn't make much sense. This has been corrected. |
| 553 | (merge 669b1d2aae md/exclude-promisor-objects-fix later to maint). |
| 554 | |
| 555 | * A regression in Git 2.12 era made "git fsck" fall into an infinite |
| 556 | loop while processing truncated loose objects. |
| 557 | (merge 18ad13e5b2 jk/detect-truncated-zlib-input later to maint). |
| 558 | |
| 559 | * "git ls-remote $there foo" was broken by recent update for the |
| 560 | protocol v2 and stopped showing refs that match 'foo' that are not |
| 561 | refs/{heads,tags}/foo, which has been fixed. |
| 562 | (merge 6a139cdd74 jk/proto-v2-ref-prefix-fix later to maint). |
| 563 | |
| 564 | * Additional comment on a tricky piece of code to help developers. |
| 565 | (merge 0afbe3e806 jk/stream-pack-non-delta-clarification later to maint). |
| 566 | |
| 567 | * A couple of tests used to leave the repository in a state that is |
| 568 | deliberately corrupt, which have been corrected. |
| 569 | (merge aa984dbe5e ab/pack-tests-cleanup later to maint). |
| 570 | |
| 571 | * The submodule support has been updated to read from the blob at |
| 572 | HEAD:.gitmodules when the .gitmodules file is missing from the |
| 573 | working tree. |
| 574 | (merge 2b1257e463 ao/submodule-wo-gitmodules-checked-out later to maint). |
| 575 | |
| 576 | * "git fetch" was a bit loose in parsing responses from the other side |
| 577 | when talking over the protocol v2. |
| 578 | |
| 579 | * "git rev-parse --exclude=* --branches --branches" (i.e. first |
| 580 | saying "add only things that do not match '*' out of all branches" |
| 581 | and then adding all branches, without any exclusion this time) |
| 582 | worked as expected, but "--exclude=* --all --all" did not work the |
| 583 | same way, which has been fixed. |
| 584 | (merge 5221048092 ag/rev-parse-all-exclude-fix later to maint). |
| 585 | |
| 586 | * "git send-email --transfer-encoding=..." in recent versions of Git |
| 587 | sometimes produced an empty "Content-Transfer-Encoding:" header, |
| 588 | which has been corrected. |
| 589 | (merge 3c88e46f1a al/send-email-auto-cte-fixup later to maint). |
| 590 | |
| 591 | * The interface into "xdiff" library used to discover the offset and |
| 592 | size of a generated patch hunk by first formatting it into the |
| 593 | textual hunk header "@@ -n,m +k,l @@" and then parsing the numbers |
| 594 | out. A new interface has been introduced to allow callers a more |
| 595 | direct access to them. |
| 596 | (merge 5eade0746e jk/xdiff-interface later to maint). |
| 597 | |
| 598 | * Pathspec matching against a tree object were buggy when negative |
| 599 | pathspec elements were involved, which has been fixed. |
| 600 | (merge b7845cebc0 nd/tree-walk-path-exclusion later to maint). |
| 601 | |
| 602 | * "git merge" and "git pull" that merges into an unborn branch used |
| 603 | to completely ignore "--verify-signatures", which has been |
| 604 | corrected. |
| 605 | (merge 01a31f3bca jk/verify-sig-merge-into-void later to maint). |
| 606 | |
| 607 | * "git rebase --autostash" did not correctly re-attach the HEAD at times. |
| 608 | |
| 609 | * "rev-parse --exclude=<pattern> --branches=<pattern>" etc. did not |
| 610 | quite work, which has been corrected. |
| 611 | (merge 9ab9b5df0e ra/rev-parse-exclude-glob later to maint). |
| 612 | |
| 613 | * When editing a patch in a "git add -i" session, a hunk could be |
| 614 | made to no-op. The "git apply" program used to reject a patch with |
| 615 | such a no-op hunk to catch user mistakes, but it is now updated to |
| 616 | explicitly allow a no-op hunk in an edited patch. |
| 617 | (merge 22cb3835b9 js/apply-recount-allow-noop later to maint). |
| 618 | |
| 619 | * The URL to an MSDN page in a comment has been updated. |
| 620 | (merge 2ef2ae2917 js/mingw-msdn-url later to maint). |
| 621 | |
| 622 | * "git ls-remote --sort=<thing>" can feed an object that is not yet |
| 623 | available into the comparison machinery and segfault, which has |
| 624 | been corrected to check such a request upfront and reject it. |
| 625 | |
| 626 | * When "git bundle" aborts due to an empty commit ranges |
| 627 | (i.e. resulting in an empty pack), it left a file descriptor to an |
| 628 | lockfile open, which resulted in leftover lockfile on Windows where |
| 629 | you cannot remove a file with an open file descriptor. This has |
| 630 | been corrected. |
| 631 | (merge 2c8ee1f53c jk/close-duped-fd-before-unlock-for-bundle later to maint). |
| 632 | |
| 633 | * "git format-patch --stat=<width>" can be used to specify the width |
| 634 | used by the diffstat (shown in the cover letter). |
| 635 | (merge 284aeb7e60 nd/format-patch-cover-letter-stat-width later to maint). |
| 636 | |
| 637 | * The way .git/index and .git/sharedindex* files were initially |
| 638 | created gave these files different perm bits until they were |
| 639 | adjusted for shared repository settings. This was made consistent. |
| 640 | (merge c9d6c78870 cc/shared-index-permbits later to maint). |
| 641 | |
| 642 | * "git rebase --stat" to transplant a piece of history onto a totally |
| 643 | unrelated history were not working before and silently showed wrong |
| 644 | result. With the recent reimplementation in C, it started to instead |
| 645 | die with an error message, as the original logic was not prepared |
| 646 | to cope with this case. This has now been fixed. |
| 647 | |
| 648 | * The advice message to tell the user to migrate an existing graft |
| 649 | file to the replace system when a graft file was read was shown |
| 650 | even when "git replace --convert-graft-file" command, which is the |
| 651 | way the message suggests to use, was running, which made little |
| 652 | sense. |
| 653 | (merge 8821e90a09 ab/replace-graft-with-replace-advice later to maint). |
| 654 | |
| 655 | * "git diff --raw" lost ellipses to adjust the output columns for |
| 656 | some time now, but the documentation still showed them. |
| 657 | |
| 658 | * Code cleanup, docfix, build fix, etc. |
| 659 | (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint). |
| 660 | (merge b9b07efdb2 tg/conflict-marker-size later to maint). |
| 661 | (merge fa0aeea770 sg/doc-trace-appends later to maint). |
| 662 | (merge d64324cb60 tb/void-check-attr later to maint). |
| 663 | (merge c3b9bc94b9 en/double-semicolon-fix later to maint). |
| 664 | (merge 79336116f5 sg/t3701-tighten-trace later to maint). |
| 665 | (merge 801fa63a90 jk/dev-build-format-security later to maint). |
| 666 | (merge 0597dd62ba sb/string-list-remove-unused later to maint). |
| 667 | (merge db2d36fad8 bw/protocol-v2 later to maint). |
| 668 | (merge 456d7cd3a9 sg/split-index-test later to maint). |
| 669 | (merge 7b6057c852 tq/refs-internal-comment-fix later to maint). |
| 670 | (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint). |
| 671 | (merge 55f6bce2c9 fe/doc-updates later to maint). |
| 672 | (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint). |
| 673 | (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint). |
| 674 | (merge 4c399442f7 ma/commit-graph-docs later to maint). |
| 675 | (merge fc0503b04e ma/t1400-undebug-test later to maint). |
| 676 | (merge e56b53553a nd/packobjectshook-doc-fix later to maint). |
| 677 | (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint). |
| 678 | (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint). |
| 679 | (merge ad0b8f9575 mw/doc-typofixes later to maint). |
| 680 | (merge d9f079ad1a jc/how-to-document-api later to maint). |
| 681 | (merge b1492bf315 ma/t7005-bash-workaround later to maint). |
| 682 | (merge ac1f98a0df du/rev-parse-is-plumbing later to maint). |
| 683 | (merge ca8ed443a5 mm/doc-no-dashed-git later to maint). |
| 684 | (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint). |
| 685 | (merge 61018fe9e0 du/cherry-is-plumbing later to maint). |
| 686 | (merge c7e5fe79b9 sb/strbuf-h-update later to maint). |
| 687 | (merge 8d2008196b tq/branch-create-wo-branch-get later to maint). |
| 688 | (merge 2e3c894f4b tq/branch-style-fix later to maint). |
| 689 | (merge c5d844af9c sg/doc-show-branch-typofix later to maint). |
| 690 | (merge 081d91618b ah/doc-updates later to maint). |
| 691 | (merge b84c783882 jc/cocci-preincr later to maint). |
| 692 | (merge 5e495f8122 uk/merge-subtree-doc-update later to maint). |
| 693 | (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint). |
| 694 | (merge 3063477445 tb/char-may-be-unsigned later to maint). |
| 695 | (merge 8c64bc9420 sg/test-rebase-editor-fix later to maint). |
| 696 | (merge 71571cd7d6 ma/sequencer-do-reset-saner-loop-termination later to maint). |
| 697 | (merge 9a4cb8781e cb/notes-freeing-always-null-fix later to maint). |
| 698 | (merge 3006f5ee16 ma/reset-doc-rendering-fix later to maint). |
| 699 | (merge 4c2eb06419 sg/daemon-test-signal-fix later to maint). |
| 700 | (merge d27525e519 ss/msvc-strcasecmp later to maint). |