Git v1.7.10.1 Release Notes
===========================

Additions since v1.7.10
-----------------------

Localization message files for Danish and German have been added.


Fixes since v1.7.10
-------------------

 * "git add -p" is not designed to deal with unmerged paths but did
   not exclude them and tried to apply funny patches only to fail.

 * "git blame" started missing quite a few changes from the origin
   since we stopped using the diff minimalization by default in v1.7.2
   era.

 * When PATH contains an unreadable directory, alias expansion code
   did not kick in, and failed with an error that said "git-subcmd"
   was not found.

 * "git clean -d -f" (not "-d -f -f") is supposed to protect nested
   working trees of independent git repositories that exist in the
   current project working tree from getting removed, but the
   protection applied only to such working trees that are at the
   top-level of the current project by mistake.

 * "git commit --author=$name" did not tell the name that was being
   recorded in the resulting commit to hooks, even though it does do
   so when the end user overrode the authorship via the
   "GIT_AUTHOR_NAME" environment variable.

 * When "git commit --template F" errors out because the user did not
   touch the message, it claimed that it aborts due to "empty
   message", which was utterly wrong.

 * The regexp configured with diff.wordregex was incorrectly reused
   across files.

 * An age-old corner case bug in combine diff (only triggered with -U0
   and the hunk at the beginning of the file needs to be shown) has
   been fixed.

 * Rename detection logic used to match two empty files as renames
   during merge-recursive, leading to unnatural mismerges.

 * The parser in "fast-import" did not diagnose ":9" style references
   that is not followed by required SP/LF as an error.

 * When "git fetch" encounters repositories with too many references,
   the command line of "fetch-pack" that is run by a helper
   e.g. remote-curl, may fail to hold all of them. Now such an
   internal invocation can feed the references through the standard
   input of "fetch-pack".

 * "git fetch" that recurses into submodules on demand did not check
   if it needs to go into submodules when non branches (most notably,
   tags) are fetched.

 * "log -p --graph" used with "--stat" had a few formatting error.

 * Running "notes merge --commit" failed to perform correctly when run
   from any directory inside $GIT_DIR/.  When "notes merge" stops with
   conflicts, $GIT_DIR/NOTES_MERGE_WORKTREE is the place a user edits
   to resolve it.

 * The 'push to upstream' implementation was broken in some corner
   cases. "git push $there" without refspec, when the current branch
   is set to push to a remote different from $there, used to push to
   $there using the upstream information to a remote unreleated to
   $there.

 * Giving "--continue" to a conflicted "rebase -i" session skipped a
   commit that only results in changes to submodules.

Also contains minor fixes and documentation updates.
