The eighth batch
[git] / Documentation / RelNotes / 2.22.0.txt
1 Git 2.22 Release Notes
2 ======================
3
4 Updates since v2.21
5 -------------------
6
7 UI, Workflows & Features
8
9  * "git checkout --no-overlay" can be used to trigger a new mode of
10    checking out paths out of the tree-ish, that allows paths that
11    match the pathspec that are in the current index and working tree
12    and are not in the tree-ish.
13
14  * The %(trailers) formatter in "git log --format=..."  now allows to
15    optionally pick trailers selectively by keyword, show only values,
16    etc.
17
18  * Four new configuration variables {author,committer}.{name,email}
19    have been introduced to override user.{name,email} in more specific
20    cases.
21
22  * Command-line completion (in contrib/) learned to tab-complete the
23    "git submodule absorbgitdirs" subcommand.
24
25  * "git branch" learned a new subcommand "--show-current".
26
27  * Output from "diff --cc" did not show the original paths when the
28    merge involved renames.  A new option adds the paths in the
29    original trees to the output.
30
31  * The command line completion (in contrib/) has been taught to
32    complete more subcommand parameters.
33
34  * The final report from "git bisect" used to show the suspected
35    culprit using a raw "diff-tree", with which there is no output for
36    a merge commit.  This has been updated to use a more modern and
37    human readable output that still is concise enough.
38
39  * "git rebase --rebase-merges" replaces its old "--preserve-merges"
40    option; the latter is now marked as deprecated.
41
42  * Error message given while cloning with --recurse-submodules has
43    been updated.
44
45  * The completion helper code now pays attention to repository-local
46    configuration (when available), which allows --list-cmds to honour
47    a repository specific setting of completion.commands, for example.
48
49  * "git mergetool" learned to offer Sublime Merge (smerge) as one of
50    its backends.
51
52  * A new hook "post-index-change" is called when the on-disk index
53    file changes, which can help e.g. a virtualized working tree
54    implementation.
55
56  * "git difftool" can now run outside a repository.
57
58  * "git checkout -m <other>" was about carrying the differences
59    between HEAD and the working-tree files forward while checking out
60    another branch, and ignored the differences between HEAD and the
61    index.  The command has been taught to abort when the index and the
62    HEAD are different.
63
64  * A progress indicator has been added to the "index-pack" step, which
65    often makes users wait for completion during "git clone".
66
67  * "git submodule" learns "set-branch" subcommand that allows the
68    submodule.*.branch settings to be modified.
69
70  * "git merge-recursive" backend recently learned a new heuristics to
71    infer file movement based on how other files in the same directory
72    moved.  As this is inherently less robust heuristics than the one
73    based on the content similarity of the file itself (rather than
74    based on what its neighbours are doing), it sometimes gives an
75    outcome unexpected by the end users.  This has been toned down to
76    leave the renamed paths in higher/conflicted stages in the index so
77    that the user can examine and confirm the result.
78
79  * "git tag" learned to give an advice suggesting it might be a
80    mistake when creating an annotated or signed tag that points at
81    another tag.
82
83  * The "git pack-objects" command learned to report the number of
84    objects it packed via the trace2 mechanism.
85
86  * The list of conflicted paths shown in the editor while concluding a
87    conflicted merge was shown above the scissors line when the
88    clean-up mode is set to "scissors", even though it was commented
89    out just like the list of updated paths and other information to
90    help the user explain the merge better.
91
92  * The trace2 tracing facility learned to auto-generate a filename
93    when told to log to a directory.
94
95  * "git clone" learned a new --server-option option when talking over
96    the protocol version 2.
97
98
99 Performance, Internal Implementation, Development Support etc.
100
101  * The diff machinery, one of the oldest parts of the system, which
102    long predates the parse-options API, uses fairly long and complex
103    handcrafted option parser.  This is being rewritten to use the
104    parse-options API.
105
106  * The implementation of pack-redundant has been updated for
107    performance in a repository with many packfiles.
108
109  * A more structured way to obtain execution trace has been added.
110
111  * "git prune" has been taught to take advantage of reachability
112    bitmap when able.
113
114  * The command line parser of "git commit-tree" has been rewritten to
115    use the parse-options API.
116
117  * Suggest GitGitGadget instead of submitGit as a way to submit
118    patches based on GitHub PR to us.
119
120  * The test framework has been updated to help developers by making it
121    easier to run most of the tests under different versions of
122    over-the-wire protocols.
123
124  * Dev support update to make it easier to compare two formatted
125    results from our documentation.
126
127  * The scripted "git rebase" implementation has been retired.
128
129  * "git multi-pack-index verify" did not scale well with the number of
130    packfiles, which is being improved.
131
132  * "git stash" has been rewritten in C.
133
134  * The "check-docs" Makefile target to support developers has been
135    updated.
136
137  * The tests have been updated not to rely on the abbreviated option
138    names the parse-options API offers, to protect us from an
139    abbreviated form of an option that used to be unique within the
140    command getting non-unique when a new option that share the same
141    prefix is added.
142
143  * The scripted version of "git rebase -i" wrote and rewrote the todo
144    list many times during a single step of its operation, and the
145    recent C-rewrite made a faithful conversion of the logic to C.  The
146    implementation has been updated to carry necessary information
147    around in-core to avoid rewriting the same file over and over
148    unnecessarily.
149
150  * Test framework update to more robustly clean up leftover files and
151    processes after tests are done.
152
153  * Conversion from unsigned char[20] to struct object_id continues.
154
155  * While running "git diff" in a lazy clone, we can upfront know which
156    missing blobs we will need, instead of waiting for the on-demand
157    machinery to discover them one by one.  The code learned to aim to
158    achieve better performance by batching the request for these
159    promised blobs.
160
161
162 Fixes since v2.21
163 -----------------
164
165  * "git prune-packed" did not notice and complain against excess
166    arguments given from the command line, which now it does.
167    (merge 9b0bd87ed2 rj/prune-packed-excess-args later to maint).
168
169  * Split-index fix.
170    (merge 6e37c8ed3c nd/split-index-null-base-fix later to maint).
171
172  * "git diff --no-index" may still want to access Git goodies like
173    --ext-diff and --textconv, but so far these have been ignored,
174    which has been corrected.
175    (merge 287ab28bfa jk/diff-no-index-initialize later to maint).
176
177  * Unify RPC code for smart http in protocol v0/v1 and v2, which fixes
178    a bug in the latter (lack of authentication retry) and generally
179    improves the code base.
180    (merge a97d00799a jt/http-auth-proto-v2-fix later to maint).
181
182  * The include file compat/bswap.h has been updated so that it is safe
183    to (accidentally) include it more than once.
184    (merge 33aa579a55 jk/guard-bswap-header later to maint).
185
186  * The set of header files used by "make hdr-check" unconditionally
187    included sha256/gcrypt.h, even when it is not used, causing the
188    make target to fail.  We now skip it when GCRYPT_SHA256 is not in
189    use.
190    (merge f23aa18e7f rj/hdr-check-gcrypt-fix later to maint).
191
192  * The Makefile uses 'find' utility to enumerate all the *.h header
193    files, which is expensive on platforms with slow filesystems; it
194    now optionally uses "ls-files" if working within a repository,
195    which is a trick similar to how all sources are enumerated to run
196    ETAGS on.
197    (merge 92b88eba9f js/find-lib-h-with-ls-files-when-possible later to maint).
198
199  * "git rebase" that was reimplemented in C did not set ORIG_HEAD
200    correctly, which has been corrected.
201    (merge cbd29ead92 js/rebase-orig-head-fix later to maint).
202
203  * Dev support.
204    (merge f545737144 js/stress-test-ui-tweak later to maint).
205
206  * CFLAGS now can be tweaked when invoking Make while using
207    DEVELOPER=YesPlease; this did not work well before.
208    (merge 6d5d4b4e93 ab/makefile-help-devs-more later to maint).
209
210  * "git fsck --connectivity-only" omits computation necessary to sift
211    the objects that are not reachable from any of the refs into
212    unreachable and dangling.  This is now enabled when dangling
213    objects are requested (which is done by default, but can be
214    overridden with the "--no-dangling" option).
215    (merge 8d8c2a5aef jk/fsck-doc later to maint).
216
217  * On platforms where "git fetch" is killed with SIGPIPE (e.g. OSX),
218    the upload-pack that runs on the other end that hangs up after
219    detecting an error could cause "git fetch" to die with a signal,
220    which led to a flakey test.  "git fetch" now ignores SIGPIPE during
221    the network portion of its operation (this is not a problem as we
222    check the return status from our write(2)s).
223    (merge 143588949c jk/no-sigpipe-during-network-transport later to maint).
224
225  * A recent update broke "is this object available to us?" check for
226    well-known objects like an empty tree (which should yield "yes",
227    even when there is no on-disk object for an empty tree), which has
228    been corrected.
229    (merge f06ab027ef jk/virtual-objects-do-exist later to maint).
230
231  * The setup code has been cleaned up to avoid leaks around the
232    repository_format structure.
233    (merge e8805af1c3 ma/clear-repository-format later to maint).
234
235  * "git config --type=color ..." is meant to replace "git config --get-color"
236    but there is a slight difference that wasn't documented, which is
237    now fixed.
238    (merge cd8e7593b9 jk/config-type-color-ends-with-lf later to maint).
239
240  * When the "clean" filter can reduce the size of a huge file in the
241    working tree down to a small "token" (a la Git LFS), there is no
242    point in allocating a huge scratch area upfront, but the buffer is
243    sized based on the original file size.  The convert mechanism now
244    allocates very minimum and reallocates as it receives the output
245    from the clean filter process.
246    (merge 02156ab031 jh/resize-convert-scratch-buffer later to maint).
247
248  * "git rebase" uses the refs/rewritten/ hierarchy to store its
249    intermediate states, which inherently makes the hierarchy per
250    worktree, but it didn't quite work well.
251    (merge b9317d55a3 nd/rewritten-ref-is-per-worktree later to maint).
252
253  * "git log -L<from>,<to>:<path>" with "-s" did not suppress the patch
254    output as it should.  This has been corrected.
255    (merge 05314efaea jk/line-log-with-patch later to maint).
256
257  * "git worktree add" used to do a "find an available name with stat
258    and then mkdir", which is race-prone.  This has been fixed by using
259    mkdir and reacting to EEXIST in a loop.
260    (merge 7af01f2367 ms/worktree-add-atomic-mkdir later to maint).
261
262  * Build update for SHA-1 with collision detection.
263    (merge 07a20f569b jk/sha1dc later to maint).
264
265  * Build procedure has been fixed around use of asciidoctor instead of
266    asciidoc.
267    (merge 185f9a0ea0 ma/asciidoctor-fixes later to maint).
268
269  * remote-http transport did not anonymize URLs reported in its error
270    messages at places.
271    (merge c1284b21f2 js/anonymize-remote-curl-diag later to maint).
272
273  * Error messages given from the http transport have been updated so
274    that they can be localized.
275    (merge ed8b4132c8 js/remote-curl-i18n later to maint).
276
277  * "git init" forgot to read platform-specific repository
278    configuration, which made Windows port to ignore settings of
279    core.hidedotfiles, for example.
280
281  * A corner-case object name ambiguity while the sequencer machinery
282    is working (e.g. "rebase -i -x") has been fixed.
283
284  * "git format-patch" did not diagnose an error while opening the
285    output file for the cover-letter, which has been corrected.
286    (merge 2fe95f494c jc/format-patch-error-check later to maint).
287
288  * "git checkout -f <branch>" while the index has an unmerged path
289    incorrectly left some paths in an unmerged state, which has been
290    corrected.
291
292  * A corner case bug in the refs API has been corrected.
293    (merge d3322eb28b jk/refs-double-abort later to maint).
294
295  * Unicode update.
296    (merge 584b62c37b bb/unicode-12 later to maint).
297
298  * dumb-http walker has been updated to share more error recovery
299    strategy with the normal codepath.
300
301  * A buglet in configuration parser has been fixed.
302    (merge 19e7fdaa58 nd/include-if-wildmatch later to maint).
303
304  * The documentation for "git read-tree --reset -u" has been updated.
305    (merge b5a0bd694c nd/read-tree-reset-doc later to maint).
306
307  * Code clean-up around a much-less-important-than-it-used-to-be
308    update_server_info() funtion.
309    (merge b3223761c8 jk/server-info-rabbit-hole later to maint).
310
311  * The message given when "git commit -a <paths>" errors out has been
312    updated.
313    (merge 5a1dbd48bc nd/commit-a-with-paths-msg-update later to maint).
314
315  * "git cherry-pick --options A..B", after giving control back to the
316    user to ask help resolving a conflicted step, did not honor the
317    options it originally received, which has been corrected.
318
319  * Various glitches in "git gc" around reflog handling have been fixed.
320
321  * The code to read from commit-graph file has been cleanup with more
322    careful error checking before using data read from it.
323
324  * Performance fix around "git fetch" that grabs many refs.
325    (merge b764300912 jt/fetch-pack-wanted-refs-optim later to maint).
326
327  * Protocol v2 support in "git fetch-pack" of shallow clones has been
328    corrected.
329
330  * Performance fix around "git blame", especially in a linear history
331    (which is the norm we should optimize for).
332    (merge f892014943 dk/blame-keep-origin-blob later to maint).
333
334  * Performance fix for "rev-list --parents -- pathspec".
335    (merge 8320b1dbe7 jk/revision-rewritten-parents-in-prio-queue later to maint).
336
337  * Updating the display with progress message has been cleaned up to
338    deal better with overlong messages.
339    (merge 545dc345eb sg/overlong-progress-fix later to maint).
340
341  * "git blame -- path" in a non-bare repository starts blaming from
342    the working tree, and the same command in a bare repository errors
343    out because there is no working tree by definition.  The command
344    has been taught to instead start blaming from the commit at HEAD,
345    which is more useful.
346    (merge a544fb08f8 sg/blame-in-bare-start-at-head later to maint).
347
348  * An underallocation in the code to read the untracked cache
349    extension has been corrected.
350    (merge 3a7b45a623 js/untracked-cache-allocfix later to maint).
351
352  * The code is updated to check the result of memory allocation before
353    it is used in more places, by using xmalloc and/or xcalloc calls.
354    (merge 999b951b28 jk/xmalloc later to maint).
355
356  * The GETTEXT_POISON test option has been quite broken ever since it
357    was made runtime-tunable, which has been fixed.
358    (merge f88b9cb603 jc/gettext-test-fix later to maint).
359
360  * Test fix on APFS that is incapable of store paths in Latin-1.
361    (merge 3889149619 js/iso8895-test-on-apfs later to maint).
362
363  * "git submodule foreach <command> --quiet" did not pass the option
364    down correctly, which has been corrected.
365    (merge a282f5a906 nd/submodule-foreach-quiet later to maint).
366
367  * "git send-email" has been taught to use quoted-printable when the
368    payload contains carriage-return.  The use of the mechanism is in
369    line with the design originally added the codepath that chooses QP
370    when the payload has overly long lines.
371    (merge 74d76a1701 bc/send-email-qp-cr later to maint).
372
373  * The recently added feature to add addresses that are on
374    anything-by: trailers in 'git send-email' was found to be way too
375    eager and considered nonsense strings as if they can be legitimate
376    beginning of *-by: trailer.  This has been tightened.
377
378  * Builds with gettext broke on recent macOS w/ Homebrew, which
379    seems to have stopped including from /usr/local/include; this
380    has been corrected.
381    (merge 92a1377a2a js/macos-gettext-build later to maint).
382
383  * Running "git add" on a repository created inside the current
384    repository is an explicit indication that the user wants to add it
385    as a submodule, but when the HEAD of the inner repository is on an
386    unborn branch, it cannot be added as a submodule.  Worse, the files
387    in its working tree can be added as if they are a part of the outer
388    repository, which is not what the user wants.  These problems are
389    being addressed.
390    (merge f937bc2f86 km/empty-repo-is-still-a-repo later to maint).
391
392  * "git cherry-pick" run with the "-x" or the "--signoff" option used
393    to (and more importantly, ought to) clean up the commit log message
394    with the --cleanup=space option by default, but this has been
395    broken since late 2017.  This has been fixed.
396
397  * When given a tag that points at a commit-ish, "git replace --graft"
398    failed to peel the tag before writing a replace ref, which did not
399    make sense because the old graft mechanism the feature wants to
400    mimick only allowed to replace one commit object with another.
401    This has been fixed.
402    (merge ee521ec4cb cc/replace-graft-peel-tags later to maint).
403
404  * Code tightening against a "wrong" object appearing where an object
405    of a different type is expected, instead of blindly assuming that
406    the connection between objects are correctly made.
407    (merge 97dd512af7 tb/unexpected later to maint).
408
409  * An earlier update for MinGW and Cygwin accidentally broke MSVC build,
410    which has been fixed.
411    (merge 22c3634c0f ss/msvc-path-utils-fix later to maint).
412
413  * %(push:track) token used in the --format option to "git
414    for-each-ref" and friends was not showing the right branch, which
415    has been fixed.
416    (merge c646d0934e dr/ref-filter-push-track-fix later to maint).
417
418  * "make check-docs", "git help -a", etc. did not account for cases
419    where a particular build may deliberately omit some subcommands,
420    which has been corrected.
421
422  * The logic to tell if a Git repository has a working tree protects
423    "git branch -D" from removing the branch that is currently checked
424    out by mistake.  The implementation of this logic was broken for
425    repositories with unusual name, which unfortunately is the norm for
426    submodules these days.  This has been fixed.
427    (merge f3534c98e4 jt/submodule-repo-is-with-worktree later to maint).
428
429  * AIX shared the same build issues with other BSDs around fileno(fp),
430    which has been corrected.
431    (merge ee662bf5c6 cc/aix-has-fileno-as-a-macro later to maint).
432
433  * The autoconf generated configure script failed to use the right
434    gettext() implementations from -libintl by ignoring useless stub
435    implementations shipped in some C library, which has been
436    corrected.
437    (merge b71e56a683 vk/autoconf-gettext later to maint).
438
439  * Code cleanup, docfix, build fix, etc.
440    (merge 11f470aee7 jc/test-yes-doc later to maint).
441    (merge 90503a240b js/doc-symref-in-proto-v1 later to maint).
442    (merge 5c326d1252 jk/unused-params later to maint).
443    (merge 68cabbfda3 dl/doc-submodule-wo-subcommand later to maint).
444    (merge 9903623761 ab/receive-pack-use-after-free-fix later to maint).
445    (merge 1ede45e44b en/merge-options-doc later to maint).
446    (merge 3e14dd2c8e rd/doc-hook-used-in-sample later to maint).
447    (merge c271dc28fd nd/no-more-check-racy later to maint).
448    (merge e6e15194a8 yb/utf-16le-bom-spellfix later to maint).
449    (merge bb101aaf0c rd/attr.c-comment-typofix later to maint).
450    (merge 716a5af812 rd/gc-prune-doc-fix later to maint).
451    (merge 50b206371d js/untravis-windows later to maint).
452    (merge dbf47215e3 js/rebase-recreate-merge later to maint).
453    (merge 56cb2d30f8 dl/reset-doc-no-wrt-abbrev later to maint).
454    (merge 64eca306a2 ja/dir-rename-doc-markup-fix later to maint).
455    (merge af91b0230c dl/ignore-docs later to maint).
456    (merge 59a06e947b ra/t3600-test-path-funcs later to maint).
457    (merge e041d0781b ar/t4150-remove-cruft later to maint).
458    (merge 8d75a1d183 ma/asciidoctor-fixes-more later to maint).
459    (merge 74cc547b0f mh/pack-protocol-doc-fix later to maint).
460    (merge ed31851fa6 ab/doc-misc-typofixes later to maint).
461    (merge a7256debd4 nd/checkout-m-doc-update later to maint).
462    (merge 3a9e1ad78d jt/t5551-protocol-v2-does-not-have-half-auth later to maint).
463    (merge 0b918b75af sg/t5318-cleanup later to maint).
464    (merge 68ed71b53c cb/doco-mono later to maint).
465    (merge a34dca2451 nd/interpret-trailers-docfix later to maint).
466    (merge cf7b857a77 en/fast-import-parsing-fix later to maint).
467    (merge fe61ccbc35 po/rerere-doc-fmt later to maint).
468    (merge ffea0248bf po/describe-not-necessarily-7 later to maint).
469    (merge 7cb7283adb tg/ls-files-debug-format-fix later to maint).
470    (merge f64a21bd82 tz/doc-apostrophe-no-longer-needed later to maint).
471    (merge dbe7b41019 js/t3301-unbreak-notes-test later to maint).
472    (merge d8083e4180 km/t3000-retitle later to maint).
473    (merge 9e4cbccbd7 tz/git-svn-doc-markup-fix later to maint).