Git v1.7.2 Release Notes
========================

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

 * core.eol configuration and text/eol attributes are the new way to control
   the end of line conventions for files in the working tree.

 * core.autocrlf has been made safer - it will now only handle line
   endings for new files and files that are LF-only in the
   repository. To normalize content that has been checked in with
   CRLF, use the new eol/text attributes.

 * 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.

 * Usage help messages generated by parse-options library (i.e. most
   of the Porcelain commands) are sent to the standard output now.

 * ':/<string>' notation to look for a commit now takes regular expression
   and it is not anchored at the beginning of the commit log message
   anymore (this is a backward incompatible change).

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

 * Improved portability for various platforms including older SunOS,
   HP-UX 10/11, AIX, Tru64, etc. and platforms with Python 2.4.

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

 * "git blame" applies the textconv filter to the contents it works
   on, when available.

 * "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 cherry-pick" learned to pick a range of commits
   (e.g. "cherry-pick A..B" and "cherry-pick --stdin"), so did "git
   revert"; these do not support the nicer sequencing control "rebase
   [-i]" has, though.

 * "git cherry-pick" and "git revert" learned --strategy option to specify
   the merge strategy to be used when performing three-way merges.

 * "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 --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.

 * "git format-patch" learned --signature option and format.signature
   configuration variable to customize the e-mail signature used in the
   output.

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

 * "git grep" learned "-Ovi" to open the files with hits in your editor.

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

 * "git log --decorate" shows commit decorations in various colours.

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

 * "git log --pretty=format:<template>" specifier learned "% <something>"
   magic that inserts a space only when %<something> expands to a
   non-empty string; this is similar to "%+<something>" magic, but is
   useful in a context to generate a single line output.

 * "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 rev-list A..B" learned --ancestry-path option to further limit
   the result to the commits that are on the ancestry chain between A and
   B (i.e. commits that are not descendants of A are excluded).

 * "git show -5" is equivalent to "git show --do-walk 5"; this is similar
   to the update to make "git show master..next" walk the history,
   introduced in 1.6.4.

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

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

 * "git status" learned "--ignore-submodules" option.

 * Various "gitweb" enhancements and clean-ups, including syntax
   highlighting, "plackup" support for instaweb, .fcgi suffix to run
   it as FastCGI script, etc.

 * The test harness has been updated to produce TAP-friendly output.

 * Many documentation improvement patches are also included.


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 URL decode "file:///path/to/repo" correctly when path/to/repo
   had percent-encoded characters (638794c, 9d2e942, ce83eda, 3c73a1d).

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

 * "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 reset --hard" started from a wrong directory and a working tree in
   a nonstandard location is in use got confused (560fb6a1).

 * "git read-tree -m A B" used to switch to branch B while retaining
   local changes added an incorrect cache-tree information (b1f47514).
