Git v1.7.11.5 Release Notes
===========================

Fixes since v1.7.11.4
---------------------

 * The Makefile rule to create assembly output (primarily for
   debugging purposes) did not create it next to the source.

 * The code to avoid mistaken attempt to add the object directory
   itself as its own alternate could read beyond end of a string while
   comparison.

 * On some architectures, "block-sha1" did not compile correctly
   when compilers inferred alignment guarantees from our source we
   did not intend to make.

 * When talking to a remote running ssh on IPv6 enabled host, whose
   address is spelled as "[HOST]:PORT", we did not parse the address
   correctly and failed to connect.

 * git-blame.el (in compat/) have been updated to use Elisp more
   correctly.

 * "git checkout <branchname>" to come back from a detached HEAD state
   incorrectly computed reachability of the detached HEAD, resulting
   in unnecessary warnings.

 * "git mergetool" did not support --tool-help option to give the list
   of supported backends, like "git difftool" does.

 * "git grep" stopped spawning an external "grep" long time ago, but a
   duplicated test to check internal and external "grep" was left
   behind.

Also contains minor typofixes and documentation updates.
