Git v1.7.7 Release Notes
========================

Updates since v1.7.6
--------------------

 * The scripting part of the codebase is getting prepared for i18n/l10n.

 * Interix, Cygwin and Minix ports got updated.

 * A handful of patches to update git-p4 (in contrib/).

 * Gitweb learned to read from /etc/gitweb-common.conf when it exists,
   before reading from gitweb_config.perl or from /etc/gitweb.conf
   (this last one is read only when per-repository gitweb_config.perl
   does not exist).

 * Various codepaths that invoked zlib deflate/inflate assumed that these
   functions can compress or uncompress more than 4GB data in one call on
   platforms with 64-bit long, which has been corrected.

 * "git archive" can be told to pass the output to gzip compression and
   produce "archive.tar.gz".

 * "git checkout" (both the code to update the files upon checking out a
   different branch, the code to checkout specific set of files) learned
   to stream the data from object store when possible, without having to
   read the entire contents of a file in memory first. An earlier round
   of this code that is not in any released version had a large leak but
   now it has been plugged.

 * "git clone" can now take "--config key=value" option to set the
   repository configuration options that affect the initial checkout.

 * "git commit <paths>..." now lets you feed relative pathspecs that
   refer outside your current subdirectory.

 * "git diff --stat" learned --stat-count option to limit the output of
   diffstat report.

 * "git fetch", "git push" and friends no longer show connection
   errors for addresses that couldn't be connected when at least one
   address succeeds (this is arguably a regression but a deliberate
   one).

 * "git grep" learned --break and --heading options, to let users mimic
   output format of "ack".

 * "git grep" learned "-W" option that shows wider context using the same
   logic used by "git diff" to determine the hunk header.

 * "git rebase master topci" no longer spews usage hints after giving
   "fatal: no such branch: topci" error message.

 * "git stash" learned --include-untracked option.

 * "git submodule update" used to stop at the first error updating a
   submodule; it now goes on to update other submodules that can be
   updated, and reports the ones with errors at the end.

 * "git verify-pack" has been rewritten to use the "index-pack" machinery
   that is more efficient in reading objects in packfiles.

 * test scripts for gitweb tried to run even when CGI-related perl modules
   are not installed; it now exits early when they are unavailable.

Also contains various documentation updates and minor miscellaneous
changes.


Fixes since v1.7.6
------------------

Unless otherwise noted, all the fixes in 1.7.6.X maintenance track are
included in this release.

--
exec >/var/tmp/1
echo O=$(git describe master)
O=v1.7.6-471-g50b68ae
git log --first-parent --oneline $O..master
echo
git shortlog --no-merges ^maint ^$O master
