| Git v1.8.0 Release Notes | 
 | ======================== | 
 |  | 
 | Backward compatibility notes | 
 | ---------------------------- | 
 |  | 
 | In the next major release (not *this* one), we will change the | 
 | behavior of the "git push" command. | 
 |  | 
 | 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).  We will use 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, and | 
 | "git push" will warn about the upcoming change until you set this | 
 | variable in this release. | 
 |  | 
 | "git branch --set-upstream" is deprecated and may be removed in a | 
 | relatively distant future.  "git branch [-u|--set-upstream-to]" has | 
 | been introduced with a saner order of arguments. | 
 |  | 
 |  | 
 | Updates since v1.7.12 | 
 | --------------------- | 
 |  | 
 | UI, Workflows & Features | 
 |  | 
 |  * A credential helper for Win32 to allow access to the keychain of | 
 |    the logged-in user has been added. | 
 |  | 
 |  * An initial port to HP NonStop. | 
 |  | 
 |  * A credential helper to allow access to the Gnome keyring has been | 
 |    added. | 
 |  | 
 |  * When "git am" sanitizes the "Subject:" line, we strip the prefix from | 
 |    "Re: subject" and also from a less common "re: subject", but left | 
 |    the even less common "RE: subject" intact.  Now we strip that too. | 
 |  | 
 |  * It was tempting to say "git branch --set-upstream origin/master", | 
 |    but that tells Git to arrange the local branch "origin/master" to | 
 |    integrate with the currently checked out branch, which is highly | 
 |    unlikely what the user meant.  The option is deprecated; use the | 
 |    new "--set-upstream-to" (with a short-and-sweet "-u") option | 
 |    instead. | 
 |  | 
 |  * "git cherry-pick" learned the "--allow-empty-message" option to | 
 |    allow it to replay a commit without any log message. | 
 |  | 
 |  * After "git cherry-pick -s" gave control back to the user asking | 
 |    help to resolve conflicts, concluding "git commit" used to need to | 
 |    be run with "-s" if the user wants to sign it off; now the command | 
 |    leaves the sign-off line in the log template. | 
 |  | 
 |  * "git daemon" learned the "--access-hook" option to allow an | 
 |    external command to decline service based on the client address, | 
 |    repository path, etc. | 
 |  | 
 |  * "git difftool --dir-diff" learned to use symbolic links to prepare | 
 |    a temporary copy of the working tree when available. | 
 |  | 
 |  * "git grep" learned to use a non-standard pattern type by default if | 
 |    a configuration variable tells it to. | 
 |  | 
 |  * Accumulated updates to "git gui" has been merged. | 
 |  | 
 |  * "git log -g" learned the "--grep-reflog=<pattern>" option to limit | 
 |    its output to commits with a reflog message that matches the given | 
 |    pattern. | 
 |  | 
 |  * "git merge-base" learned the "--is-ancestor A B" option to tell if A is | 
 |    an ancestor of B.  The result is indicated by its exit status code. | 
 |  | 
 |  * "git mergetool" now allows users to override the actual command used | 
 |    with the mergetool.$name.cmd configuration variable even for built-in | 
 |    mergetool backends. | 
 |  | 
 |  * "git rebase -i" learned the "--edit-todo" option to open an editor | 
 |    to edit the instruction sheet. | 
 |  | 
 |  | 
 | Foreign Interface | 
 |  | 
 |  * "git svn" has been updated to work with SVN 1.7. | 
 |  | 
 |  * "git p4" learned the "--conflicts" option to specify what to do when | 
 |    encountering a conflict during "p4 submit". | 
 |  | 
 |  | 
 | Performance, Internal Implementation, etc. | 
 |  | 
 |  * Git ships with a fall-back regexp implementation for platforms with | 
 |    buggy regexp library, but it was easy for people to keep using their | 
 |    platform regexp by mistake.  A new test has been added to check this. | 
 |  | 
 |  * The "check-docs" build target has been updated and greatly | 
 |    simplified. | 
 |  | 
 |  * The test suite is run under MALLOC_CHECK_ when running with a glibc | 
 |    that supports the feature. | 
 |  | 
 |  * The documentation in the TeXinfo format was using indented output | 
 |    for materials meant to be examples that are better typeset in | 
 |    monospace. | 
 |  | 
 |  * Compatibility wrapper around some mkdir(2) implementations that | 
 |    reject parameters with trailing slash has been introduced. | 
 |  | 
 |  * Compatibility wrapper for systems that lack usable setitimer() has | 
 |    been added. | 
 |  | 
 |  * The option parsing of "git checkout" had error checking, dwim and | 
 |    defaulting missing options, all mixed in the code, and issuing an | 
 |    appropriate error message with useful context was getting harder. | 
 |    The code has been reorganized to allow giving a proper diagnosis | 
 |    when the user says "git checkout -b -t foo bar" (e.g. "-t" is not a | 
 |    good name for a branch). | 
 |  | 
 |  * Many internal uses of a "git merge-base" equivalent were only to see | 
 |    if one commit fast-forwards to the other, which did not need the | 
 |    full set of merge bases to be computed. They have been updated to | 
 |    use less expensive checks. | 
 |  | 
 |  * The heuristics to detect and silently convert latin1 to utf8 when | 
 |    we were told to use utf-8 in the log message has been transplanted | 
 |    from "mailinfo" to "commit" and "commit-tree". | 
 |  | 
 |  * Messages given by "git <subcommand> -h" from many subcommands have | 
 |    been marked for translation. | 
 |  | 
 |  | 
 | Also contains minor documentation updates and code clean-ups. | 
 |  | 
 |  | 
 | Fixes since v1.7.12 | 
 | ------------------- | 
 |  | 
 | Unless otherwise noted, all the fixes since v1.7.12 in the | 
 | maintenance track are contained in this release (see release notes | 
 | to them for details). | 
 |  | 
 |  * The attribute system may be asked for a path that itself or its | 
 |    leading directories no longer exists in the working tree, and it is | 
 |    fine if we cannot open .gitattribute file in such a case.  Failure | 
 |    to open per-directory .gitattributes with error status other than | 
 |    ENOENT and ENOTDIR should be diagnosed, but it wasn't. | 
 |  | 
 |  * When looking for $HOME/.gitconfig etc., it is OK if we cannot read | 
 |    them because they do not exist, but we did not diagnose existing | 
 |    files that we cannot read. | 
 |  | 
 |  * When "git am" is fed an input that has multiple "Content-type: ..." | 
 |    header, it did not grok charset= attribute correctly. | 
 |  | 
 |  * "git am" mishandled a patch attached as application/octet-stream | 
 |    (e.g. not text/*); Content-Transfer-Encoding (e.g. base64) was not | 
 |    honored correctly. | 
 |  | 
 |  * "git blame MAKEFILE" run in a history that has "Makefile" but not | 
 |    "MAKEFILE" should say "No such file MAKEFILE in HEAD", but got | 
 |    confused on a case insensitive filesystem and failed to do so. | 
 |  | 
 |  * Even during a conflicted merge, "git blame $path" always meant to | 
 |    blame uncommitted changes to the "working tree" version; make it | 
 |    more useful by showing cleanly merged parts as coming from the other | 
 |    branch that is being merged. | 
 |  | 
 |  * It was unclear in the documentation for "git blame" that it is | 
 |    unnecessary for users to use the "--follow" option. | 
 |  | 
 |  * Output from "git branch -v" contains "(no branch)" that could be | 
 |    localized, but the code to align it along with the names of | 
 |    branches was counting in bytes, not in display columns. | 
 |  | 
 |  * "git cherry-pick A C B" used to replay changes in A and then B and | 
 |    then C if these three commits had committer timestamps in that | 
 |    order, which is not what the user who said "A C B" naturally | 
 |    expects. | 
 |  | 
 |  * A repository created with "git clone --single" had its fetch | 
 |    refspecs set up just like a clone without "--single", leading the | 
 |    subsequent "git fetch" to slurp all the other branches, defeating | 
 |    the whole point of specifying "only this branch". | 
 |  | 
 |  * Documentation talked about "first line of commit log" when it meant | 
 |    the title of the commit.  The description was clarified by defining | 
 |    how the title is decided and rewording the casual mention of "first | 
 |    line" to "title". | 
 |  | 
 |  * "git cvsimport" did not thoroughly cleanse tag names that it | 
 |    inferred from the names of the tags it obtained from CVS, which | 
 |    caused "git tag" to barf and stop the import in the middle. | 
 |  | 
 |  * Earlier we made the diffstat summary line that shows the number of | 
 |    lines added/deleted localizable, but it was found irritating having | 
 |    to see them in various languages on a list whose discussion language | 
 |    is English, and this change has been reverted. | 
 |  | 
 |  * "git fetch --all", when passed "--no-tags", did not honor the | 
 |    "--no-tags" option while fetching from individual remotes (the same | 
 |    issue existed with "--tags", but the combination "--all --tags" makes | 
 |    much less sense than "--all --no-tags"). | 
 |  | 
 |  * "git fetch" over http had an old workaround for an unlikely server | 
 |    misconfiguration; it turns out that this hurts debuggability of the | 
 |    configuration in general, and has been reverted. | 
 |  | 
 |  * "git fetch" over http advertised that it supports "deflate", which | 
 |    is much less common, and did not advertise the more common "gzip" on | 
 |    its Accept-Encoding header. | 
 |  | 
 |  * "git fetch" over the dumb-http revision walker could segfault when | 
 |    curl's multi interface was used. | 
 |  | 
 |  * "git gc --auto" notified the user that auto-packing has triggered | 
 |     even under the "--quiet" option. | 
 |  | 
 |  * After "gitk" showed the contents of a tag, neither "Reread | 
 |    references" nor "Reload" updated what is shown as the | 
 |    contents of it when the user overwrote the tag with "git tag -f". | 
 |  | 
 |  * "git log --all-match --grep=A --grep=B" ought to show commits that | 
 |    mention both A and B, but when these three options are used with | 
 |    --author or --committer, it showed commits that mention either A or | 
 |    B (or both) instead. | 
 |  | 
 |  * The "-Xours" backend option to "git merge -s recursive" was ignored | 
 |    for binary files. | 
 |  | 
 |  * "git p4", when "--use-client-spec" and "--detect-branches" are used | 
 |    together, misdetected branches. | 
 |  | 
 |  * "git receive-pack" (the counterpart to "git push") did not give | 
 |    progress output while processing objects it received to the user | 
 |    when run over the smart-http protocol. | 
 |  | 
 |  * When you misspell the command name you give to the "exec" action in | 
 |    the "git rebase -i" instruction sheet you were told that 'rebase' is not a | 
 |    git subcommand from "git rebase --continue". | 
 |  | 
 |  * The subcommand in "git remote" to remove a defined remote was | 
 |    "rm" and the command did not take a fully-spelled "remove". | 
 |  | 
 |  * The interactive prompt that "git send-email" gives was error prone. It | 
 |    asked "What e-mail address do you want to use?" with the address it | 
 |    guessed (correctly) the user would want to use in its prompt, | 
 |    tempting the user to say "y". But the response was taken as "No, | 
 |    please use 'y' as the e-mail address instead", which is most | 
 |    certainly not what the user meant. | 
 |  | 
 |  * "git show --format='%ci'" did not give the timestamp correctly for | 
 |    commits created without human readable name on the "committer" line. | 
 |  | 
 |  * "git show --quiet" ought to be a synonym for "git show -s", but | 
 |    wasn't. | 
 |  | 
 |  * "git submodule frotz" was not diagnosed as "frotz" being an unknown | 
 |    subcommand to "git submodule"; the user instead got a complaint | 
 |    that "git submodule status" was run with an unknown path "frotz". | 
 |  | 
 |  * "git status" honored the ignore=dirty settings in .gitmodules but | 
 |    "git commit" didn't. | 
 |  | 
 |  * "gitweb" did not give the correct committer timezone in its feed | 
 |    output due to a typo. |