Git v2.4.1 Release Notes
========================

Fixes since v2.4
----------------

 * The usual "git diff" when seeing a file turning into a directory
   showed a patchset to remove the file and create all files in the
   directory, but "git diff --no-index" simply refused to work.  Also,
   when asked to compare a file and a directory, imitate POSIX "diff"
   and compare the file with the file with the same name in the
   directory, instead of refusing to run.

 * The default $HOME/.gitconfig file created upon "git config --global"
   that edits it had incorrectly spelled user.name and user.email
   entries in it.

 * "git commit --date=now" or anything that relies on approxidate lost
   the daylight-saving-time offset.

 * "git cat-file bl $blob" failed to barf even though there is no
   object type that is "bl".

 * Teach the codepaths that read .gitignore and .gitattributes files
   that these files encoded in UTF-8 may have UTF-8 BOM marker at the
   beginning; this makes it in line with what we do for configuration
   files already.

 * Access to objects in repositories that borrow from another one on a
   slow NFS server unnecessarily got more expensive due to recent code
   becoming more cautious in a naive way not to lose objects to pruning.

 * We avoid setting core.worktree when the repository location is the
   ".git" directory directly at the top level of the working tree, but
   the code misdetected the case in which the working tree is at the
   root level of the filesystem (which arguably is a silly thing to
   do, but still valid).

Also contains typofixes, documentation updates and trivial code
clean-ups.
