Git v2.4.7 Release Notes
========================

Fixes since v2.4.6
------------------

 * A minor regression to "git fsck" in v2.2 era was fixed; it
   complained about a body-less tag object when it lacked a
   separator empty line after its header to separate it with a
   non-existent body.

 * We used to ask libCURL to use the most secure authentication method
   available when talking to an HTTP proxy only when we were told to
   talk to one via configuration variables.  We now ask libCURL to
   always use the most secure authentication method, because the user
   can tell libCURL to use an HTTP proxy via an environment variable
   without using configuration variables.

 * When you say "!<ENTER>" while running say "git log", you'd confuse
   yourself in the resulting shell, that may look as if you took
   control back to the original shell you spawned "git log" from but
   that isn't what is happening.  To that new shell, we leaked
   GIT_PAGER_IN_USE environment variable that was meant as a local
   communication between the original "Git" and subprocesses that was
   spawned by it after we launched the pager, which caused many
   "interesting" things to happen, e.g. "git diff | cat" still paints
   its output in color by default.

   Stop leaking that environment variable to the pager's half of the
   fork; we only need it on "Git" side when we spawn the pager.

 * Avoid possible ssize_t to int truncation.

 * "git config" failed to update the configuration file when the
   underlying filesystem is incapable of renaming a file that is still
   open.

 * A minor bugfix when pack bitmap is used with "rev-list --count".

 * An ancient test framework enhancement to allow color was not
   entirely correct; this makes it work even when tput needs to read
   from the ~/.terminfo under the user's real HOME directory.

 * Fix a small bug in our use of umask() return value.

 * "git rebase" did not exit with failure when format-patch it invoked
   failed for whatever reason.

 * Disable "have we lost a race with competing repack?" check while
   receiving a huge object transfer that runs index-pack.

Also contains typofixes, documentation updates and trivial code
clean-ups.
