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