Git v2.3 Release Notes
======================

Updates since v2.2
------------------

Ports

 * Recent gcc toolchain on Cygwin started throwing compilation warning,
   which has been squelched.


UI, Workflows & Features

 * It was cumbersome to use "GIT_SSH" mechanism when the user wanted
   to pass an extra set of arguments to the underlying ssh.  A new
   environment variable GIT_SSH_COMMAND can be used for this.

 * A request to store an empty note via "git notes" meant to remove
   note from the object but with --allow-empty we will store a
   (surprise!)  note that is empty.

 * "git interpret-trailers" learned to properly handle the
   "Conflicts:" block at the end.

 * "git am" learned "--message-id" option to copy the message ID of
   the incoming e-mail to the log message of resulting commit.

 * "git clone --reference=<over there>" learned the "--dissociate"
   option to go with it; it borrows objects from the reference object
   store while cloning only to reduce network traffic and then
   dissociates the resulting clone from the reference by performing
   local copies of borrowed objects.

 * "git send-email" learned "--transfer-encoding" option to force a
   non-fault Content-Transfer-Encoding header (e.g. base64).

 * "git send-email" normally identifies itself via X-Mailer: header in
   the message it sends out.  A new command line flag --no-xmailer
   allows the user to squelch the header.

 * "git push" into a repository with a working tree normally refuses
   to modify the branch that is checked out.  The command learned to
   optionally do an equivalent of "git reset --hard" only when there
   is no change to the working tree and the index instead, which would
   be useful to "deploy" by pushing into a repository.

 * "git new-workdir" (in contrib/) can be used to populate an empty
   and existing directory now.

 * Credential helpers are asked in turn until one of them give
   positive response, which is cumbersome to turn off when you need to
   run Git in an automated setting.  The credential helper interface
   learned to allow a helper to say "stop, don't ask other helpers."
   Also GIT_TERMINAL_PROMPT environment can be set to false to disable
   our built-in prompt mechanism for passwords.

 * "git branch -d" (delete) and "git branch -m" (move) learned to
   honor "-f" (force) flag; unlike many other subcommands, the way to
   force these have been with separate "-D/-M" options, which was
   inconsistent.

 * "diff-highlight" filter (in contrib/) allows its color output to be
   customized via configuration variables.

 * "git imap-send" learned to take "-v" (verbose) and "-q" (quiet)
   command line options.

 * "git imap-send" now can be built to use cURL library to talk to
   IMAP servers (if the library is recent enough, of course).
   This allows you to use authenticate method other than CRAM-MD5,
   among other things.


Performance, Internal Implementation, Development Support etc.

 * Earlier we made "rev-list --object-edge" more aggressively list the
   objects at the edge commits, in order to reduce number of objects　
   fetched into a shallow repository, but the change affected cases
   other than "fetching into a shallow repository" and made it
   unusably slow (e.g. fetching into a normal repository should not
   have to suffer the overhead from extra processing).  Limit it to a
   more specific case by introducing --objects-edge-aggressive, a new
   option to rev-list.

 * Squelched useless compiler warnings on Mac OS X regarding the
   crypto API.

 * The procedure to generate unicode table has been simplified.

 * Some filesystems assign filemodes in a strange way, fooling then
   automatic "filemode trustability" check done during a new
   repository creation.  The initialization codepath has been hardened
   against this issue.

 * The codepath in "git remote update --prune" to drop many refs has
   been optimized.

 * The API into get_merge_bases*() family of functions was easy to
   misuse, which has been corrected to make it harder to do so.

 * Long overdue departure from the assumption that S_IFMT is shared by
   everybody made in 2005, which was necessary to port to z/OS.

 * "git push" and "git fetch" did not communicate an overlong refname
   correctly.  Now it uses 64kB sideband to accommodate longer ones.

 * Recent GPG changes the keyring format and drops support for RFC1991
   formatted signatures, breaking our existing tests.

 * "git-prompt" (in contrib/) used a variable from the global scope,
   possibly contaminating end-user's namespace.


Also contains various documentation updates and code clean-ups.


Fixes since v2.2
----------------

