Git v1.8.3 Release Notes
========================

Backward compatibility notes (for Git 2.0)
------------------------------------------

When "git push [$there]" does not say what to push, we have used the
traditional "matching" semantics so far (all your branches were sent
to the remote as long as there already are branches of the same name
over there).  In Git 2.0, the default will change to the "simple"
semantics that pushes the current branch to the branch with the same
name, only when the current branch is set to integrate with that
remote branch.  There is a user preference configuration variable
"push.default" to change this.  If you are an old-timer who is used
to the "matching" semantics, you can set it to "matching" to keep the
traditional behaviour.  If you want to live in the future early,
you can set it to "simple" today without waiting for Git 2.0.

When "git add -u" and "git add -A", that does not specify what paths
to add on the command line is run from inside a subdirectory, these
commands will operate on the entire tree in Git 2.0 for consistency
with "git commit -a" and other commands. Because there will be no
mechanism to make "git add -u" behave as if "git add -u .", it is
important for those who are used to "git add -u" (without pathspec)
updating the index only for paths in the current subdirectory to start
training their fingers to explicitly say "git add -u ." when they mean
it before Git 2.0 comes.


Updates since v1.8.2
--------------------

UI, Workflows & Features

 * When the interactive access to git-shell is not enabled, it issues
   a message meant to help the system admininstrator to enable it.
   An explicit way to help the end users who connect to the service by
   issuing custom messages to refuse such an access has been added.

 * "git status" suggests users to look into using--untracked=no option
   when it takes too long.

 * "git fetch" learned to fetch a commit at the tip of an unadvertised
   ref by specifying a raw object name from the command line when the
   server side supports this feature.

 * "git count-objects -v" learned to report leftover temporary
   packfiles and other garbage in the object store.

 * A new read-only credential helper (in contrib/) to interact with
   the .netrc/.authinfo files has been added.

 * "git send-email" can be used with the credential helper system.


Foreign Interface



Performance, Internal Implementation, etc.

 * Updates for building under msvc.

 * A few codepaths knew how much data they need to put in the
   hashtables they use upfront, but still started from a small table
   repeatedly growing and rehashing.


Also contains minor documentation updates and code clean-ups.


Fixes since v1.8.2
------------------

Unless otherwise noted, all the fixes since v1.8.2 in the maintenance
track are contained in this release (see release notes to them for
details).

 * Clarify in the documentation "what" gets pushed to "where" when the
   command line to "git push" does not say these explicitly.
   (merge cfe1348 jc/maint-push-refspec-default-doc later to maint).

 * The "--color=<when>" argument to the commands in the diff family
   was described poorly.
   (merge 3d0e75f jc/color-diff-doc later to maint).

 * The arguments given to pre-rebase hook were not documented.
   (merge 0414acc wk/doc-pre-rebase later to maint).

 * The v4 index format was not documented.
   (merge 647d879 nd/doc-index-format later to maint).

 * The "--match=<pattern>" argument "git describe" takes uses glob
   pattern but it wasn't obvious from the documentation.
   (merge 5229149 gp/describe-match-uses-glob-pattern later to maint).

 * Some sources failed to compile on systems that lack NI_MAXHOST in
   their system header (e.g. z/OS).
   (merge 3b130ade dm/ni-maxhost-may-be-missing later to maint).

 * Add an example use of "--env-filter" in "filter-branch"
   documentation.
   (merge 21b6e4f tk/doc-filter-branch later to maint).

 * "git bundle verify" did not say "records a complete history" for a
   bundle that does not have any prerequisites.
   (merge a02ffe0 lf/bundle-verify-list-prereqs later to maint).

 * In the v1.8.0 era, we changed symbols that do not have to be global
   to file scope static, but a few functions in graph.c were used by
   CGit from sideways bypassing the entry points of the API the
   in-tree users use.
   (merge ac751a0 jk/graph-c-expose-symbols-for-cgit later to maint).

 * "git update-index -h" did not do the usual "-h(elp)" thing.

 * "git index-pack" had a buffer-overflow while preparing an
   informational message when the translated version of it was too
   long.
   (merge 5c3459f nd/index-pack-l10n-buf-overflow later to maint).

 * 'git commit -m "$msg"' used to add an extra newline even when
   $msg already ended with one.
   (merge 46fbf75 bc/commit-complete-lines-given-via-m-option later to maint).

 * The SSL peer verification done by "git imap-send" did not ask for
   Server Name Indication (RFC 4366), failing to connect SSL/TLS
   sites that serve multiple hostnames on a single IP.
   (merge 698a1ec ob/imap-send-ssl-verify later to maint).

 * perl/Git.pm::cat_blob slurped everything in core only to write it
   out to a file descriptor, which was not a very smart thing to do.
   (merge 712c6ad jc/perl-cat-blob later to maint).

 * "git branch" did not bother to check nonsense command line
   parameters and issue errors in many cases.
   (merge 8efb889 nd/branch-error-cases later to maint).

 * Verification of signed tags were not done correctly when not in C
   or en/US locale.
   (merge 0174eea mg/gpg-interface-using-status later to maint).

 * Some platforms and users spell UTF-8 differently; retry with the
   most official "UTF-8" when the system does not understand the
   user-supplied encoding name that are the common alternative
   spellings of UTF-8.
   (merge 5c680be jk/utf-8-can-be-spelled-differently later to maint).

 * When export-subst is used, "zip" output recorded incorrect
   size of the file.
   (merge d3c1472 rs/zip-compresssed-size-with-export-subst later to maint).

 * "git am $maildir/" applied messages in an unexpected order; sort
   filenames read from the maildir/ in a way that is more likely to
   sort messages in the order the writing MUA meant to, by sorting
   numeric segment in numeric order and non-numeric segment in
   alphabetical order.
   (merge 18505c3 jk/mailsplit-maildir-muttsort later to maint).

 * "git submodule update", when recursed into sub-submodules, did not
   acccumulate the prefix paths.
   (merge 75bf5e6 we/submodule-update-prefix-output later to maint).
