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)

* Boolean configuration variable yes/no can be written as on/off.

* 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".

* "--graph" to the "git log" family can draw the commit ancestry graph
  in colors.

* 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-add -p" now supports "q"uit action.

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

* git-archive takes attributes from the tree being archived; strictly
  speaking, this is an incompatible behaviour change, but is a good one.
  Use --worktree-attributes option to allow it to read attributes from
  the work tree as before (deprecated git-tar tree command always reads
  attributes from the work tree).

* 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-difftool is now part of the officially supported command, primarily
  maintained by David Aguilar.

* 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.

* "git-apply" rejected a patch that swaps two files (i.e. renames A to B
  and B to A at the same time).  May need to be backported by cherry
  picking d8c81df and then 7fac0ee).

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

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

---
exec >/var/tmp/1
O=v1.6.3-rc0-74-g9824a38
echo O=$(git describe master)
git shortlog --no-merges $O..master ^maint