Unless otherwise noted, all the fixes since v2.2 in the maintenance
track are contained in this release (see the maintenance releases'
notes for details).

 * The logic in "git bisect bad HEAD" etc. to avoid forcing the test
   of the common ancestor of bad and good commits was broken.
   (merge 07913d5 cc/bisect-rev-parsing later to maint).

 * "git checkout-index --temp=$target $path" did not work correctly
   for paths outside the current subdirectory in the project.
   (merge 74c4de5 es/checkout-index-temp later to maint).

 * The report from "git checkout" on a branch that builds on another
   local branch by setting its branch.*.merge to branch name (not a
   full refname) incorrectly said that the upstream is gone.
   (merge 05e7368 jc/checkout-local-track-report later to maint).

 * With The git-prompt support (in contrib/), using the exit status of
   the last command in the prompt, e.g.  PS1='$(__git_ps1) $? ', did
   not work well, because the helper function stomped on the exit
   status.
   (merge eb443e3 tf/prompt-preserve-exit-status later to maint).


 * Recent update to "git commit" broke amending an existing commit
   with bogus author/committer lines without a valid e-mail address.
   (merge c83a509 jk/commit-date-approxidate later to maint).

 * The lockfile API used to get confused which file to clean up when
   the process moved the $cwd after creating a lockfile.
   (merge fa137f6 nd/lockfile-absolute later to maint).

 * Traditionally we tried to avoid interpreting date strings given by
   the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when
   used early November 2014 was taken as "October 12, 2014" because it
   is likely that a date in the future, December 10, is a mistake.
   This heuristics has been loosened to allow people to express future
   dates (most notably, --until=<date> may want to be far in the
   future) and we no longer tiebreak by future-ness of the date when

    (1) ISO-like format is used, and
    (2) the string can make sense interpreted as both y-m-d and y-d-m.

   Git may still have to use the heuristics to tiebreak between dd/mm/yy
   and mm/dd/yy, though.
   (merge d372395 jk/approxidate-avoid-y-d-m-over-future-dates later to maint).

 * Git did not correctly read an overlong refname from a packed refs
   file.
   (merge ea41783 jk/read-packed-refs-without-path-max later to maint).

 * "git apply" was described in the documentation to take --ignore-date
   option, which it does not.
   (merge 0cef4e7 rw/apply-does-not-take-ignore-date later to maint).

 * "git add -i" did not notice when the interactive command input
   stream went away and kept asking the same question.
   (merge a8bec7a jk/add-i-read-error later to maint).

 * "git send-email" did not handle RFC 2047 encoded headers quite
   right.
   (merge ab47e2a rd/send-email-2047-fix later to maint).

 * New tag object format validation added in 2.2 showed garbage after
   a tagname it reported in its error message.
   (merge a1e920a js/fsck-tag-validation later to maint).

 * The code that reads the reflog from the newer to the older entries
   did not handle an entry that crosses a boundary of block it uses to
   read them correctly.
   (merge 69216bf jk/for-each-reflog-ent-reverse later to maint).

 * "git diff -B -M" after making a new copy B out of an existing file
   A and then editing A extensively ought to report that B was created
   by copying A and A was modified, which is what "git diff -C"
   reports, but it instead said A was renamed to B and A was edited
   heavily in place.  This was not just incoherent but also failed to
   apply with "git apply".  The report has been corrected to match what
   "git diff -C" produces for this case.
   (merge 6936b58 jc/diff-b-m later to maint).

 * In files we pre-populate for the user to edit with commented hints,
   a line of hint that is indented with a tab used to show as '#' (or
   any comment char), ' ' (space), and then the hint text that began
   with the tab, which some editors flag as an indentation error (tab
   following space).  We now omit the space after the comment char in
   such a case.
   (merge d55aeb7 jc/strbuf-add-lines-avoid-sp-ht-sequence later to maint).

 * "git ls-tree" does not support path selection based on negative
   pathspecs, but did not error out when negative pathspecs are given.
   (merge f1f6224 nd/ls-tree-pathspec later to maint).

 * The function sometimes returned a non-freeable memory and some
   other times returned a piece of memory that must be freed, leading
   to inevitable leaks.
   (merge 59362e5 jc/exec-cmd-system-path-leak-fix later to maint).

 * The code to abbreviate an object name to its short unique prefix
   has been optimized when no abbreviation was requested.
   (merge 61e704e mh/find-uniq-abbrev later to maint).

 * "git add --ignore-errors ..." did not ignore an error to
   give a file that did not exist.
   (merge 1d31e5a mg/add-ignore-errors later to maint).

 * "git checkout $treeish $path", when $path in the index and the
   working tree already matched what is in $treeish at the $path,
   still overwrote the $path unnecessarily.
   (merge c5326bd jk/checkout-from-tree later to maint).

 * "git config --get-color" did not parse its command line arguments
   carefully.
   (merge cb35722 jk/colors-fix later to maint).

 * open() emulated on Windows platforms did not give EISDIR upon
   an attempt to open a directory for writing.
   (merge ba6fad0 js/windows-open-eisdir-error later to maint).

 * A few code paths used abs() when they should have used labs() on
   long integers.
   (merge 83915ba rs/maint-config-use-labs later to maint).
   (merge 31a8aa1 rs/receive-pack-use-labs later to maint).

 * "gitweb" used to depend on a behaviour recent CGI.pm deprecated.
   (merge 13dbf46 jk/gitweb-with-newer-cgi-multi-param later to maint).

 * "git init" (hence "git clone") initialized the per-repository
   configuration file .git/config with x-bit by mistake.
   (merge 1f32ecf mh/config-flip-xbit-back-after-checking later to maint).

 * Git 2.0 was supposed to make the "simple" mode for the default of
   "git push", but it didn't.
   (merge 00a6fa0 jk/push-simple later to maint).

 * "Everyday" document had a broken link.
   (merge 366c8d4 po/everyday-doc later to maint).

 * A few test fixes.
   (merge 880ef58 jk/no-perl-tests later to maint).

 * The build procedure did not bother fixing perl and python scripts
   when NO_PERL and NO_PYTHON build-time configuration changed.
   (merge ca2051d jk/rebuild-perl-scripts-with-no-perl-seting-change later to maint).
