2014-03-08 00:12:19 +01:00
|
|
|
Git v2.0 Release Notes
|
|
|
|
======================
|
|
|
|
|
|
|
|
Backward compatibility notes
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
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 is now the "simple" semantics,
|
|
|
|
which 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.
|
|
|
|
|
|
|
|
You can use the configuration variable "push.default" to change
|
|
|
|
this. If you are an old-timer who wants to keep using the
|
|
|
|
"matching" semantics, you can set the variable to "matching", for
|
|
|
|
example. Read the documentation for other possibilities.
|
|
|
|
|
|
|
|
When "git add -u" and "git add -A" are run inside a subdirectory
|
|
|
|
without specifying which paths to add on the command line, they
|
|
|
|
operate on the entire tree for consistency with "git commit -a" and
|
|
|
|
other commands (these commands used to operate only on the current
|
|
|
|
subdirectory). Say "git add -u ." or "git add -A ." if you want to
|
|
|
|
limit the operation to the current directory.
|
|
|
|
|
|
|
|
"git add <path>" is the same as "git add -A <path>" now, so that
|
|
|
|
"git add dir/" will notice paths you removed from the directory and
|
|
|
|
record the removal. In older versions of Git, "git add <path>" used
|
|
|
|
to ignore removals. You can say "git add --ignore-removal <path>" to
|
|
|
|
add only added or modified paths in <path>, if you really want to.
|
|
|
|
|
|
|
|
The "-q" option to "git diff-files", which does *NOT* mean "quiet",
|
|
|
|
has been removed (it told Git to ignore deletion, which you can do
|
|
|
|
with "git diff-files --diff-filter=d").
|
|
|
|
|
2014-03-21 21:41:27 +01:00
|
|
|
"git request-pull" lost a few "heuristics" that often led to mistakes.
|
|
|
|
|
2014-03-08 00:12:19 +01:00
|
|
|
|
|
|
|
Updates since v1.9 series
|
|
|
|
-------------------------
|
|
|
|
|
2014-03-21 21:41:27 +01:00
|
|
|
UI, Workflows & Features
|
2014-03-08 00:12:19 +01:00
|
|
|
|
2014-03-25 20:01:39 +01:00
|
|
|
* "git commit --cleanup=<mode>" learned a new mode, scissors.
|
|
|
|
|
2014-03-21 21:41:27 +01:00
|
|
|
* "git tag --list" output can be sorted using "version sort" with
|
|
|
|
"--sort=version:refname".
|
2014-03-08 00:12:19 +01:00
|
|
|
|
2014-03-21 21:41:27 +01:00
|
|
|
* Discard the accumulated "heuristics" to guess from which branch the
|
|
|
|
result wants to be pulled from and make sure what the end user
|
|
|
|
specified is not second-guessed by "git request-pull", to avoid
|
|
|
|
mistakes. When you pushed out your 'master' branch to your public
|
|
|
|
repository as 'for-linus', use the new "master:for-linus" syntax to
|
|
|
|
denote the branch to be pulled.
|
2014-03-08 00:12:19 +01:00
|
|
|
|
2014-03-18 22:33:34 +01:00
|
|
|
* "git grep" learned to behave in a way similar to native grep when
|
|
|
|
"-h" (no header) and "-c" (count) options are given.
|
|
|
|
|
|
|
|
* transport-helper, fast-import and fast-export have been updated to
|
|
|
|
allow the ref mapping and ref deletion in a way similar to the
|
|
|
|
natively supported transports.
|
|
|
|
|
2014-03-08 00:12:19 +01:00
|
|
|
* The "simple" mode is the default for "git push".
|
|
|
|
|
|
|
|
* "git add -u" and "git add -A", when run without any pathspec, is a
|
|
|
|
tree-wide operation even when run inside a subdirectory of a
|
|
|
|
working tree.
|
|
|
|
|
|
|
|
* "git add <path> is the same as "git add -A <path>" now.
|
|
|
|
|
|
|
|
* "core.statinfo" configuration variable, which is a
|
|
|
|
never-advertised synonym to "core.checkstat", has been removed.
|
|
|
|
|
|
|
|
* The "-q" option to "git diff-files", which does *NOT* mean
|
|
|
|
"quiet", has been removed (it told Git to ignore deletion, which
|
|
|
|
you can do with "git diff-files --diff-filter=d").
|
|
|
|
|
2014-03-13 22:01:17 +01:00
|
|
|
* Server operators can loosen the "tips of refs only" restriction for
|
|
|
|
the remote archive service with the uploadarchive.allowUnreachable
|
|
|
|
configuration option.
|
|
|
|
|
|
|
|
* The progress indicators from various time-consuming commands have
|
|
|
|
been marked for i18n/l10n.
|
|
|
|
|
|
|
|
* "git notes -C <blob>" diagnoses an attempt to use an object that
|
|
|
|
is not a blob as an error.
|
|
|
|
|
|
|
|
* "git config" learned to read from the standard input when "-" is
|
|
|
|
given as the value to its "--file" parameter (attempting an
|
|
|
|
operation to update the configuration in the standard input of
|
|
|
|
course is rejected).
|
|
|
|
|
|
|
|
* Trailing whitespaces in .gitignore files, unless they are quoted
|
|
|
|
for fnmatch(3), e.g. "path\ ", are warned and ignored. Strictly
|
|
|
|
speaking, this is a backward incompatible change, but very unlikely
|
|
|
|
to bite any sane user and adjusting should be obvious and easy.
|
|
|
|
|
|
|
|
* Many commands that create commits, e.g. "pull", "rebase",
|
2014-03-08 00:12:19 +01:00
|
|
|
learned to take the --gpg-sign option on the command line.
|
|
|
|
|
|
|
|
* "git commit" can be told to always GPG sign the resulting commit
|
|
|
|
by setting "commit.gpgsign" configuration variable to true (the
|
|
|
|
command line option --no-gpg-sign should override it).
|
|
|
|
|
|
|
|
* "git pull" can be told to only accept fast-forward by setting the
|
|
|
|
new "pull.ff" configuration.
|
|
|
|
|
|
|
|
* "git reset" learned "-N" option, which does not reset the index
|
|
|
|
fully for paths the index knows about but the tree-ish the command
|
|
|
|
resets to does not (these paths are kept as intend-to-add entries).
|
|
|
|
|
|
|
|
* Newly cloned submodule repositories by "git submodule update",
|
|
|
|
when the "checkout" update mode is used, will be on a local
|
|
|
|
branch instead of on a detached HEAD, just like submodules added
|
|
|
|
with "git submodule add".
|
|
|
|
|
|
|
|
|
|
|
|
Performance, Internal Implementation, etc.
|
|
|
|
|
2014-03-13 22:01:17 +01:00
|
|
|
* We started using wildmatch() in place of fnmatch(3) a few releases
|
|
|
|
ago; complete the process and stop using fnmatch(3).
|
|
|
|
|
|
|
|
* Uses of curl's "multi" interface and "easy" interface do not mix
|
|
|
|
well when we attempt to reuse outgoing connections. Teach the RPC
|
|
|
|
over http code, used in the smart HTTP transport, not to use the
|
|
|
|
"easy" interface.
|
|
|
|
|
2014-03-08 00:12:19 +01:00
|
|
|
* The bitmap-index feature from JGit has been ported, which should
|
|
|
|
significantly improve performance when serving objects form a
|
|
|
|
repository that uses it.
|
|
|
|
|
|
|
|
* The way "git log --cc" shows a combined diff against multiple
|
|
|
|
parents have been optimized.
|
|
|
|
|
|
|
|
* The prefixcmp() and suffixcmp() functions are gone. Use
|
|
|
|
starts_with() and ends_with(), and also consider if skip_prefix()
|
|
|
|
suits your needs better when using the former.
|
|
|
|
|
|
|
|
|
2014-03-13 22:01:17 +01:00
|
|
|
Also contains various documentation updates and code clean-ups. Many
|
|
|
|
of them came from flurry of activities as GSoC candidate microproject
|
|
|
|
exercises.
|
2014-03-08 00:12:19 +01:00
|
|
|
|
|
|
|
|
|
|
|
Fixes since v1.9 series
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
Unless otherwise noted, all the fixes since v1.9 in the maintenance
|
|
|
|
track are contained in this release (see the maintenance releases'
|
|
|
|
notes for details).
|
|
|
|
|
2014-03-25 20:01:39 +01:00
|
|
|
* "git mv" that moves a submodule forgot to adjust the array that
|
|
|
|
uses to keep track of which submodules were to be moved to update
|
|
|
|
its configuration.
|
|
|
|
(merge fb8a4e8 jk/mv-submodules-fix later to maint).
|
|
|
|
|
|
|
|
* Length limit for the pathname used when removing a path in a deep
|
|
|
|
subdirectory has been removed to avoid buffer overflows.
|
|
|
|
(merge 2f29e0c mh/remove-subtree-long-pathname-fix later to maint).
|
|
|
|
|
|
|
|
* The test helper lib-terminal always run an actual test_expect_*
|
|
|
|
when included, which screwed up with the use of skil-all that may
|
|
|
|
have to be done later.
|
|
|
|
(merge 7e27173 jk/lib-terminal-lazy later to maint).
|
|
|
|
|
|
|
|
* "git index-pack" used a wrong variable to name the keep-file in an
|
|
|
|
error message when the file cannot be written or closed.
|
|
|
|
(merge de983a0 nd/index-pack-error-message later to maint).
|
|
|
|
|
|
|
|
* "rebase -i" produced a broken insn sheet when the title of a commit
|
|
|
|
happened to contain '\n' (or ended with '\c') due to a careless use
|
|
|
|
of 'echo'.
|
|
|
|
(merge cb1aefd us/printf-not-echo later to maint).
|
|
|
|
|
|
|
|
* There were a few instances of 'git-foo' remaining in the
|
|
|
|
documentation that should have been spelled 'git foo'.
|
|
|
|
(merge 3c3e6f5 rr/doc-merge-strategies later to maint).
|
|
|
|
|
2014-03-21 21:41:27 +01:00
|
|
|
* Serving objects from a shallow repository needs to write a
|
|
|
|
new file to hold the temporary shallow boundaries but it was not
|
|
|
|
cleaned when we exit due to die() or a signal.
|
|
|
|
(merge 7839632 jk/shallow-update-fix later to maint).
|
|
|
|
|
|
|
|
* When "git stash pop" stops after failing to apply the stash
|
|
|
|
(e.g. due to conflicting changes), the stash is not dropped. State
|
|
|
|
that explicitly in the output to let the users know.
|
|
|
|
(merge 2d4c993 jc/stash-pop-not-popped later to maint).
|
|
|
|
|
|
|
|
* The labels in "git status" output that describe the nature of
|
|
|
|
conflicts (e.g. "both deleted") were limited to 20 bytes, which was
|
|
|
|
too short for some l10n (e.g. fr).
|
|
|
|
(merge c7cb333 jn/wt-status later to maint).
|
|
|
|
|
2014-03-18 22:33:34 +01:00
|
|
|
* "git clean -d pathspec" did not use the given pathspec correctly
|
|
|
|
and ended up cleaning too much.
|
|
|
|
(merge 1f2e108 jk/clean-d-pathspec later to maint).
|
|
|
|
|
2014-03-13 22:01:17 +01:00
|
|
|
* "git difftool" misbehaved when the repository is bound to the
|
|
|
|
working tree with the ".git file" mechanism, where a textual file
|
|
|
|
".git" tells us where it is.
|
|
|
|
(merge fcfec8b da/difftool-git-files later to maint).
|
|
|
|
|
|
|
|
* "git push" did not pay attention to branch.*.pushremote if it is
|
|
|
|
defined earlier than remote.pushdefault; the order of these two
|
|
|
|
variables in the configuration file should not matter, but it did
|
|
|
|
by mistake.
|
|
|
|
(merge 98b406f jk/remote-pushremote-config-reading later to maint).
|
|
|
|
|
|
|
|
* Codepaths that parse timestamps in commit objects have been
|
|
|
|
tightened.
|
|
|
|
(merge 3f419d4 jk/commit-dates-parsing-fix later to maint).
|
|
|
|
|
|
|
|
* "git diff --external-diff" incorrectly fed the submodule directory
|
|
|
|
in the working tree to the external diff driver when it knew it is
|
|
|
|
the same as one of the versions being compared.
|
|
|
|
(merge aba4727 tr/diff-submodule-no-reuse-worktree later to maint).
|
|
|
|
|
|
|
|
* "git reset" needs to refresh the index when working in a working
|
|
|
|
tree (it can also be used to match the index to the HEAD in an
|
|
|
|
otherwise bare repository), but it failed to set up the working
|
|
|
|
tree properly, causing GIT_WORK_TREE to be ignored.
|
|
|
|
(merge b7756d4 nd/reset-setup-worktree later to maint).
|
|
|
|
|
|
|
|
* "git check-attr" when working on a repository with a working tree
|
|
|
|
did not work well when the working tree was specified via the
|
|
|
|
--work-tree (and obviously with --git-dir) option.
|
|
|
|
(merge cdbf623 jc/check-attr-honor-working-tree later to maint).
|
|
|
|
|
2014-03-08 00:12:19 +01:00
|
|
|
* "merge-recursive" was broken in 1.7.7 era and stopped working in
|
|
|
|
an empty (temporary) working tree, when there are renames
|
|
|
|
involved. This has been corrected.
|
|
|
|
(merge 6e2068a bk/refresh-missing-ok-in-merge-recursive later to maint.)
|
|
|
|
|
|
|
|
* "git rev-parse" was loose in rejecting command line arguments
|
|
|
|
that do not make sense, e.g. "--default" without the required
|
|
|
|
value for that option.
|
|
|
|
(merge a43219f ds/rev-parse-required-args later to maint.)
|
|
|
|
|
|
|
|
* include.path variable (or any variable that expects a path that
|
|
|
|
can use ~username expansion) in the configuration file is not a
|
|
|
|
boolean, but the code failed to check it.
|
|
|
|
(merge 67beb60 jk/config-path-include-fix later to maint.)
|
|
|
|
|
|
|
|
* Commands that take pathspecs on the command line misbehaved when
|
|
|
|
the pathspec is given as an absolute pathname (which is a
|
|
|
|
practice not particularly encouraged) that points at a symbolic
|
|
|
|
link in the working tree.
|
|
|
|
(merge later 655ee9e mw/symlinks to maint.)
|
|
|
|
|
|
|
|
* "git diff --quiet -- pathspec1 pathspec2" sometimes did not return
|
|
|
|
correct status value.
|
|
|
|
(merge f34b205 nd/diff-quiet-stat-dirty later to maint.)
|
|
|
|
|
|
|
|
* Attempting to deepen a shallow repository by fetching over smart
|
|
|
|
HTTP transport failed in the protocol exchange, when no-done
|
|
|
|
extension was used. The fetching side waited for the list of
|
|
|
|
shallow boundary commits after the sending end stopped talking to
|
|
|
|
it.
|
|
|
|
(merge 0232852 nd/http-fetch-shallow-fix later to maint.)
|
|
|
|
|
|
|
|
* Allow "git cmd path/", when the 'path' is where a submodule is
|
|
|
|
bound to the top-level working tree, to match 'path', despite the
|
|
|
|
extra and unnecessary trailing slash (such a slash is often
|
|
|
|
given by command line completion).
|
|
|
|
(merge 2e70c01 nd/submodule-pathspec-ending-with-slash later to maint.)
|