Documentation / RelNotes / 2.3.0.txton commit Git 2.3.0-rc0 (addfb21)
   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 * Earlier we made "rev-list --object-edge" more aggressively list the
  78   objects at the edge commits, in order to reduce number of objects 
  79   fetched into a shallow repository, but the change affected cases
  80   other than "fetching into a shallow repository" and made it
  81   unusably slow (e.g. fetching into a normal repository should not
  82   have to suffer the overhead from extra processing).  Limit it to a
  83   more specific case by introducing --objects-edge-aggressive, a new
  84   option to rev-list.
  85
  86 * Squelched useless compiler warnings on Mac OS X regarding the
  87   crypto API.
  88
  89 * The procedure to generate unicode table has been simplified.
  90
  91 * Some filesystems assign filemodes in a strange way, fooling then
  92   automatic "filemode trustability" check done during a new
  93   repository creation.  The initialization codepath has been hardened
  94   against this issue.
  95
  96 * The codepath in "git remote update --prune" to drop many refs has
  97   been optimized.
  98
  99 * The API into get_merge_bases*() family of functions was easy to
 100   misuse, which has been corrected to make it harder to do so.
 101
 102 * Long overdue departure from the assumption that S_IFMT is shared by
 103   everybody made in 2005, which was necessary to port to z/OS.
 104
 105 * "git push" and "git fetch" did not communicate an overlong refname
 106   correctly.  Now it uses 64kB sideband to accommodate longer ones.
 107
 108 * Recent GPG changes the keyring format and drops support for RFC1991
 109   formatted signatures, breaking our existing tests.
 110
 111 * "git-prompt" (in contrib/) used a variable from the global scope,
 112   possibly contaminating end-user's namespace.
 113
 114
 115Also contains various documentation updates and code clean-ups.
 116
 117
 118Fixes since v2.2
 119----------------
 120
 121Unless otherwise noted, all the fixes since v2.2 in the maintenance
 122track are contained in this release (see the maintenance releases'
 123notes for details).
 124
 125 * The logic in "git bisect bad HEAD" etc. to avoid forcing the test
 126   of the common ancestor of bad and good commits was broken.
 127   (merge 07913d5 cc/bisect-rev-parsing later to maint).
 128
 129 * "git checkout-index --temp=$target $path" did not work correctly
 130   for paths outside the current subdirectory in the project.
 131   (merge 74c4de5 es/checkout-index-temp later to maint).
 132
 133 * The report from "git checkout" on a branch that builds on another
 134   local branch by setting its branch.*.merge to branch name (not a
 135   full refname) incorrectly said that the upstream is gone.
 136   (merge 05e7368 jc/checkout-local-track-report later to maint).
 137
 138 * With The git-prompt support (in contrib/), using the exit status of
 139   the last command in the prompt, e.g.  PS1='$(__git_ps1) $? ', did
 140   not work well, because the helper function stomped on the exit
 141   status.
 142   (merge eb443e3 tf/prompt-preserve-exit-status later to maint).
 143
 144
 145 * Recent update to "git commit" broke amending an existing commit
 146   with bogus author/committer lines without a valid e-mail address.
 147   (merge c83a509 jk/commit-date-approxidate later to maint).
 148
 149 * The lockfile API used to get confused which file to clean up when
 150   the process moved the $cwd after creating a lockfile.
 151   (merge fa137f6 nd/lockfile-absolute later to maint).
 152
 153 * Traditionally we tried to avoid interpreting date strings given by
 154   the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when
 155   used early November 2014 was taken as "October 12, 2014" because it
 156   is likely that a date in the future, December 10, is a mistake.
 157   This heuristics has been loosened to allow people to express future
 158   dates (most notably, --until=<date> may want to be far in the
 159   future) and we no longer tiebreak by future-ness of the date when
 160
 161    (1) ISO-like format is used, and
 162    (2) the string can make sense interpreted as both y-m-d and y-d-m.
 163
 164   Git may still have to use the heuristics to tiebreak between dd/mm/yy
 165   and mm/dd/yy, though.
 166   (merge d372395 jk/approxidate-avoid-y-d-m-over-future-dates later to maint).
 167
 168 * Git did not correctly read an overlong refname from a packed refs
 169   file.
 170   (merge ea41783 jk/read-packed-refs-without-path-max later to maint).
 171
 172 * "git apply" was described in the documentation to take --ignore-date
 173   option, which it does not.
 174   (merge 0cef4e7 rw/apply-does-not-take-ignore-date later to maint).
 175
 176 * "git add -i" did not notice when the interactive command input
 177   stream went away and kept asking the same question.
 178   (merge a8bec7a jk/add-i-read-error later to maint).
 179
 180 * "git send-email" did not handle RFC 2047 encoded headers quite
 181   right.
 182   (merge ab47e2a rd/send-email-2047-fix later to maint).
 183
 184 * New tag object format validation added in 2.2 showed garbage after
 185   a tagname it reported in its error message.
 186   (merge a1e920a js/fsck-tag-validation later to maint).
 187
 188 * The code that reads the reflog from the newer to the older entries
 189   did not handle an entry that crosses a boundary of block it uses to
 190   read them correctly.
 191   (merge 69216bf jk/for-each-reflog-ent-reverse later to maint).
 192
 193 * "git diff -B -M" after making a new copy B out of an existing file
 194   A and then editing A extensively ought to report that B was created
 195   by copying A and A was modified, which is what "git diff -C"
 196   reports, but it instead said A was renamed to B and A was edited
 197   heavily in place.  This was not just incoherent but also failed to
 198   apply with "git apply".  The report has been corrected to match what
 199   "git diff -C" produces for this case.
 200   (merge 6936b58 jc/diff-b-m later to maint).
 201
 202 * In files we pre-populate for the user to edit with commented hints,
 203   a line of hint that is indented with a tab used to show as '#' (or
 204   any comment char), ' ' (space), and then the hint text that began
 205   with the tab, which some editors flag as an indentation error (tab
 206   following space).  We now omit the space after the comment char in
 207   such a case.
 208   (merge d55aeb7 jc/strbuf-add-lines-avoid-sp-ht-sequence later to maint).
 209
 210 * "git ls-tree" does not support path selection based on negative
 211   pathspecs, but did not error out when negative pathspecs are given.
 212   (merge f1f6224 nd/ls-tree-pathspec later to maint).
 213
 214 * The function sometimes returned a non-freeable memory and some
 215   other times returned a piece of memory that must be freed, leading
 216   to inevitable leaks.
 217   (merge 59362e5 jc/exec-cmd-system-path-leak-fix later to maint).
 218
 219 * The code to abbreviate an object name to its short unique prefix
 220   has been optimized when no abbreviation was requested.
 221   (merge 61e704e mh/find-uniq-abbrev later to maint).
 222
 223 * "git add --ignore-errors ..." did not ignore an error to
 224   give a file that did not exist.
 225   (merge 1d31e5a mg/add-ignore-errors later to maint).
 226
 227 * "git checkout $treeish $path", when $path in the index and the
 228   working tree already matched what is in $treeish at the $path,
 229   still overwrote the $path unnecessarily.
 230   (merge c5326bd jk/checkout-from-tree later to maint).
 231
 232 * "git config --get-color" did not parse its command line arguments
 233   carefully.
 234   (merge cb35722 jk/colors-fix later to maint).
 235
 236 * open() emulated on Windows platforms did not give EISDIR upon
 237   an attempt to open a directory for writing.
 238   (merge ba6fad0 js/windows-open-eisdir-error later to maint).
 239
 240 * A few code paths used abs() when they should have used labs() on
 241   long integers.
 242   (merge 83915ba rs/maint-config-use-labs later to maint).
 243   (merge 31a8aa1 rs/receive-pack-use-labs later to maint).
 244
 245 * "gitweb" used to depend on a behaviour recent CGI.pm deprecated.
 246   (merge 13dbf46 jk/gitweb-with-newer-cgi-multi-param later to maint).
 247
 248 * "git init" (hence "git clone") initialized the per-repository
 249   configuration file .git/config with x-bit by mistake.
 250   (merge 1f32ecf mh/config-flip-xbit-back-after-checking later to maint).
 251
 252 * Git 2.0 was supposed to make the "simple" mode for the default of
 253   "git push", but it didn't.
 254   (merge 00a6fa0 jk/push-simple later to maint).
 255
 256 * "Everyday" document had a broken link.
 257   (merge 366c8d4 po/everyday-doc later to maint).
 258
 259 * A few test fixes.
 260   (merge 880ef58 jk/no-perl-tests later to maint).
 261
 262 * The build procedure did not bother fixing perl and python scripts
 263   when NO_PERL and NO_PYTHON build-time configuration changed.
 264   (merge ca2051d jk/rebuild-perl-scripts-with-no-perl-seting-change later to maint).