a3fe55458a
Signed-off-by: Junio C Hamano <gitster@pobox.com>
355 lines
15 KiB
Plaintext
355 lines
15 KiB
Plaintext
Git 2.9 Release Notes
|
|
=====================
|
|
|
|
Backward compatibility note
|
|
---------------------------
|
|
|
|
The end-user facing Porcelain level commands in the "git diff" and
|
|
"git log" by default enables the rename detection; you can still use
|
|
"diff.renames" configuration variable to disable this.
|
|
|
|
Merging two branches that have no common ancestor with "git merge" is
|
|
by default forbidden now to prevent creating such an unusual merge by
|
|
mistake.
|
|
|
|
The output formats of "git log" that indents the commit log message by
|
|
4 spaces now expands HT in the log message by default. You can use
|
|
the "--no-expand-tabs" option to disable this.
|
|
|
|
|
|
Updates since v2.8
|
|
------------------
|
|
|
|
UI, Workflows & Features
|
|
|
|
* The end-user facing Porcelain level commands like "diff" and "log"
|
|
now enables the rename detection by default.
|
|
|
|
* The credential.helper configuration variable is cumulative and
|
|
there is no good way to override it from the command line. As
|
|
a special case, giving an empty string as its value now serves
|
|
as the signal to clear the values specified in various files.
|
|
|
|
* A new "interactive.diffFilter" configuration can be used to
|
|
customize the diff shown in "git add -i" session.
|
|
|
|
* "git p4" now allows P4 author names to be mapped to Git author
|
|
names.
|
|
|
|
* "git rebase -x" can be used without passing "-i" option.
|
|
|
|
* "git -c credential.<var>=<value> submodule" can now be used to
|
|
propagate configuration variables related to credential helper
|
|
down to the submodules.
|
|
|
|
* "git tag" can create an annotated tag without explicitly given an
|
|
"-a" (or "-s") option (i.e. when a tag message is given). A new
|
|
configuration variable, tag.forceSignAnnotated, can be used to tell
|
|
the command to create signed tag in such a situation.
|
|
|
|
* "git merge" used to allow merging two branches that have no common
|
|
base by default, which led to a brand new history of an existing
|
|
project created and then get pulled by an unsuspecting maintainer,
|
|
which allowed an unnecessary parallel history merged into the
|
|
existing project. The command has been taught not to allow this by
|
|
default, with an escape hatch "--allow-unrelated-histories" option
|
|
to be used in a rare event that merges histories of two projects
|
|
that started their lives independently.
|
|
|
|
* "git pull" has been taught to pass --allow-unrelated-histories
|
|
option to underlying "git merge".
|
|
|
|
* "git apply -v" learned to report paths in the patch that were
|
|
skipped via --include/--exclude mechanism or being outside the
|
|
current working directory.
|
|
|
|
* Shell completion (in contrib/) updates.
|
|
|
|
* The commit object name reported when "rebase -i" stops has been
|
|
shortened.
|
|
|
|
* "git worktree add" can be given "--no-checkout" option to only
|
|
create an empty worktree without checking out the files.
|
|
|
|
* "git mergetools" learned to drive ExamDiff.
|
|
|
|
* "git pull --rebase" learned "--[no-]autostash" option, so that
|
|
the rebase.autostash configuration variable set to true can be
|
|
overridden from the command line.
|
|
|
|
* When "git log" shows the log message indented by 4-spaces, the
|
|
remainder of a line after a HT does not align in the way the author
|
|
originally intended. The command now expands tabs by default in
|
|
such a case, and allows the users to override it with a new option,
|
|
"--no-expand-tabs".
|
|
|
|
* "git send-email" now uses a more readable timestamps when
|
|
formulating a message ID.
|
|
|
|
* "git rerere" can encounter two or more files with the same conflict
|
|
signature that have to be resolved in different ways, but there was
|
|
no way to record these separate resolutions.
|
|
(merge 890fca8 jc/rerere-multi later to maint).
|
|
|
|
* "git p4" learned to record P4 jobs in Git commit that imports from
|
|
the history in Perforce.
|
|
|
|
* "git describe --contains" often made a hard-to-justify choice of
|
|
tag to give name to a given commit, because it tried to come up
|
|
with a name with smallest number of hops from a tag, causing an old
|
|
commit whose close descendant that is recently tagged were not
|
|
described with respect to an old tag but with a newer tag. It did
|
|
not help that its computation of "hop" count was further tweaked to
|
|
penalize being on a side branch of a merge. The logic has been
|
|
updated to favor using the tag with the oldest tagger date, which
|
|
is a lot easier to explain to the end users: "We describe a commit
|
|
in terms of the (chronologically) oldest tag that contains the
|
|
commit."
|
|
(merge 7550424 js/name-rev-use-oldest-ref later to maint).
|
|
|
|
* "git clone" learned "--shallow-submodules" option.
|
|
|
|
* HTTP transport clients learned to throw extra HTTP headers at the
|
|
server, specified via http.extraHeader configuration variable.
|
|
|
|
* Patch output from "git diff" and friends has been tweaked to be
|
|
more readable by using a blank line as a strong hint that the
|
|
contents before and after it belong to a logically separate unit.
|
|
|
|
|
|
Performance, Internal Implementation, Development Support etc.
|
|
|
|
* The embedded args argv-array in the child process is used to build
|
|
the command line to run pack-objects instead of using a separate
|
|
array of strings.
|
|
|
|
* A test for tags has been restructured so that more parts of it can
|
|
easily be run on a platform without a working GnuPG.
|
|
|
|
* The startup_info data, which records if we are working inside a
|
|
repository (among other things), are now uniformly available to Git
|
|
subcommand implementations, and Git avoids attempting to touch
|
|
references when we are not in a repository.
|
|
|
|
* The command line argument parser for "receive-pack" has been
|
|
rewritten to use parse-options.
|
|
|
|
* A major part of "git submodule update" has been ported to C to take
|
|
advantage of the recently added framework to run download tasks in
|
|
parallel.
|
|
|
|
* Rename bunch of tests on "git clone" for better organization.
|
|
|
|
* The tests that involve running httpd leaked the system-wide
|
|
configuration in /etc/gitconfig to the tested environment.
|
|
|
|
* Build updates for MSVC.
|
|
|
|
* The repository set-up sequence has been streamlined (the biggest
|
|
change is that there is no longer git_config_early()), so that we
|
|
do not attempt to look into refs/* when we know we do not have a
|
|
Git repository.
|
|
|
|
* Code restructuring around the "refs" area to prepare for pluggable
|
|
refs backends.
|
|
|
|
* Sources to many test helper binaries (and the generated helpers)
|
|
have been moved to t/helper/ subdirectory to reduce clutter at the
|
|
top level of the tree.
|
|
|
|
Note that this can break your tests if you check out revisions
|
|
across the merge boundary of this topic, e0b58519 (Merge branch
|
|
'nd/test-helpers', 2016-04-29), as bin-wrappers/test-* are not
|
|
rebuilt to point the underlying executables. For now, "make
|
|
distclean" is your friend.
|
|
|
|
* Unify internal logic between "git tag -v" and "git verify-tag"
|
|
commands by making one directly call into the other.
|
|
(merge bef234b st/verify-tag later to maint).
|
|
|
|
* "merge-recursive" strategy incorrectly checked if a path that is
|
|
involved in its internal merge exists in the working tree.
|
|
|
|
* The test scripts for "git p4" (but not "git p4" implementation
|
|
itself) has been updated so that they would work even on a system
|
|
where the installed version of Python is python 3.
|
|
(merge 1fb3fb4 ld/p4-test-py3 later to maint).
|
|
|
|
* As nobody maintains our in-tree git.spec.in and distros use their
|
|
own spec file, we stopped pretending that we support "make rpm".
|
|
|
|
* Move from unsigned char[20] to struct object_id continues.
|
|
|
|
|
|
Also contains various documentation updates and code clean-ups.
|
|
|
|
|
|
Fixes since v2.8
|
|
----------------
|
|
|
|
Unless otherwise noted, all the fixes since v2.8 in the maintenance
|
|
track are contained in this release (see the maintenance releases'
|
|
notes for details).
|
|
|
|
* "git config --get-urlmatch", unlike other variants of the "git
|
|
config --get" family, did not signal error with its exit status
|
|
when there was no matching configuration.
|
|
|
|
* The "--local-env-vars" and "--resolve-git-dir" options of "git
|
|
rev-parse" failed to work outside a repository when the command's
|
|
option parsing was rewritten in 1.8.5 era.
|
|
|
|
* "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work.
|
|
|
|
* Fetching of history by naming a commit object name directly didn't
|
|
work across remote-curl transport.
|
|
|
|
* A small memory leak in an error codepath has been plugged in xdiff
|
|
code.
|
|
|
|
* strbuf_getwholeline() did not NUL-terminate the buffer on certain
|
|
corner cases in its error codepath.
|
|
|
|
* "git mergetool" did not work well with conflicts that both sides
|
|
deleted.
|
|
|
|
* "git send-email" had trouble parsing alias file in mailrc format
|
|
when lines in it had trailing whitespaces on them.
|
|
|
|
* When "git merge --squash" stopped due to conflict, the concluding
|
|
"git commit" failed to read in the SQUASH_MSG that shows the log
|
|
messages from all the squashed commits.
|
|
|
|
* "git merge FETCH_HEAD" dereferenced NULL pointer when merging
|
|
nothing into an unborn history (which is arguably unusual usage,
|
|
which perhaps was the reason why nobody noticed it).
|
|
|
|
* When "git worktree" feature is in use, "git branch -d" allowed
|
|
deletion of a branch that is checked out in another worktree,
|
|
which was wrong.
|
|
|
|
* When "git worktree" feature is in use, "git branch -m" renamed a
|
|
branch that is checked out in another worktree without adjusting
|
|
the HEAD symbolic ref for the worktree.
|
|
|
|
* "git diff -M" used to work better when two originally identical
|
|
files A and B got renamed to X/A and X/B by pairing A to X/A and B
|
|
to X/B, but this was broken in the 2.0 timeframe.
|
|
|
|
* "git send-pack --all <there>" was broken when its command line
|
|
option parsing was written in the 2.6 timeframe.
|
|
|
|
* "git format-patch --help" showed `-s` and `--no-patch` as if these
|
|
are valid options to the command. We already hide `--patch` option
|
|
from the documentation, because format-patch is about showing the
|
|
diff, and the documentation now hides these options as well.
|
|
|
|
* When running "git blame $path" with unnormalized data in the index
|
|
for the path, the data in the working tree was blamed, even though
|
|
"git add" would not have changed what is already in the index, due
|
|
to "safe crlf" that disables the line-end conversion. It has been
|
|
corrected.
|
|
|
|
* A change back in version 2.7 to "git branch" broke display of a
|
|
symbolic ref in a non-standard place in the refs/ hierarchy (we
|
|
expect symbolic refs to appear in refs/remotes/*/HEAD to point at
|
|
the primary branch the remote has, and as .git/HEAD to point at the
|
|
branch we locally checked out).
|
|
|
|
* A partial rewrite of "git submodule" in the 2.7 timeframe changed
|
|
the way the gitdir: pointer in the submodules point at the real
|
|
repository location to use absolute paths by accident. This has
|
|
been corrected.
|
|
|
|
* "git commit" misbehaved in a few minor ways when an empty message
|
|
is given via -m '', all of which has been corrected.
|
|
|
|
* Support for CRAM-MD5 authentication method in "git imap-send" did
|
|
not work well.
|
|
|
|
* Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs
|
|
we use in imap-send, which has been adjusted for the change.
|
|
(merge 1245c74 ky/imap-send-openssl-1.1.0 later to maint).
|
|
|
|
* The socks5:// proxy support added back in 2.6.4 days was not aware
|
|
that socks5h:// proxies behave differently.
|
|
|
|
* "git config" had a codepath that tried to pass a NULL to
|
|
printf("%s"), which nobody seems to have noticed.
|
|
|
|
* On Cygwin, object creation uses the "create a temporary and then
|
|
rename it to the final name" pattern, not "create a temporary,
|
|
hardlink it to the final name and then unlink the temporary"
|
|
pattern.
|
|
|
|
This is necessary to use Git on Windows shared directories, and is
|
|
already enabled for the MinGW and plain Windows builds. It also
|
|
has been used in Cygwin packaged versions of Git for quite a while.
|
|
See http://thread.gmane.org/gmane.comp.version-control.git/291853
|
|
|
|
* "merge-octopus" strategy did not ensure that the index is clean
|
|
when merge begins.
|
|
|
|
* When "git merge" notices that the merge can be resolved purely at
|
|
the tree level (without having to merge blobs) and the resulting
|
|
tree happens to already exist in the object store, it forgot to
|
|
update the index, which lead to an inconsistent state for later
|
|
operations.
|
|
|
|
* "git submodule" reports the paths of submodules the command
|
|
recurses into, but this was incorrect when the command was not run
|
|
from the root level of the superproject.
|
|
(merge 2ab5660 sb/submodule-path-misc-bugs later to maint).
|
|
|
|
* The "user.useConfigOnly" configuration variable makes it an error
|
|
if users do not explicitly set user.name and user.email. However,
|
|
its check was not done early enough and allowed another error to
|
|
trigger, reporting that the default value we guessed from the
|
|
system setting was unusable. This was a suboptimal end-user
|
|
experience as we want the users to set user.name/user.email without
|
|
relying on the auto-detection at all.
|
|
(merge d3c06c1 da/user-useconfigonly later to maint).
|
|
|
|
* "git mv old new" did not adjust the path for a submodule that lives
|
|
as a subdirectory inside old/ directory correctly.
|
|
(merge a127331 sb/mv-submodule-fix later to maint).
|
|
|
|
* "git replace -e" did not honour "core.editor" configuration.
|
|
(merge 36b1437 js/replace-edit-use-editor-configuration later to maint).
|
|
|
|
* "git push" from a corrupt repository that attempts to push a large
|
|
number of refs deadlocked; the thread to relay rejection notices
|
|
for these ref updates blocked on writing them to the main thread,
|
|
after the main thread at the receiving end notices that the push
|
|
failed and decides not to read these notices and return a failure.
|
|
(merge f924b52a jk/push-client-deadlock-fix later to maint).
|
|
|
|
* mmap emulation on Windows has been optimized and work better without
|
|
consuming paging store when not needed.
|
|
(merge d5425d1 js/win32-mmap later to maint).
|
|
|
|
* A question by "git send-email" to ask the identity of the sender
|
|
has been updated.
|
|
(merge 0d6b21e jd/send-email-to-whom later to maint).
|
|
|
|
* UI consistency improvements for "git mergetool".
|
|
(merge cce076e nf/mergetool-prompt later to maint).
|
|
|
|
* "git rebase -m" could be asked to rebase an entire branch starting
|
|
from the root, but failed by assuming that there always is a parent
|
|
commit to the first commit on the branch.
|
|
(merge 79f4344 bw/rebase-merge-entire-branch later to maint).
|
|
|
|
* Fix a broken "p4 lfs" test.
|
|
(merge 9e220fe ls/p4-lfs-test-fix-2.7.0 later to maint).
|
|
|
|
* Other minor clean-ups and documentation updates
|
|
(merge 8b5a3e9 kn/for-each-tag-branch later to maint).
|
|
(merge 99dab16 sb/misc-cleanups later to maint).
|
|
(merge 7a6a44c cc/apply later to maint).
|
|
(merge 6594883 nd/remove-unused later to maint).
|
|
(merge 0ff7410 sg/test-lib-simplify-expr-away later to maint).
|
|
(merge 060e776 jk/fix-attribute-macro-in-2.5 later to maint).
|
|
(merge d16df0c rt/string-list-lookup-cleanup later to maint).
|
|
(merge 376eb60 sb/config-exit-status-list later to maint).
|