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.
439 lines
19 KiB
439 lines
19 KiB
Git 2.8 Release Notes |
|
===================== |
|
|
|
Backward compatibility note |
|
--------------------------- |
|
|
|
The rsync:// transport has been removed. |
|
|
|
|
|
Updates since v2.7 |
|
------------------ |
|
|
|
UI, Workflows & Features |
|
|
|
* It turns out "git clone" over rsync transport has been broken when |
|
the source repository has packed references for a long time, and |
|
nobody noticed nor complained about it. |
|
|
|
* "push" learned that its "--delete" option can be shortened to |
|
"-d", just like "branch --delete" and "branch -d" are the same |
|
thing. |
|
|
|
* "git blame" learned to produce the progress eye-candy when it takes |
|
too much time before emitting the first line of the result. |
|
|
|
* "git grep" can now be configured (or told from the command line) |
|
how many threads to use when searching in the working tree files. |
|
|
|
* Some "git notes" operations, e.g. "git log --notes=<note>", should |
|
be able to read notes from any tree-ish that is shaped like a notes |
|
tree, but the notes infrastructure required that the argument must |
|
be a ref under refs/notes/. Loosen it to require a valid ref only |
|
when the operation would update the notes (in which case we must |
|
have a place to store the updated notes tree, iow, a ref). |
|
|
|
* "git grep" by default does not fall back to its "--no-index" |
|
behavior outside a directory under Git's control (otherwise the |
|
user may by mistake end up running a huge recursive search); with a |
|
new configuration (set in $HOME/.gitconfig--by definition this |
|
cannot be set in the config file per project), this safety can be |
|
disabled. |
|
|
|
* "git pull --rebase" has been extended to allow invoking |
|
"rebase -i". |
|
|
|
* "git p4" learned to cope with the type of a file getting changed. |
|
|
|
* "git format-patch" learned to notice format.outputDirectory |
|
configuration variable. This allows "-o <dir>" option to be |
|
omitted on the command line if you always use the same directory in |
|
your workflow. |
|
|
|
* "interpret-trailers" has been taught to optionally update a file in |
|
place, instead of always writing the result to the standard output. |
|
|
|
* Many commands that read files that are expected to contain text |
|
that is generated (or can be edited) by the end user to control |
|
their behavior (e.g. "git grep -f <filename>") have been updated |
|
to be more tolerant to lines that are terminated with CRLF (they |
|
used to treat such a line to contain payload that ends with CR, |
|
which is usually not what the users expect). |
|
|
|
* "git notes merge" used to limit the source of the merged notes tree |
|
to somewhere under refs/notes/ hierarchy, which was too limiting |
|
when inventing a workflow to exchange notes with remote |
|
repositories using remote-tracking notes trees (located in e.g. |
|
refs/remote-notes/ or somesuch). |
|
|
|
* "git ls-files" learned a new "--eol" option to help diagnose |
|
end-of-line problems. |
|
|
|
* "ls-remote" learned an option to show which branch the remote |
|
repository advertises as its primary by pointing its HEAD at. |
|
|
|
* New http.proxyAuthMethod configuration variable can be used to |
|
specify what authentication method to use, as a way to work around |
|
proxies that do not give error response expected by libcurl when |
|
CURLAUTH_ANY is used. Also, the codepath for proxy authentication |
|
has been taught to use credential API to store the authentication |
|
material in user's keyrings. |
|
|
|
* Update the untracked cache subsystem and change its primary UI from |
|
"git update-index" to "git config". |
|
|
|
* There were a few "now I am doing this thing" progress messages in |
|
the TCP connection code that can be triggered by setting a verbose |
|
option internally in the code, but "git fetch -v" and friends never |
|
passed the verbose option down to that codepath. |
|
|
|
* Clean/smudge filters defined in a configuration file of lower |
|
precedence can now be overridden to be a pass-through no-op by |
|
setting the variable to an empty string. |
|
|
|
* A new "<branch>^{/!-<pattern>}" notation can be used to name a |
|
commit that is reachable from <branch> that does not match the |
|
given <pattern>. |
|
|
|
* The "user.useConfigOnly" configuration variable can be used to |
|
force the user to always set user.email & user.name configuration |
|
variables, serving as a reminder for those who work on multiple |
|
projects and do not want to put these in their $HOME/.gitconfig. |
|
|
|
* "git fetch" and friends that make network connections can now be |
|
told to only use ipv4 (or ipv6). |
|
|
|
* Some authentication methods do not need username or password, but |
|
libcurl needs some hint that it needs to perform authentication. |
|
Supplying an empty username and password string is a valid way to |
|
do so, but you can set the http.[<url>.]emptyAuth configuration |
|
variable to achieve the same, if you find it cleaner. |
|
|
|
* You can now set http.[<url>.]pinnedpubkey to specify the pinned |
|
public key when building with recent enough versions of libcURL. |
|
|
|
* The configuration system has been taught to phrase where it found a |
|
bad configuration variable in a better way in its error messages. |
|
"git config" learnt a new "--show-origin" option to indicate where |
|
the values come from. |
|
|
|
* The "credential-cache" daemon process used to run in whatever |
|
directory it happened to start in, but this made umount(2)ing the |
|
filesystem that houses the repository harder; now the process |
|
chdir()s to the directory that house its own socket on startup. |
|
|
|
* When "git submodule update" did not result in fetching the commit |
|
object in the submodule that is referenced by the superproject, the |
|
command learned to retry another fetch, specifically asking for |
|
that commit that may not be connected to the refs it usually |
|
fetches. |
|
|
|
* "git merge-recursive" learned "--no-renames" option to disable its |
|
rename detection logic. |
|
|
|
* Across the transition at around Git version 2.0, the user used to |
|
get a pretty loud warning when running "git push" without setting |
|
push.default configuration variable. We no longer warn because the |
|
transition was completed a long time ago. |
|
|
|
* README has been renamed to README.md and its contents got tweaked |
|
slightly to make it easier on the eyes. |
|
|
|
|
|
Performance, Internal Implementation, Development Support etc. |
|
|
|
* Add a framework to spawn a group of processes in parallel, and use |
|
it to run "git fetch --recurse-submodules" in parallel. |
|
|
|
* A slight update to the Makefile to mark ".PHONY" targets as such |
|
correctly. |
|
|
|
* In-core storage of the reverse index for .pack files (which lets |
|
you go from a pack offset to an object name) has been streamlined. |
|
|
|
* d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like |
|
$GIT_DIR, 2015-06-26) attempted to work around a glitch in alias |
|
handling by overwriting GIT_WORK_TREE environment variable to |
|
affect subprocesses when set_git_work_tree() gets called, which |
|
resulted in a rather unpleasant regression to "clone" and "init". |
|
Try to address the same issue by always restoring the environment |
|
and respawning the real underlying command when handling alias. |
|
|
|
* The low-level code that is used to create symbolic references has |
|
been updated to share more code with the code that deals with |
|
normal references. |
|
|
|
* strbuf_getline() and friends have been redefined to make it easier |
|
to identify which callsite of (new) strbuf_getline_lf() should |
|
allow and silently ignore carriage-return at the end of the line to |
|
help users on DOSsy systems. |
|
|
|
* "git shortlog" used to accumulate various pieces of information |
|
regardless of what was asked to be shown in the final output. It |
|
has been optimized by noticing what need not to be collected |
|
(e.g. there is no need to collect the log messages when showing |
|
only the number of changes). |
|
|
|
* "git checkout $branch" (and other operations that share the same |
|
underlying machinery) has been optimized. |
|
|
|
* Automated tests in Travis CI environment has been optimized by |
|
persisting runtime statistics of previous "prove" run, executing |
|
tests that take longer before other ones; this reduces the total |
|
wallclock time. |
|
|
|
* Test scripts have been updated to remove assumptions that are not |
|
portable between Git for POSIX and Git for Windows, or to skip ones |
|
with expectations that are not satisfiable on Git for Windows. |
|
|
|
* Some calls to strcpy(3) triggers a false warning from static |
|
analyzers that are less intelligent than humans, and reducing the |
|
number of these false hits helps us notice real issues. A few |
|
calls to strcpy(3) in a couple of protrams that are already safe |
|
has been rewritten to avoid false warnings. |
|
|
|
* The "name_path" API was an attempt to reduce the need to construct |
|
the full path out of a series of path components while walking a |
|
tree hierarchy, but over time made less efficient because the path |
|
needs to be flattened, e.g. to be compared with another path that |
|
is already flat. The API has been removed and its users have been |
|
rewritten to simplify the overall code complexity. |
|
|
|
* Help those who debug http(s) part of the system. |
|
(merge 0054045 sp/remote-curl-ssl-strerror later to maint). |
|
|
|
* The internal API to interact with "remote.*" configuration |
|
variables has been streamlined. |
|
|
|
* The ref-filter's format-parsing code has been refactored, in |
|
preparation for "branch --format" and friends. |
|
|
|
* Traditionally, the tests that try commands that work on the |
|
contents in the working tree were named with "worktree" in their |
|
filenames, but with the recent addition of "git worktree" |
|
subcommand, whose tests are also named similarly, it has become |
|
harder to tell them apart. The traditional tests have been renamed |
|
to use "work-tree" instead in an attempt to differentiate them. |
|
(merge 5549029 mg/work-tree-tests later to maint). |
|
|
|
* Many codepaths forget to check return value from git_config_set(); |
|
the function is made to die() to make sure we do not proceed when |
|
setting a configuration variable failed. |
|
(merge 3d18064 ps/config-error later to maint). |
|
|
|
* Handling of errors while writing into our internal asynchronous |
|
process has been made more robust, which reduces flakiness in our |
|
tests. |
|
(merge 43f3afc jk/epipe-in-async later to maint). |
|
|
|
* There is a new DEVELOPER knob that enables many compiler warning |
|
options in the Makefile. |
|
|
|
* The way the test scripts configure the Apache web server has been |
|
updated to work also for Apache 2.4 running on RedHat derived |
|
distros. |
|
|
|
* Out of maintenance gcc on OSX 10.6 fails to compile the code in |
|
'master'; work it around by using clang by default on the platform. |
|
|
|
* The "name_path" API was an attempt to reduce the need to construct |
|
the full path out of a series of path components while walking a |
|
tree hierarchy, but over time made less efficient because the path |
|
needs to be flattened, e.g. to be compared with another path that |
|
is already flat, in many cases. The API has been removed and its |
|
users have been rewritten to simplify the overall code complexity. |
|
This incidentally also closes some heap-corruption holes. |
|
|
|
* Recent versions of GNU grep is pickier than before to decide if a |
|
file is "binary" and refuse to give line-oriented hits when we |
|
expect it to, unless explicitly told with "-a" option. As our |
|
scripted Porcelains use sane_grep wrapper for line-oriented data, |
|
even when the line may contain non-ASCII payload we took from |
|
end-user data, use "grep -a" to implement sane_grep wrapper when |
|
using an implementation of "grep" that takes the "-a" option. |
|
|
|
|
|
|
|
Also contains various documentation updates and code clean-ups. |
|
|
|
|
|
Fixes since v2.7 |
|
---------------- |
|
|
|
Unless otherwise noted, all the fixes since v2.7 in the maintenance |
|
track are contained in this release (see the maintenance releases' |
|
notes for details). |
|
|
|
* An earlier change in 2.5.x-era broke users' hooks and aliases by |
|
exporting GIT_WORK_TREE to point at the root of the working tree, |
|
interfering when they tried to use a different working tree without |
|
setting GIT_WORK_TREE environment themselves. |
|
|
|
* The "exclude_list" structure has the usual "alloc, nr" pair of |
|
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot |
|
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed |
|
array. |
|
|
|
* Paths that have been told the index about with "add -N" are not |
|
quite yet in the index, but a few commands behaved as if they |
|
already are in a harmful way. |
|
|
|
* "git send-email" was confused by escaped quotes stored in the alias |
|
files saved by "mutt", which has been corrected. |
|
|
|
* A few non-portable C construct have been spotted by clang compiler |
|
and have been fixed. |
|
|
|
* The documentation has been updated to hint the connection between |
|
the '--signoff' option and DCO. |
|
|
|
* "git reflog" incorrectly assumed that all objects that used to be |
|
at the tip of a ref must be commits, which caused it to segfault. |
|
|
|
* The ignore mechanism saw a few regressions around untracked file |
|
listing and sparse checkout selection areas in 2.7.0; the change |
|
that is responsible for the regression has been reverted. |
|
|
|
* Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR |
|
(e.g. COMMIT_EDITMSG) that is meant to be left after the command is |
|
done. This however did not work well if the repository is set to |
|
be shared with core.sharedRepository and the umask of the previous |
|
user is tighter. They have been made to work better by calling |
|
unlink(2) and retrying after fopen(3) fails with EPERM. |
|
|
|
* Asking gitweb for a nonexistent commit left a warning in the server |
|
log. |
|
|
|
Somebody may want to follow this up with an additional test, perhaps? |
|
IIRC, we do test that no Perl warnings are given to the server log, |
|
so this should have been caught if our test coverage were good. |
|
|
|
* "git rebase", unlike all other callers of "gc --auto", did not |
|
ignore the exit code from "gc --auto". |
|
|
|
* Many codepaths that run "gc --auto" before exiting kept packfiles |
|
mapped and left the file descriptors to them open, which was not |
|
friendly to systems that cannot remove files that are open. They |
|
now close the packs before doing so. |
|
|
|
* A recent optimization to filter-branch in v2.7.0 introduced a |
|
regression when --prune-empty filter is used, which has been |
|
corrected. |
|
|
|
* The description for SANITY prerequisite the test suite uses has |
|
been clarified both in the comment and in the implementation. |
|
|
|
* "git tag" started listing a tag "foo" as "tags/foo" when a branch |
|
named "foo" exists in the same repository; remove this unnecessary |
|
disambiguation, which is a regression introduced in v2.7.0. |
|
|
|
* The way "git svn" uses auth parameter was broken by Subversion |
|
1.9.0 and later. |
|
|
|
* The "split" subcommand of "git subtree" (in contrib/) incorrectly |
|
skipped merges when it shouldn't, which was corrected. |
|
|
|
* A few options of "git diff" did not work well when the command was |
|
run from a subdirectory. |
|
|
|
* The command line completion learned a handful of additional options |
|
and command specific syntax. |
|
|
|
* dirname() emulation has been added, as Msys2 lacks it. |
|
|
|
* The underlying machinery used by "ls-files -o" and other commands |
|
has been taught not to create empty submodule ref cache for a |
|
directory that is not a submodule. This removes a ton of wasted |
|
CPU cycles. |
|
|
|
* "git worktree" had a broken code that attempted to auto-fix |
|
possible inconsistency that results from end-users moving a |
|
worktree to different places without telling Git (the original |
|
repository needs to maintain back-pointers to its worktrees, |
|
but "mv" run by end-users who are not familiar with that fact |
|
will obviously not adjust them), which actually made things |
|
worse when triggered. |
|
|
|
* The low-level merge machinery has been taught to use CRLF line |
|
termination when inserting conflict markers to merged contents that |
|
are themselves CRLF line-terminated. |
|
|
|
* "git push --force-with-lease" has been taught to report if the push |
|
needed to force (or fast-forwarded). |
|
|
|
* The emulated "yes" command used in our test scripts has been |
|
tweaked not to spend too much time generating unnecessary output |
|
that is not used, to help those who test on Windows where it would |
|
not stop until it fills the pipe buffer due to lack of SIGPIPE. |
|
|
|
* The documentation for "git clean" has been corrected; it mentioned |
|
that .git/modules/* are removed by giving two "-f", which has never |
|
been the case. |
|
|
|
* The vimdiff backend for "git mergetool" has been tweaked to arrange |
|
and number buffers in the order that would match the expectation of |
|
majority of people who read left to right, then top down and assign |
|
buffers 1 2 3 4 "mentally" to local base remote merge windows based |
|
on that order. |
|
|
|
* "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a |
|
rev, i.e. the object named by the the pathname with wildcard |
|
characters in a tree object. |
|
(merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint). |
|
|
|
* "git rev-parse --git-common-dir" used in the worktree feature |
|
misbehaved when run from a subdirectory. |
|
(merge 17f1365 nd/git-common-dir-fix later to maint). |
|
|
|
* "git worktree add -B <branchname>" did not work. |
|
|
|
* The "v(iew)" subcommand of the interactive "git am -i" command was |
|
broken in 2.6.0 timeframe when the command was rewritten in C. |
|
(merge 708b8cc jc/am-i-v-fix later to maint). |
|
|
|
* "git merge-tree" used to mishandle "both sides added" conflict with |
|
its own "create a fake ancestor file that has the common parts of |
|
what both sides have added and do a 3-way merge" logic; this has |
|
been updated to use the usual "3-way merge with an empty blob as |
|
the fake common ancestor file" approach used in the rest of the |
|
system. |
|
(merge 907681e jk/no-diff-emit-common later to maint). |
|
|
|
* The memory ownership rule of fill_textconv() API, which was a bit |
|
tricky, has been documented a bit better. |
|
(merge a64e6a4 jk/more-comments-on-textconv later to maint). |
|
|
|
* Update various codepaths to avoid manually-counted malloc(). |
|
(merge 08c95df jk/tighten-alloc later to maint). |
|
|
|
* The documentation did not clearly state that the 'simple' mode is |
|
now the default for "git push" when push.default configuration is |
|
not set. |
|
(merge f6b1fb3 mm/push-simple-doc later to maint). |
|
|
|
* Recent versions of GNU grep are pickier when their input contains |
|
arbitrary binary data, which some of our tests uses. Rewrite the |
|
tests to sidestep the problem. |
|
(merge 3b1442d jk/grep-binary-workaround-in-test later to maint). |
|
|
|
* A helper function "git submodule" uses since v2.7.0 to list the |
|
modules that match the pathspec argument given to its subcommands |
|
(e.g. "submodule add <repo> <path>") has been fixed. |
|
(merge 2b56bb7 sb/submodule-module-list-fix later to maint). |
|
|
|
* "git config section.var value" to set a value in per-repository |
|
configuration file failed when it was run outside any repository, |
|
but didn't say the reason correctly. |
|
(merge 638fa62 js/config-set-in-non-repository later to maint). |
|
|
|
* The code to read the pack data using the offsets stored in the pack |
|
idx file has been made more carefully check the validity of the |
|
data in the idx. |
|
(merge 7465feb jk/pack-idx-corruption-safety later to maint). |
|
|
|
* Other minor clean-ups and documentation updates |
|
(merge f459823 ak/extract-argv0-last-dir-sep later to maint). |
|
(merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint). |
|
(merge 4867f11 ps/plug-xdl-merge-leak later to maint). |
|
(merge 4938686 dt/initial-ref-xn-commit-doc later to maint). |
|
(merge 9537f21 ma/update-hooks-sample-typofix later to maint).
|
|
|