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

Updates since v1.7.1
--------------------

 * The whitespace rules used in "git apply --whitespace" and "git diff"
   gained a new member in the family (tab-in-indent) to help projects with
   policy to indent only with spaces.

 * When working from a subdirectory, by default, git does not look for its
   metadirectory ".git" across filesystems, primarily to help people who
   have invocations of git in their custom PS1 prompts, as being outside
   of a git repository would look for ".git" all the way up to the root
   directory, and NFS mounts are often slow.  DISCOVERY_ACROSS_FILESYSTEM
   environment variable can be used to tell git not to stop at a
   filesystem boundary.

 * "git" wrapper learned "-c name=value" option to override configuration
   variable from the command line.

 * After "git apply --whitespace=fix" removed trailing blank lines in an
   patch in a patch series, it failed to apply later patches that depend
   on the presense of such blank lines.

 * The message from "git am -3" has been improved when conflict
   resolution ended up making the patch a no-op.

 * "git checkout --orphan newbranch" is similar to "-b newbranch" but
   prepares to create a root commit that is not connected to any existing
   commit.

 * "git commit --amend" on a commit with an invalid author-name line that
   lacks the display name didn't work (fb7749e4).

 * "git cvsserver" can be told to use pserver; its password file can be
   stored outside the repository.

 * The output from the textconv filter used by "git diff" can be cached to
   speed up their reuse.

 * "git diff --color" did not paint extended diff headers per line
   (i.e. the coloring escape sequence didn't end at the end of line),
   which confused "less -R".

 * "git diff --word-diff=<mode>" extends the existing "--color-words"
   option, making it more useful in color-challenged environments.

 * The regexp to detect function headers used by "git diff" for PHP has
   been enhanced for visibility modifiers (public, protected, etc.) to
   better support PHP5.

 * "diff.noprefix" configuration variable can be used to implicitly
   ask for "diff --no-prefix" behaviour.

 * "git for-each-ref" learned "%(objectname:short)" that gives the object
   name abbreviated.

 * Various options to "git grep" (e.g. --count, --name-only) work better
   with binary files.

 * "git help -w" learned "chrome" and "chromium" browsers.

 * "git log --follow <path>" follows across copies (it used to only follow
   renames).  This may make the processing more expensive.

 * "git ls-files ../out/side/cwd" works now.

 * "git notes prune" learned "-n" (dry-run) and "-v" options, similar to
   what "git prune" has.

 * "git patch-id" can be fed a mbox without getting confused by the
   signature line in the format-patch output.

 * "git remote" learned "set-branches" subcommand.

 * "git revert" learned --strategy option to specify the merge strategy.

 * "git status [-s] --ignored" can be used to list ignored paths.

 * "git status -s -b" shows the current branch in the output.

 * Various "gitweb" enhancements and clean-ups, including syntax
   highlighting, "plackup" support for instaweb, etc.


Fixes since v1.7.1
------------------

All of the fixes in v1.7.1.X maintenance series are included in this
release, unless otherwise noted.

 * We didn't recognize timezone "Z" as a synonym for "UTC" (75b37e70).

 * We didn't URL decode "file:///path/to/repo" correctly when path/to/repo
   had percent-encoded characters (638794c, 9d2e942).

 * "git checkout" and "git rebase" overwrote paths that are marked "assume
   unchanged" (aecda37c).

 * "git clone/fetch/pull" issued an incorrect error message when a ref and
   a symref that points to the ref were updated at the same time.  This
   obviously would update them to the same value, and should not result in
   an error condition (7223dcaf).

 * "git clone" did not configure remote.origin.url correctly for bare
   clones (df61c889).

 * "git diff" used to tell underlying xdiff machinery to work very hard to
   minimize the output, but this often was spending too many extra cycles
   for very little gain (582aa00).

 * "git diff --graph" works better with "--color-words" and other options
   (81fa024..4297c0a).

 * "git diff" could show ambiguous abbreviation of blob object names on
   its "index" line (3e5a188).

 * "git merge --log" used to replace the custom message given by "-m" with
   the shortlog, instead of appending to it (tc/merge-m-log).

 * "git pull" accepted "--dry-run", gave it to underlying "git fetch" but
   ignored the option itself, resulting in a bogus attempt to merge
   unrelated commit (29609e68).

 * "git reset --hard" started from a wrong directory and a working tree in
   a nonstandard location is in use got confused (560fb6a1).

 * "git show -C -C" and other corner cases lost diff metainfo output
   in 1.7.0 (296c6bb).

--
exec >/var/tmp/1
O=v1.7.1-423-gae391ec
echo O=$(git describe HEAD)
git shortlog --no-merges HEAD ^maint ^$O
