]>
Commit | Line | Data |
---|---|---|
384364b5 JH |
1 | Git v2.0 Release Notes |
2 | ====================== | |
3 | ||
4 | Backward compatibility notes | |
5 | ---------------------------- | |
6 | ||
7 | When "git push [$there]" does not say what to push, we have used the | |
8 | traditional "matching" semantics so far (all your branches were sent | |
9 | to the remote as long as there already are branches of the same name | |
10 | over there). In Git 2.0, the default is now the "simple" semantics, | |
11 | which pushes: | |
12 | ||
13 | - only the current branch to the branch with the same name, and only | |
14 | when the current branch is set to integrate with that remote | |
15 | branch, if you are pushing to the same remote as you fetch from; or | |
16 | ||
17 | - only the current branch to the branch with the same name, if you | |
18 | are pushing to a remote that is not where you usually fetch from. | |
19 | ||
20 | You can use the configuration variable "push.default" to change | |
21 | this. If you are an old-timer who wants to keep using the | |
22 | "matching" semantics, you can set the variable to "matching", for | |
23 | example. Read the documentation for other possibilities. | |
24 | ||
25 | When "git add -u" and "git add -A" are run inside a subdirectory | |
26 | without specifying which paths to add on the command line, they | |
27 | operate on the entire tree for consistency with "git commit -a" and | |
28 | other commands (these commands used to operate only on the current | |
29 | subdirectory). Say "git add -u ." or "git add -A ." if you want to | |
30 | limit the operation to the current directory. | |
31 | ||
32 | "git add <path>" is the same as "git add -A <path>" now, so that | |
33 | "git add dir/" will notice paths you removed from the directory and | |
34 | record the removal. In older versions of Git, "git add <path>" used | |
35 | to ignore removals. You can say "git add --ignore-removal <path>" to | |
36 | add only added or modified paths in <path>, if you really want to. | |
37 | ||
38 | The "-q" option to "git diff-files", which does *NOT* mean "quiet", | |
39 | has been removed (it told Git to ignore deletion, which you can do | |
40 | with "git diff-files --diff-filter=d"). | |
41 | ||
3f09db07 JH |
42 | "git request-pull" lost a few "heuristics" that often led to mistakes. |
43 | ||
779792a5 JH |
44 | The default prefix for "git svn" has changed in Git 2.0. For a long |
45 | time, "git svn" created its remote-tracking branches directly under | |
46 | refs/remotes, but it now places them under refs/remotes/origin/ unless | |
47 | it is told otherwise with its --prefix option. | |
48 | ||
384364b5 JH |
49 | |
50 | Updates since v1.9 series | |
51 | ------------------------- | |
52 | ||
3f09db07 | 53 | UI, Workflows & Features |
384364b5 | 54 | |
3f0c02a1 JH |
55 | * The "multi-mail" post-receive hook (in contrib/) has been updated |
56 | to a more recent version from the upstream. | |
57 | ||
82edd396 JH |
58 | * "git gc --aggressive" learned "--depth" option and |
59 | "gc.aggressiveDepth" configuration variable to allow use of a less | |
60 | insane depth than the built-in default value of 250. | |
61 | ||
62 | * "git log" learned the "--show-linear-break" option to show where a | |
63 | single strand-of-pearls is broken in its output. | |
64 | ||
25d1ac0e JH |
65 | * The "rev-parse --parseopt" mechanism used by scripted Porcelains to |
66 | parse command line options and to give help text learned to take | |
67 | the argv-help (the placeholder string for an option parameter, | |
68 | e.g. "key-id" in "--gpg-sign=<key-id>"). | |
69 | ||
70 | * The pattern to find where the function begins in C/C++ used in | |
1c65d3b9 | 71 | "diff" and "grep -p" has been updated to help C++ source better. |
25d1ac0e | 72 | |
96e67c86 JH |
73 | * "git rebase" learned to interpret a lone "-" as "@{-1}", the |
74 | branch that we were previously on. | |
75 | ||
d393d140 JH |
76 | * "git commit --cleanup=<mode>" learned a new mode, scissors. |
77 | ||
3f09db07 JH |
78 | * "git tag --list" output can be sorted using "version sort" with |
79 | "--sort=version:refname". | |
384364b5 | 80 | |
3f09db07 JH |
81 | * Discard the accumulated "heuristics" to guess from which branch the |
82 | result wants to be pulled from and make sure what the end user | |
83 | specified is not second-guessed by "git request-pull", to avoid | |
84 | mistakes. When you pushed out your 'master' branch to your public | |
85 | repository as 'for-linus', use the new "master:for-linus" syntax to | |
86 | denote the branch to be pulled. | |
384364b5 | 87 | |
a35104fa JH |
88 | * "git grep" learned to behave in a way similar to native grep when |
89 | "-h" (no header) and "-c" (count) options are given. | |
90 | ||
779792a5 JH |
91 | * "git push" via transport-helper interface (e.g. remote-hg) has |
92 | been updated to allow ref deletion in a way similar to the natively | |
93 | supported transports. | |
a35104fa | 94 | |
384364b5 JH |
95 | * The "simple" mode is the default for "git push". |
96 | ||
97 | * "git add -u" and "git add -A", when run without any pathspec, is a | |
98 | tree-wide operation even when run inside a subdirectory of a | |
99 | working tree. | |
100 | ||
1c65d3b9 | 101 | * "git add <path>" is the same as "git add -A <path>" now. |
384364b5 JH |
102 | |
103 | * "core.statinfo" configuration variable, which is a | |
104 | never-advertised synonym to "core.checkstat", has been removed. | |
105 | ||
106 | * The "-q" option to "git diff-files", which does *NOT* mean | |
107 | "quiet", has been removed (it told Git to ignore deletion, which | |
108 | you can do with "git diff-files --diff-filter=d"). | |
109 | ||
00eda232 JH |
110 | * Server operators can loosen the "tips of refs only" restriction for |
111 | the remote archive service with the uploadarchive.allowUnreachable | |
112 | configuration option. | |
113 | ||
114 | * The progress indicators from various time-consuming commands have | |
115 | been marked for i18n/l10n. | |
116 | ||
117 | * "git notes -C <blob>" diagnoses an attempt to use an object that | |
118 | is not a blob as an error. | |
119 | ||
120 | * "git config" learned to read from the standard input when "-" is | |
121 | given as the value to its "--file" parameter (attempting an | |
122 | operation to update the configuration in the standard input of | |
123 | course is rejected). | |
124 | ||
125 | * Trailing whitespaces in .gitignore files, unless they are quoted | |
126 | for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly | |
127 | speaking, this is a backward incompatible change, but very unlikely | |
128 | to bite any sane user and adjusting should be obvious and easy. | |
129 | ||
130 | * Many commands that create commits, e.g. "pull", "rebase", | |
384364b5 JH |
131 | learned to take the --gpg-sign option on the command line. |
132 | ||
133 | * "git commit" can be told to always GPG sign the resulting commit | |
134 | by setting "commit.gpgsign" configuration variable to true (the | |
135 | command line option --no-gpg-sign should override it). | |
136 | ||
137 | * "git pull" can be told to only accept fast-forward by setting the | |
138 | new "pull.ff" configuration. | |
139 | ||
1c65d3b9 | 140 | * "git reset" learned the "-N" option, which does not reset the index |
384364b5 JH |
141 | fully for paths the index knows about but the tree-ish the command |
142 | resets to does not (these paths are kept as intend-to-add entries). | |
143 | ||
384364b5 JH |
144 | |
145 | Performance, Internal Implementation, etc. | |
146 | ||
7bf272cc JH |
147 | * The compilation options to port to AIX and to MSVC have been |
148 | updated. | |
82edd396 | 149 | |
00eda232 JH |
150 | * We started using wildmatch() in place of fnmatch(3) a few releases |
151 | ago; complete the process and stop using fnmatch(3). | |
152 | ||
153 | * Uses of curl's "multi" interface and "easy" interface do not mix | |
154 | well when we attempt to reuse outgoing connections. Teach the RPC | |
155 | over http code, used in the smart HTTP transport, not to use the | |
156 | "easy" interface. | |
157 | ||
384364b5 | 158 | * The bitmap-index feature from JGit has been ported, which should |
1c65d3b9 | 159 | significantly improve performance when serving objects from a |
384364b5 JH |
160 | repository that uses it. |
161 | ||
162 | * The way "git log --cc" shows a combined diff against multiple | |
1c65d3b9 | 163 | parents has been optimized. |
384364b5 JH |
164 | |
165 | * The prefixcmp() and suffixcmp() functions are gone. Use | |
166 | starts_with() and ends_with(), and also consider if skip_prefix() | |
167 | suits your needs better when using the former. | |
168 | ||
169 | ||
00eda232 JH |
170 | Also contains various documentation updates and code clean-ups. Many |
171 | of them came from flurry of activities as GSoC candidate microproject | |
172 | exercises. | |
384364b5 JH |
173 | |
174 | ||
175 | Fixes since v1.9 series | |
176 | ----------------------- | |
177 | ||
178 | Unless otherwise noted, all the fixes since v1.9 in the maintenance | |
179 | track are contained in this release (see the maintenance releases' | |
180 | notes for details). | |
181 | ||
b4f86a4c JH |
182 | * The shell prompt script (in contrib/), when using the PROMPT_COMMAND |
183 | interface, used an unsafe construct when showing the branch name in | |
184 | $PS1. | |
185 | (merge 8976500 rh/prompt-pcmode-avoid-eval-on-refname later to maint). | |
186 | ||
187 | * The remote-helper interface to fast-import/fast-export via the | |
35936f8f JH |
188 | transport-helper has been tightened to avoid leaving the import |
189 | marks file from a failed/crashed run, as such a file that is out of | |
190 | sync with the reality confuses a later invocation of itself. | |
191 | ||
779792a5 JH |
192 | * "git rebase" used a POSIX shell construct FreeBSD /bin/sh does not |
193 | work well with. | |
194 | (merge 8cd6596 km/avoid-non-function-return-in-rebase later to maint). | |
195 | ||
cc291953 JH |
196 | * zsh prompt (in contrib/) leaked unnecessary error messages. |
197 | ||
198 | * bash completion (in contrib/) did not complete the refs and remotes | |
199 | correctly given "git pu<TAB>" when "pu" is aliased to "push". | |
200 | ||
3f0c02a1 JH |
201 | * Some more Unicode codepoints defined in Unicode 6.3 as having zero |
202 | width have been taught to our display column counting logic. | |
203 | (merge d813ab9 tb/unicode-6.3-zero-width later to maint). | |
204 | ||
205 | * Some tests used shell constructs that did not work well on FreeBSD | |
206 | (merge ff7a1c6 km/avoid-bs-in-shell-glob later to maint). | |
207 | (merge 00764ca km/avoid-cp-a later to maint). | |
208 | ||
7bf272cc JH |
209 | * "git update-ref --stdin" did not fail a request to create a ref |
210 | when the ref already existed. | |
211 | (merge b9d56b5 mh/update-ref-batch-create-fix later to maint). | |
212 | ||
82edd396 JH |
213 | * "git diff --no-index -Mq a b" fell into an infinite loop. |
214 | (merge ad1c3fb jc/fix-diff-no-index-diff-opt-parse later to maint). | |
215 | ||
216 | * "git fetch --prune", when the right-hand-side of multiple fetch | |
217 | refspecs overlap (e.g. storing "refs/heads/*" to | |
218 | "refs/remotes/origin/*", while storing "refs/frotz/*" to | |
219 | "refs/remotes/origin/fr/*"), aggressively thought that lack of | |
220 | "refs/heads/fr/otz" on the origin site meant we should remove | |
221 | "refs/remotes/origin/fr/otz" from us, without checking their | |
222 | "refs/frotz/otz" first. | |
223 | ||
224 | Note that such a configuration is inherently unsafe (think what | |
225 | should happen when "refs/heads/fr/otz" does appear on the origin | |
226 | site), but that is not a reason not to be extra careful. | |
227 | (merge e6f6371 cn/fetch-prune-overlapping-destination later to maint). | |
228 | ||
25d1ac0e JH |
229 | * "git status --porcelain --branch" showed its output with labels |
230 | "ahead/behind/gone" translated to the user's locale. | |
231 | (merge 7a76c28 mm/status-porcelain-format-i18n-fix later to maint). | |
232 | ||
96e67c86 JH |
233 | * A stray environment variable $prefix could have leaked into and |
234 | affected the behaviour of the "subtree" script (in contrib/). | |
235 | ||
96e67c86 JH |
236 | * When it is not necessary to edit a commit log message (e.g. "git |
237 | commit -m" is given a message without specifying "-e"), we used to | |
238 | disable the spawning of the editor by overriding GIT_EDITOR, but | |
239 | this means all the uses of the editor, other than to edit the | |
240 | commit log message, are also affected. | |
241 | (merge b549be0 bp/commit-p-editor later to maint). | |
242 | ||
d393d140 JH |
243 | * "git mv" that moves a submodule forgot to adjust the array that |
244 | uses to keep track of which submodules were to be moved to update | |
245 | its configuration. | |
246 | (merge fb8a4e8 jk/mv-submodules-fix later to maint). | |
247 | ||
248 | * Length limit for the pathname used when removing a path in a deep | |
249 | subdirectory has been removed to avoid buffer overflows. | |
250 | (merge 2f29e0c mh/remove-subtree-long-pathname-fix later to maint). | |
251 | ||
252 | * The test helper lib-terminal always run an actual test_expect_* | |
253 | when included, which screwed up with the use of skil-all that may | |
254 | have to be done later. | |
255 | (merge 7e27173 jk/lib-terminal-lazy later to maint). | |
256 | ||
257 | * "git index-pack" used a wrong variable to name the keep-file in an | |
258 | error message when the file cannot be written or closed. | |
259 | (merge de983a0 nd/index-pack-error-message later to maint). | |
260 | ||
261 | * "rebase -i" produced a broken insn sheet when the title of a commit | |
262 | happened to contain '\n' (or ended with '\c') due to a careless use | |
263 | of 'echo'. | |
264 | (merge cb1aefd us/printf-not-echo later to maint). | |
265 | ||
266 | * There were a few instances of 'git-foo' remaining in the | |
267 | documentation that should have been spelled 'git foo'. | |
268 | (merge 3c3e6f5 rr/doc-merge-strategies later to maint). | |
269 | ||
3f09db07 JH |
270 | * Serving objects from a shallow repository needs to write a |
271 | new file to hold the temporary shallow boundaries but it was not | |
272 | cleaned when we exit due to die() or a signal. | |
273 | (merge 7839632 jk/shallow-update-fix later to maint). | |
274 | ||
275 | * When "git stash pop" stops after failing to apply the stash | |
276 | (e.g. due to conflicting changes), the stash is not dropped. State | |
277 | that explicitly in the output to let the users know. | |
278 | (merge 2d4c993 jc/stash-pop-not-popped later to maint). | |
279 | ||
280 | * The labels in "git status" output that describe the nature of | |
281 | conflicts (e.g. "both deleted") were limited to 20 bytes, which was | |
282 | too short for some l10n (e.g. fr). | |
283 | (merge c7cb333 jn/wt-status later to maint). | |
284 | ||
a35104fa JH |
285 | * "git clean -d pathspec" did not use the given pathspec correctly |
286 | and ended up cleaning too much. | |
287 | (merge 1f2e108 jk/clean-d-pathspec later to maint). | |
288 | ||
00eda232 JH |
289 | * "git difftool" misbehaved when the repository is bound to the |
290 | working tree with the ".git file" mechanism, where a textual file | |
291 | ".git" tells us where it is. | |
292 | (merge fcfec8b da/difftool-git-files later to maint). | |
293 | ||
294 | * "git push" did not pay attention to branch.*.pushremote if it is | |
295 | defined earlier than remote.pushdefault; the order of these two | |
296 | variables in the configuration file should not matter, but it did | |
297 | by mistake. | |
298 | (merge 98b406f jk/remote-pushremote-config-reading later to maint). | |
299 | ||
300 | * Codepaths that parse timestamps in commit objects have been | |
301 | tightened. | |
7bf272cc | 302 | (merge f80d1f9 jk/commit-dates-parsing-fix later to maint). |
00eda232 JH |
303 | |
304 | * "git diff --external-diff" incorrectly fed the submodule directory | |
305 | in the working tree to the external diff driver when it knew it is | |
306 | the same as one of the versions being compared. | |
307 | (merge aba4727 tr/diff-submodule-no-reuse-worktree later to maint). | |
308 | ||
309 | * "git reset" needs to refresh the index when working in a working | |
310 | tree (it can also be used to match the index to the HEAD in an | |
311 | otherwise bare repository), but it failed to set up the working | |
312 | tree properly, causing GIT_WORK_TREE to be ignored. | |
313 | (merge b7756d4 nd/reset-setup-worktree later to maint). | |
314 | ||
315 | * "git check-attr" when working on a repository with a working tree | |
316 | did not work well when the working tree was specified via the | |
317 | --work-tree (and obviously with --git-dir) option. | |
318 | (merge cdbf623 jc/check-attr-honor-working-tree later to maint). | |
319 | ||
384364b5 JH |
320 | * "merge-recursive" was broken in 1.7.7 era and stopped working in |
321 | an empty (temporary) working tree, when there are renames | |
322 | involved. This has been corrected. | |
323 | (merge 6e2068a bk/refresh-missing-ok-in-merge-recursive later to maint.) | |
324 | ||
325 | * "git rev-parse" was loose in rejecting command line arguments | |
326 | that do not make sense, e.g. "--default" without the required | |
327 | value for that option. | |
328 | (merge a43219f ds/rev-parse-required-args later to maint.) | |
329 | ||
330 | * include.path variable (or any variable that expects a path that | |
331 | can use ~username expansion) in the configuration file is not a | |
332 | boolean, but the code failed to check it. | |
333 | (merge 67beb60 jk/config-path-include-fix later to maint.) | |
334 | ||
335 | * Commands that take pathspecs on the command line misbehaved when | |
336 | the pathspec is given as an absolute pathname (which is a | |
337 | practice not particularly encouraged) that points at a symbolic | |
338 | link in the working tree. | |
339 | (merge later 655ee9e mw/symlinks to maint.) | |
340 | ||
341 | * "git diff --quiet -- pathspec1 pathspec2" sometimes did not return | |
342 | correct status value. | |
343 | (merge f34b205 nd/diff-quiet-stat-dirty later to maint.) | |
344 | ||
345 | * Attempting to deepen a shallow repository by fetching over smart | |
346 | HTTP transport failed in the protocol exchange, when no-done | |
347 | extension was used. The fetching side waited for the list of | |
348 | shallow boundary commits after the sending end stopped talking to | |
349 | it. | |
350 | (merge 0232852 nd/http-fetch-shallow-fix later to maint.) | |
351 | ||
352 | * Allow "git cmd path/", when the 'path' is where a submodule is | |
353 | bound to the top-level working tree, to match 'path', despite the | |
354 | extra and unnecessary trailing slash (such a slash is often | |
355 | given by command line completion). | |
356 | (merge 2e70c01 nd/submodule-pathspec-ending-with-slash later to maint.) | |
7bf272cc JH |
357 | |
358 | * Documentation and in-code comments had many instances of mistaken | |
359 | use of "nor", which have been corrected. | |
360 | (merge 235e8d5 jl/nor-or-nand-and later to maint). |