GIT v1.6.3 Release Notes
========================

With the next major release, "git push" into a branch that is
currently checked out will be refused by default.  You can choose
what should happen upon such a push by setting the configuration
variable receive.denyCurrentBranch in the receiving repository.

To ease the transition plan, the receiving repository of such a
push running this release will issue a big warning when the
configuration variable is missing.  Please refer to:

  http://git.or.cz/gitwiki/GitFaq#non-bare
  http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007

for more details on the reason why this change is needed and the
transition plan.

For a similar reason, "git push $there :$killed" to delete the branch
$killed in a remote repository $there, if $killed branch is the current
branch pointed at by its HEAD, gets a large warning.  You can choose what
should happen upon such a push by setting the configuration variable
receive.denyDeleteCurrent in the receiving repository.

When the user does not tell "git push" what to push, it has always
pushed matching refs.  For some people it is unexpected, and a new
configuration variable push.default has been introduced to allow
changing a different default behaviour.  To advertise the new feature,
a big warning is issued if this is not configured and a git push without
arguments is attempted.


Updates since v1.6.2
--------------------

(subsystems)

* various git-svn updates.

(performance)

* many uses of lstat(2) in the codepath for "git checkout" have been
  optimized out.

* pruning reflog entries that are unreachable from the tip of the ref
  during "git reflog prune" (hence "git gc") was very inefficient.

(usability, bells and whistles)

* rsync:/path/to/repo can be used to run git over rsync for local
  repositories.  It may not be useful in practice; meant primarily for
  testing.

* http transport learned to prompt and use password when fetching from or
  pushing to http://user@host.xz/ URL.

* (msysgit) progress output that is sent over the sideband protocol can
  be handled appropriately in Windows console.

* "--pretty=<style>" option to the log family of commands can now be
  spelled as "--format=<style>".  In addition, --format=%formatstring
  is a short-hand for --pretty=tformat:%formatstring.

* "--oneline" is a synonym for "--pretty=oneline --abbrev-commit".

* If you realize that you botched the patch when you are editing hunks
  with the 'edit' action in git-add -i/-p, you can abort the editor to
  tell git not to apply it.

* The number of commits shown in "you are ahead/behind your upstream"
  messages given by "git checkout" and "git status" used to count merge
  commits; now it doesn't.

* @{-1} is a new way to refer to the last branch you were on introduced in
  1.6.2, but the initial implementation did not teach this to a few
  commands.  Now the syntax works with "branch -m @{-1} newname".

* git-archive learned --output=<file> option.

* git-bisect shows not just the number of remaining commits whose goodness
  is unknown, but also shows the estimated number of remaining rounds.

* You can give --date=<format> option to git-blame.

* "git-branch -r" shows HEAD symref that points at a remote branch in
  interest of each tracked remote repository.

* "git-branch -v -v" is a new way to get list of names for branches and the
  "upstream" branch for them.

* git-config learned -e option to open an editor to edit the config file
  directly.

* git-clone runs post-checkout hook when run without --no-checkout.

* git-fast-export choked when seeing a tag that does not point at commit.

* git-for-each-ref learned a new "upstream" token.

* git-format-patch can be told to use attachment with a new configuration,
  format.attach.

* git-format-patch can be told to produce deep or shallow message threads.

* git-format-patch can be told to always add sign-off with a configuration
  variable.

* git-format-patch learned format.headers configuration to add extra
  header fields to the output.  This behaviour is similar to the existing
  --add-header=<header> option of the command.

* git-format-patch gives human readable names to the attached files, when
  told to send patches as attachments.

* git-grep learned to highlight the found substrings in color.

* git-imap-send learned to work around Thunderbird's inability to easily
  disable format=flowed with a new configuration, imap.preformattedHTML.

* git-rebase can be told to rebase the series even if your branch is a
  descendant of the commit you are rebasing onto with --force-rebase
  option.

* git-rebase can be told to report diffstat with the --stat option.

* Output from git-remote command has been vastly improved.

* "git remote update --prune $remote" updates from the named remote and
  then prunes stale tracking branches.

* git-send-email learned --confirm option to review the Cc: list before
  sending the messages out.

(developers)

* Test scripts can be run under valgrind.

* Test scripts can be run with installed git.

* Makefile learned 'coverage' option to run the test suites with
  coverage tracking enabled.

* Building the manpages with docbook-xsl between 1.69.1 and 1.71.1 now
  requires setting DOCBOOK_SUPPRESS_SP to work around a docbook-xsl bug.
  This workaround used to be enabled by default, but causes problems
  with newer versions of docbook-xsl.  In addition, there are a few more
  knobs you can tweak to work around issues with various versions of the
  docbook-xsl package.  See comments in Documentation/Makefile for details.

Fixes since v1.6.2
------------------

All of the fixes in v1.6.2.X maintenance series are included in this
release, unless otherwise noted.

Here are fixes that this release has, but have not been backported to
v1.6.2.X series.

* The initial checkout did not read the attributes from the .gitattribute
  file that is being checked out.

* "git-checkout <tree-ish> <submodule>" did not update the index entry at
  the named path; it now does.

* git-gc spent excessive amount of time to decide if an object appears
  in a locally existing pack (if needed, backport by merging 69e020a).

* "git-ls-tree" and "git-diff-tree" used a pathspec correctly when
  deciding to descend into a subdirectory but they did not match the
  individual paths correctly.  This caused pathspecs "abc/d ab" to match
  "abc/0" ("abc/d" made them decide to descend into the directory "abc/",
  and then "ab" incorrectly matched "abc/0" when it shouldn't).

* "git-merge-recursive" was broken when a submodule entry was involved in
  a criss-cross merge situation.

---
exec >/var/tmp/1
O=v1.6.2.3-497-g54a4749
echo O=$(git describe master)
git shortlog --no-merges $O..master ^maint
