486 lines
		
	
	
	
		
			21 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			486 lines
		
	
	
	
		
			21 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| Git v1.8.4 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:
 | |
| 
 | |
|  - only the current branch to the branch with the same name, and only
 | |
|    when the current branch is set to integrate with that remote
 | |
|    branch, if you are pushing to the same remote as you fetch from; or
 | |
| 
 | |
|  - only the current branch to the branch with the same name, if you
 | |
|    are pushing to a remote that is not where you usually fetch from.
 | |
| 
 | |
| Use the 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 the variable 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") is run inside a subdirectory and
 | |
| does not specify which paths to add on the command line, it
 | |
| will operate on the entire tree in Git 2.0 for consistency
 | |
| with "git commit -a" and other commands.  There will be no
 | |
| mechanism to make plain "git add -u" behave like "git add -u .".
 | |
| Current users of "git add -u" (without a pathspec) should start
 | |
| training their fingers to explicitly say "git add -u ."
 | |
| before Git 2.0 comes.  A warning is issued when these commands are
 | |
| run without a pathspec and when you have local changes outside the
 | |
| current directory, because the behaviour in Git 2.0 will be different
 | |
| from today's version in such a situation.
 | |
| 
 | |
| In Git 2.0, "git add <path>" will behave as "git add -A <path>", so
 | |
| that "git add dir/" will notice paths you removed from the directory
 | |
| and record the removal.  Versions before Git 2.0, including this
 | |
| release, will keep ignoring removals, but the users who rely on this
 | |
| behaviour are encouraged to start using "git add --ignore-removal <path>"
 | |
| now before 2.0 is released.
 | |
| 
 | |
| 
 | |
| Updates since v1.8.3
 | |
| --------------------
 | |
| 
 | |
| Foreign interfaces, subsystems and ports.
 | |
| 
 | |
|  * Cygwin port has been updated for more recent Cygwin 1.7.
 | |
| 
 | |
|  * "git rebase -i" now honors --strategy and -X options.
 | |
| 
 | |
|  * Git-gui has been updated to its 0.18.0 version.
 | |
| 
 | |
|  * MediaWiki remote helper (in contrib/) has been updated to use the
 | |
|    credential helper interface from Git.pm.
 | |
| 
 | |
|  * Update build for Cygwin 1.[57].  Torsten Bögershausen reports that
 | |
|    this is fine with Cygwin 1.7 ($gmane/225824) so let's try moving it
 | |
|    ahead.
 | |
| 
 | |
|  * The credential helper to talk to keychain on OS X (in contrib/) has
 | |
|    been updated to kick in not just when talking http/https but also
 | |
|    imap(s) and smtp.
 | |
| 
 | |
|  * Remote transport helper has been updated to report errors and
 | |
|    maintain ref hierarchy used to keep track of its own state better.
 | |
| 
 | |
|  * With "export" remote-helper protocol, (1) a push that tries to
 | |
|    update a remote ref whose name is different from the pushing side
 | |
|    does not work yet, and (2) the helper may not know how to do
 | |
|    --dry-run; these problematic cases are disabled for now.
 | |
| 
 | |
|  * git-remote-hg/bzr (in contrib/) updates.
 | |
| 
 | |
|  * git-remote-mw (in contrib/) hints users to check the certificate,
 | |
|    when https:// connection failed.
 | |
| 
 | |
|  * git-remote-mw (in contrib/) adds a command to allow previewing the
 | |
|    contents locally before pushing it out, when working with a
 | |
|    MediaWiki remote.
 | |
| 
 | |
| 
 | |
| UI, Workflows & Features
 | |
| 
 | |
|  * Sample "post-receive-email" hook script got an enhanced replacement
 | |
|    "multimail" (in contrib/).
 | |
| 
 | |
|  * Also in contrib/ is a new "contacts" script that runs "git blame"
 | |
|    to find out the people who may be interested in a set of changes.
 | |
| 
 | |
|  * "git clean" command learned an interactive mode.
 | |
| 
 | |
|  * The "--head" option to "git show-ref" was only to add "HEAD" to the
 | |
