]>
Commit | Line | Data |
---|---|---|
24a00ef6 JH |
1 | Git 2.7 Release Notes |
2 | ===================== | |
3 | ||
4 | Updates since v2.6 | |
5 | ------------------ | |
6 | ||
7 | UI, Workflows & Features | |
8 | ||
1d88dab4 JH |
9 | * The appearance of "gitk", particularly on high DPI monitors, have |
10 | been improved. "gitk" also comes with an undated translation for | |
11 | Swedish and Japanese. | |
12 | ||
24a00ef6 JH |
13 | * "git remote" learned "get-url" subcommand to show the URL for a |
14 | given remote name used for fetching and pushing. | |
15 | ||
16 | * There was no way to defeat a configured rebase.autostash variable | |
17 | from the command line, as "git rebase --no-autostash" was missing. | |
18 | ||
19 | * "git log --date=local" used to only show the normal (default) | |
20 | format in the local timezone. The command learned to take 'local' | |
21 | as an instruction to use the local timezone with other formats, | |
22 | ||
23 | * The refs used during a "git bisect" session is now per-worktree so | |
24 | that independent bisect sessions can be done in different worktrees | |
25 | created with "git worktree add". | |
26 | ||
27 | * Users who are too busy to type three extra keystrokes to ask for | |
28 | "git stash show -p" can now set stash.showPatch configuration | |
1d88dab4 | 29 | variable to true to always see the actual patch, not just the list |
24a00ef6 JH |
30 | of paths affected with feel for the extent of damage via diffstat. |
31 | ||
32 | * "quiltimport" allows to specify the series file by honoring the | |
33 | $QUILT_SERIES environment and also --series command line option. | |
34 | ||
35 | * The use of 'good/bad' in "git bisect" made it confusing to use when | |
36 | hunting for a state change that is not a regression (e.g. bugfix). | |
37 | The command learned 'old/new' and then allows the end user to | |
906c32b9 | 38 | say e.g. "bisect start --term-old=fast --term-new=slow" to find a |
24a00ef6 JH |
39 | performance regression. |
40 | ||
41 | * "git interpret-trailers" can now run outside of a Git repository. | |
42 | ||
031fd4b9 | 43 | * "git p4" learned to re-encode the pathname it uses to communicate |
f5b60798 JH |
44 | with the p4 depot with a new option. |
45 | ||
46 | * Give progress meter to "git filter-branch". | |
47 | ||
48 | * Allow a later "!/abc/def" to override an earlier "/abc" that | |
49 | appears in the same .gitignore file to make it easier to express | |
50 | "everything in /abc directory is ignored, except for ...". | |
51 | ||
a838ae9d JH |
52 | * Teach "git p4" to send large blobs outside the repository by |
53 | talking to Git LFS. | |
54 | ||
37023ba3 JH |
55 | * Prepare for Git on-disk repository representation to undergo |
56 | backward incompatible changes by introducing a new repository | |
57 | format version "1", with an extension mechanism. | |
37023ba3 JH |
58 | |
59 | * "git worktree" learned a "list" subcommand. | |
60 | ||
2635c2b8 JH |
61 | * "git clone --dissociate" learned that it can be used even when |
62 | "--reference" was not used at the same time. | |
63 | ||
c29024e5 JH |
64 | * "git blame" learnt to take "--first-parent" and "--reverse" at the |
65 | same time when it makes sense. | |
66 | ||
f34be46e JH |
67 | * "git checkout" did not follow the usual "--[no-]progress" |
68 | convention and implemented only "--quiet" that is essentially | |
69 | a superset of "--no-progress". Extend the command to support the | |
70 | usual "--[no-]progress". | |
71 | ||
1d88dab4 | 72 | * The semantics of transfer.hideRefs configuration variable have been |
9ed86a5d JH |
73 | extended to work better with the ref "namespace" feature that lets |
74 | you throw unrelated bunches of repositories in a single physical | |
75 | repository and virtually serve them as separate ones. | |
76 | ||
77 | * send-email config variables whose values are pathnames now go | |
78 | through the ~username/ expansion. | |
79 | ||
80 | * bash completion learnt to TAB-complete recipient addresses given | |
81 | to send-email. | |
82 | ||
83 | * The credential-cache daemon can be told to ignore SIGHUP to work | |
84 | around issue when running Git from inside emacs. | |
85 | ||
1d88dab4 JH |
86 | * "git push" learned new configuration for doing "--recurse-submodules" |
87 | on each push. | |
88 | ||
89 | * "format-patch" has learned a new option to zero-out the commit | |
90 | object name on the mbox "From " line. | |
91 | ||
24a00ef6 JH |
92 | |
93 | Performance, Internal Implementation, Development Support etc. | |
94 | ||
95 | * The infrastructure to rewrite "git submodule" in C is being built | |
96 | incrementally. Let's polish these early parts well enough and make | |
97 | them graduate to 'next' and 'master', so that the more involved | |
98 | follow-up can start cooking on a solid ground. | |
99 | ||
100 | * Some features from "git tag -l" and "git branch -l" have been made | |
101 | available to "git for-each-ref" so that eventually the unified | |
37023ba3 JH |
102 | implementation can be shared across all three. The version merged |
103 | to the 'master' branch earlier had a performance regression in "tag | |
104 | --contains", which has since been corrected. | |
24a00ef6 JH |
105 | |
106 | * Because "test_when_finished" in our test framework queues the | |
107 | clean-up tasks to be done in a shell variable, it should not be | |
108 | used inside a subshell. Add a mechanism to allow 'bash' to catch | |
109 | such uses, and fix the ones that were found. | |
24a00ef6 JH |
110 | |
111 | * The debugging infrastructure for pkt-line based communication has | |
112 | been improved to mark the side-band communication specifically. | |
24a00ef6 | 113 | |
a838ae9d JH |
114 | * Update "git branch" that list existing branches, using the |
115 | ref-filter API that is shared with "git tag" and "git | |
116 | for-each-ref". | |
117 | ||
bca92e88 JH |
118 | * The test for various line-ending conversions has been enhanced. |
119 | ||
120 | * A few test scripts around "git p4" have been improved for | |
121 | portability. | |
122 | ||
123 | * Many allocations that is manually counted (correctly) that are | |
124 | followed by strcpy/sprintf have been replaced with a less error | |
125 | prone constructs such as xstrfmt. | |
126 | ||
37023ba3 JH |
127 | * The internal stripspace() function has been moved to where it |
128 | logically belongs to, i.e. strbuf API, and the command line parser | |
129 | of "git stripspace" has been updated to use the parse_options API. | |
37023ba3 | 130 | |
80980a1d JH |
131 | * "git am" used to spawn "git mailinfo" via run_command() API once |
132 | per each patch, but learned to make a direct call to mailinfo() | |
133 | instead. | |
134 | ||
135 | * The implementation of "git mailinfo" was refactored so that a | |
136 | mailinfo() function can be directly called from inside a process. | |
137 | ||
c29024e5 JH |
138 | * With a "debug" helper, debugging of a single "git" invocation in |
139 | our test scripts has become a lot easier. | |
140 | ||
9ed86a5d JH |
141 | * The "configure" script did not test for -lpthread correctly, which |
142 | upset some linkers. | |
143 | ||
144 | * Cross completed task off of subtree project's todo list. | |
145 | ||
146 | * Test cleanups for the subtree project. | |
147 | ||
148 | * Clean up style in an ancient test t9300. | |
149 | ||
150 | * Work around some test flakiness with p4d. | |
151 | ||
152 | * Fsck did not correctly detect a NUL-truncated header in a tag. | |
153 | ||
154 | * Use a safer behavior when we hit errors verifying remote certificates. | |
155 | ||
156 | * Speed up filter-branch for cases where we only care about rewriting | |
157 | commits, not tree data. | |
158 | ||
159 | * The parse-options API has been updated to make "-h" command line | |
160 | option work more consistently in all commands. | |
161 | ||
162 | * "git svn rebase/mkdirs" got optimized by keeping track of empty | |
163 | directories better. | |
164 | ||
86c95ac5 JH |
165 | * Fix some racy client/server tests by treating SIGPIPE the same as a |
166 | normal non-zero exit. | |
167 | ||
168 | * The necessary infrastructure to build topics using the free Travis | |
169 | CI has been added. Developers forking from this topic (and enabling | |
170 | Travis) can do their own builds, and we can turn on auto-builds for | |
171 | git/git (including build-status for pull requests that people | |
172 | open). | |
173 | ||
554f6e41 JH |
174 | * The write(2) emulation for Windows learned to set errno to EPIPE |
175 | when necessary. | |
176 | ||
24a00ef6 JH |
177 | |
178 | Also contains various documentation updates and code clean-ups. | |
179 | ||
180 | ||
181 | Fixes since v2.6 | |
182 | ---------------- | |
183 | ||
184 | Unless otherwise noted, all the fixes since v2.6 in the maintenance | |
185 | track are contained in this release (see the maintenance releases' | |
186 | notes for details). | |
187 | ||
188 | * Very small number of options take a parameter that is optional | |
189 | (which is not a great UI element as they can only appear at the end | |
190 | of the command line). Add notice to documentation of each and | |
191 | every one of them. | |
24a00ef6 JH |
192 | |
193 | * "git blame --first-parent v1.0..v2.0" was not rejected but did not | |
194 | limit the blame to commits on the first parent chain. | |
24a00ef6 JH |
195 | |
196 | * "git subtree" (in contrib/) now can take whitespaces in the | |
197 | pathnames, not only in the in-tree pathname but the name of the | |
4b9ab0ee | 198 | directory that the repository is in. |
24a00ef6 JH |
199 | |
200 | * The ssh transport, just like any other transport over the network, | |
201 | did not clear GIT_* environment variables, but it is possible to | |
202 | use SendEnv and AcceptEnv to leak them to the remote invocation of | |
203 | Git, which is not a good idea at all. Explicitly clear them just | |
204 | like we do for the local transport. | |
24a00ef6 JH |
205 | |
206 | * Correct "git p4 --detect-labels" so that it does not fail to create | |
207 | a tag that points at a commit that is also being imported. | |
24a00ef6 JH |
208 | |
209 | * The Makefile always runs the library archiver with hardcoded "crs" | |
210 | options, which was inconvenient for exotic platforms on which | |
211 | people want to use programs with totally different set of command | |
212 | line options. | |
24a00ef6 JH |
213 | |
214 | * Customization to change the behaviour with "make -w" and "make -s" | |
215 | in our Makefile was broken when they were used together. | |
24a00ef6 | 216 | |
f5b60798 JH |
217 | * Allocation related functions and stdio are unsafe things to call |
218 | inside a signal handler, and indeed killing the pager can cause | |
219 | glibc to deadlock waiting on allocation mutex as our signal handler | |
220 | tries to free() some data structures in wait_for_pager(). Reduce | |
221 | these unsafe calls. | |
f5b60798 | 222 | |
b27dacc1 JH |
223 | * The way how --ref/--notes to specify the notes tree reference are |
224 | DWIMmed was not clearly documented. | |
b27dacc1 | 225 | |
a838ae9d JH |
226 | * "git gc" used to barf when a symbolic ref has gone dangling |
227 | (e.g. the branch that used to be your upstream's default when you | |
228 | cloned from it is now gone, and you did "fetch --prune"). | |
a838ae9d JH |
229 | |
230 | * "git clone --dissociate" runs a big "git repack" process at the | |
231 | end, and it helps to close file descriptors that are open on the | |
232 | packs and their idx files before doing so on filesystems that | |
233 | cannot remove a file that is still open. | |
a838ae9d JH |
234 | |
235 | * Description of the "log.follow" configuration variable in "git log" | |
236 | documentation is now also copied to "git config" documentation. | |
a838ae9d JH |
237 | |
238 | * "git rebase -i" had a minor regression recently, which stopped | |
239 | considering a line that begins with an indented '#' in its insn | |
2635c2b8 JH |
240 | sheet not a comment. Further, the code was still too picky on |
241 | Windows where CRLF left by the editor is turned into a trailing CR | |
242 | on the line read via the "read" built-in command of bash. Both of | |
243 | these issues are now fixed. | |
a838ae9d JH |
244 | |
245 | * After "git checkout --detach", "git status" reported a fairly | |
246 | useless "HEAD detached at HEAD", instead of saying at which exact | |
247 | commit. | |
a838ae9d JH |
248 | |
249 | * When "git send-email" wanted to talk over Net::SMTP::SSL, | |
250 | Net::Cmd::datasend() did not like to be fed too many bytes at the | |
251 | same time and failed to send messages. Send the payload one line | |
252 | at a time to work around the problem. | |
a838ae9d JH |
253 | |
254 | * When "git am" was rewritten as a built-in, it stopped paying | |
255 | attention to user.signingkey, which was fixed. | |
a838ae9d JH |
256 | |
257 | * It was not possible to use a repository-lookalike created by "git | |
258 | worktree add" as a local source of "git clone". | |
a838ae9d JH |
259 | |
260 | * On a case insensitive filesystems, setting GIT_WORK_TREE variable | |
261 | using a random cases that does not agree with what the filesystem | |
262 | thinks confused Git that it wasn't inside the working tree. | |
a838ae9d JH |
263 | |
264 | * Performance-measurement tests did not work without an installed Git. | |
a838ae9d JH |
265 | |
266 | * A test script for the HTTP service had a timing dependent bug, | |
267 | which was fixed. | |
a838ae9d JH |
268 | |
269 | * There were some classes of errors that "git fsck" diagnosed to its | |
270 | standard error that did not cause it to exit with non-zero status. | |
a838ae9d JH |
271 | |
272 | * Work around "git p4" failing when the P4 depot records the contents | |
273 | in UTF-16 without UTF-16 BOM. | |
a838ae9d JH |
274 | |
275 | * When "git gc --auto" is backgrounded, its diagnosis message is | |
276 | lost. Save it to a file in $GIT_DIR and show it next time the "gc | |
277 | --auto" is run. | |
a838ae9d JH |
278 | |
279 | * The submodule code has been taught to work better with separate | |
280 | work trees created via "git worktree add". | |
a838ae9d | 281 | |
906c32b9 JH |
282 | * "git gc" is safe to run anytime only because it has the built-in |
283 | grace period to protect young objects. In order to run with no | |
284 | grace period, the user must make sure that the repository is | |
285 | quiescent. | |
906c32b9 JH |
286 | |
287 | * A recent "filter-branch --msg-filter" broke skipping of the commit | |
288 | object header, which is fixed. | |
906c32b9 JH |
289 | |
290 | * The normalize_ceiling_entry() function does not muck with the end | |
291 | of the path it accepts, and the real world callers do rely on that, | |
292 | but a test insisted that the function drops a trailing slash. | |
906c32b9 | 293 | |
37023ba3 JH |
294 | * A test for interaction between untracked cache and sparse checkout |
295 | added in Git 2.5 days were flaky. | |
37023ba3 JH |
296 | |
297 | * A couple of commands still showed "[options]" in their usage string | |
298 | to note where options should come on their command line, but we | |
299 | spell that "[<options>]" in most places these days. | |
37023ba3 JH |
300 | |
301 | * The synopsis text and the usage string of subcommands that read | |
302 | list of things from the standard input are often shown as if they | |
303 | only take input from a file on a filesystem, which was misleading. | |
37023ba3 JH |
304 | |
305 | * "git am -3" had a small regression where it is aborted in its error | |
306 | handling codepath when underlying merge-recursive failed in certain | |
307 | ways, as it assumed that the internal call to merge-recursive will | |
308 | never die, which is not the case (yet). | |
37023ba3 | 309 | |
80980a1d | 310 | * The linkage order of libraries was wrong in places around libcurl. |
80980a1d JH |
311 | |
312 | * The name-hash subsystem that is used to cope with case insensitive | |
313 | filesystems keeps track of directories and their on-filesystem | |
314 | cases for all the paths in the index by holding a pointer to a | |
315 | randomly chosen cache entry that is inside the directory (for its | |
316 | ce->ce_name component). This pointer was not updated even when the | |
317 | cache entry was removed from the index, leading to use after free. | |
318 | This was fixed by recording the path for each directory instead of | |
319 | borrowing cache entries and restructuring the API somewhat. | |
80980a1d | 320 | |
2635c2b8 JH |
321 | * "git merge-file" tried to signal how many conflicts it found, which |
322 | obviously would not work well when there are too many of them. | |
2635c2b8 JH |
323 | |
324 | * The error message from "git blame --contents --reverse" incorrectly | |
325 | talked about "--contents --children". | |
2635c2b8 JH |
326 | |
327 | * "git imap-send" did not compile well with older version of cURL library. | |
2635c2b8 JH |
328 | |
329 | * Merging a branch that removes a path and another that changes the | |
330 | mode bits on the same path should have conflicted at the path, but | |
331 | it didn't and silently favoured the removal. | |
2635c2b8 JH |
332 | |
333 | * "git --literal-pathspecs add -u/-A" without any command line | |
334 | argument misbehaved ever since Git 2.0. | |
2635c2b8 | 335 | |
c29024e5 JH |
336 | * "git daemon" uses "run_command()" without "finish_command()", so it |
337 | needs to release resources itself, which it forgot to do. | |
c29024e5 JH |
338 | |
339 | * "git status --branch --short" accessed beyond the constant string | |
340 | "HEAD", which has been corrected. | |
c29024e5 JH |
341 | |
342 | * We peek objects from submodule's object store by linking it to the | |
343 | list of alternate object databases, but the code to do so forgot to | |
344 | correctly initialize the list. | |
c29024e5 JH |
345 | |
346 | * The code to prepare the working tree side of temporary directory | |
347 | for the "dir-diff" feature forgot that symbolic links need not be | |
348 | copied (or symlinked) to the temporary area, as the code already | |
349 | special cases and overwrites them. Besides, it was wrong to try | |
350 | computing the object name of the target of symbolic link, which may | |
351 | not even exist or may be a directory. | |
f34be46e JH |
352 | |
353 | * A Range: request can be responded with a full response and when | |
354 | asked properly libcurl knows how to strip the result down to the | |
355 | requested range. However, we were hand-crafting a range request | |
356 | and it did not kick in. | |
9ed86a5d JH |
357 | |
358 | * Having a leftover .idx file without corresponding .pack file in | |
359 | the repository hurts performance; "git gc" learned to prune them. | |
9ed86a5d JH |
360 | |
361 | * Apple's common crypto implementation of SHA1_Update() does not take | |
362 | more than 4GB at a time, and we now have a compile-time workaround | |
363 | for it. | |
9ed86a5d JH |
364 | |
365 | * Produce correct "dirty" marker for shell prompts, even when we | |
366 | are on an orphan or an unborn branch. | |
c29024e5 | 367 | |
86c95ac5 JH |
368 | * A build without NO_IPv6 used to use gethostbyname() when guessing |
369 | user's hostname, instead of getaddrinfo() that is used in other | |
370 | codepaths in such a build. | |
86c95ac5 | 371 | |
f900c832 JH |
372 | * The exit code of git-fsck did not reflect some types of errors |
373 | found in packed objects, which has been corrected. | |
374 | ||
375 | * The helper used to iterate over loose object directories to prune | |
376 | stale objects did not closedir() immediately when it is done with a | |
377 | directory--a callback such as the one used for "git prune" may want | |
378 | to do rmdir(), but it would fail on open directory on platforms | |
379 | such as WinXP. | |
380 | ||
381 | * "git p4" used to import Perforce CLs that touch only paths outside | |
382 | the client spec as empty commits. It has been corrected to ignore | |
383 | them instead, with a new configuration git-p4.keepEmptyCommits as a | |
384 | backward compatibility knob. | |
86c95ac5 | 385 | |
1d88dab4 JH |
386 | * The completion script (in contrib/) used to list "git column" |
387 | (which is not an end-user facing command) as one of the choices | |
388 | (merge 160fcdb sg/completion-no-column later to maint). | |
389 | ||
390 | * The error reporting from "git send-email", when SMTP TLS fails, has | |
391 | been improved. | |
392 | (merge 9d60524 jk/send-email-ssl-errors later to maint). | |
393 | ||
394 | * When getpwuid() on the system returned NULL (e.g. the user is not | |
395 | in the /etc/passwd file or other uid-to-name mappings), the | |
396 | codepath to find who the user is to record it in the reflog barfed | |
397 | and died. Loosen the check in this codepath, which already accepts | |
398 | questionable ident string (e.g. host part of the e-mail address is | |
399 | obviously bogus), and in general when we operate fmt_ident() function | |
400 | in non-strict mode. | |
401 | (merge 92bcbb9 jk/ident-loosen-getpwuid later to maint). | |
402 | ||
28274d02 JH |
403 | * "git symbolic-ref" forgot to report a failure with its exit status. |
404 | (merge f91b273 jk/symbolic-ref-maint later to maint). | |
405 | ||
406 | * History traversal with "git log --source" that starts with an | |
407 | annotated tag failed to report the tag as "source", due to an | |
408 | old regression in the command line parser back in v2.2 days. | |
409 | (merge 728350b jk/pending-keep-tag-name later to maint). | |
410 | ||
411 | * "git p4" when interacting with multiple depots at the same time | |
412 | used to incorrectly drop changes. | |
413 | ||
80980a1d | 414 | * Code clean-up, minor fixes etc. |