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.
512 lines
21 KiB
512 lines
21 KiB
Git 2.9 Release Notes |
|
===================== |
|
|
|
Backward compatibility notes |
|
---------------------------- |
|
|
|
The end-user facing Porcelain level commands in the "git diff" and |
|
"git log" family by default enable 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. |
|
|
|
"git commit-tree" plumbing command required the user to always sign |
|
its result when the user sets the commit.gpgsign configuration |
|
variable, which was an ancient mistake, which this release corrects. |
|
A script that drives commit-tree, if it relies on this mistake, now |
|
needs to read commit.gpgsign and pass the -S option as necessary. |
|
|
|
|
|
Updates since v2.8 |
|
------------------ |
|
|
|
UI, Workflows & Features |
|
|
|
* Comes with git-multimail 1.3.1 (in contrib/). |
|
|
|
* The end-user facing commands like "git diff" and "git log" |
|
now enable 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" sessions. |
|
|
|
* "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 the "--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 to help |
|
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. |
|
|
|
* "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 name 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." |
|
|
|
* "git clone" learned the "--shallow-submodules" option. |
|
|
|
* HTTP transport clients learned to throw extra HTTP headers at the |
|
server, specified via http.extraHeader configuration variable. |
|
|
|
* The "--compaction-heuristic" option to "git diff" family of |
|
commands enables a heuristic to make the patch output more readable |
|
by using a blank line as a strong hint that the contents before and |
|
after it belong to logically separate units. It is still |
|
experimental. |
|
|
|
* A new configuration variable core.hooksPath allows customizing |
|
where the hook directory is. |
|
|
|
* An earlier addition of "sanitize_submodule_env" with 14111fc4 (git: |
|
submodule honor -c credential.* from command line, 2016-02-29) |
|
turned out to be a convoluted no-op; implement what it wanted to do |
|
correctly, and stop filtering settings given via "git -c var=val". |
|
|
|
* "git commit --dry-run" reported "No, no, you cannot commit." in one |
|
case where "git commit" would have allowed you to commit, and this |
|
improves it a little bit ("git commit --dry-run --short" still does |
|
not give you the correct answer, for example). This is a stop-gap |
|
measure in that "commit --short --dry-run" still gives an incorrect |
|
result. |
|
|
|
* The experimental "multiple worktree" feature gains more safety to |
|
forbid operations on a branch that is checked out or being actively |
|
worked on elsewhere, by noticing that e.g. it is being rebased. |
|
|
|
* "git format-patch" learned a new "--base" option to record what |
|
(public, well-known) commit the original series was built on in |
|
its output. |
|
|
|
* "git commit" learned to pay attention to the "commit.verbose" |
|
configuration variable and act as if the "--verbose" option |
|
was given from the command line. |
|
|
|
* Updated documentation gives hints to GMail users with two-factor |
|
auth enabled that they need app-specific-password when using |
|
"git send-email". |
|
|
|
* The manpage output of our documentation did not render well in |
|
terminal; typeset literals in bold by default to make them stand |
|
out more. |
|
|
|
* The mark-up in the top-level README.md file has been updated to |
|
typeset CLI command names differently from the body text. |
|
|
|
|
|
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. Other updates to "git submodule" that move pieces of |
|
logic to C continues. |
|
|
|
* 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" API 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. |
|
|
|
* Unify internal logic between "git tag -v" and "git verify-tag" |
|
commands by making one directly call into the other. |
|
|
|
* "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. |
|
|
|
* 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. |
|
|
|
* The code for warning_errno/die_errno has been refactored and a new |
|
error_errno() reporting helper is introduced. |
|
(merge 1da045f nd/error-errno later to maint). |
|
|
|
* Running tests with '-x' option to trace the individual command |
|
executions is a useful way to debug test scripts, but some tests |
|
that capture the standard error stream and check what the command |
|
said can be broken with the trace output mixed in. When running |
|
our tests under "bash", however, we can redirect the trace output |
|
to another file descriptor to keep the standard error of programs |
|
being tested intact. |
|
|
|
* t0040 had too many unnecessary repetitions in its test data. Teach |
|
test-parse-options program so that a caller can tell what it |
|
expects in its output, so that these repetitions can be cleaned up. |
|
|
|
* Add perf test for "rebase -i". |
|
|
|
* Common mistakes when writing gitlink: in our documentation are |
|
found by "make check-docs". |
|
|
|
* t9xxx series has been updated primarily for readability, while |
|
fixing small bugs in it. A few scripted Porcelain commands have |
|
also been updated to fix possible bugs around their use of |
|
"test -z" and "test -n". |
|
|
|
* CI test was taught to run git-svn tests. |
|
|
|
* "git cat-file --batch-all" has been sped up, by taking advantage |
|
of the fact that it does not have to read a list of objects, in two |
|
ways. |
|
|
|
* test updates to make it more readable and maintainable. |
|
(merge e6273f4 es/t1500-modernize later to maint). |
|
|
|
* "make DEVELOPER=1" worked as expected; setting DEVELOPER=1 in |
|
config.mak didn't. |
|
(merge 51dd3e8 mm/makefile-developer-can-be-in-config-mak later to maint). |
|
|
|
* The way how "submodule--helper list" signals unmatch error to its |
|
callers has been updated. |
|
|
|
* A bash-ism "local" has been removed from "git submodule" scripted |
|
Porcelain. |
|
|
|
|
|
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 by updating a few API |
|
elements we use in imap-send, which has been adjusted for the change. |
|
|
|
* The socks5:// proxy support added back in 2.6.4 days was not aware |
|
that socks5h:// proxies behave differently from socks5:// proxies. |
|
|
|
* "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 https://lore.kernel.org/git/20160419091055.GF2345@dinwoodie.org/ |
|
|
|
* "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 left an inconsistent state that would |
|
break later operations. |
|
|
|
* "git submodule" reports the paths of submodules the command |
|
recurses into, but these paths were incorrectly reported when |
|
the command was not run from the root level of the superproject. |
|
|
|
* 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. |
|
|
|
* "git mv old new" did not adjust the path for a submodule that lives |
|
as a subdirectory inside old/ directory correctly. |
|
|
|
* "git replace -e" did not honour "core.editor" configuration. |
|
|
|
* "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. |
|
|
|
* mmap emulation on Windows has been optimized and work better without |
|
consuming paging store when not needed. |
|
|
|
* A question by "git send-email" to ask the identity of the sender |
|
has been updated. |
|
|
|
* UI consistency improvements for "git mergetool". |
|
|
|
* "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. |
|
|
|
* Fix a broken "p4 lfs" test. |
|
|
|
* Recent update to Git LFS broke "git p4" by changing the output from |
|
its "lfs pointer" subcommand. |
|
|
|
* "git fetch" test t5510 was flaky while running a (forced) automagic |
|
garbage collection. |
|
|
|
* Documentation updates to help contributors setting up Travis CI |
|
test for their patches. |
|
|
|
* Some multi-byte encoding can have a backslash byte as a later part |
|
of one letter, which would confuse "highlight" filter used in |
|
gitweb. |
|
|
|
* "git commit-tree" plumbing command required the user to always sign |
|
its result when the user sets the commit.gpgsign configuration |
|
variable, which was an ancient mistake. Rework "git rebase" that |
|
relied on this mistake so that it reads commit.gpgsign and pass (or |
|
not pass) the -S option to "git commit-tree" to keep the end-user |
|
expectation the same, while teaching "git commit-tree" to ignore |
|
the configuration variable. This will stop requiring the users to |
|
sign commit objects used internally as an implementation detail of |
|
"git stash". |
|
|
|
* "http.cookieFile" configuration variable clearly wants a pathname, |
|
but we forgot to treat it as such by e.g. applying tilde expansion. |
|
|
|
* Consolidate description of tilde-expansion that is done to |
|
configuration variables that take pathname to a single place. |
|
|
|
* Correct faulty recommendation to use "git submodule deinit ." when |
|
de-initialising all submodules, which would result in a strange |
|
error message in a pathological corner case. |
|
|
|
* Many 'linkgit:<git documentation page>' references were broken, |
|
which are all fixed with this. |
|
|
|
* "git rerere" can get confused by conflict markers deliberately left |
|
by the inner merge step, because they are indistinguishable from |
|
the real conflict markers left by the outermost merge which are |
|
what the end user and "rerere" need to look at. This was fixed by |
|
making the conflict markers left by the inner merges a bit longer. |
|
(merge 0f9fd5c jc/ll-merge-internal later to maint). |
|
|
|
* CI test was taught to build documentation pages. |
|
|
|
* "git fsck" learned to catch NUL byte in a commit object as |
|
potential error and warn. |
|
|
|
* Portability enhancement for "rebase -i" to help platforms whose |
|
shell does not like "for i in <empty>" (which is not POSIX-kosher). |
|
|
|
* On Windows, .git and optionally any files whose name starts with a |
|
dot are now marked as hidden, with a core.hideDotFiles knob to |
|
customize this behaviour. |
|
|
|
* Documentation for "git merge --verify-signatures" has been updated |
|
to clarify that the signature of only the commit at the tip is |
|
verified. Also the phrasing used for signature and key validity is |
|
adjusted to align with that used by OpenPGP. |
|
|
|
* A couple of bugs around core.autocrlf have been fixed. |
|
|
|
* Many commands normalize command line arguments from NFD to NFC |
|
variant of UTF-8 on OSX, but commands in the "diff" family did |
|
not, causing "git diff $path" to complain that no such path is |
|
known to Git. They have been taught to do the normalization. |
|
|
|
* "git difftool" learned to handle unmerged paths correctly in |
|
dir-diff mode. |
|
|
|
* The "are we talking with TTY, doing an interactive session?" |
|
detection has been updated to work better for "Git for Windows". |
|
|
|
* We forgot to add "git log --decorate=auto" to documentation when we |
|
added the feature back in v2.1.0 timeframe. |
|
(merge 462cbb4 rj/log-decorate-auto later to maint). |
|
|
|
* "git fast-import --export-marks" would overwrite the existing marks |
|
file even when it makes a dump from its custom die routine. |
|
Prevent it from doing so when we have an import-marks file but |
|
haven't finished reading it. |
|
(merge f4beed6 fc/fast-import-broken-marks-file later to maint). |
|
|
|
* "git rebase -i", after it fails to auto-resolve the conflict, had |
|
an unnecessary call to "git rerere" from its very early days, which |
|
was spotted recently; the call has been removed. |
|
(merge 7063693 js/rebase-i-dedup-call-to-rerere later to maint). |
|
|
|
* Other minor clean-ups and documentation updates |
|
(merge cd82b7a pa/cherry-pick-doc-typo later to maint). |
|
(merge 2bb73ae rs/patch-id-use-skip-prefix later to maint). |
|
(merge aa20cbc rs/apply-name-terminate later to maint). |
|
(merge fe17fc0 jc/t2300-setup later to maint). |
|
(merge e256eec jk/shell-portability later to maint).
|
|
|