|    list of candidate refs to be filtered by the usual rules
 | |
|    (e.g. "--heads" that only show refs under refs/heads).  The meaning
 | |
|    of the option has been changed to always show "HEAD" regardless of
 | |
|    what filtering will be applied to any other ref.
 | |
| 
 | |
|    This is a backward incompatible change and might cause breakages to
 | |
|    people's existing scripts.
 | |
| 
 | |
|  * "git show -s" was less discoverable than it should have been.  It
 | |
|    now has a natural synonym "git show --no-patch".
 | |
| 
 | |
|  * "git check-mailmap" is a new command that lets you map usernames
 | |
|    and e-mail addresses through the mailmap mechanism, just like many
 | |
|    built-in commands do.
 | |
| 
 | |
|  * "git name-rev" learned to name an annotated tag object back to its
 | |
|    tagname; "git name-rev $(git rev-parse v1.0.0)" gives "tags/v1.0.0",
 | |
|    for example.
 | |
| 
 | |
|  * "git cat-file --batch-check=<format>" is added, primarily to allow
 | |
|    on-disk footprint of objects in packfiles (often they are a lot
 | |
|    smaller than their true size, when expressed as deltas) to be
 | |
|    reported.
 | |
| 
 | |
|  * "git rebase [-i]" used to leave just "rebase" as its reflog messages
 | |
|    for some operations. They have been reworded to be more informative.
 | |
| 
 | |
|  * In addition to the choice from "rebase, merge, or checkout-detach",
 | |
|    "submodule update" can allow a custom command to be used in to
 | |
|    update the working tree of submodules via the "submodule.*.update"
 | |
|    configuration variable.
 | |
| 
 | |
|  * "git submodule update" can optionally clone the submodule
 | |
|    repositories shallowly.
 | |
| 
 | |
|  * "git format-patch" learned "--from[=whom]" option, which sets the
 | |
|    "From: " header to the specified person (or the person who runs the
 | |
|    command, if "=whom" part is missing) and move the original author
 | |
|    information to an in-body From: header as necessary.
 | |
| 
 | |
|  * The configuration variable "merge.ff" was cleary a tri-state to
 | |
|    choose one from "favor fast-forward when possible", "always create
 | |
|    a merge even when the history could fast-forward" and "do not
 | |
|    create any merge, only update when the history fast-forwards", but
 | |
|    the command line parser did not implement the usual convention of
 | |
|    "last one wins, and command line overrides the configuration"
 | |
|    correctly.
 | |
| 
 | |
|  * "gitweb" learned to optionally place extra links that point at the
 | |
|    levels higher than the Gitweb pages themselves in the breadcrumbs,
 | |
|    so that it can be used as part of a larger installation.
 | |
| 
 | |
|  * "git log --format=" now honors i18n.logoutputencoding configuration
 | |
|    variable.
 | |
| 
 | |
|  * The "push.default=simple" mode of "git push" has been updated to
 | |
|    behave like "current" without requiring a remote tracking
 | |
|    information, when you push to a remote that is different from where
 | |
|    you fetch from (i.e. a triangular workflow).
 | |
| 
 | |
|  * Having multiple "fixup!" on a line in the rebase instruction sheet
 | |
|    did not work very well with "git rebase -i --autosquash".
 | |
| 
 | |
|  * "git log" learned the "--author-date-order" option, with which the
 | |
|    output is topologically sorted and commits in parallel histories
 | |
|    are shown intermixed together based on the author timestamp.
 | |
| 
 | |
|  * Various subcommands of "git submodule" refused to run from anywhere
 | |
|    other than the top of the working tree of the superproject, but
 | |
|    they have been taught to let you run from a subdirectory.
 | |
| 
 | |
|  * "git diff" learned a mode that ignores hunks whose change consists
 | |
|    only of additions and removals of blank lines, which is the same as
 | |
|    "diff -B" (ignore blank lines) of GNU diff.
 | |
| 
 | |
|  * "git rm" gives a single message followed by list of paths to report
 | |
|    multiple paths that cannot be removed.
 | |
| 
 | |
|  * "git rebase" can be told with ":/look for this string" syntax commits
 | |
