Git v1.6.6.2 Release Notes
==========================

Fixes since v1.6.6.1
--------------------

 * recursive merge didn't correctly diagnose its own programming errors,
   and instead caused the caller to segfault.

 * The new "smart http" aware clients probed the web servers to see if
   they support smart http, but did not fall back to dumb http transport
   correctly with some servers.

 * Time based reflog syntax e.g. "@{yesterday}" didn't diagnose a misspelled
   time specification and instead assumed "@{now}".

 * "git archive HEAD -- no-such-directory" produced an empty archive
   without complaining.

 * "git blame -L start,end -- file" misbehaved when given a start that is
   larger than the number of lines in the file.

 * "git checkout -m" didn't correctly call custom merge backend supplied
   by the end user.

 * "git config -f <file>" misbehaved when run from a subdirectory.

 * "git cvsserver" didn't like having regex metacharacters (e.g. '+') in
   CVSROOT environment.

 * "git fast-import" did not correctly handle large blobs that may
   bust the pack size limit.

 * "git gui" is supposed to work even when launched from inside a .git
   directory.

 * "git gui" misbehaved when applying a hunk that ends with deletion.

 * "git imap-send" did not honor imap.preformattedHTML as documented.

 * "git log" family incorrectly showed the commit notes unconditionally by
   mistake, which was especially irritating when running "git log --oneline".

 * "git status" shouldn't require an write access to the repository.

Other minor documentation updates are included.
