Merge branch 'ds/mark-parents-uninteresting-optim'
[git] / Documentation / RelNotes / 2.17.0.txt
1 Git 2.17 Release Notes
2 ======================
3
4 Updates since v2.16
5 -------------------
6
7 UI, Workflows & Features
8
9  * "diff" family of commands learned "--find-object=<object-id>" option
10    to limit the findings to changes that involve the named object.
11
12  * "git format-patch" learned to give 72-cols to diffstat, which is
13    consistent with other line length limits the subcommand uses for
14    its output meant for e-mails.
15
16  * The log from "git daemon" can be redirected with a new option; one
17    relevant use case is to send the log to standard error (instead of
18    syslog) when running it from inetd.
19
20  * "git rebase" learned to take "--allow-empty-message" option.
21
22  * "git am" has learned the "--quit" option, in addition to the
23    existing "--abort" option; having the pair mirrors a few other
24    commands like "rebase" and "cherry-pick".
25
26  * "git worktree add" learned to run the post-checkout hook, just like
27    "git clone" runs it upon the initial checkout.
28
29  * "git tag" learned an explicit "--edit" option that allows the
30    message given via "-m" and "-F" to be further edited.
31
32  * "git fetch --prune-tags" may be used as a handy short-hand for
33    getting rid of stale tags that are locally held.
34
35  * The new "--show-current-patch" option gives an end-user facing way
36    to get the diff being applied when "git rebase" (and "git am")
37    stops with a conflict.
38
39  * "git add -p" used to offer "/" (look for a matching hunk) as a
40    choice, even there was only one hunk, which has been corrected.
41    Also the single-key help is now given only for keys that are
42    enabled (e.g. help for '/' won't be shown when there is only one
43    hunk).
44
45  * Since Git 1.7.9, "git merge" defaulted to --no-ff (i.e. even when
46    the side branch being merged is a descendant of the current commit,
47    create a merge commit instead of fast-forwarding) when merging a
48    tag object.  This was appropriate default for integrators who pull
49    signed tags from their downstream contributors, but caused an
50    unnecessary merges when used by downstream contributors who
51    habitually "catch up" their topic branches with tagged releases
52    from the upstream.  Update "git merge" to default to --no-ff only
53    when merging a tag object that does *not* sit at its usual place in
54    refs/tags/ hierarchy, and allow fast-forwarding otherwise, to
55    mitigate the problem.
56
57
58 Performance, Internal Implementation, Development Support etc.
59
60  * More perf tests for threaded grep
61
62  * "perf" test output can be sent to codespeed server.
63    (merge 19cf57a92e cc/codespeed later to maint).
64
65  * The build procedure for perl/ part has been greatly simplified by
66    weaning ourselves off of MakeMaker.
67
68  * In preparation for implementing narrow/partial clone, the machinery
69    for checking object connectivity used by gc and fsck has been
70    taught that a missing object is OK when it is referenced by a
71    packfile specially marked as coming from trusted repository that
72    promises to make them available on-demand and lazily.
73
74  * The machinery to clone & fetch, which in turn involves packing and
75    unpacking objects, has been told how to omit certain objects using
76    the filtering mechanism introduced by another topic.  It now knows
77    to mark the resulting pack as a promisor pack to tolerate missing
78    objects, laying foundation for "narrow" clones.
79
80  * The first step to getting rid of mru API and using the
81    doubly-linked list API directly instead.
82
83  * Retire mru API as it does not give enough abstraction over
84    underlying list API to be worth it.
85
86  * Rewrite two more "git submodule" subcommands in C.
87
88  * The tracing machinery learned to report tweaking of environment
89    variables as well.
90    (merge 090a09272a nd/trace-with-env later to maint).
91
92  * Update Coccinelle rules to catch and optimize strbuf_addf(&buf, "%s", str)
93    (merge cd9a4b6d93 rs/strbuf-cocci-workaround later to maint).
94
95  * Prevent "clang-format" from breaking line after function return type.
96    (merge a3715d43e8 po/clang-format-functype-weight later to maint).
97
98  * The sequencer infrastructure is shared across "git cherry-pick",
99    "git rebase -i", etc., and has always spawned "git commit" when it
100    needs to create a commit.  It has been taught to do so internally,
101    when able, by reusing the codepath "git commit" itself uses, which
102    gives performance boost for a few tens of percents in some sample
103    scenarios.
104
105  * Push the submodule version of collision-detecting SHA-1 hash
106    implementation a bit harder on builders.
107
108  * Avoid mmapping small files while using packed refs (especially ones
109    with zero size, which would cause later munmap() to fail).
110    (merge ba41a8b600 kg/packed-ref-cache-fix later to maint).
111
112  * Conversion from uchar[20] to struct object_id continues.
113
114  * More tests for wildmatch functions.
115
116  * The code to binary search starting from a fan-out table (which is
117    how the packfile is indexed with object names) has been refactored
118    into a reusable helper.
119
120  * We now avoid using identifiers that clash with C++ keywords.  Even
121    though it is not a goal to compile Git with C++ compilers, changes
122    like this help use of code analysis tools that targets C++ on our
123    codebase.
124
125
126 Also contains various documentation updates and code clean-ups.
127
128
129 Fixes since v2.16
130 -----------------
131
132  * An old regression in "git describe --all $annotated_tag^0" has been
133    fixed.
134
135  * "git status" after moving a path in the working tree (hence making
136    it appear "removed") and then adding with the -N option (hence
137    making that appear "added") detected it as a rename, but did not
138    report the  old and new pathnames correctly.
139
140  * "git svn dcommit" did not take into account the fact that a
141    svn+ssh:// URL with a username@ (typically used for pushing) refers
142    to the same SVN repository without the username@ and failed when
143    svn.pushmergeinfo option is set.
144
145  * API clean-up around revision traversal.
146
147  * "git merge -Xours/-Xtheirs" learned to use our/their version when
148    resolving a conflicting updates to a symbolic link.
149
150  * "git clone $there $here" is allowed even when here directory exists
151    as long as it is an empty directory, but the command incorrectly
152    removed it upon a failure of the operation.
153
154  * "git commit --fixup" did not allow "-m<message>" option to be used
155    at the same time; allow it to annotate resulting commit with more
156    text.
157
158  * When resetting the working tree files recursively, the working tree
159    of submodules are now also reset to match.
160
161  * "git stash -- <pathspec>" incorrectly blew away untracked files in
162    the directory that matched the pathspec, which has been corrected.
163
164  * Instead of maintaining home-grown email address parsing code, ship
165    a copy of reasonably recent Mail::Address to be used as a fallback
166    in 'git send-email' when the platform lacks it.
167    (merge d60be8acab mm/send-email-fallback-to-local-mail-address later to maint).
168
169  * "git add -p" was taught to ignore local changes to submodules as
170    they do not interfere with the partial addition of regular changes
171    anyway.
172
173  * Avoid showing a warning message in the middle of a line of "git
174    diff" output.
175    (merge 4e056c989f nd/diff-flush-before-warning later to maint).
176
177  * The http tracing code, often used to debug connection issues,
178    learned to redact potentially sensitive information from its output
179    so that it can be more safely sharable.
180    (merge 8ba18e6fa4 jt/http-redact-cookies later to maint).
181
182  * Crash fix for a corner case where an error codepath tried to unlock
183    what it did not acquire lock on.
184    (merge 81fcb698e0 mr/packed-ref-store-fix later to maint).
185
186  * The split-index mode had a few corner case bugs fixed.
187    (merge ae59a4e44f tg/split-index-fixes later to maint).
188
189  * Assorted fixes to "git daemon".
190    (merge ed15e58efe jk/daemon-fixes later to maint).
191
192  * Completion of "git merge -s<strategy>" (in contrib/) did not work
193    well in non-C locale.
194    (merge 7cc763aaa3 nd/list-merge-strategy later to maint).
195
196  * Workaround for segfault with more recent versions of SVN.
197    (merge 7f6f75e97a ew/svn-branch-segfault-fix later to maint).
198
199  * Plug recently introduced leaks in fsck.
200    (merge ba3a08ca0e jt/fsck-code-cleanup later to maint).
201
202  * "git pull --rebase" did not pass verbosity setting down when
203    recursing into a submodule.
204    (merge a56771a668 sb/pull-rebase-submodule later to maint).
205
206  * The way "git reset --hard" reports the commit the updated HEAD
207    points at is made consistent with the way how the commit title is
208    generated by the other parts of the system.  This matters when the
209    title is spread across physically multiple lines.
210    (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint).
211
212  * Test fixes.
213    (merge 63b1a175ee sg/test-i18ngrep later to maint).
214
215  * Some bugs around "untracked cache" feature have been fixed.  This
216    will notice corrupt data in the untracked cache left by old and
217    buggy code and issue a warning---the index can be fixed by clearing
218    the untracked cache from it.
219    (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint).
220    (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint).
221
222  * "git blame HEAD COPYING" in a bare repository failed to run, while
223    "git blame HEAD -- COPYING" run just fine.  This has been corrected.
224
225  * "git add" files in the same directory, but spelling the directory
226    path in different cases on case insensitive filesystem, corrupted
227    the name hash data structure and led to unexpected results.  This
228    has been corrected.
229    (merge c95525e90d bp/name-hash-dirname-fix later to maint).
230
231  * "git rebase -p" mangled log messages of a merge commit, which is
232    now fixed.
233    (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint).
234
235  * Some low level protocol codepath could crash when they get an
236    unexpected flush packet, which is now fixed.
237    (merge bb1356dc64 js/packet-read-line-check-null later to maint).
238
239  * "git check-ignore" with multiple paths got confused when one is a
240    file and the other is a directory, which has been fixed.
241    (merge d60771e930 rs/check-ignore-multi later to maint).
242
243  * "git describe $garbage" stopped giving any errors when the garbage
244    happens to be a string with 40 hexadecimal letters.
245    (merge a8e7a2bf0f sb/describe-blob later to maint).
246
247  * Code to unquote single-quoted string (used in the parser for
248    configuration files, etc.) did not diagnose bogus input correctly
249    and produced bogus results instead.
250    (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint).
251
252  * Many places in "git apply" knew that "/dev/null" that signals
253    "there is no such file on this side of the diff" can be followed by
254    whitespace and garbage when parsing a patch, except for one, which
255    made an otherwise valid patch (e.g. ones from subversion) rejected.
256    (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint).
257
258  * We no longer create any *.spec file, so "make clean" should not
259    remove it.
260    (merge 4321bdcabb tz/do-not-clean-spec-file later to maint).
261
262  * "git push" over http transport did not unquote the push-options
263    correctly.
264    (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint).
265
266  * "git send-email" learned to complain when the batch-size option is
267    not defined when the relogin-delay option is, since these two are
268    mutually required.
269    (merge 9caa70697b xz/send-email-batch-size later to maint).
270
271  * Y2k20 fix ;-) for our perl scripts.
272    (merge a40e06ee33 bw/perl-timegm-timelocal-fix later to maint).
273
274  * Other minor doc, test and build updates and code cleanups.
275    (merge e2a5a028c7 bw/oidmap-autoinit later to maint).
276    (merge ec3b4b06f8 cl/t9001-cleanup later to maint).
277    (merge e1b3f3dd38 ks/submodule-doc-updates later to maint).
278    (merge fbac558a9b rs/describe-unique-abbrev later to maint).
279    (merge 8462ff43e4 tb/crlf-conv-flags later to maint).
280    (merge 7d68bb0766 rb/hashmap-h-compilation-fix later to maint).
281    (merge 3449847168 cc/sha1-file-name later to maint).
282    (merge ad622a256f ds/use-get-be64 later to maint).
283    (merge f919ffebed sg/cocci-move-array later to maint).
284    (merge 4e801463c7 jc/mailinfo-cleanup-fix later to maint).
285    (merge ef5b3a6c5e nd/shared-index-fix later to maint).
286    (merge 9f5258cbb8 tz/doc-show-defaults-to-head later to maint).
287    (merge b780e4407d jc/worktree-add-short-help later to maint).
288    (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint).
289    (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint).
290    (merge 3738031581 jk/gettext-poison later to maint).
291    (merge 54360a1956 rj/sparse-updates later to maint).
292    (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint).
293    (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint).
294    (merge 4ccf461f56 bp/fsmonitor later to maint).
295    (merge a6119f82b1 jk/test-hashmap-updates later to maint).
296    (merge 5aea9fe6cc rd/typofix later to maint).
297    (merge e4e5da2796 sb/status-doc-fix later to maint).
298    (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint).
299    (merge d023df1ee6 tg/worktree-create-tracking later to maint).
300    (merge 4cbe92fd41 sm/mv-dry-run-update later to maint).
301    (merge 75e5e9c3f7 sb/color-h-cleanup later to maint).
302    (merge 2708ef4af6 sg/t6300-modernize later to maint).
303    (merge d88e92d4e0 bw/doc-submodule-recurse-config-with-clone later to maint).
304    (merge f74bbc8dd2 jk/cached-commit-buffer later to maint).
305    (merge 1316416903 ms/non-ascii-ticks later to maint).
306    (merge 878056005e rs/strbuf-read-file-or-whine later to maint).
307    (merge 79f0ba1547 jk/strbuf-read-file-close-error later to maint).