|    to replay the changes onto and where the work to be replayed begins.
 | |
| 
 | |
|  * Many tutorials teach users to set "color.ui" to "auto" as the first
 | |
|    thing after you set "user.name/email" to introduce yourselves to
 | |
|    Git.  Now the variable defaults to "auto".
 | |
| 
 | |
|  * On Cygwin, "cygstart" is now recognised as a possible way to start
 | |
|    a web browser (used in "help -w" and "instaweb" among others).
 | |
| 
 | |
|  * "git status" learned status.branch and status.short configuration
 | |
|    variables to use --branch and --short options by default (override
 | |
|    with --no-branch and --no-short options from the command line).
 | |
| 
 | |
|  * "git cmd <name>", when <name> happens to be a 40-hex string,
 | |
|    directly uses the 40-hex string as an object name, even if a ref
 | |
|    "refs/<some hierarchy>/<name>" exists.  This disambiguation order
 | |
|    is unlikely to change, but we should warn about the ambiguity just
 | |
|    like we warn when more than one refs/ hierarchies share the same
 | |
|    name.
 | |
| 
 | |
|  * "git rebase" learned "--[no-]autostash" option to save local
 | |
|    changes instead of refusing to run (to which people's normal
 | |
|    response was to stash them and re-run).  This introduced a corner
 | |
|    case breakage to "git am --abort" but it has been fixed.
 | |
| 
 | |
|  * "check-ignore" (new feature since 1.8.2) has been updated to work
 | |
|    more like "check-attr" over bidi-pipes.
 | |
| 
 | |
|  * "git describe" learned "--first-parent" option to limit its closest
 | |
|    tagged commit search to the first-parent chain.
 | |
| 
 | |
|  * "git merge foo" that might have meant "git merge origin/foo" is
 | |
|    diagnosed with a more informative error message.
 | |
| 
 | |
|  * "git log -L<line>,<range>:<filename>" has been added.  This may
 | |
|    still have leaks and rough edges, though.
 | |
| 
 | |
|  * We used the approxidate() parser for "--expire=<timestamp>" options
 | |
|    of various commands, but it is better to treat --expire=all and
 | |
|    --expire=now a bit more specially than using the current timestamp.
 | |
|    "git gc" and "git reflog" have been updated with a new parsing
 | |
|    function for expiry dates.
 | |
| 
 | |
|  * Updates to completion (both bash and zsh) helpers.
 | |
| 
 | |
|  * The behaviour of the "--chain-reply-to" option of "git send-email"
 | |
|    have changed at 1.7.0, and we added a warning/advice message to
 | |
|    help users adjust to the new behaviour back then, but we kept it
 | |
|    around for too long.  The message has finally been removed.
 | |
| 
 | |
|  * "git fetch origin master" unlike "git fetch origin" or "git fetch"
 | |
|    did not update "refs/remotes/origin/master"; this was an early
 | |
|    design decision to keep the update of remote tracking branches
 | |
|    predictable, but in practice it turns out that people find it more
 | |
|    convenient to opportunistically update them whenever we have a
 | |
|    chance, and we have been updating them when we run "git push" which
 | |
|    already breaks the original "predictability" anyway.
 | |
| 
 | |
|  * The configuration variable core.checkstat was advertised in the
 | |
|    documentation but the code expected core.statinfo instead.
 | |
|    For now, we accept both core.checkstat and core.statinfo, but the
 | |
|    latter will be removed in the longer term.
 | |
| 
 | |
| 
 | |
| Performance, Internal Implementation, etc.
 | |
| 
 | |
|  * On Cygwin, we used to use our own lstat(2) emulation that is
 | |
|    allegedly faster than the platform one in codepaths where some of
 | |
|    the information it returns did not matter, but it started to bite
 | |
|    us in a few codepaths where the trick it uses to cheat does show
 | |
|    breakages. This emulation has been removed and we use the native
 | |
|    lstat(2) emulation supplied by Cygwin now.
 | |
| 
 | |
|  * The function attributes extensions are used to catch mistakes in
 | |
|    use of our own variadic functions that use NULL sentinel at the end
 | |
