pathspec: handle non-terminated strings with :(attr)
[git] / Documentation / RelNotes / 2.20.0.txt
1 Git 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 tree-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 fo 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 crufts" 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  * Developer builds now uses -Wunused-function compilation option.
141
142  * One of our CI tests to run with "unusual/experimental/random"
143    settings now also uses commit-graph and midx.
144
145  * "git mergetool" learned to take the "--[no-]gui" option, just like
146    "git difftool" does.
147
148  * "git rebase -i" learned a new insn, 'break', that the user can
149    insert in the to-do list.  Upon hitting it, the command returns
150    control back to the user.
151
152
153 Performance, Internal Implementation, Development Support etc.
154
155  * When there are too many packfiles in a repository (which is not
156    recommended), looking up an object in these would require
157    consulting many pack .idx files; a new mechanism to have a single
158    file that consolidates all of these .idx files is introduced.
159
160  * "git submodule update" is getting rewritten piece-by-piece into C.
161
162  * The code for computing history reachability has been shuffled,
163    obtained a bunch of new tests to cover them, and then being
164    improved.
165
166  * The unpack_trees() API used in checking out a branch and merging
167    walks one or more trees along with the index.  When the cache-tree
168    in the index tells us that we are walking a tree whose flattened
169    contents is known (i.e. matches a span in the index), as linearly
170    scanning a span in the index is much more efficient than having to
171    open tree objects recursively and listing their entries, the walk
172    can be optimized, which has been done.
173
174  * When creating a thin pack, which allows objects to be made into a
175    delta against another object that is not in the resulting pack but
176    is known to be present on the receiving end, the code learned to
177    take advantage of the reachability bitmap; this allows the server
178    to send a delta against a base beyond the "boundary" commit.
179
180  * spatch transformation to replace boolean uses of !hashcmp() to
181    newly introduced oideq() is added, and applied, to regain
182    performance lost due to support of multiple hash algorithms.
183
184  * Fix a bug in which the same path could be registered under multiple
185    worktree entries if the path was missing (for instance, was removed
186    manually).  Also, as a convenience, expand the number of cases in
187    which --force is applicable.
188
189  * Split Documentation/config.txt for easier maintenance.
190    (merge 6014363f0b nd/config-split later to maint).
191
192  * Test helper binaries clean-up.
193    (merge c9a1f4161f nd/test-tool later to maint).
194
195  * Various tests have been updated to make it easier to swap the
196    hash function used for object identification.
197    (merge ae0c89d41b bc/hash-independent-tests later to maint).
198
199  * Update fsck.skipList implementation and documentation.
200    (merge 371a655074 ab/fsck-skiplist later to maint).
201
202  * An alias that expands to another alias has so far been forbidden,
203    but now it is allowed to create such an alias.
204
205  * Various test scripts have been updated for style and also correct
206    handling of exit status of various commands.
207
208  * "gc --auto" ended up calling exit(-1) upon error, which has been
209    corrected to use exit(1).  Also the error reporting behaviour when
210    daemonized has been updated to exit with zero status when stopping
211    due to a previously discovered error (which implies there is no
212    point running gc to improve the situation); we used to exit with
213    failure in such a case.
214
215  * Various codepaths in the core-ish part learned to work on an
216    arbitrary in-core index structure, not necessarily the default
217    instance "the_index".
218    (merge b3c7eef9b0 nd/the-index later to maint).
219
220  * Code clean-up in the internal machinery used by "git status" and
221    "git commit --dry-run".
222    (merge 73ba5d78b4 ss/wt-status-committable later to maint).
223
224  * Some environment variables that control the runtime options of Git
225    used during tests are getting renamed for consistency.
226    (merge 4231d1ba99 bp/rename-test-env-var later to maint).
227
228  * A new extension to the index file has been introduced, which allows
229    the index file to be read in parallel for performance.
230
231  * The oidset API was built on top of the oidmap API which in turn is
232    on the hashmap API.  Replace the implementation to build on top of
233    the khash API and gain performance.
234
235  * Over some transports, fetching objects with an exact commit object
236    name can be done without first seeing the ref advertisements.  The
237    code has been optimized to exploit this.
238
239  * In a partial clone that will lazily be hydrated from the
240    originating repository, we generally want to avoid "does this
241    object exist (locally)?" on objects that we deliberately omitted
242    when we created the clone.  The cache-tree codepath (which is used
243    to write a tree object out of the index) however insisted that the
244    object exists, even for paths that are outside of the partial
245    checkout area.  The code has been updated to avoid such a check.
246
247  * To help developers, an EditorConfig file that attempts to follow
248    the project convention has been added.
249    (merge b548d698a0 bc/editorconfig later to maint).
250
251  * The result of coverage test can be combined with "git blame" to
252    check the test coverage of code introduced recently with a new
253    'coverage-diff' tool (in contrib/).
254    (merge 783faedd65 ds/coverage-diff later to maint).
255
256  * An experiment to fuzz test a few areas, hopefully we can gain more
257    coverage to various areas.
258
259  * More codepaths are moving away from hardcoded hash sizes.
260
261  * The way the Windows port figures out the current directory has been
262    improved.
263
264  * The way DLLs are loaded on the Windows port has been improved.
265
266  * Some tests have been reorganized and renamed; "ls t/" now gives a
267    better overview of what is tested for these scripts than before.
268
269  * "git rebase" and "git rebase -i" have been reimplemented in C.
270
271
272 Fixes since v2.19
273 -----------------
274
275  * "git interpret-trailers" and its underlying machinery had a buggy
276    code that attempted to ignore patch text after commit log message,
277    which triggered in various codepaths that will always get the log
278    message alone and never get such an input.
279    (merge 66e83d9b41 jk/trailer-fixes later to maint).
280
281  * Malformed or crafted data in packstream can make our code attempt
282    to read or write past the allocated buffer and abort, instead of
283    reporting an error, which has been fixed.
284
285  * "git rebase -i" did not clear the state files correctly when a run
286    of "squash/fixup" is aborted and then the user manually amended the
287    commit instead, which has been corrected.
288    (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
289
290  * When fsmonitor is in use, after operation on submodules updates
291    .gitmodules, we lost track of the fact that we did so and relied on
292    stale fsmonitor data.
293    (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
294
295  * Fix for a long-standing bug that leaves the index file corrupt when
296    it shrinks during a partial commit.
297    (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
298
299  * Further fix for O_APPEND emulation on Windows
300    (merge eeaf7ddac7 js/mingw-o-append later to maint).
301
302  * A corner case bugfix in "git rerere" code.
303    (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
304
305  * "git add ':(attr:foo)'" is not supported and is supposed to be
306    rejected while the command line arguments are parsed, but we fail
307    to reject such a command line upfront.
308    (merge 84d938b732 nd/attr-pathspec-fix later to maint).
309
310  * Recent update broke the reachability algorithm when refs (e.g.
311    tags) that point at objects that are not commit were involved,
312    which has been fixed.
313
314  * "git rebase" etc. in Git 2.19 fails to abort when given an empty
315    commit log message as result of editing, which has been corrected.
316    (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
317
318  * The code to backfill objects in lazily cloned repository did not
319    work correctly, which has been corrected.
320    (merge e68302011c jt/lazy-object-fetch-fix later to maint).
321
322  * Update error messages given by "git remote" and make them consistent.
323    (merge 5025425dff ms/remote-error-message-update later to maint).
324
325  * "git update-ref" learned to make both "--no-deref" and "--stdin"
326    work at the same time.
327    (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
328
329  * Recently added "range-diff" had a corner-case bug to cause it
330    segfault, which has been corrected.
331    (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
332
333  * The recently introduced commit-graph auxiliary data is incompatible
334    with mechanisms such as replace & grafts that "breaks" immutable
335    nature of the object reference relationship.  Disable optimizations
336    based on its use (and updating existing commit-graph) when these
337    incompatible features are in use in the repository.
338    (merge 829a321569 ds/commit-graph-with-grafts later to maint).
339
340  * The mailmap file update.
341    (merge 255eb03edf jn/mailmap-update later to maint).
342
343  * The code in "git status" sometimes hit an assertion failure.  This
344    was caused by a structure that was reused without cleaning the data
345    used for the first run, which has been corrected.
346    (merge 3e73cc62c0 en/status-multiple-renames-to-the-same-target-fix later to maint).
347
348  * "git fetch $repo $object" in a partial clone did not correctly
349    fetch the asked-for object that is referenced by an object in
350    promisor packfile, which has been fixed.
351
352  * A corner-case bugfix.
353    (merge c5cbb27cb5 sm/show-superproject-while-conflicted later to maint).
354
355  * Various fixes to "diff --color-moved-ws".
356
357  * A partial clone that is configured to lazily fetch missing objects
358    will on-demand issue a "git fetch" request to the originating
359    repository to fill not-yet-obtained objects.  The request has been
360    optimized for requesting a tree object (and not the leaf blob
361    objects contained in it) by telling the originating repository that
362    no blobs are needed.
363    (merge 4c7f9567ea jt/non-blob-lazy-fetch later to maint).
364
365  * The codepath to support the experimental split-index mode had
366    remaining "racily clean" issues fixed.
367    (merge 4c490f3d32 sg/split-index-racefix later to maint).
368
369  * "git log --graph" showing an octopus merge sometimes miscounted the
370    number of display columns it is consuming to show the merge and its
371    parent commits, which has been corrected.
372    (merge 04005834ed np/log-graph-octopus-fix later to maint).
373
374  * "git range-diff" did not work well when the compared ranges had
375    changes in submodules and the "--submodule=log" was used.
376
377  * The implementation of run_command() API on the UNIX platforms had a
378    bug that caused a command not on $PATH to be found in the current
379    directory.
380    (merge f67b980771 jk/run-command-notdot later to maint).
381
382  * A mutex used in "git pack-objects" were not correctly initialized
383    and this caused "git repack" to dump core on Windows.
384    (merge 34204c8166 js/pack-objects-mutex-init-fix later to maint).
385
386  * Under certain circumstances, "git diff D:/a/b/c D:/a/b/d" on
387    Windows would strip initial parts from the paths because they
388    were not recognized as absolute, which has been corrected.
389    (merge ffd04e92e2 js/diff-notice-has-drive-prefix later to maint).
390
391  * The receive.denyCurrentBranch=updateInstead codepath kicked in even
392    when the push should have been rejected due to other reasons, such
393    as it does not fast-forward or the update-hook rejects it, which
394    has been corrected.
395    (merge b072a25fad jc/receive-deny-current-branch-fix later to maint).
396
397  * Code cleanup, docfix, build fix, etc.
398    (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
399    (merge b9b07efdb2 tg/conflict-marker-size later to maint).
400    (merge fa0aeea770 sg/doc-trace-appends later to maint).
401    (merge d64324cb60 tb/void-check-attr later to maint).
402    (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
403    (merge 79336116f5 sg/t3701-tighten-trace later to maint).
404    (merge 801fa63a90 jk/dev-build-format-security later to maint).
405    (merge 0597dd62ba sb/string-list-remove-unused later to maint).
406    (merge db2d36fad8 bw/protocol-v2 later to maint).
407    (merge 456d7cd3a9 sg/split-index-test later to maint).
408    (merge 7b6057c852 tq/refs-internal-comment-fix later to maint).
409    (merge 29e8dc50ad tg/t5551-with-curl-7.61.1 later to maint).
410    (merge 55f6bce2c9 fe/doc-updates later to maint).
411    (merge 7987d2232d jk/check-everything-connected-is-long-gone later to maint).
412    (merge 4ba3c9be47 dz/credential-doc-url-matching-rules later to maint).
413    (merge 4c399442f7 ma/commit-graph-docs later to maint).
414    (merge fc0503b04e ma/t1400-undebug-test later to maint).
415    (merge e56b53553a nd/packobjectshook-doc-fix later to maint).
416    (merge c56170a0c4 ma/mailing-list-address-in-git-help later to maint).
417    (merge 6e8fc70fce rs/sequencer-oidset-insert-avoids-dups later to maint).
418    (merge ad0b8f9575 mw/doc-typofixes later to maint).
419    (merge d9f079ad1a jc/how-to-document-api later to maint).
420    (merge b1492bf315 ma/t7005-bash-workaround later to maint).
421    (merge ac1f98a0df du/rev-parse-is-plumbing later to maint).
422    (merge ca8ed443a5 mm/doc-no-dashed-git later to maint).
423    (merge ce366a8144 du/get-tar-commit-id-is-plumbing later to maint).
424    (merge 61018fe9e0 du/cherry-is-plumbing later to maint).
425    (merge c7e5fe79b9 sb/strbuf-h-update later to maint).
426    (merge 8d2008196b tq/branch-create-wo-branch-get later to maint).
427    (merge 2e3c894f4b tq/branch-style-fix later to maint).
428    (merge c5d844af9c sg/doc-show-branch-typofix later to maint).
429    (merge 081d91618b ah/doc-updates later to maint).
430    (merge b84c783882 jc/cocci-preincr later to maint).
431    (merge 5e495f8122 uk/merge-subtree-doc-update later to maint).
432    (merge aaaa881822 jk/uploadpack-packobjectshook-fix later to maint).