]>
Commit | Line | Data |
---|---|---|
298d8612 JH |
1 | Git 2.17 Release Notes |
2 | ====================== | |
3 | ||
4 | Updates since v2.16 | |
5 | ------------------- | |
6 | ||
7 | UI, Workflows & Features | |
8 | ||
5be1f00a JH |
9 | * "diff" family of commands learned "--find-object=<object-id>" option |
10 | to limit the findings to changes that involve the named object. | |
5be1f00a | 11 | |
e3a80781 JH |
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. | |
298d8612 | 21 | |
7e31236f JH |
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 | ||
c6284da4 JH |
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 | ||
d0db9edb JH |
57 | * "git status" can spend a lot of cycles to compute the relation |
58 | between the current branch and its upstream, which can now be | |
59 | disabled with "--no-ahead-behind" option. | |
60 | ||
61 | * "git diff" and friends learned funcname patterns for Go language | |
62 | source files. | |
63 | ||
0afbf6ca JH |
64 | * "git send-email" learned "--reply-to=<address>" option. |
65 | ||
66 | * Funcname pattern used for C# now recognizes "async" keyword. | |
67 | ||
085f5f95 JH |
68 | * In a way similar to how "git tag" learned to honor the pager |
69 | setting only in the list mode, "git config" learned to ignore the | |
70 | pager setting when it is used for setting values (i.e. when the | |
71 | purpose of the operation is not to "show"). | |
72 | ||
7e31236f | 73 | |
298d8612 JH |
74 | Performance, Internal Implementation, Development Support etc. |
75 | ||
5be1f00a | 76 | * More perf tests for threaded grep |
5be1f00a JH |
77 | |
78 | * "perf" test output can be sent to codespeed server. | |
5be1f00a | 79 | |
b2e45c69 JH |
80 | * The build procedure for perl/ part has been greatly simplified by |
81 | weaning ourselves off of MakeMaker. | |
82 | ||
14f437f3 TZ |
83 | * Perl 5.8 or greater has been required since Git 1.7.4 released in |
84 | 2010, but we continued to assume some core modules may not exist and | |
85 | used a conditional "eval { require <<module>> }"; we no longer do | |
86 | this. Some platforms (Fedora/RedHat/CentOS, for example) ship Perl | |
87 | without all core modules by default (e.g. Digest::MD5, File::Temp, | |
88 | File::Spec, Net::Domain, Net::SMTP). Users on such platforms may | |
89 | need to install these additional modules. | |
90 | ||
91 | * As a convenience, we install copies of Perl modules we require which | |
92 | are not part of the core Perl distribution (e.g. Error and | |
93 | Mail::Address). Users and packagers whose operating system provides | |
94 | these modules can set NO_PERL_CPAN_FALLBACKS to avoid installing the | |
95 | bundled modules. | |
96 | ||
b2e45c69 JH |
97 | * In preparation for implementing narrow/partial clone, the machinery |
98 | for checking object connectivity used by gc and fsck has been | |
99 | taught that a missing object is OK when it is referenced by a | |
100 | packfile specially marked as coming from trusted repository that | |
101 | promises to make them available on-demand and lazily. | |
102 | ||
103 | * The machinery to clone & fetch, which in turn involves packing and | |
104 | unpacking objects, has been told how to omit certain objects using | |
105 | the filtering mechanism introduced by another topic. It now knows | |
106 | to mark the resulting pack as a promisor pack to tolerate missing | |
107 | objects, laying foundation for "narrow" clones. | |
108 | ||
109 | * The first step to getting rid of mru API and using the | |
110 | doubly-linked list API directly instead. | |
111 | ||
112 | * Retire mru API as it does not give enough abstraction over | |
113 | underlying list API to be worth it. | |
114 | ||
115 | * Rewrite two more "git submodule" subcommands in C. | |
116 | ||
117 | * The tracing machinery learned to report tweaking of environment | |
118 | variables as well. | |
b2e45c69 JH |
119 | |
120 | * Update Coccinelle rules to catch and optimize strbuf_addf(&buf, "%s", str) | |
b2e45c69 JH |
121 | |
122 | * Prevent "clang-format" from breaking line after function return type. | |
b2e45c69 JH |
123 | |
124 | * The sequencer infrastructure is shared across "git cherry-pick", | |
125 | "git rebase -i", etc., and has always spawned "git commit" when it | |
126 | needs to create a commit. It has been taught to do so internally, | |
127 | when able, by reusing the codepath "git commit" itself uses, which | |
128 | gives performance boost for a few tens of percents in some sample | |
129 | scenarios. | |
130 | ||
1f9c1fab JH |
131 | * Push the submodule version of collision-detecting SHA-1 hash |
132 | implementation a bit harder on builders. | |
133 | ||
134 | * Avoid mmapping small files while using packed refs (especially ones | |
135 | with zero size, which would cause later munmap() to fail). | |
1f9c1fab JH |
136 | |
137 | * Conversion from uchar[20] to struct object_id continues. | |
138 | ||
139 | * More tests for wildmatch functions. | |
298d8612 | 140 | |
2fc74f41 JH |
141 | * The code to binary search starting from a fan-out table (which is |
142 | how the packfile is indexed with object names) has been refactored | |
143 | into a reusable helper. | |
144 | ||
c6284da4 JH |
145 | * We now avoid using identifiers that clash with C++ keywords. Even |
146 | though it is not a goal to compile Git with C++ compilers, changes | |
147 | like this help use of code analysis tools that targets C++ on our | |
148 | codebase. | |
149 | ||
d0db9edb JH |
150 | * The executable is now built in 'script' phase in Travis CI integration, |
151 | to follow the established practice, rather than during 'before_script' | |
152 | phase. This allows the CI categorize the failures better ('failed' | |
153 | is project's fault, 'errored' is build environment's). | |
154 | (merge 3c93b82920 sg/travis-build-during-script-phase later to maint). | |
155 | ||
156 | * Writing out the index file when the only thing that changed in it | |
157 | is the untracked cache information is often wasteful, and this has | |
158 | been optimized out. | |
159 | ||
0afbf6ca JH |
160 | * Various pieces of Perl code we have have been cleaned up. |
161 | ||
085f5f95 JH |
162 | * Internal API clean-up to allow write_locked_index() optionally skip |
163 | writing the in-core index when it is not modified. | |
164 | ||
c6284da4 | 165 | |
298d8612 JH |
166 | Also contains various documentation updates and code clean-ups. |
167 | ||
168 | ||
169 | Fixes since v2.16 | |
170 | ----------------- | |
171 | ||
5be1f00a JH |
172 | * An old regression in "git describe --all $annotated_tag^0" has been |
173 | fixed. | |
5be1f00a JH |
174 | |
175 | * "git status" after moving a path in the working tree (hence making | |
176 | it appear "removed") and then adding with the -N option (hence | |
177 | making that appear "added") detected it as a rename, but did not | |
178 | report the old and new pathnames correctly. | |
5be1f00a JH |
179 | |
180 | * "git svn dcommit" did not take into account the fact that a | |
181 | svn+ssh:// URL with a username@ (typically used for pushing) refers | |
182 | to the same SVN repository without the username@ and failed when | |
183 | svn.pushmergeinfo option is set. | |
5be1f00a JH |
184 | |
185 | * API clean-up around revision traversal. | |
5be1f00a JH |
186 | |
187 | * "git merge -Xours/-Xtheirs" learned to use our/their version when | |
188 | resolving a conflicting updates to a symbolic link. | |
5be1f00a JH |
189 | |
190 | * "git clone $there $here" is allowed even when here directory exists | |
191 | as long as it is an empty directory, but the command incorrectly | |
192 | removed it upon a failure of the operation. | |
5be1f00a JH |
193 | |
194 | * "git commit --fixup" did not allow "-m<message>" option to be used | |
195 | at the same time; allow it to annotate resulting commit with more | |
196 | text. | |
5be1f00a JH |
197 | |
198 | * When resetting the working tree files recursively, the working tree | |
199 | of submodules are now also reset to match. | |
5be1f00a JH |
200 | |
201 | * "git stash -- <pathspec>" incorrectly blew away untracked files in | |
202 | the directory that matched the pathspec, which has been corrected. | |
5be1f00a JH |
203 | |
204 | * Instead of maintaining home-grown email address parsing code, ship | |
205 | a copy of reasonably recent Mail::Address to be used as a fallback | |
206 | in 'git send-email' when the platform lacks it. | |
207 | (merge d60be8acab mm/send-email-fallback-to-local-mail-address later to maint). | |
208 | ||
209 | * "git add -p" was taught to ignore local changes to submodules as | |
210 | they do not interfere with the partial addition of regular changes | |
211 | anyway. | |
5be1f00a | 212 | |
b2e45c69 JH |
213 | * Avoid showing a warning message in the middle of a line of "git |
214 | diff" output. | |
215 | (merge 4e056c989f nd/diff-flush-before-warning later to maint). | |
216 | ||
217 | * The http tracing code, often used to debug connection issues, | |
218 | learned to redact potentially sensitive information from its output | |
219 | so that it can be more safely sharable. | |
220 | (merge 8ba18e6fa4 jt/http-redact-cookies later to maint). | |
221 | ||
222 | * Crash fix for a corner case where an error codepath tried to unlock | |
223 | what it did not acquire lock on. | |
224 | (merge 81fcb698e0 mr/packed-ref-store-fix later to maint). | |
225 | ||
226 | * The split-index mode had a few corner case bugs fixed. | |
227 | (merge ae59a4e44f tg/split-index-fixes later to maint). | |
228 | ||
229 | * Assorted fixes to "git daemon". | |
230 | (merge ed15e58efe jk/daemon-fixes later to maint). | |
231 | ||
232 | * Completion of "git merge -s<strategy>" (in contrib/) did not work | |
233 | well in non-C locale. | |
234 | (merge 7cc763aaa3 nd/list-merge-strategy later to maint). | |
235 | ||
236 | * Workaround for segfault with more recent versions of SVN. | |
237 | (merge 7f6f75e97a ew/svn-branch-segfault-fix later to maint). | |
238 | ||
1f9c1fab JH |
239 | * Plug recently introduced leaks in fsck. |
240 | (merge ba3a08ca0e jt/fsck-code-cleanup later to maint). | |
241 | ||
242 | * "git pull --rebase" did not pass verbosity setting down when | |
243 | recursing into a submodule. | |
244 | (merge a56771a668 sb/pull-rebase-submodule later to maint). | |
245 | ||
246 | * The way "git reset --hard" reports the commit the updated HEAD | |
247 | points at is made consistent with the way how the commit title is | |
248 | generated by the other parts of the system. This matters when the | |
249 | title is spread across physically multiple lines. | |
250 | (merge 1cf823fb68 tg/reset-hard-show-head-with-pretty later to maint). | |
251 | ||
e3a80781 JH |
252 | * Test fixes. |
253 | (merge 63b1a175ee sg/test-i18ngrep later to maint). | |
254 | ||
2fc74f41 JH |
255 | * Some bugs around "untracked cache" feature have been fixed. This |
256 | will notice corrupt data in the untracked cache left by old and | |
257 | buggy code and issue a warning---the index can be fixed by clearing | |
258 | the untracked cache from it. | |
259 | (merge 0cacebf099 nd/fix-untracked-cache-invalidation later to maint). | |
260 | (merge 7bf0be7501 ab/untracked-cache-invalidation-docs later to maint). | |
261 | ||
262 | * "git blame HEAD COPYING" in a bare repository failed to run, while | |
263 | "git blame HEAD -- COPYING" run just fine. This has been corrected. | |
264 | ||
265 | * "git add" files in the same directory, but spelling the directory | |
266 | path in different cases on case insensitive filesystem, corrupted | |
267 | the name hash data structure and led to unexpected results. This | |
268 | has been corrected. | |
269 | (merge c95525e90d bp/name-hash-dirname-fix later to maint). | |
270 | ||
271 | * "git rebase -p" mangled log messages of a merge commit, which is | |
272 | now fixed. | |
273 | (merge ed5144d7eb js/fix-merge-arg-quoting-in-rebase-p later to maint). | |
274 | ||
275 | * Some low level protocol codepath could crash when they get an | |
276 | unexpected flush packet, which is now fixed. | |
277 | (merge bb1356dc64 js/packet-read-line-check-null later to maint). | |
278 | ||
279 | * "git check-ignore" with multiple paths got confused when one is a | |
280 | file and the other is a directory, which has been fixed. | |
281 | (merge d60771e930 rs/check-ignore-multi later to maint). | |
282 | ||
283 | * "git describe $garbage" stopped giving any errors when the garbage | |
284 | happens to be a string with 40 hexadecimal letters. | |
285 | (merge a8e7a2bf0f sb/describe-blob later to maint). | |
286 | ||
287 | * Code to unquote single-quoted string (used in the parser for | |
288 | configuration files, etc.) did not diagnose bogus input correctly | |
289 | and produced bogus results instead. | |
290 | (merge ddbbf8eb25 jk/sq-dequote-on-bogus-input later to maint). | |
291 | ||
7e31236f JH |
292 | * Many places in "git apply" knew that "/dev/null" that signals |
293 | "there is no such file on this side of the diff" can be followed by | |
294 | whitespace and garbage when parsing a patch, except for one, which | |
295 | made an otherwise valid patch (e.g. ones from subversion) rejected. | |
296 | (merge e454ad4bec tk/apply-dev-null-verify-name-fix later to maint). | |
297 | ||
298 | * We no longer create any *.spec file, so "make clean" should not | |
299 | remove it. | |
300 | (merge 4321bdcabb tz/do-not-clean-spec-file later to maint). | |
301 | ||
302 | * "git push" over http transport did not unquote the push-options | |
303 | correctly. | |
304 | (merge 90dce21eb0 jk/push-options-via-transport-fix later to maint). | |
305 | ||
c6284da4 JH |
306 | * "git send-email" learned to complain when the batch-size option is |
307 | not defined when the relogin-delay option is, since these two are | |
308 | mutually required. | |
309 | (merge 9caa70697b xz/send-email-batch-size later to maint). | |
310 | ||
311 | * Y2k20 fix ;-) for our perl scripts. | |
312 | (merge a40e06ee33 bw/perl-timegm-timelocal-fix later to maint). | |
313 | ||
d0db9edb JH |
314 | * Threaded "git grep" has been optimized to avoid allocation in code |
315 | section that is covered under a mutex. | |
316 | (merge 38ef24dccf rv/grep-cleanup later to maint). | |
317 | ||
318 | * "git subtree" script (in contrib/) scripted around "git log", whose | |
319 | output got affected by end-user configuration like log.showsignature | |
320 | (merge 8841b5222c sg/subtree-signed-commits later to maint). | |
321 | ||
322 | * While finding unique object name abbreviation, the code may | |
323 | accidentally have read beyond the end of the array of object names | |
324 | in a pack. | |
325 | (merge 21abed500c ds/find-unique-abbrev-optim later to maint). | |
326 | ||
327 | * Micro optimization in revision traversal code. | |
328 | (merge ebbed3ba04 ds/mark-parents-uninteresting-optim later to maint). | |
329 | ||
330 | * "git commit" used to run "gc --auto" near the end, which was lost | |
331 | when the command was reimplemented in C by mistake. | |
332 | (merge 095c741edd ab/gc-auto-in-commit later to maint). | |
333 | ||
0afbf6ca JH |
334 | * Allow running a couple of tests with "sh -x". |
335 | (merge c20bf94abc sg/cvs-tests-with-x later to maint). | |
336 | ||
085f5f95 JH |
337 | * The codepath to replace an existing entry in the index had a bug in |
338 | updating the name hash structure, which has been fixed. | |
339 | (merge 0e267b7a24 bp/refresh-cache-ent-rehash-fix later to maint). | |
340 | ||
341 | * The transfer.fsckobjects configuration tells "git fetch" to | |
342 | validate the data and connected-ness of objects in the received | |
343 | pack; the code to perform this check has been taught about the | |
344 | narrow clone's convention that missing objects that are reachable | |
1f2abe68 | 345 | from objects in a pack that came from a promisor remote is OK. |
085f5f95 JH |
346 | |
347 | * There was an unused file-scope static variable left in http.c when | |
348 | building for versions of libCURL that is older than 7.19.4, which | |
349 | has been fixed. | |
350 | (merge b8fd6008ec rj/http-code-cleanup later to maint). | |
351 | ||
352 | * Shell script portability fix. | |
353 | (merge 206a6ae013 ml/filter-branch-portability-fix later to maint). | |
354 | ||
298d8612 | 355 | * Other minor doc, test and build updates and code cleanups. |
5be1f00a | 356 | (merge e2a5a028c7 bw/oidmap-autoinit later to maint). |
b2e45c69 JH |
357 | (merge ec3b4b06f8 cl/t9001-cleanup later to maint). |
358 | (merge e1b3f3dd38 ks/submodule-doc-updates later to maint). | |
359 | (merge fbac558a9b rs/describe-unique-abbrev later to maint). | |
360 | (merge 8462ff43e4 tb/crlf-conv-flags later to maint). | |
361 | (merge 7d68bb0766 rb/hashmap-h-compilation-fix later to maint). | |
362 | (merge 3449847168 cc/sha1-file-name later to maint). | |
363 | (merge ad622a256f ds/use-get-be64 later to maint). | |
364 | (merge f919ffebed sg/cocci-move-array later to maint). | |
365 | (merge 4e801463c7 jc/mailinfo-cleanup-fix later to maint). | |
366 | (merge ef5b3a6c5e nd/shared-index-fix later to maint). | |
367 | (merge 9f5258cbb8 tz/doc-show-defaults-to-head later to maint). | |
1f9c1fab JH |
368 | (merge b780e4407d jc/worktree-add-short-help later to maint). |
369 | (merge ae239fc8e5 rs/cocci-strbuf-addf-to-addstr later to maint). | |
370 | (merge 2e22a85e5c nd/ignore-glob-doc-update later to maint). | |
2fc74f41 JH |
371 | (merge 3738031581 jk/gettext-poison later to maint). |
372 | (merge 54360a1956 rj/sparse-updates later to maint). | |
373 | (merge 12e31a6b12 sg/doc-test-must-fail-args later to maint). | |
374 | (merge 760f1ad101 bc/doc-interpret-trailers-grammofix later to maint). | |
375 | (merge 4ccf461f56 bp/fsmonitor later to maint). | |
376 | (merge a6119f82b1 jk/test-hashmap-updates later to maint). | |
377 | (merge 5aea9fe6cc rd/typofix later to maint). | |
7e31236f JH |
378 | (merge e4e5da2796 sb/status-doc-fix later to maint). |
379 | (merge 7976e901c8 gs/test-unset-xdg-cache-home later to maint). | |
380 | (merge d023df1ee6 tg/worktree-create-tracking later to maint). | |
c6284da4 JH |
381 | (merge 4cbe92fd41 sm/mv-dry-run-update later to maint). |
382 | (merge 75e5e9c3f7 sb/color-h-cleanup later to maint). | |
383 | (merge 2708ef4af6 sg/t6300-modernize later to maint). | |
384 | (merge d88e92d4e0 bw/doc-submodule-recurse-config-with-clone later to maint). | |
385 | (merge f74bbc8dd2 jk/cached-commit-buffer later to maint). | |
386 | (merge 1316416903 ms/non-ascii-ticks later to maint). | |
387 | (merge 878056005e rs/strbuf-read-file-or-whine later to maint). | |
388 | (merge 79f0ba1547 jk/strbuf-read-file-close-error later to maint). | |
d0db9edb JH |
389 | (merge edfb8ba068 ot/ref-filter-cleanup later to maint). |
390 | (merge 11395a3b4b jc/test-must-be-empty later to maint). | |
391 | (merge 768b9d6db7 mk/doc-pretty-fill later to maint). | |
0afbf6ca | 392 | (merge 2caa7b8d27 ab/man-sec-list later to maint). |
085f5f95 JH |
393 | (merge 40c17eb184 ks/t3200-typofix later to maint). |
394 | (merge bd9958c358 dp/merge-strategy-doc-fix later to maint). | |
395 | (merge 9ee0540a40 js/ming-strftime later to maint). | |
396 | (merge 1775e990f7 tz/complete-tag-delete-tagname later to maint). | |
397 | (merge 00a4b03501 rj/warning-uninitialized-fix later to maint). | |
398 | (merge b635ed97a0 jk/attributes-path-doc later to maint). |