Git v2.1.1 Release Notes
========================

 * Git 2.0 had a regression where "git fetch" into a shallowly
   cloned repository from a repository with bitmap object index
   enabled did not work correctly.  This has been corrected.

 * Git 2.0 had a regression which broke (rarely used) "git diff-tree
   -t".  This has been corrected.

 * "git log --pretty/format=" with an empty format string did not
   mean the more obvious "No output whatsoever" but "Use default
   format", which was counterintuitive.  Now it means "nothing shown
   for the log message part".

 * "git -c section.var command" and "git -c section.var= command"
   should pass the configuration differently (the former should be a
   boolean true, the latter should be an empty string), but they
   didn't work that way.  Now it does.

 * Applying a patch not generated by Git in a subdirectory used to
   check the whitespace breakage using the attributes for incorrect
   paths. Also whitespace checks were performed even for paths
   excluded via "git apply --exclude=<path>" mechanism.

 * "git bundle create" with date-range specification were meant to
   exclude tags outside the range, but it did not work correctly.

 * "git add x" where x that used to be a directory has become a
   symbolic link to a directory misbehaved.

 * The prompt script checked $GIT_DIR/ref/stash file to see if there
   is a stash, which was a no-no.

 * "git checkout -m" did not switch to another branch while carrying
   the local changes forward when a path was deleted from the index.

 * With sufficiently long refnames, fast-import could have overflown
   an on-stack buffer.

 * After "pack-refs --prune" packed refs at the top-level, it failed
   to prune them.

 * "git gc --auto" triggered from "git fetch --quiet" was not quiet.
