GIT v1.5.4 Release Notes
========================

Removal
-------

 * "git svnimport" was removed in favor of "git svn".  It is still there
   in the source tree (contrib/examples) but unsupported.

 * As git-commit and git-status have been rewritten, "git runstatus"
   helper script lost all its users and has been removed.


Temporarily Disabled
--------------------

 * "git http-push" is known not to work well with cURL library older
   than 7.16, and we had reports of repository corruption.  It is
   disabled on such platforms for now.  Unfortunately, 1.5.3.8 shares
   the same issue.  In other words, this does not mean you will be
   fine if you stick to an older git release.  For now, please do not
   use http-push from older git with cURL older than 7.16 if you
   value your data. A proper fix will hopefully materialize in
   later versions.


Deprecation notices
-------------------

 * The next feature release of git (this change is scheduled for v1.6.0)
   will by default install dashed form of commands (e.g. "git-commit")
   outside of users' normal $PATH, and will install only selected
   commands ("git" itself, and "gitk") in $PATH.  This implies:

   - Using dashed forms of git commands (e.g. "git-commit") from the
     command line has been informally deprecated since early 2006, but
     now it officially is, and will be removed in the future.  Use
     dashless forms (e.g. "git commit") instead.

   - Using dashed forms from your scripts, without first prepending the
     return value from "git --exec-path" to the scripts' PATH, has been
     informally deprecated since early 2006, but now it officially is.

   - Use of dashed forms with "PATH=$(git --exec-path):$PATH; export
     PATH" early in your script is not deprecated with this change.

  Users are strongly encouraged to adjust their habits and scripts now
  to prepare for this.

 * The post-receive hook was introduced in March 2007 to supersede
   the post-update hook, primarily to overcome the command line length
   limitation of the latter.  Use of post-update hook will be deprecated
   in future versions of git, starting from v1.6.0.

 * "git lost-found" was deprecated in favor of "git fsck"'s --lost-found
   option, and will be removed in the future.

 * "git peek-remote" is deprecated, as "git ls-remote" was written in C
   and works for all transports; "git peek-remote" will be removed in
   the future.

 * "git repo-config" which was an old name for "git config" command
   has been supported without being advertised for a long time.  The
   next feature release will remove it.

 * From v1.6.0, the repack.usedeltabaseoffset config option will default
   to true, which will give denser packfiles (i.e. more efficient storage).
   The downside is that git older than version 1.4.4 will not be able
   to directly use a repository packed using this setting.

 * From v1.6.0, the pack.indexversion config option will default to 2,
   which is slightly more efficient, and makes repacking more immune to
   data corruptions.  Git older than version 1.5.2 may revert to version 1
   of the pack index with a manual "git index-pack" to be able to directly
   access corresponding pack files.


