]>
Commit | Line | Data |
---|---|---|
79dcccc5 JH |
1 | Git v2.1 Release Notes |
2 | ====================== | |
3 | ||
0953113b JH |
4 | Backward compatibility notes |
5 | ---------------------------- | |
6 | ||
7 | * The default value we give to the environment variable LESS has been | |
8 | changed from "FRSX" to "FRX", losing "S" (chop long lines instead | |
9 | of wrapping). Existing users who prefer not to see line-wrapped | |
10 | output may want to set | |
11 | ||
12 | $ git config core.pager "less -S" | |
13 | ||
14 | to restore the traditional behaviour. It is expected that people | |
5261ec5d | 15 | find output from most subcommands easier to read with the new |
0953113b JH |
16 | default, except for "blame" which tends to produce really long |
17 | lines. To override the new default only for "git blame", you can | |
18 | do this: | |
19 | ||
20 | $ git config pager.blame "less -S" | |
21 | ||
22 | * A few disused directories in contrib/ have been retired. | |
23 | ||
24 | ||
79dcccc5 JH |
25 | Updates since v2.0 |
26 | ------------------ | |
27 | ||
28 | UI, Workflows & Features | |
29 | ||
0953113b JH |
30 | * Since the very beginning of Git, we gave the LESS environment a |
31 | default value "FRSX" when we spawn "less" as the pager. "S" (chop | |
32 | long lines instead of wrapping) has been removed from this default | |
33 | set of options, because it is more or less a personal taste thing, | |
5261ec5d | 34 | as opposed to the others that have good justifications (i.e. "R" is |
0953113b JH |
35 | very much justified because many kinds of output we produce are |
36 | colored and "FX" is justified because output we produce is often | |
37 | shorter than a page). | |
38 | ||
39 | * The logic and data used to compute the display width needed for | |
369a70fc | 40 | UTF-8 strings have been updated to match Unicode 7.0 better. |
0953113b | 41 | |
5261ec5d MB |
42 | * HTTP-based transports learned to better propagate the error messages from |
43 | the webserver to the client coming over the HTTP transport. | |
cb682f8c | 44 | |
369a70fc | 45 | * The completion script for bash (in contrib/) has been updated to |
5261ec5d | 46 | better handle aliases that define a complex sequence of commands. |
369a70fc | 47 | |
5261ec5d MB |
48 | * The "core.preloadindex" configuration variable is enabled by default, |
49 | allowing modern platforms to take advantage of their | |
50 | multiple cores. | |
cb682f8c | 51 | |
49f1cb93 | 52 | * "git clone" applies the "if cloning from a local disk, physically |
5261ec5d MB |
53 | copy the repository using hardlinks, unless otherwise told not to with |
54 | --no-local" optimization when the url.*.insteadOf mechanism rewrites a | |
55 | remote-repository "git clone $URL" into a | |
49f1cb93 JH |
56 | clone from a local disk. |
57 | ||
5261ec5d | 58 | * "git commit --date=<date>" option learned more |
79dcccc5 JH |
59 | timestamp formats, including "--date=now". |
60 | ||
0953113b | 61 | * The `core.commentChar` configuration variable is used to specify a |
5261ec5d MB |
62 | custom comment character (other than the default "#") for |
63 | the commit message editor. This can be set to `auto` to attempt to | |
64 | choose a different character that does not conflict with any that | |
65 | already starts a line in the message being edited, for cases like | |
0953113b JH |
66 | "git commit --amend". |
67 | ||
5261ec5d MB |
68 | * "git format-patch" learned --signature-file=<file> to add the contents |
69 | of a file as a signature to the mail message it produces. | |
cb682f8c | 70 | |
5261ec5d MB |
71 | * "git grep" learned the grep.fullname configuration variable to force |
72 | "--full-name" to be the default. This may cause regressions for | |
73 | scripted users who do not expect this new behaviour. | |
79dcccc5 | 74 | |
0953113b JH |
75 | * "git imap-send" learned to ask the credential helper for auth |
76 | material. | |
77 | ||
5261ec5d | 78 | * "git log" and friends now understand the value "auto" for the |
cb682f8c JH |
79 | "log.decorate" configuration variable to enable the "--decorate" |
80 | option automatically when the output is sent to tty. | |
81 | ||
5261ec5d | 82 | * "git merge" without an argument, even when there is an upstream |
79dcccc5 JH |
83 | defined for the current branch, refused to run until |
84 | merge.defaultToUpstream is set to true. Flip the default of that | |
85 | configuration variable to true. | |
86 | ||
87 | * "git mergetool" learned to drive the vimdiff3 backend. | |
88 | ||
89 | * mergetool.prompt used to default to 'true', always asking "do you | |
5261ec5d MB |
90 | really want to run the tool on this path?". The default has been |
91 | changed to 'false'. However, the prompt will still appear if | |
92 | mergetool used its autodetection system to guess which tool to use. | |
93 | Users who explicitly specify or configure a tool will no longer see | |
94 | the prompt by default. | |
95 | ||
96 | Strictly speaking, this is a backward incompatible change and | |
79dcccc5 | 97 | users need to explicitly set the variable to 'true' if they want |
5261ec5d | 98 | to be prompted to confirm running the tool on each path. |
79dcccc5 | 99 | |
fb46e0c5 JH |
100 | * "git replace" learned the "--edit" subcommand to create a |
101 | replacement by editing an existing object. | |
cb682f8c | 102 | |
5261ec5d | 103 | * "git replace" learned a "--graft" option to rewrite the parents of a |
49f1cb93 JH |
104 | commit. |
105 | ||
786a89d3 JH |
106 | * "git send-email" learned "--to-cover" and "--cc-cover" options, to |
107 | tell it to copy To: and Cc: headers found in the first input file | |
108 | when emitting later input files. | |
109 | ||
79dcccc5 JH |
110 | * "git svn" learned to cope with malformed timestamps with only one |
111 | digit in the hour part, e.g. 2014-01-07T5:01:02.048176Z, emitted | |
112 | by some broken subversion server implementations. | |
113 | ||
0953113b JH |
114 | * "git tag" when editing the tag message shows the name of the tag |
115 | being edited as a comment in the editor. | |
116 | ||
49f1cb93 | 117 | * "git tag" learned to pay attention to "tag.sort" configuration, to |
5261ec5d | 118 | be used as the default sort order when no --sort=<value> option |
49f1cb93 JH |
119 | is given. |
120 | ||
5261ec5d | 121 | * A new "git verify-commit" command, to check GPG signatures in signed |
da86971c JH |
122 | commits, in a way similar to "git verify-tag" is used to check |
123 | signed tags, was added. | |
124 | ||
79dcccc5 JH |
125 | |
126 | Performance, Internal Implementation, etc. | |
127 | ||
0953113b JH |
128 | * Build procedure for 'subtree' (in contrib/) has been cleaned up. |
129 | ||
5261ec5d MB |
130 | * Support for the profile-feedback build, which has |
131 | bit-rotted for quite a while, has been updated. | |
0eff86e4 | 132 | |
fb46e0c5 JH |
133 | * An experimental format to use two files (the base file and |
134 | incremental changes relative to it) to represent the index has been | |
135 | introduced; this may reduce I/O cost of rewriting a large index | |
136 | when only small part of the working tree changes. | |
137 | ||
da86971c | 138 | * Effort to shrink the size of patches Windows folks maintain on top |
aa0ba07a JH |
139 | by upstreaming them continues. More tests that are not applicable |
140 | to the Windows environment are identified and either skipped or | |
141 | made more portable. | |
da86971c | 142 | |
aa0ba07a JH |
143 | * Eradication of "test $condition -a $condition" from our scripts |
144 | continues. | |
81e776d9 | 145 | |
0953113b JH |
146 | * The `core.deltabasecachelimit` used to default to 16 MiB , but this |
147 | proved to be too small, and has been bumped to 96 MiB. | |
148 | ||
149 | * "git blame" has been optimized greatly by reorganising the data | |
50f84e34 | 150 | structure that is used to keep track of the work to be done. |
0953113b | 151 | |
79dcccc5 | 152 | * "git diff" that compares 3-or-more trees (e.g. parents and the |
5261ec5d | 153 | result of a merge) has been optimized. |
79dcccc5 JH |
154 | |
155 | * The API to update/delete references are being converted to handle | |
156 | updates to multiple references in a transactional way. As an | |
157 | example, "update-ref --stdin [-z]" has been updated to use this | |
158 | API. | |
159 | ||
fb46e0c5 JH |
160 | * skip_prefix() and strip_suffix() API functions are used a lot more |
161 | widely throughout the codebase now. | |
162 | ||
cb682f8c JH |
163 | * Parts of the test scripts can be skipped by using a range notation, |
164 | e.g. "sh t1234-test.sh --run='1-4 6 8-'" to omit test piece 5 and 7 | |
165 | and run everything else. | |
166 | ||
79dcccc5 JH |
167 | |
168 | Also contains various documentation updates and code clean-ups. | |
169 | ||
170 | ||
171 | Fixes since v2.0 | |
172 | ---------------- | |
173 | ||
174 | Unless otherwise noted, all the fixes since v2.0 in the maintenance | |
175 | track are contained in this release (see the maintenance releases' | |
176 | notes for details). | |
177 | ||
0953113b JH |
178 | * We used to unconditionally disable the pager in the pager process |
179 | we spawn to feed out output, but that prevented people who want to | |
180 | run "less" within "less" from doing so. | |
181 | (merge c0459ca je/pager-do-not-recurse later to maint). | |
182 | ||
50f84e34 JH |
183 | * Tools that read diagnostic output in our standard error stream do |
184 | not want to see terminal control sequence (e.g. erase-to-eol). | |
185 | Detect them by checking if the standard error stream is connected | |
186 | to a tty. | |
187 | (merge 38de156 mn/sideband-no-ansi later to maint). | |
188 | ||
5261ec5d MB |
189 | * Mishandling of patterns in .gitignore that have trailing SPs quoted |
190 | with backslashes (e.g. ones that end with "\ ") has been | |
50f84e34 | 191 | corrected. |
369a70fc | 192 | (merge 97c1364be6b pb/trim-trailing-spaces later to maint). |
50f84e34 | 193 | |
cb682f8c JH |
194 | * Reworded the error message given upon a failure to open an existing |
195 | loose object file due to e.g. permission issues; it was reported as | |
196 | the object being corrupt, but that is not quite true. | |
197 | (merge d6c8a05 jk/report-fail-to-read-objects-better later to maint). | |
198 | ||
786a89d3 JH |
199 | * "git log -2master" is a common typo that shows two commits starting |
200 | from whichever random branch that is not 'master' that happens to | |
201 | be checked out currently. | |
202 | (merge e3fa568 jc/revision-dash-count-parsing later to maint). | |
203 | ||
da86971c JH |
204 | * Code to avoid adding the same alternate object store twice was |
205 | subtly broken for a long time, but nobody seems to have noticed. | |
206 | (merge 80b4785 rs/fix-alt-odb-path-comparison later to maint). | |
0eff86e4 | 207 | (merge 539e750 ek/alt-odb-entry-fix later to maint). |
da86971c | 208 | |
cb682f8c JH |
209 | * The "%<(10,trunc)%s" pretty format specifier in the log family of |
210 | commands is used to truncate the string to a given length (e.g. 10 | |
211 | in the example) with padding to column-align the output, but did | |
212 | not take into account that number of bytes and number of display | |
213 | columns are different. | |
214 | (merge 7d50987 as/pretty-truncate later to maint). | |
215 | ||
81e776d9 JH |
216 | * "%G" (nothing after G) is an invalid pretty format specifier, but |
217 | the parser did not notice it as garbage. | |
218 | (merge 958b2eb jk/pretty-G-format-fixes later to maint). | |
219 | ||
220 | * A handful of code paths had to read the commit object more than | |
221 | once when showing header fields that are usually not parsed. The | |
222 | internal data structure to keep track of the contents of the commit | |
223 | object has been updated to reduce the need for this double-reading, | |
224 | and to allow the caller find the length of the object. | |
225 | (merge 218aa3a jk/commit-buffer-length later to maint). | |
226 | ||
5261ec5d | 227 | * The "mailmap.file" configuration option did not support tilde |
cb682f8c JH |
228 | expansion (i.e. ~user/path and ~/path). |
229 | (merge 9352fd5 ow/config-mailmap-pathname later to maint). | |
230 | ||
231 | * The completion scripts (in contrib/) did not know about quite a few | |
232 | options that are common between "git merge" and "git pull", and a | |
233 | couple of options unique to "git merge". | |
234 | (merge 8fee872 jk/complete-merge-pull later to maint). | |
235 | ||
49f1cb93 JH |
236 | * The unix-domain socket used by the sample credential cache daemon |
237 | tried to unlink an existing stale one at a wrong path, if the path | |
238 | to the socket was given as an overlong path that does not fit in | |
5261ec5d | 239 | the sun_path member of the sockaddr_un structure. |
49f1cb93 JH |
240 | (merge 2869b3e rs/fix-unlink-unix-socket later to maint). |
241 | ||
fb46e0c5 JH |
242 | * An ancient rewrite passed a wrong pointer to a curl library |
243 | function in a rarely used code path. | |
244 | (merge 479eaa8 ah/fix-http-push later to maint). | |
245 | ||
79dcccc5 | 246 | * "--ignore-space-change" option of "git apply" ignored the spaces |
5261ec5d MB |
247 | at the beginning of lines too aggressively, which is inconsistent |
248 | with the option of the same name that "diff" and "git diff" have. | |
79dcccc5 JH |
249 | (merge 14d3bb4 jc/apply-ignore-whitespace later to maint). |
250 | ||
5261ec5d MB |
251 | * "git blame" miscounted the number of columns needed to show localized |
252 | timestamps, resulting in a jaggy left-side-edge for the source code | |
79dcccc5 JH |
253 | lines in its output. |
254 | (merge dd75553 jx/blame-align-relative-time later to maint). | |
255 | ||
0953113b JH |
256 | * "git blame" assigned the blame to the copy in the working-tree if |
257 | the repository is set to core.autocrlf=input and the file used CRLF | |
258 | line endings. | |
259 | (merge 4d4813a bc/blame-crlf-test later to maint). | |
260 | ||
da86971c JH |
261 | * "git clone -b brefs/tags/bar" would have mistakenly thought we were |
262 | following a single tag, even though it was a name of the branch, | |
263 | because it incorrectly used strstr(). | |
264 | (merge 60a5f5f jc/fix-clone-single-starting-at-a-tag later to maint). | |
265 | ||
5261ec5d | 266 | * "git commit --allow-empty-message -C $commit" did not work when the |
0953113b JH |
267 | commit did not have any log message. |
268 | (merge 076cbd6 jk/commit-C-pick-empty later to maint). | |
269 | ||
cb682f8c | 270 | * "git diff --find-copies-harder" sometimes pretended as if the mode |
5261ec5d | 271 | bits have changed for paths that are marked with the assume-unchanged |
cb682f8c JH |
272 | bit. |
273 | (merge 5304810 jk/diff-files-assume-unchanged later to maint). | |
274 | ||
fb46e0c5 | 275 | * "filter-branch" left an empty single-parent commit that results when |
5261ec5d | 276 | all parents of a merge commit get mapped to the same commit, even |
fb46e0c5 JH |
277 | under "--prune-empty". |
278 | (merge 79bc4ef cb/filter-branch-prune-empty-degenerate-merges later to maint). | |
279 | ||
cb682f8c JH |
280 | * "git format-patch" did not enforce the rule that the "--follow" |
281 | option from the log/diff family of commands must be used with | |
282 | exactly one pathspec. | |
283 | (merge dd63f16 jk/diff-follow-must-take-one-pathspec later to maint). | |
284 | ||
285 | * "git gc --auto" was recently changed to run in the background to | |
286 | give control back early to the end-user sitting in front of the | |
287 | terminal, but it forgot that housekeeping involving reflogs should | |
288 | be done without other processes competing for accesses to the refs. | |
289 | (merge 62aad18 nd/daemonize-gc later to maint). | |
290 | ||
0953113b JH |
291 | * "git grep -O" to show the lines that hit in the pager did not work |
292 | well with case insensitive search. We now spawn "less" with its | |
293 | "-I" option when it is used as the pager (which is the default). | |
294 | (merge f7febbe sk/spawn-less-case-insensitively-from-grep-O-i later to maint). | |
295 | ||
79dcccc5 JH |
296 | * We used to disable threaded "git index-pack" on platforms without |
297 | thread-safe pread(); use a different workaround for such | |
298 | platforms to allow threaded "git index-pack". | |
299 | (merge 3953949 nd/index-pack-one-fd-per-thread later to maint). | |
300 | ||
0953113b JH |
301 | * The error reporting from "git index-pack" has been improved to |
302 | distinguish missing objects from type errors. | |
303 | (merge 77583e7 jk/index-pack-report-missing later to maint). | |
304 | ||
fb46e0c5 JH |
305 | * "log --show-signature" incorrectly decided the color to paint a |
306 | mergetag that was and was not correctly validated. | |
307 | (merge 42c55ce mg/fix-log-mergetag-color later to maint). | |
308 | ||
5261ec5d | 309 | * "log --show-signature" did not pay attention to the "--graph" option. |
fb46e0c5 JH |
310 | (merge cf3983d zk/log-graph-showsig later to maint). |
311 | ||
5261ec5d | 312 | * "git mailinfo" used to read beyond the ends of header strings while |
50f84e34 JH |
313 | parsing an incoming e-mail message to extract the patch. |
314 | (merge b1a013d rs/mailinfo-header-cmp later to maint). | |
315 | ||
0953113b JH |
316 | * On a case insensitive filesystem, merge-recursive incorrectly |
317 | deleted the file that is to be renamed to a name that is the same | |
318 | except for case differences. | |
319 | (merge baa37bf dt/merge-recursive-case-insensitive later to maint). | |
320 | ||
fb46e0c5 JH |
321 | * Merging changes into a file that ends in an incomplete line made the |
322 | last line into a complete one, even when the other branch did not | |
323 | change anything around the end of file. | |
324 | (merge ba31180 mk/merge-incomplete-files later to maint). | |
325 | ||
cb682f8c JH |
326 | * "git pack-objects" unnecessarily copied the previous contents when |
327 | extending the hashtable, even though it will populate the table | |
328 | from scratch anyway. | |
329 | (merge fb79947 rs/pack-objects-no-unnecessary-realloc later to maint). | |
330 | ||
369a70fc | 331 | * Recent updates to "git repack" started to duplicate objects that |
5261ec5d | 332 | are in packfiles marked with the .keep flag into the new packfile by |
369a70fc JH |
333 | mistake. |
334 | (merge d078d85 jk/repack-pack-keep-objects later to maint). | |
335 | ||
79dcccc5 JH |
336 | * "git rerere forget" did not work well when merge.conflictstyle |
337 | was set to a non-default value. | |
338 | (merge de3d8bb fc/rerere-conflict-style later to maint). | |
339 | ||
cb682f8c JH |
340 | * "git remote rm" and "git remote prune" can involve removing many |
341 | refs at once, which is not a very efficient thing to do when very | |
342 | many refs exist in the packed-refs file. | |
343 | (merge e6bea66 jl/remote-rm-prune later to maint). | |
344 | ||
50f84e34 JH |
345 | * "git log --exclude=<glob> --all | git shortlog" worked as expected, |
346 | but "git shortlog --exclude=<glob> --all", which is supposed to be | |
347 | identical to the above pipeline, was not accepted at the command | |
348 | line argument parser level. | |
349 | (merge eb07774 jc/shortlog-ref-exclude later to maint). | |
350 | ||
cb682f8c JH |
351 | * The autostash mode of "git rebase -i" did not restore the dirty |
352 | working tree state if the user aborted the interactive rebase by | |
353 | emptying the insn sheet. | |
354 | (merge ddb5432 rr/rebase-autostash-fix later to maint). | |
355 | ||
49f1cb93 JH |
356 | * "git rebase --fork-point" did not filter out patch-identical |
357 | commits correctly. | |
358 | ||
81e776d9 JH |
359 | * During "git rebase --merge", a conflicted patch could not be |
360 | skipped with "--skip" if the next one also conflicted. | |
361 | (merge 95104c7 bc/fix-rebase-merge-skip later to maint). | |
362 | ||
0953113b JH |
363 | * "git show -s" (i.e. show log message only) used to incorrectly emit |
364 | an extra blank line after a merge commit. | |
365 | (merge ad2f725 mk/show-s-no-extra-blank-line-for-merges later to maint). | |
366 | ||
79dcccc5 JH |
367 | * "git status", even though it is a read-only operation, tries to |
368 | update the index with refreshed lstat(2) info to optimize future | |
369 | accesses to the working tree opportunistically, but this could | |
5261ec5d | 370 | race with a "read-write" operation that modifies the index while it |
79dcccc5 JH |
371 | is running. Detect such a race and avoid overwriting the index. |
372 | (merge 426ddee ym/fix-opportunistic-index-update-race later to maint). | |
50f84e34 | 373 | |
cb682f8c JH |
374 | * "git status" (and "git commit") behaved as if changes in a modified |
375 | submodule are not there if submodule.*.ignore configuration is set, | |
376 | which was misleading. The configuration is only to unclutter diff | |
5261ec5d | 377 | output during the course of development, and not to hide |
cb682f8c JH |
378 | changes in the "status" output to cause the users forget to commit |
379 | them. | |
380 | (merge c215d3d jl/status-added-submodule-is-never-ignored later to maint). | |
381 | ||
369a70fc JH |
382 | * Documentation for "git submodule sync" forgot to say that the subcommand |
383 | can take the "--recursive" option. | |
384 | (merge 9393ae7 mc/doc-submodule-sync-recurse later to maint). | |
385 | ||
50f84e34 JH |
386 | * "git update-index --cacheinfo" in 2.0 release crashed on a |
387 | malformed command line. | |
388 | (merge c8e1ee4 jc/rev-parse-argh-dashed-multi-words later to maint). | |
389 | ||
390 | * The mode to run tests with HTTP server tests disabled was broken. | |
391 | (merge afa53fe na/no-http-test-in-the-middle later to maint). |