1Git Release Notes 2================= 3 4Backward 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 21Updates since v2.19 22------------------- 23 24UI, Workflows & Features 25 26 * Running "git clone" against a project that contain two files with 27 pathnames that differ only in cases on a case insensitive 28 filesystem would result in one of the files lost because the 29 underlying filesystem is incapable of holding both at the same 30 time. An attempt is made to detect such a case and warn. 31 32 * "git checkout -b newbranch [HEAD]" should not have to do as much as 33 checking out a commit different from HEAD. An attempt is made to 34 optimize this special case. 35 36 * "git rev-list --stdin </dev/null" used to be an error; it now shows 37 no output without an error. "git rev-list --stdin --default HEAD" 38 still falls back to the given default when nothing is given on the 39 standard input. 40 41 * Lift code from GitHub to restrict delta computation so that an 42 object that exists in one fork is not made into a delta against 43 another object that does not appear in the same forked repository. 44 45 * "git format-patch" learned new "--interdiff" and "--range-diff" 46 options to explain the difference between this version and the 47 previous attempt in the cover letter (or after the tree-dashes as 48 a comment). 49 50 * "git mailinfo" used in "git am" learned to make a best-effort 51 recovery of a patch corrupted by MUA that sends text/plain with 52 format=flawed option. 53 (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint). 54 55 * The rules used by "git push" and "git fetch" to determine if a ref 56 can or cannot be updated were inconsistent; specifically, fetching 57 to update existing tags were allowed even though tags are supposed 58 to be unmoving anchoring points. "git fetch" was taught to forbid 59 updates to existing tags without the "--force" option. 60 61 * "git multi-pack-index" learned to detect corruption in the .midx 62 file it uses, and this feature has been integrated into "git fsck". 63 64 * Generation of (experimental) commit-graph files have so far been 65 fairly silent, even though it takes noticeable amount of time in a 66 meaningfully large repository. The users will now see progress 67 output. 68 69 * The minimum version of Windows supported by Windows port fo Git is 70 now set to Vista. 71 72 * The completion script (in contrib/) learned to complete a handful of 73 options "git stash list" command takes. 74 75 * The completion script (in contrib/) learned that "git fetch 76 --multiple" only takes remote names as arguments and no refspecs. 77 78 * "git status" learns to show progress bar when refreshing the index 79 takes a long time. 80 (merge ae9af12287 nd/status-refresh-progress later to maint). 81 82 * "git help -a" and "git help -av" give different pieces of 83 information, and generally the "verbose" version is more friendly 84 to the new users. "git help -a" by default now uses the more 85 verbose output (with "--no-verbose", you can go back to the 86 original). Also "git help -av" now lists aliases and external 87 commands, which it did not used to. 88 89 * Unlike "grep", "git grep" by default recurses to the whole tree. 90 The command learned "git grep --recursive" option, so that "git 91 grep --no-recursive" can serve as a synonym to setting the 92 max-depth to 0. 93 94 * When pushing into a repository that borrows its objects from an 95 alternate object store, "git receive-pack" that responds to the 96 push request on the other side lists the tips of refs in the 97 alternate to reduce the amount of objects transferred. This 98 sometimes is detrimental when the number of refs in the alternate 99 is absurdly large, in which case the bandwidth saved in potentially 100 fewer objects transferred is wasted in excessively large ref 101 advertisement. The alternate refs that are advertised are now 102 configurable with a pair of configuration variables. 103 104 105Performance, Internal Implementation, Development Support etc. 106 107 * When there are too many packfiles in a repository (which is not 108 recommended), looking up an object in these would require 109 consulting many pack .idx files; a new mechanism to have a single 110 file that consolidates all of these .idx files is introduced. 111 112 * "git submodule update" is getting rewritten piece-by-piece into C. 113 114 * The code for computing history reachability has been shuffled, 115 obtained a bunch of new tests to cover them, and then being 116 improved. 117 118 * The unpack_trees() API used in checking out a branch and merging 119 walks one or more trees along with the index. When the cache-tree 120 in the index tells us that we are walking a tree whose flattened 121 contents is known (i.e. matches a span in the index), as linearly 122 scanning a span in the index is much more efficient than having to 123 open tree objects recursively and listing their entries, the walk 124 can be optimized, which has been done. 125 126 * When creating a thin pack, which allows objects to be made into a 127 delta against another object that is not in the resulting pack but 128 is known to be present on the receiving end, the code learned to 129 take advantage of the reachability bitmap; this allows the server 130 to send a delta against a base beyond the "boundary" commit. 131 132 * spatch transformation to replace boolean uses of !hashcmp() to 133 newly introduced oideq() is added, and applied, to regain 134 performance lost due to support of multiple hash algorithms. 135 136 * Fix a bug in which the same path could be registered under multiple 137 worktree entries if the path was missing (for instance, was removed 138 manually). Also, as a convenience, expand the number of cases in 139 which --force is applicable. 140 141 * Split Documentation/config.txt for easier maintenance. 142 (merge 6014363f0b nd/config-split later to maint). 143 144 * Test helper binaries clean-up. 145 (merge c9a1f4161f nd/test-tool later to maint). 146 147 * Various tests have been updated to make it easier to swap the 148 hash function used for object identification. 149 (merge ae0c89d41b bc/hash-independent-tests later to maint). 150 151 * Update fsck.skipList implementation and documentation. 152 (merge 371a655074 ab/fsck-skiplist later to maint). 153 154 * An alias that expands to another alias has so far been forbidden, 155 but now it is allowed to create such an alias. 156 157 * Various test scripts have been updated for style and also correct 158 handling of exit status of various commands. 159 160 * "gc --auto" ended up calling exit(-1) upon error, which has been 161 corrected to use exit(1). Also the error reporting behaviour when 162 daemonized has been updated to exit with zero status when stopping 163 due to a previously discovered error (which implies there is no 164 point running gc to improve the situation); we used to exit with 165 failure in such a case. 166 167 * Various codepaths in the core-ish part learned to work on an 168 arbitrary in-core index structure, not necessarily the default 169 instance "the_index". 170 (merge b3c7eef9b0 nd/the-index later to maint). 171 172 * Code clean-up in the internal machinery used by "git status" and 173 "git commit --dry-run". 174 (merge 73ba5d78b4 ss/wt-status-committable later to maint). 175 176 * Some environment variables that control the runtime options of Git 177 used during tests are getting renamed for consistency. 178 (merge 4231d1ba99 bp/rename-test-env-var later to maint). 179 180 * A new extension to the index file has been introduced, which allows 181 the index file to be read in parallel for performance. 182 183 * The oidset API was built on top of the oidmap API which in turn is 184 on the hashmap API. Replace the implementation to build on top of 185 the khash API and gain performance. 186 187 * Over some transports, fetching objects with an exact commit object 188 name can be done without first seeing the ref advertisements. The 189 code has been optimized to exploit this. 190 191 * In a partial clone that will lazily be hydrated from the 192 originating repository, we generally want to avoid "does this 193 object exist (locally)?" on objects that we deliberately omitted 194 when we created the clone. The cache-tree codepath (which is used 195 to write a tree object out of the index) however insisted that the 196 object exists, even for paths that are outside of the partial 197 checkout area. The code has been updated to avoid such a check. 198 199 200Fixes since v2.19 201----------------- 202 203 * "git interpret-trailers" and its underlying machinery had a buggy 204 code that attempted to ignore patch text after commit log message, 205 which triggered in various codepaths that will always get the log 206 message alone and never get such an input. 207 (merge 66e83d9b41 jk/trailer-fixes later to maint). 208 209 * Malformed or crafted data in packstream can make our code attempt 210 to read or write past the allocated buffer and abort, instead of 211 reporting an error, which has been fixed. 212 213 * "git rebase -i" did not clear the state files correctly when a run 214 of "squash/fixup" is aborted and then the user manually amended the 215 commit instead, which has been corrected. 216 (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint). 217 218 * When fsmonitor is in use, after operation on submodules updates 219 .gitmodules, we lost track of the fact that we did so and relied on 220 stale fsmonitor data. 221 (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint). 222 223 * Fix for a long-standing bug that leaves the index file corrupt when 224 it shrinks during a partial commit. 225 (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint). 226 227 * Further fix for O_APPEND emulation on Windows 228 (merge eeaf7ddac7 js/mingw-o-append later to maint). 229 230 * A corner case bugfix in "git rerere" code. 231 (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint). 232 233 * "git add ':(attr:foo)'" is not supported and is supposed to be 234 rejected while the command line arguments are parsed, but we fail 235 to reject such a command line upfront. 236 (merge 84d938b732 nd/attr-pathspec-fix later to maint). 237 238 * Recent update broke the reachability algorithm when refs (e.g. 239 tags) that point at objects that are not commit were involved, 240 which has been fixed. 241 242 * "git rebase" etc. in Git 2.19 fails to abort when given an empty 243 commit log message as result of editing, which has been corrected. 244 (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint). 245 246 * The code to backfill objects in lazily cloned repository did not 247 work correctly, which has been corrected. 248 (merge e68302011c jt/lazy-object-fetch-fix later to maint). 249 250 * Update error messages given by "git remote" and make them consistent. 251 (merge 5025425dff ms/remote-error-message-update later to maint). 252 253 * "git update-ref" learned to make both "--no-deref" and "--stdin" 254 work at the same time. 255 (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint). 256 257 * Recently added "range-diff" had a corner-case bug to cause it 258 segfault, which has been corrected. 259 (merge e467a90c7a tg/range-diff-corner-case-fix later to maint). 260 261 * The recently introduced commit-graph auxiliary data is incompatible 262 with mechanisms such as replace & grafts that "breaks" immutable 263 nature of the object reference relationship. Disable optimizations 264 based on its use (and updating existing commit-graph) when these 265 incompatible features are in use in the repository. 266 (merge 829a321569 ds/commit-graph-with-grafts later to maint). 267 268 * The mailmap file update. 269 (merge 255eb03edf jn/mailmap-update later to maint). 270 271 * The code in "git status" sometimes hit an assertion failure. This 272 was caused by a structure that was reused without cleaning the data 273 used for the first run, which has been corrected. 274 (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint). 275 276 * "git fetch $repo $object" in a partial clone did not correctly 277 fetch the asked-for object that is referenced by an object in 278 promisor packfile, which has been fixed. 279 280 * A corner-case bugfix. 281 (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint). 282 283 * Various fixes to "diff --color-moved-ws". 284 285 * A partial clone that is configured to lazily fetch missing objects 286 will on-demand issue a "git fetch" request to the originating 287 repository to fill not-yet-obtained objects. The request has been 288 optimized for requesting a tree object (and not the leaf blob 289 objects contained in it) by telling the originating repository that 290 no blobs are needed. 291 (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint). 292 293 * Code cleanup, docfix, build fix, etc. 294 (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint). 295 (merge b9b07efdb2 tg/conflict-marker-size later to maint). 296 (merge fa0aeea770 sg/doc-trace-appends later to maint). 297 (merge d64324cb60 tb/void-check-attr later to maint). 298 (merge c3b9bc94b9 en/double-semicolon-fix later to maint). 299 (merge 79336116f5 sg/t3701-tighten-trace later to maint). 300 (merge 801fa63a90 jk/dev-build-format-security later to maint). 301 (merge 0597dd62ba sb/string-list-remove-unused later to maint). 302 (merge db2d36fad8 bw/protocol-v2 later to maint). 303 (merge 456d7cd3a9 sg/split-index-test later to maint). 304 (merge 7b6057c852 tq/refs-internal-comment-fix later to maint). 305 (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint). 306 (merge 55f6bce2c9 fe/doc-updates later to maint). 307 (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint). 308 (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint). 309 (merge 4c399442f7 ma/commit-graph-docs later to maint). 310 (merge fc0503b04e ma/t1400-undebug-test later to maint). 311 (merge e56b53553a nd/packobjectshook-doc-fix later to maint). 312 (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint). 313 (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint). 314 (merge ad0b8f9575 mw/doc-typofixes later to maint). 315 (merge d9f079ad1a jc/how-to-document-api later to maint).