|    (i.e. like execl(3)) and format strings (i.e. like printf(3)).
 | |
| 
 | |
|  * The code to allow configuration data to be read from in-tree blob
 | |
|    objects is in.  This may help working in a bare repository and
 | |
|    submodule updates.
 | |
| 
 | |
|  * Fetching between repositories with many refs employed O(n^2)
 | |
|    algorithm to match up the common objects, which has been corrected.
 | |
| 
 | |
|  * The original way to specify remote repository using .git/branches/
 | |
|    used to have a nifty feature.  The code to support the feature was
 | |
|    still in a function but the caller was changed not to call it 5
 | |
|    years ago, breaking that feature and leaving the supporting code
 | |
|    unreachable.  The dead code has been removed.
 | |
| 
 | |
|  * "git pack-refs" that races with new ref creation or deletion have
 | |
|    been susceptible to lossage of refs under right conditions, which
 | |
|    has been tightened up.
 | |
| 
 | |
|  * We read loose and packed references in two steps, but after
 | |
|    deciding to read a loose ref but before actually opening it to read
 | |
|    it, another process racing with us can unlink it, which would cause
 | |
|    us to barf.  The codepath has been updated to retry when such a
 | |
|    race is detected, instead of outright failing.
 | |
| 
 | |
|  * Uses of the platform fnmatch(3) function (many places in the code,
 | |
|    matching pathspec, .gitignore and .gitattributes to name a few)
 | |
|    have been replaced with wildmatch, allowing "foo/**/bar" that would
 | |
|    match foo/bar, foo/a/bar, foo/a/b/bar, etc.
 | |
| 
 | |
|  * Memory ownership and lifetime rules for what for-each-ref feeds to
 | |
