Git v1.7.6 Release Notes (draft)
========================

Updates since v1.7.5
--------------------

 * Various git-svn updates.

 * Updates the way content tags are handled in gitweb.

 * Clean-up of the C part of i18n (but not l10n---please wait)
   continues.

 * Processes spawned by "[alias] <name> = !process" in the configuration
   can inspect GIT_PREFIX environment variable to learn where in the
   working tree the original command was invoked.

 * "git blame" learned "--abbrev[=<n>]" option to control the minimum
   number of hexdigits shown for commit object names.

 * Aborting "git commit --interactive" discards updates to the index
   made during the interctive session.

 * "git commit" learned a "--patch" option to directly jump to the
   per-hunk selection UI of the interactive mode.

 * "git diff -C -C" used to disable the rename detection entirely when
   there are too many copy candidate paths in the tree; now it falls
   back to "-C" when doing so would keep the copy candidate paths
   under the rename detection limit.

 * "git diff" and its family of commands learned --dirstat=0 to show
   directories that contribute less than 0.1% of changes.

 * "git diff" and its family of commands learned --dirstat=lines mode to
   assess damage to the directory based on number of lines in the patch
   output, not based on the similarity numbers.

 * "git format-patch" learned "--quiet" option to suppress the output of
   the names of generated files.

 * "git format-patch" quotes people's names when it has RFC822 special
   characters in it, e.g. "Junio C. Hamano" <jch@example.com>.  Earlier
   it was up to the user to do this when using its output.

 * "git log" and friends learned a new "--notes" option to replace the
   "--show-notes" option.  Unlike "--show-notes", "--notes=<ref>" does
   not imply showing the default notes.

 * "git merge" learned "-" as a short-hand for "the previous branch", just
   like the way "git checkout -" works.

 * "git merge" uses "merge.ff" configuration variable to decide to always
   create a merge commit (i.e. --no-ff, aka merge.ff=no), refuse to create
   a merge commit (i.e. --ff-only, aka merge.ff=only). Setting merge.ff=yes
   (or not setting it at all) restores the default behaviour of allowing
   fast-forward to happen when possible.

 * "git rebase" that does not specify on top of which branch to rebase
   the current branch now uses @{upstream} of the current branch.

 * "git rev-list --count" used with "--cherry-mark" counts the cherry-picked
   commits separately, producing more a useful output.

 * "git submodule update" learned "--force" option to get rid of local
   changes in submodules and replace them with the up-to-date version.

 * Compressed tarball gitweb generates is made without the timestamp of
   the tarball generation; snapshot from the same tree should result in
   a same tarball.

Also contains various documentation updates and minor miscellaneous
changes.


Fixes since v1.7.5
------------------

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

 * Setting $(prefix) in config.mak did not affect where etc/gitconfig
   file is read from, even though passing it from the command line of
   $(MAKE) did.
   (merge kk/maint-prefix-in-config-mak later)

 * The bash completion scripts should correctly work using zsh's bash
   completion emulation layer now.
   (merge either fc/completion-zsh later)

 * "git config" used to choke with an insanely long line.
   (merge ef/maint-strbuf-init later)

 * "git send-pack" (hence "git push") over smalt-HTTP protocol could
   deadlock when the client side pack-object died early.
   (merge js/maint-send-pack-stateless-rpc-deadlock-fix later)

---
exec >/var/tmp/1
echo O=$(git describe master)
O=v1.7.5.1-339-g254fd97
git shortlog --no-merges ^maint ^$O master
