]>
Commit | Line | Data |
---|---|---|
077f4344 JH |
1 | Git v1.9 Release Notes |
2 | ====================== | |
3 | ||
4 | Backward compatibility notes | |
5 | ---------------------------- | |
6 | ||
7 | "git submodule foreach $cmd $args" used to treat "$cmd $args" the same | |
8 | way "ssh" did, concatenating them into a single string and letting the | |
9 | shell unquote. Careless users who forget to sufficiently quote $args | |
10 | gets their argument split at $IFS whitespaces by the shell, and got | |
11 | unexpected results due to this. Starting from this release, the | |
12 | command line is passed directly to the shell, if it has an argument. | |
13 | ||
14 | Read-only support for experimental loose-object format, in which users | |
15 | could optionally choose to write in their loose objects for a short | |
16 | while between v1.4.3 to v1.5.3 era, has been dropped. | |
17 | ||
d7aced95 JH |
18 | The meanings of "--tags" option to "git fetch" has changed; the |
19 | command fetches tags _in addition to_ what are fetched by the same | |
20 | command line without the option. | |
21 | ||
a25014bc JH |
22 | The way "git push $there $what" interprets $what part given on the |
23 | command line, when it does not have a colon that explicitly tells us | |
24 | what ref at the $there repository is to be updated, has been enhanced. | |
25 | ||
d7aced95 JH |
26 | A handful of ancient commands that have long been deprecated are |
27 | finally gone (repo-config, tar-tree, lost-found, and peek-remote). | |
28 | ||
077f4344 JH |
29 | |
30 | Backward compatibility notes (for Git 2.0) | |
31 | ------------------------------------------ | |
32 | ||
33 | When "git push [$there]" does not say what to push, we have used the | |
34 | traditional "matching" semantics so far (all your branches were sent | |
35 | to the remote as long as there already are branches of the same name | |
36 | over there). In Git 2.0, the default will change to the "simple" | |
37 | semantics, which pushes: | |
38 | ||
39 | - only the current branch to the branch with the same name, and only | |
40 | when the current branch is set to integrate with that remote | |
41 | branch, if you are pushing to the same remote as you fetch from; or | |
42 | ||
43 | - only the current branch to the branch with the same name, if you | |
44 | are pushing to a remote that is not where you usually fetch from. | |
45 | ||
46 | Use the user preference configuration variable "push.default" to | |
47 | change this. If you are an old-timer who is used to the "matching" | |
48 | semantics, you can set the variable to "matching" to keep the | |
49 | traditional behaviour. If you want to live in the future early, you | |
50 | can set it to "simple" today without waiting for Git 2.0. | |
51 | ||
52 | When "git add -u" (and "git add -A") is run inside a subdirectory and | |
53 | does not specify which paths to add on the command line, it | |
54 | will operate on the entire tree in Git 2.0 for consistency | |
55 | with "git commit -a" and other commands. There will be no | |
56 | mechanism to make plain "git add -u" behave like "git add -u .". | |
57 | Current users of "git add -u" (without a pathspec) should start | |
58 | training their fingers to explicitly say "git add -u ." | |
59 | before Git 2.0 comes. A warning is issued when these commands are | |
60 | run without a pathspec and when you have local changes outside the | |
61 | current directory, because the behaviour in Git 2.0 will be different | |
62 | from today's version in such a situation. | |
63 | ||
64 | In Git 2.0, "git add <path>" will behave as "git add -A <path>", so | |
65 | that "git add dir/" will notice paths you removed from the directory | |
66 | and record the removal. Versions before Git 2.0, including this | |
67 | release, will keep ignoring removals, but the users who rely on this | |
68 | behaviour are encouraged to start using "git add --ignore-removal <path>" | |
69 | now before 2.0 is released. | |
70 | ||
71 | The default prefix for "git svn" will change in Git 2.0. For a long | |
72 | time, "git svn" created its remote-tracking branches directly under | |
73 | refs/remotes, but it will place them under refs/remotes/origin/ unless | |
74 | it is told otherwise with its --prefix option. | |
75 | ||
76 | ||
77 | Updates since v1.8.5 | |
78 | -------------------- | |
79 | ||
80 | Foreign interfaces, subsystems and ports. | |
81 | ||
d7aced95 | 82 | * The HTTP transport, when talking GSS-Negotiate, uses "100 |
077f4344 JH |
83 | Continue" response to avoid having to rewind and resend a large |
84 | payload, which may not be always doable. | |
85 | ||
86 | * Various bugfixes to remote-bzr and remote-hg (in contrib/). | |
87 | ||
a25014bc JH |
88 | * The build procedure is aware of MirBSD now. |
89 | ||
077f4344 JH |
90 | |
91 | UI, Workflows & Features | |
92 | ||
79fcbf7e JH |
93 | * Fetching from a shallowly-cloned repository used to be forbidden, |
94 | primarily because the codepaths involved were not carefully vetted | |
95 | and we did not bother supporting such usage. This release attempts | |
96 | to allow object transfer out of a shallowly-cloned repository in a | |
97 | more controlled way (i.e. the receiver become a shallow repository | |
98 | with a truncated history). | |
99 | ||
864085aa JH |
100 | * Just like we give a reasonable default for "less" via the LESS |
101 | environment variable, we now specify a reasonable default for "lv" | |
102 | via the "LV" environment variable when spawning the pager. | |
103 | ||
a25014bc JH |
104 | * Two-level configuration variable names in "branch.*" and "remote.*" |
105 | hierarchies, whose variables are predominantly three-level, were | |
106 | not completed by hitting a <TAB> in bash and zsh completions. | |
107 | ||
108 | * Fetching 'frotz' branch with "git fetch", while 'frotz/nitfol' | |
109 | remote-tracking branch from an earlier fetch was still there, would | |
110 | error out, primarily because the command was not told that it is | |
111 | allowed to lose any information on our side. "git fetch --prune" | |
112 | now can be used to remove 'frotz/nitfol' to make room to fetch and | |
113 | store 'frotz' remote-tracking branch. | |
114 | ||
115 | * "diff.orderfile=<file>" configuration variable can be used to | |
116 | pretend as if the "-O<file>" option were given from the command | |
117 | line of "git diff", etc. | |
118 | ||
119 | * The negative pathspec syntax allows "git log -- . ':!dir'" to tell | |
120 | us "I am interested in everything but 'dir' directory". | |
121 | ||
122 | * "git difftool" shows how many different paths there are in total, | |
123 | and how many of them have been shown so far, to indicate progress. | |
124 | ||
125 | * "git push origin master" used to push our 'master' branch to update | |
126 | the 'master' branch at the 'origin' repository. This has been | |
127 | enhanced to use the same ref mapping "git push origin" would use to | |
128 | determine what ref at the 'origin' to be updated with our 'master'. | |
129 | For example, with this configuration | |
130 | ||
131 | [remote "origin"] | |
132 | push = refs/heads/*:refs/review/* | |
133 | ||
134 | that would cause "git push origin" to push out our local branches | |
135 | to corresponding refs under refs/review/ hierarchy at 'origin', | |
136 | "git push origin master" would update 'refs/review/master' over | |
137 | there. Alternatively, if push.default is set to 'upstream' and our | |
138 | 'master' is set to integrate with 'topic' from the 'origin' branch, | |
139 | running "git push origin" while on our 'master' would update their | |
140 | 'topic' branch, and running "git push origin master" while on any | |
141 | of our branches does the same. | |
142 | ||
b10cd577 JH |
143 | * "gitweb" learned to treat ref hierarchies other than refs/heads as |
144 | if they are additional branch namespaces (e.g. refs/changes/ in | |
145 | Gerrit). | |
146 | ||
077f4344 JH |
147 | * "git for-each-ref --format=..." learned a few formatting directives; |
148 | e.g. "%(color:red)%(HEAD)%(color:reset) %(refname:short) %(subject)". | |
149 | ||
150 | * The command string given to "git submodule foreach" is passed | |
151 | directly to the shell, without being eval'ed. This is a backward | |
152 | incompatible change that may break existing users. | |
153 | ||
154 | * "git log" and friends learned the "--exclude=<glob>" option, to | |
155 | allow people to say "list history of all branches except those that | |
156 | match this pattern" with "git log --exclude='*/*' --branches". | |
157 | ||
158 | * "git rev-parse --parseopt" learned a new "--stuck-long" option to | |
159 | help scripts parse options with an optional parameter. | |
160 | ||
d7aced95 JH |
161 | * The "--tags" option to "git fetch" no longer tells the command to |
162 | fetch _only_ the tags. It instead fetches tags _in addition to_ | |
163 | what are fetched by the same command line without the option. | |
164 | ||
077f4344 JH |
165 | |
166 | Performance, Internal Implementation, etc. | |
167 | ||
864085aa JH |
168 | * When parsing a 40-hex string into the object name, the string is |
169 | checked to see if it can be interpreted as a ref so that a warning | |
170 | can be given for ambiguity. The code kicked in even when the | |
171 | core.warnambiguousrefs is set to false to squelch this warning, in | |
172 | which case the cycles spent to look at the ref namespace were an | |
173 | expensive no-op, as the result was discarded without being used. | |
174 | ||
a25014bc JH |
175 | * The naming convention of the packfiles has been updated; it used to |
176 | be based on the enumeration of names of the objects that are | |
177 | contained in the pack, but now it also depends on how the packed | |
178 | result is represented---packing the same set of objects using | |
179 | different settings (or delta order) would produce a pack with | |
180 | different name. | |
181 | ||
182 | * "git diff --no-index" mode used to unnecessarily attempt to read | |
183 | the index when there is one. | |
184 | ||
b10cd577 JH |
185 | * The deprecated parse-options macro OPT_BOOLEAN has been removed; |
186 | use OPT_BOOL or OPT_COUNTUP in new code. | |
187 | ||
188 | * A few duplicate implementations of prefix/suffix string comparison | |
189 | functions have been unified to starts_with() and ends_with(). | |
190 | ||
077f4344 JH |
191 | * The new PERLLIB_EXTRA makefile variable can be used to specify |
192 | additional directories Perl modules (e.g. the ones necessary to run | |
193 | git-svn) are installed on the platform when building. | |
194 | ||
195 | * "git merge-base" learned the "--fork-point" mode, that implements | |
196 | the same logic used in "git pull --rebase" to find a suitable fork | |
197 | point out of the reflog entries for the remote-tracking branch the | |
a25014bc JH |
198 | work has been based on. "git rebase" has the same logic that can be |
199 | triggered with the "--fork-point" option. | |
077f4344 | 200 | |
d7aced95 JH |
201 | * A third-party "receive-pack" (the responder to "git push") can |
202 | advertise the "no-thin" capability to tell "git push" not to use | |
203 | the thin-pack optimization. Our receive-pack has always been | |
204 | capable of accepting and fattening a thin-pack, and will continue | |
205 | not to ask "git push" to use a non-thin pack. | |
077f4344 JH |
206 | |
207 | ||
208 | Also contains various documentation updates and code clean-ups. | |
209 | ||
210 | ||
211 | Fixes since v1.8.5 | |
212 | ------------------ | |
213 | ||
214 | Unless otherwise noted, all the fixes since v1.8.5 in the maintenance | |
215 | track are contained in this release (see the maintenance releases' notes | |
216 | for details). | |
217 | ||
79fcbf7e JH |
218 | * "submodule.*.update=checkout", when propagated from .gitmodules to |
219 | .git/config, turned into a "submodule.*.update=none", which did not | |
220 | make much sense. | |
221 | (merge efa8fd7 fp/submodule-checkout-mode later to maint). | |
222 | ||
864085aa JH |
223 | * The implementation of 'git stash $cmd "stash@{...}"' did not quote |
224 | the stash argument properly and left it split at IFS whitespace. | |
225 | (merge 2a07e43 ow/stash-with-ifs later to maint). | |
226 | ||
a25014bc JH |
227 | * The "--[no-]informative-errors" options to "git daemon" were parsed |
228 | a bit too loosely, allowing any other string after these option | |
229 | names. | |
230 | (merge 82246b7 nd/daemon-informative-errors-typofix later to maint). | |
231 | ||
232 | * There is no reason to have a hardcoded upper limit of the number of | |
233 | parents for an octopus merge, created via the graft mechanism, but | |
234 | there was. | |
235 | (merge e228c17 js/lift-parent-count-limit later to maint). | |
236 | ||
237 | * The basic test used to leave unnecessary trash directories in the | |
238 | t/ directory. | |
239 | (merge 738a8be jk/test-framework-updates later to maint). | |
240 | ||
241 | * "git merge-base --octopus" used to leave cleaning up suboptimal | |
242 | result to the caller, but now it does the clean-up itself. | |
243 | (merge 8f29299 bm/merge-base-octopus-dedup later to maint). | |
244 | ||
245 | * A "gc" process running as a different user should be able to stop a | |
246 | new "gc" process from starting, but it didn't. | |
247 | (merge ed7eda8 km/gc-eperm later to maint). | |
248 | ||
249 | * An earlier "clean-up" introduced an unnecessary memory leak. | |
250 | (merge e1c1a32 jk/credential-plug-leak later to maint). | |
251 | ||
252 | * "git add -A" (no other arguments) in a totally empty working tree | |
253 | used to emit an error. | |
254 | (merge 64ed07c nd/add-empty-fix later to maint). | |
255 | ||
256 | * "git log --decorate" did not handle a tag pointed by another tag | |
257 | nicely. | |
258 | (merge 5e1361c bc/log-decoration later to maint). | |
259 | ||
260 | * When we figure out how many file descriptors to allocate for | |
261 | keeping packfiles open, a system with non-working getrlimit() could | |
262 | cause us to die(), but because we make this call only to get a | |
263 | rough estimate of how many is available and we do not even attempt | |
264 | to use up all file descriptors available ourselves, it is nicer to | |
265 | fall back to a reasonable low value rather than dying. | |
266 | (merge 491a8de jh/rlimit-nofile-fallback later to maint). | |
267 | ||
268 | * read_sha1_file(), that is the workhorse to read the contents given | |
269 | an object name, honoured object replacements, but there was no | |
270 | corresponding mechanism to sha1_object_info() that was used to | |
271 | obtain the metainfo (e.g. type & size) about the object. This led | |
272 | callers to weird inconsistencies. | |
273 | (merge 663a856 cc/replace-object-info later to maint). | |
274 | ||
275 | * "git cat-file --batch=", an admittedly useless command, did not | |
276 | behave very well. | |
277 | (merge 6554dfa jk/cat-file-regression-fix later to maint). | |
278 | ||
279 | * "git rev-parse <revs> -- <paths>" did not implement the usual | |
280 | disambiguation rules the commands in the "git log" family used in | |
281 | the same way. | |
282 | (merge 62f162f jk/rev-parse-double-dashes later to maint). | |
283 | ||
b10cd577 JH |
284 | * "git mv A B/", when B does not exist as a directory, should error |
285 | out, but it didn't. | |
286 | (merge c57f628 mm/mv-file-to-no-such-dir-with-slash later to maint). | |
287 | ||
288 | * A workaround to an old bug in glibc prior to glibc 2.17 has been | |
289 | retired; this would remove a side effect of the workaround that | |
290 | corrupts system error messages in non-C locales. | |
291 | ||
292 | * SSL-related options were not passed correctly to underlying socket | |
293 | layer in "git send-email". | |
294 | (merge 5508f3e tr/send-email-ssl later to maint). | |
295 | ||
296 | * "git commit -v" appends the patch to the log message before | |
297 | editing, and then removes the patch when the editor returned | |
298 | control. However, the patch was not stripped correctly when the | |
299 | first modified path was a submodule. | |
300 | (merge 1a72cfd jl/commit-v-strip-marker later to maint). | |
301 | ||
302 | * "git fetch --depth=0" was a no-op, and was silently ignored. | |
303 | Diagnose it as an error. | |
304 | (merge 5594bca nd/transport-positive-depth-only later to maint). | |
305 | ||
306 | * Remote repository URL expressed in scp-style host:path notation are | |
307 | parsed more carefully (e.g. "foo/bar:baz" is local, "[::1]:/~user" asks | |
308 | to connect to user's home directory on host at address ::1. | |
309 | (merge a2036d7 tb/clone-ssh-with-colon-for-port later to maint). | |
310 | ||
077f4344 JH |
311 | * "git diff -- ':(icase)makefile'" was unnecessarily rejected at the |
312 | command line parser. | |
313 | (merge 887c6c1 nd/magic-pathspec later to maint). | |
314 | ||
315 | * "git cat-file --batch-check=ok" did not check the existence of | |
316 | the named object. | |
317 | (merge 4ef8d1d sb/sha1-loose-object-info-check-existence later to maint). | |
318 | ||
319 | * "git am --abort" sometimes complained about not being able to write | |
320 | a tree with an 0{40} object in it. | |
321 | (merge 77b43ca jk/two-way-merge-corner-case-fix later to maint). | |
322 | ||
323 | * Two processes creating loose objects at the same time could have | |
324 | failed unnecessarily when the name of their new objects started | |
325 | with the same byte value, due to a race condition. | |
326 | (merge b2476a6 jh/loose-object-dirs-creation-race later to maint). |