|    its callbacks have been clarified (in short, "you do not own it, so
 | |
|    make a copy if you want to keep it").
 | |
| 
 | |
|  * The revision traversal logic to improve culling of irrelevant
 | |
|    parents while traversing a mergy history has been updated.
 | |
| 
 | |
|  * Some leaks in unpack-trees (used in merge, cherry-pick and other
 | |
|    codepaths) have been plugged.
 | |
| 
 | |
|  * The codepath to read from marks files in fast-import/export did not
 | |
|    have to accept anything but 40-hex representation of the object
 | |
|    name.  Further, fast-export did not need full in-core object
 | |
|    representation to have parsed wen reading from them.  These
 | |
|    codepaths have been optimized by taking advantage of these access
 | |
|    patterns.
 | |
| 
 | |
|  * Object lookup logic, when the object hashtable starts to become
 | |
|    crowded, has been optimized.
 | |
| 
 | |
|  * When TEST_OUTPUT_DIRECTORY setting is used, it was handled somewhat
 | |
|    inconsistently between the test framework and t/Makefile, and logic
 | |
|    to summarize the results looked at a wrong place.
 | |
| 
 | |
|  * "git clone" uses a lighter-weight implementation when making sure
 | |
|    that the history behind refs are complete.
 | |
| 
 | |
|  * Many warnings from sparse source checker in compat/ area has been
 | |
|    squelched.
 | |
| 
 | |
|  * The code to reading and updating packed-refs file has been updated,
 | |
|    correcting corner case bugs.
 | |
| 
 | |
| 
 | |
| Also contains various documentation updates and code clean-ups.
 | |
| 
 | |
| 
 | |
| Fixes since v1.8.3
 | |
| ------------------
 | |
| 
 | |
| Unless otherwise noted, all the fixes since v1.8.3 in the maintenance
 | |
| track are contained in this release (see release notes to them for
 | |
| details).
 | |
| 
 | |
|  * Newer Net::SMTP::SSL module does not want the user programs to use
 | |
|    the default behaviour to let server certificate go without
 | |
|    verification, so by default enable the verification with a
 | |
|    mechanism to turn it off if needed.
 | |
|    (merge 35035bb rr/send-email-ssl-verify later to maint).
 | |
| 
 | |
|  * When "git" is spawned in such a way that any of the low 3 file
 | |
|    descriptors is closed, our first open() may yield file descriptor 2,
 | |
|    and writing error message to it would screw things up in a big way.
 | |
|    (merge a11c396 tr/protect-low-3-fds later to maint).
 | |
| 
 | |
|  * The mailmap mechanism unnecessarily downcased the e-mail addresses
 | |
|    in the output, and also ignored the human name when it is a single
 | |
|    character name.
 | |
|    (merge bd23794 jc/mailmap-case-insensitivity later to maint).
 | |
| 
 | |
|  * In two places we did not check return value (expected to be a file
 | |
|    descriptor) correctly.
 | |
|    (merge a77f106 tr/fd-gotcha-fixes later to maint).
 | |
| 
 | |
|  * Logic to auto-detect character encodings in the commit log message
 | |
|    did not reject overlong and invalid UTF-8 characters.
 | |
|    (merge 81050ac bc/commit-invalid-utf8 later to maint).
 | |
| 
 | |
|  * Pass port number as a separate argument when "send-email" initializes
 | |
|    Net::SMTP, instead of as a part of the hostname, i.e. host:port.
 | |
|    This allows GSSAPI codepath to match with the hostname given.
 | |
|    (merge 1a741bf bc/send-email-use-port-as-separate-param later to maint).
 | |
| 
 | |
|  * "git diff" refused to even show difference when core.safecrlf is
 | |
|    set to true (i.e. error out) and there are offending lines in the
 | |
|    working tree files.
 | |
|    (merge 5430bb2 jc/maint-diff-core-safecrlf later to maint).
 | |
| 
 | |
|  * A test that should have failed but didn't revealed a bug that needs
 | |
|    to be corrected.
 | |
|    (merge 94d75d1 jc/t1512-fix later to maint).
 | |
| 
 | |
|  * An overlong path to a .git directory may have overflown the
 | |
|    temporary path buffer used to create a name for lockfiles.
 | |
|    (merge 2fbd4f9 mh/maint-lockfile-overflow later to maint).
 | |
| 
 | |
|  * Invocations of "git checkout" used internally by "git rebase" were
 | |
|    counted as "checkout", and affected later "git checkout -" to the
 | |
|    the user to an unexpected place.
 | |
|    (merge 3bed291 rr/rebase-checkout-reflog later to maint).
 | |
| 
 | |
|  * The configuration variable column.ui was poorly documented.
 | |
|    (merge 5e62cc1 rr/column-doc later to maint).
 | |
| 
 | |
|  * "git name-rev --refs=tags/v*" were forbidden, which was a bit
 | |
|    inconvenient (you had to give a pattern to match refs fully, like
 | |
|    --refs=refs/tags/v*).
 | |
|    (merge 98c5c4a nk/name-rev-abbreviated-refs later to maint).
 | |
| 
 | |
|  * "git apply" parsed patches that add new files, generated by
 | |
|    programs other than Git, incorrectly.  This is an old breakage in
 | |
|    v1.7.11 and will need to be merged down to the maintenance tracks.
 | |
| 
 | |
|  * Older cURL wanted piece of memory we call it with to be stable, but
 | |
|    we updated the auth material after handing it to a call.
 | |
| 
 | |
|  * "git pull" into nothing trashed "local changes" that were in the
 | |
|    index, and this avoids it.
 | |
| 
 | |
|  * Many "git submodule" operations do not work on a submodule at a
 | |
|    path whose name is not in ASCII.
 | |
| 
 | |
|  * "cherry-pick" had a small leak in an error codepath.
 | |
| 
 | |
|  * Logic used by git-send-email to suppress cc mishandled names like
 | |
|    "A U. Thor" <author@example.xz>, where the human readable part
 | |
|    needs to be quoted (the user input may not have the double quotes
 | |
|    around the name, and comparison was done between quoted and
 | |
|    unquoted strings).  It also mishandled names that need RFC2047
 | |
|    quoting.
 | |
| 
 | |
|  * Call to discard_cache/discard_index (used when we use different
 | |
|    contents of the index in-core, in many operations like commit,
 | |
|    apply, and merge) used to leak memory that held the array of index
 | |
|    entries, which has been plugged.
 | |
|    (merge a0fc4db rs/discard-index-discard-array later to maint).
 | |
| 
 | |
|  * "gitweb" forgot to clear a global variable $search_regexp upon each
 | |
|    request, mistakenly carrying over the previous search to a new one
 | |
|    when used as a persistent CGI.
 | |
| 
 | |
|  * The wildmatch engine did not honor WM_CASEFOLD option correctly.
 | |
| 
 | |
|  * "git log -c --follow $path" segfaulted upon hitting the commit that
 | |
|    renamed the $path being followed.
 | |
| 
 | |
|  * When a reflog notation is used for implicit "current branch", we
 | |
|    did not say which branch and worse said "branch ''".
 | |
| 
 | |
|  * "difftool --dir-diff" did not copy back changes made by the
 | |
|    end-user in the diff tool backend to the working tree in some
 | |
|    cases.
 | |
| 
 | |
|  * "git push $there HEAD:branch" did not resolve HEAD early enough, so
 | |
|    it was easy to flip it around while push is still going on and push
 | |
|    out a branch that the user did not originally intended when the
 | |
|    command was started.
 | |
| 
 | |
|  * The bash prompt code (in contrib/) displayed the name of the branch
 | |
|    being rebased when "rebase -i/-m/-p" modes are in use, but not the
 | |
|    plain vanilla "rebase".
 | |
| 
 | |
|  * Handling of negative exclude pattern for directories "!dir" was
 | |
|    broken in the update to v1.8.3.
 | |
| 
 | |
|  * zsh prompt script that borrowed from bash prompt script did not
 | |
|    work due to slight differences in array variable notation between
 | |
|    these two shells.
 | |
| 
 | |
|  * An entry for "file://" scheme in the enumeration of URL types Git
 | |
|    can take in the HTML documentation was made into a clickable link
 | |
|    by mistake.
 | |
| 
 | |
|  * "git push --[no-]verify" was not documented.
 | |
| 
 | |
|  * Stop installing the git-remote-testpy script that is only used for
 | |
|    testing.
 | |
| 
 | |
|  * "git commit --allow-empty-message -m ''" should not start an
 | |
|    editor.
 | |
| 
 | |
|  * "git merge @{-1}~22" was rewritten to "git merge frotz@{1}~22"
 | |
|    incorrectly when your previous branch was "frotz" (it should be
 | |
|    rewritten to "git merge frotz~22" instead).
 | |
| 
 | |
|  * "git diff -c -p" was not showing a deleted line from a hunk when
 | |
|    another hunk immediately begins where the earlier one ends.
 | |
| 
 | |
|  * "git log --ancestry-path A...B" did not work as expected, as it did
 | |
|    not pay attention to the fact that the merge base between A and B
 | |
|    was the bottom of the range being specified.
 | |
| 
 | |
|  * Mac OS X does not like to write(2) more than INT_MAX number of
 | |
|    bytes; work it around by chopping write(2) into smaller pieces.
 | |
| 
 | |
|  * Newer MacOS X encourages the programs to compile and link with
 | |
|    their CommonCrypto, not with OpenSSL.
 | |
| 
 | |
|  * "git clone foo/bar:baz" cannot be a request to clone from a remote
 | |
|    over git-over-ssh specified in the scp style.  This case is now
 | |
|    detected and clones from a local repository at "foo/bar:baz".
 | |
| 
 | |
|  * When $HOME is misconfigured to point at an unreadable directory, we
 | |
|    used to complain and die. Loosen the check.
 | |
| 
 | |
|  * "git subtree" (in contrib/) had one codepath with loose error
 | |
|    checks to lose data at the remote side.
 | |
| 
 | |
|  * "git fetch" into a shallow repository from a repository that does
 | |
|    not know about the shallow boundary commits (e.g. a different fork
 | |
|    from the repository the current shallow repository was cloned from)
 | |
|    did not work correctly.
 | |
| 
 | |
|  * "git checkout foo" DWIMs the intended "upstream" and turns it into
 | |
|    "git checkout -t -b foo remotes/origin/foo". This codepath has been
 | |
|    updated to correctly take existing remote definitions into account.
 |