Updates since v1.5.3
--------------------

 * Comes with much improved gitk, with i18n.

 * Comes with "git gui" 0.9.1 with i18n.

 * gitk is now merged as a subdirectory of git.git project, in
   preparation for its i18n.

 * progress displays from many commands are a lot nicer to the eye.
   Transfer commands show throughput data.

 * many commands that pay attention to per-directory .gitignore now do
   so lazily, which makes the usual case go much faster.

 * Output processing for '--pretty=format:<user format>' has been
   optimized.

 * Rename detection of diff family while detecting exact matches has
   been greatly optimized.

 * Rename detection of diff family tries to make more natural looking
   pairing.  Earlier, if multiple identical rename sources were
   found in the preimage, the source used was picked pretty much at random.

 * Value "true" for color.diff and color.status configuration used to
   mean "always" (even when the output is not going to a terminal).
   This has been corrected to mean the same thing as "auto".

 * "git diff" Porcelain now respects diff.external configuration, which
   is another way to specify GIT_EXTERNAL_DIFF.

 * "git diff" can be told to use different prefixes other than
   "a/" and "b/" e.g. "git diff --src-prefix=l/ --dst-prefix=k/".

 * "git diff" sometimes did not quote paths with funny
   characters properly.

 * "git log" (and any revision traversal commands) misbehaved
   when --diff-filter is given but was not asked to actually
   produce diff.

 * HTTP proxy can be specified per remote repository using
   remote.*.httpproxy configuration, or global http.proxy configuration
   variable.

 * Various Perforce importer updates.

 * Example update and post-receive hooks have been improved.

 * Any command that wants to take a commit object name can now use
   ":/string" syntax to name a commit.

 * "git reset" is now built-in and its output can be squelched with -q.

 * "git reset --hard" does not make any sense in a bare
   repository, but did not error out; fixed.

 * "git send-email" can optionally talk over ssmtp and use SMTP-AUTH.

 * "git rebase" learned --whitespace option.

 * In "git rebase", when you decide not to replay a particular change
   after the command stopped with a conflict, you can say "git rebase
   --skip" without first running "git reset --hard", as the command now
   runs it for you.

 * "git rebase --interactive" mode can now work on detached HEAD.

 * Other minor to serious bugs in "git rebase -i" have been fixed.

 * "git rebase" now detaches head during its operation, so after a
   successful "git rebase" operation, the reflog entry branch@{1} for
   the current branch points at the commit before the rebase was
   started.

 * "git rebase -i" also triggers rerere to help your repeated merges.

 * "git merge" can call the "post-merge" hook.

 * "git pack-objects" can optionally run deltification with multiple
   threads.

 * "git archive" can optionally substitute keywords in files marked with
   export-subst attribute.

 * "git cherry-pick" made a misguided attempt to repeat the original
   command line in the generated log message, when told to cherry-pick a
   commit by naming a tag that points at it.  It does not anymore.

 * "git for-each-ref" learned %(xxxdate:<dateformat>) syntax to show the
   various date fields in different formats.

 * "git gc --auto" is a low-impact way to automatically run a variant of
   "git repack" that does not lose unreferenced objects (read: safer
   than the usual one) after the user accumulates too many loose
   objects.

 * "git clean" has been rewritten in C.

 * You need to explicitly set clean.requireForce to "false" to allow
   "git clean" without -f to do any damage (lack of the configuration
   variable used to mean "do not require -f option to lose untracked
   files", but we now use the safer default).

 * The kinds of whitespace errors "git diff" and "git apply" notice (and
   fix) can be controlled via 'core.whitespace' configuration variable
   and 'whitespace' attribute in .gitattributes file.

 * "git push" learned --dry-run option to show what would happen if a
   push is run.

 * "git push" does not update a tracking ref on the local side when the
   remote refused to update the corresponding ref.

 * "git push" learned --mirror option.  This is to push the local refs
   one-to-one to the remote, and deletes refs from the remote that do
   not exist anymore in the repository on the pushing side.

 * "git push" can remove a corrupt ref at the remote site with the usual
   ":ref" refspec.

 * "git remote" knows --mirror mode.  This is to set up configuration to
   push into a remote repository to store local branch heads to the same
   branch on the remote side, and remove branch heads locally removed
   from local repository at the same time.  Suitable for pushing into a
   back-up repository.

 * "git remote" learned "rm" subcommand.

 * "git cvsserver" can be run via "git shell".  Also, "cvs" is
   recognized as a synonym for "git cvsserver", so that CVS users
   can be switched to git just by changing their login shell.

 * "git cvsserver" acts more like receive-pack by running post-receive
   and post-update hooks.

 * "git am" and "git rebase" are far less verbose.

 * "git pull" learned to pass --[no-]ff option to underlying "git
   merge".

 * "git pull --rebase" is a different way to integrate what you fetched
   into your current branch.

 * "git fast-export" produces datastream that can be fed to fast-import
   to reproduce the history recorded in a git repository.

 * "git add -i" takes pathspecs to limit the set of files to work on.

 * "git add -p" is a short-hand to go directly to the selective patch
   subcommand in the interactive command loop and to exit when done.

 * "git add -i" UI has been colorized.  The interactive prompt
   and menu can be colored by setting color.interactive
   configuration.  The diff output (including the hunk picker)
   are colored with color.diff configuration.

 * "git commit --allow-empty" allows you to create a single-parent
   commit that records the same tree as its parent, overriding the usual
   safety valve.

 * "git commit --amend" can amend a merge that does not change the tree
   from its first parent.

 * "git commit" used to unconditionally strip comment lines that
   began with '#' and removed excess blank lines.  This
   behaviour has been made configurable.

 * "git commit" has been rewritten in C.

 * "git stash random-text" does not create a new stash anymore.  It was
   a UI mistake.  Use "git stash save random-text", or "git stash"
   (without extra args) for that.

 * "git stash clear extra-text" does not clear the whole stash
   anymore.  It is tempting to expect "git stash clear stash@{2}"
   to drop only a single named stash entry, and it is rude to
   discard everything when that is asked (but not provided).

 * "git prune --expire <time>" can exempt young loose objects from
   getting pruned.

 * "git branch --contains <commit>" can list branches that are
   descendants of a given commit.

 * "git log" learned --early-output option to help interactive GUI
   implementations.

 * "git bisect" learned "skip" action to mark untestable commits.

 * "git bisect visualize" learned a shorter synonym "git bisect view".

 * "git bisect visualize" runs "git log" in a non-windowed
   environments.  It also can be told what command to run (e.g. "git
   bisect visualize tig").

 * "git format-patch" learned "format.numbered" configuration variable
   to automatically turn --numbered option on when more than one commits
   are formatted.

 * "git ls-files" learned "--exclude-standard" to use the canned set of
   exclude files.

 * "git tag -a -f existing" begins the editor session using the existing
   annotation message.

 * "git tag -m one -m bar" (multiple -m options) behaves similarly to
   "git commit"; the parameters to -m options are formatted as separate
   paragraphs.

 * The format "git show" outputs an annotated tag has been updated to
   include "Tagger: " and "Date: " lines from the tag itself.  Strictly
   speaking this is a backward incompatible change, but this is a
   reasonable usability fix and people's scripts shouldn't have been
   relying on the exact output from "git show" Porcelain anyway.

 * "git cvsimport" did not notice errors from underlying "cvsps"
   and produced a corrupt import silently.

 * "git cvsexportcommit" learned -w option to specify and switch to the
   CVS working directory.

 * "git checkout" from a subdirectory learned to use "../path" to allow
   checking out a path outside the current directory without cd'ing up.

 * "git checkout" from and to detached HEAD leaves a bit more
   information in the reflog.

 * "git send-email --dry-run" shows full headers for easier diagnosis.

 * "git merge-ours" is now built-in.

 * "git svn" learned "info" and "show-externals" subcommands.

 * "git svn" run from a subdirectory failed to read settings from the
   .git/config.

 * "git svn" learned --use-log-author option, which picks up more
   descriptive name from From: and Signed-off-by: lines in the commit
   message.

 * "git svn" wasted way too much disk to record revision mappings
   between svn and git; a new representation that is much more compact
   for this information has been introduced to correct this.

 * "git svn" left temporary index files it used without cleaning them
   up; this was corrected.

 * "git status" from a subdirectory now shows relative paths, which
   makes copy-and-pasting for git-checkout/git-add/git-rm easier.  The
   traditional behaviour to show the full path relative to the top of
   the work tree can be had by setting status.relativepaths
   configuration variable to false.

 * "git blame" kept text for each annotated revision in core needlessly;
   this has been corrected.

 * "git shortlog" learned to default to HEAD when the standard input is
   a terminal and the user did not give any revision parameter.

 * "git shortlog" learned "-e" option to show e-mail addresses as well as
   authors' names.

 * "git help" learned "-w" option to show documentation in browsers.

 * In addition there are quite a few internal clean-ups. Notably

   - many fork/exec have been replaced with run-command API,
     brought from the msysgit effort.

   - introduction and more use of the option parser API.

   - enhancement and more use of the strbuf API.


Fixes since v1.5.3
------------------

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

These fixes are only in v1.5.4 and not backported to v1.5.3 maintenance
series.

 * The way "git diff --check" behaves is much more consistent with the way
   "git apply --whitespace=warn" works.

 * "git svn" talking with the SVN over http will correctly quote branch
   and project names.

 * "git config" did not work correctly on platforms that define
   REG_NOMATCH to an even number.

 * Recent versions of AsciiDoc 8 has a change to break our
   documentation; a workaround has been implemented.

 * "git diff --color-words" colored context lines in a wrong color.

--
exec >/var/tmp/1
O=v1.5.4-rc4
echo O=`git describe refs/heads/master`
git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint
