You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
486 lines
21 KiB
486 lines
21 KiB
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.
|
|
|