]>
Commit | Line | Data |
---|---|---|
c18b8673 JH |
1 | Git v2.3 Release Notes |
2 | ====================== | |
3 | ||
9874fca7 JH |
4 | This one ended up to be a release with lots of small corrections and |
5 | improvements without big uncomfortably exciting features. The recent | |
6 | security fix that went to 2.2.1 and older maintenance tracks is also | |
7 | contained in this update. | |
8 | ||
9 | ||
c18b8673 JH |
10 | Updates since v2.2 |
11 | ------------------ | |
12 | ||
13 | Ports | |
14 | ||
2c380e7a JH |
15 | * Recent gcc toolchain on Cygwin started throwing compilation warning, |
16 | which has been squelched. | |
17 | ||
563d4e59 JH |
18 | * A few updates to build on platforms that lack tv_nsec, |
19 | clock_gettime, CLOCK_MONOTONIC and HMAC_CTX_cleanup (e.g. older | |
20 | RHEL) have been added. | |
21 | ||
c18b8673 JH |
22 | |
23 | UI, Workflows & Features | |
24 | ||
25 | * It was cumbersome to use "GIT_SSH" mechanism when the user wanted | |
26 | to pass an extra set of arguments to the underlying ssh. A new | |
27 | environment variable GIT_SSH_COMMAND can be used for this. | |
28 | ||
29 | * A request to store an empty note via "git notes" meant to remove | |
30 | note from the object but with --allow-empty we will store a | |
31 | (surprise!) note that is empty. | |
32 | ||
2c380e7a JH |
33 | * "git interpret-trailers" learned to properly handle the |
34 | "Conflicts:" block at the end. | |
35 | ||
36 | * "git am" learned "--message-id" option to copy the message ID of | |
37 | the incoming e-mail to the log message of resulting commit. | |
38 | ||
1e6f5b22 JH |
39 | * "git clone --reference=<over there>" learned the "--dissociate" |
40 | option to go with it; it borrows objects from the reference object | |
41 | store while cloning only to reduce network traffic and then | |
42 | dissociates the resulting clone from the reference by performing | |
43 | local copies of borrowed objects. | |
44 | ||
2c380e7a JH |
45 | * "git send-email" learned "--transfer-encoding" option to force a |
46 | non-fault Content-Transfer-Encoding header (e.g. base64). | |
47 | ||
1e6f5b22 JH |
48 | * "git send-email" normally identifies itself via X-Mailer: header in |
49 | the message it sends out. A new command line flag --no-xmailer | |
50 | allows the user to squelch the header. | |
51 | ||
2c380e7a JH |
52 | * "git push" into a repository with a working tree normally refuses |
53 | to modify the branch that is checked out. The command learned to | |
54 | optionally do an equivalent of "git reset --hard" only when there | |
55 | is no change to the working tree and the index instead, which would | |
56 | be useful to "deploy" by pushing into a repository. | |
57 | ||
58 | * "git new-workdir" (in contrib/) can be used to populate an empty | |
59 | and existing directory now. | |
60 | ||
61 | * Credential helpers are asked in turn until one of them give | |
62 | positive response, which is cumbersome to turn off when you need to | |
63 | run Git in an automated setting. The credential helper interface | |
64 | learned to allow a helper to say "stop, don't ask other helpers." | |
65 | Also GIT_TERMINAL_PROMPT environment can be set to false to disable | |
66 | our built-in prompt mechanism for passwords. | |
67 | ||
68 | * "git branch -d" (delete) and "git branch -m" (move) learned to | |
69 | honor "-f" (force) flag; unlike many other subcommands, the way to | |
70 | force these have been with separate "-D/-M" options, which was | |
71 | inconsistent. | |
72 | ||
73 | * "diff-highlight" filter (in contrib/) allows its color output to be | |
74 | customized via configuration variables. | |
75 | ||
1e6f5b22 JH |
76 | * "git imap-send" learned to take "-v" (verbose) and "-q" (quiet) |
77 | command line options. | |
78 | ||
563d4e59 JH |
79 | * "git remote add $name $URL" is now allowed when "url.$URL.insteadOf" |
80 | is already defined. | |
81 | ||
1e6f5b22 JH |
82 | * "git imap-send" now can be built to use cURL library to talk to |
83 | IMAP servers (if the library is recent enough, of course). | |
84 | This allows you to use authenticate method other than CRAM-MD5, | |
85 | among other things. | |
86 | ||
563d4e59 JH |
87 | * "git imap-send" now allows GIT_CURL_VERBOSE environment variable to |
88 | control the verbosity when talking via the cURL library. | |
89 | ||
90 | * The prompt script (in contrib/) learned to optionally hide prompt | |
91 | when in an ignored directory by setting GIT_PS1_HIDE_IF_PWD_IGNORED | |
92 | shell variable. | |
93 | ||
c18b8673 JH |
94 | |
95 | Performance, Internal Implementation, Development Support etc. | |
96 | ||
addfb21a JH |
97 | * Earlier we made "rev-list --object-edge" more aggressively list the |
98 | objects at the edge commits, in order to reduce number of objects  | |
99 | fetched into a shallow repository, but the change affected cases | |
100 | other than "fetching into a shallow repository" and made it | |
101 | unusably slow (e.g. fetching into a normal repository should not | |
102 | have to suffer the overhead from extra processing). Limit it to a | |
103 | more specific case by introducing --objects-edge-aggressive, a new | |
104 | option to rev-list. | |
105 | ||
1e6f5b22 JH |
106 | * Squelched useless compiler warnings on Mac OS X regarding the |
107 | crypto API. | |
108 | ||
109 | * The procedure to generate unicode table has been simplified. | |
110 | ||
2c380e7a JH |
111 | * Some filesystems assign filemodes in a strange way, fooling then |
112 | automatic "filemode trustability" check done during a new | |
113 | repository creation. The initialization codepath has been hardened | |
114 | against this issue. | |
115 | ||
116 | * The codepath in "git remote update --prune" to drop many refs has | |
117 | been optimized. | |
118 | ||
1e6f5b22 JH |
119 | * The API into get_merge_bases*() family of functions was easy to |
120 | misuse, which has been corrected to make it harder to do so. | |
121 | ||
2c380e7a JH |
122 | * Long overdue departure from the assumption that S_IFMT is shared by |
123 | everybody made in 2005, which was necessary to port to z/OS. | |
124 | ||
125 | * "git push" and "git fetch" did not communicate an overlong refname | |
126 | correctly. Now it uses 64kB sideband to accommodate longer ones. | |
127 | ||
128 | * Recent GPG changes the keyring format and drops support for RFC1991 | |
129 | formatted signatures, breaking our existing tests. | |
130 | ||
131 | * "git-prompt" (in contrib/) used a variable from the global scope, | |
132 | possibly contaminating end-user's namespace. | |
c18b8673 JH |
133 | |
134 | ||
135 | Also contains various documentation updates and code clean-ups. | |
136 | ||
137 | ||
138 | Fixes since v2.2 | |
139 | ---------------- | |
140 | ||
141 | Unless otherwise noted, all the fixes since v2.2 in the maintenance | |
142 | track are contained in this release (see the maintenance releases' | |
143 | notes for details). | |
144 | ||
627736ca JH |
145 | * "git http-push" over WebDAV (aka dumb http-push) was broken in |
146 | v2.2.2 when parsing a symbolic ref, resulting in a bogus request | |
147 | that gets rejected by recent versions of cURL library. | |
148 | (merge f6786c8 jk/http-push-symref-fix later to maint). | |
149 | ||
addfb21a JH |
150 | * The logic in "git bisect bad HEAD" etc. to avoid forcing the test |
151 | of the common ancestor of bad and good commits was broken. | |
152 | (merge 07913d5 cc/bisect-rev-parsing later to maint). | |
153 | ||
154 | * "git checkout-index --temp=$target $path" did not work correctly | |
155 | for paths outside the current subdirectory in the project. | |
156 | (merge 74c4de5 es/checkout-index-temp later to maint). | |
157 | ||
1e6f5b22 JH |
158 | * The report from "git checkout" on a branch that builds on another |
159 | local branch by setting its branch.*.merge to branch name (not a | |
160 | full refname) incorrectly said that the upstream is gone. | |
161 | (merge 05e7368 jc/checkout-local-track-report later to maint). | |
162 | ||
163 | * With The git-prompt support (in contrib/), using the exit status of | |
164 | the last command in the prompt, e.g. PS1='$(__git_ps1) $? ', did | |
165 | not work well, because the helper function stomped on the exit | |
166 | status. | |
563d4e59 | 167 | (merge 6babe76 tf/prompt-preserve-exit-status later to maint). |
1e6f5b22 | 168 | |
2c380e7a JH |
169 | * Recent update to "git commit" broke amending an existing commit |
170 | with bogus author/committer lines without a valid e-mail address. | |
171 | (merge c83a509 jk/commit-date-approxidate later to maint). | |
172 | ||
1e6f5b22 JH |
173 | * The lockfile API used to get confused which file to clean up when |
174 | the process moved the $cwd after creating a lockfile. | |
175 | (merge fa137f6 nd/lockfile-absolute later to maint). | |
176 | ||
177 | * Traditionally we tried to avoid interpreting date strings given by | |
178 | the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when | |
179 | used early November 2014 was taken as "October 12, 2014" because it | |
180 | is likely that a date in the future, December 10, is a mistake. | |
181 | This heuristics has been loosened to allow people to express future | |
182 | dates (most notably, --until=<date> may want to be far in the | |
183 | future) and we no longer tiebreak by future-ness of the date when | |
184 | ||
185 | (1) ISO-like format is used, and | |
186 | (2) the string can make sense interpreted as both y-m-d and y-d-m. | |
187 | ||
188 | Git may still have to use the heuristics to tiebreak between dd/mm/yy | |
189 | and mm/dd/yy, though. | |
190 | (merge d372395 jk/approxidate-avoid-y-d-m-over-future-dates later to maint). | |
191 | ||
2c380e7a JH |
192 | * Git did not correctly read an overlong refname from a packed refs |
193 | file. | |
194 | (merge ea41783 jk/read-packed-refs-without-path-max later to maint). | |
195 | ||
196 | * "git apply" was described in the documentation to take --ignore-date | |
197 | option, which it does not. | |
198 | (merge 0cef4e7 rw/apply-does-not-take-ignore-date later to maint). | |
199 | ||
1e6f5b22 JH |
200 | * "git add -i" did not notice when the interactive command input |
201 | stream went away and kept asking the same question. | |
202 | (merge a8bec7a jk/add-i-read-error later to maint). | |
203 | ||
204 | * "git send-email" did not handle RFC 2047 encoded headers quite | |
205 | right. | |
206 | (merge ab47e2a rd/send-email-2047-fix later to maint). | |
207 | ||
2c380e7a JH |
208 | * New tag object format validation added in 2.2 showed garbage after |
209 | a tagname it reported in its error message. | |
210 | (merge a1e920a js/fsck-tag-validation later to maint). | |
211 | ||
212 | * The code that reads the reflog from the newer to the older entries | |
213 | did not handle an entry that crosses a boundary of block it uses to | |
214 | read them correctly. | |
215 | (merge 69216bf jk/for-each-reflog-ent-reverse later to maint). | |
216 | ||
1e6f5b22 JH |
217 | * "git diff -B -M" after making a new copy B out of an existing file |
218 | A and then editing A extensively ought to report that B was created | |
219 | by copying A and A was modified, which is what "git diff -C" | |
220 | reports, but it instead said A was renamed to B and A was edited | |
221 | heavily in place. This was not just incoherent but also failed to | |
222 | apply with "git apply". The report has been corrected to match what | |
223 | "git diff -C" produces for this case. | |
224 | (merge 6936b58 jc/diff-b-m later to maint). | |
225 | ||
226 | * In files we pre-populate for the user to edit with commented hints, | |
227 | a line of hint that is indented with a tab used to show as '#' (or | |
228 | any comment char), ' ' (space), and then the hint text that began | |
229 | with the tab, which some editors flag as an indentation error (tab | |
230 | following space). We now omit the space after the comment char in | |
231 | such a case. | |
232 | (merge d55aeb7 jc/strbuf-add-lines-avoid-sp-ht-sequence later to maint). | |
233 | ||
2c380e7a JH |
234 | * "git ls-tree" does not support path selection based on negative |
235 | pathspecs, but did not error out when negative pathspecs are given. | |
236 | (merge f1f6224 nd/ls-tree-pathspec later to maint). | |
237 | ||
238 | * The function sometimes returned a non-freeable memory and some | |
239 | other times returned a piece of memory that must be freed, leading | |
240 | to inevitable leaks. | |
241 | (merge 59362e5 jc/exec-cmd-system-path-leak-fix later to maint). | |
242 | ||
243 | * The code to abbreviate an object name to its short unique prefix | |
244 | has been optimized when no abbreviation was requested. | |
245 | (merge 61e704e mh/find-uniq-abbrev later to maint). | |
246 | ||
247 | * "git add --ignore-errors ..." did not ignore an error to | |
248 | give a file that did not exist. | |
249 | (merge 1d31e5a mg/add-ignore-errors later to maint). | |
250 | ||
c18b8673 JH |
251 | * "git checkout $treeish $path", when $path in the index and the |
252 | working tree already matched what is in $treeish at the $path, | |
253 | still overwrote the $path unnecessarily. | |
254 | (merge c5326bd jk/checkout-from-tree later to maint). | |
255 | ||
9abc44b6 JH |
256 | * "git config --get-color" did not parse its command line arguments |
257 | carefully. | |
258 | (merge cb35722 jk/colors-fix later to maint). | |
259 | ||
c18b8673 JH |
260 | * open() emulated on Windows platforms did not give EISDIR upon |
261 | an attempt to open a directory for writing. | |
262 | (merge ba6fad0 js/windows-open-eisdir-error later to maint). | |
263 | ||
264 | * A few code paths used abs() when they should have used labs() on | |
265 | long integers. | |
266 | (merge 83915ba rs/maint-config-use-labs later to maint). | |
267 | (merge 31a8aa1 rs/receive-pack-use-labs later to maint). | |
268 | ||
269 | * "gitweb" used to depend on a behaviour recent CGI.pm deprecated. | |
270 | (merge 13dbf46 jk/gitweb-with-newer-cgi-multi-param later to maint). | |
271 | ||
272 | * "git init" (hence "git clone") initialized the per-repository | |
273 | configuration file .git/config with x-bit by mistake. | |
274 | (merge 1f32ecf mh/config-flip-xbit-back-after-checking later to maint). | |
9abc44b6 | 275 | |
563d4e59 JH |
276 | * Recent update in Git 2.2 started creating objects/info/packs and |
277 | info/refs files with permission bits tighter than user's umask. | |
278 | (merge d91175b jk/prune-packed-server-info later to maint). | |
279 | ||
9abc44b6 JH |
280 | * Git 2.0 was supposed to make the "simple" mode for the default of |
281 | "git push", but it didn't. | |
282 | (merge 00a6fa0 jk/push-simple later to maint). | |
283 | ||
284 | * "Everyday" document had a broken link. | |
285 | (merge 366c8d4 po/everyday-doc later to maint). | |
286 | ||
287 | * A few test fixes. | |
288 | (merge 880ef58 jk/no-perl-tests later to maint). | |
289 | ||
290 | * The build procedure did not bother fixing perl and python scripts | |
291 | when NO_PERL and NO_PYTHON build-time configuration changed. | |
292 | (merge ca2051d jk/rebuild-perl-scripts-with-no-perl-seting-change later to maint). | |
563d4e59 JH |
293 | |
294 | * The usage string of "git log" command was marked incorrectly for | |
295 | l10n. | |
296 | (merge e66dc0c km/log-usage-string-i18n later to maint). | |
297 | ||
298 | * "git for-each-ref" mishandled --format="%(upstream:track)" when a | |
299 | branch is marked to have forked from a non-existing branch. | |
300 | (merge b6160d9 rc/for-each-ref-tracking later to maint). |