mirror of
https://github.com/git/git.git
synced 2024-11-25 10:54:00 +08:00
2512f15446
Signed-off-by: Junio C Hamano <gitster@pobox.com>
483 lines
20 KiB
Plaintext
483 lines
20 KiB
Plaintext
Git 2.16 Release Notes
|
|
======================
|
|
|
|
Backward compatibility notes and other notable changes.
|
|
|
|
* Use of an empty string as a pathspec element that is used for
|
|
'everything matches' is now an error.
|
|
|
|
|
|
Updates since v2.15
|
|
-------------------
|
|
|
|
UI, Workflows & Features
|
|
|
|
* An empty string as a pathspec element that means "everything"
|
|
i.e. 'git add ""', is now illegal. We started this by first
|
|
deprecating and warning a pathspec that has such an element in
|
|
2.11 (Nov 2016).
|
|
|
|
* A hook script that is set unexecutable is simply ignored. Git
|
|
notifies when such a file is ignored, unless the message is
|
|
squelched via advice.ignoredHook configuration.
|
|
|
|
* "git pull" has been taught to accept "--[no-]signoff" option and
|
|
pass it down to "git merge".
|
|
|
|
* The "--push-option=<string>" option to "git push" now defaults to a
|
|
list of strings configured via push.pushOption variable.
|
|
|
|
* "gitweb" checks if a directory is searchable with Perl's "-x"
|
|
operator, which can be enhanced by using "filetest 'access'"
|
|
pragma, which now we do.
|
|
|
|
* "git stash save" has been deprecated in favour of "git stash push".
|
|
|
|
* The set of paths output from "git status --ignored" was tied
|
|
closely with its "--untracked=<mode>" option, but now it can be
|
|
controlled more flexibly. Most notably, a directory that is
|
|
ignored because it is listed to be ignored in the ignore/exclude
|
|
mechanism can be handled differently from a directory that ends up
|
|
to be ignored only because all files in it are ignored.
|
|
|
|
* The remote-helper for talking to MediaWiki has been updated to
|
|
truncate an overlong pagename so that ".mw" suffix can still be
|
|
added.
|
|
|
|
* The remote-helper for talking to MediaWiki has been updated to
|
|
work with mediawiki namespaces.
|
|
|
|
* The "--format=..." option "git for-each-ref" takes learned to show
|
|
the name of the 'remote' repository and the ref at the remote side
|
|
that is affected for 'upstream' and 'push' via "%(push:remotename)"
|
|
and friends.
|
|
|
|
* Doc and message updates to teach users "bisect view" is a synonym
|
|
for "bisect visualize".
|
|
|
|
* "git bisect run" that did not specify any command to run used to go
|
|
ahead and treated all commits to be tested as 'good'. This has
|
|
been corrected by making the command error out.
|
|
|
|
* The SubmittingPatches document has been converted to produce an
|
|
HTML version via AsciiDoc/Asciidoctor.
|
|
|
|
* We learned to optionally talk to a file system monitor via new
|
|
fsmonitor extension to speed up "git status" and other operations
|
|
that need to see which paths have been modified. Currently we only
|
|
support "watchman". See File System Monitor section of
|
|
git-update-index(1) for more detail.
|
|
|
|
* The "diff" family of commands learned to ignore differences in
|
|
carriage return at the end of line.
|
|
|
|
* Places that know about "sendemail.to", like documentation and shell
|
|
completion (in contrib/) have been taught about "sendemail.tocmd",
|
|
too.
|
|
|
|
* "git add --renormalize ." is a new and safer way to record the fact
|
|
that you are correcting the end-of-line convention and other
|
|
"convert_to_git()" glitches in the in-repository data.
|
|
|
|
* "git branch" and "git checkout -b" are now forbidden from creating
|
|
a branch whose name is "HEAD".
|
|
|
|
* "git branch --list" learned to show its output through the pager by
|
|
default when the output is going to a terminal, which is controlled
|
|
by the pager.branch configuration variable. This is similar to a
|
|
recent change to "git tag --list".
|
|
|
|
* "git grep -W", "git diff -W" and their friends learned a heuristic
|
|
to extend a pre-context beyond the line that matches the "function
|
|
pattern" (aka "diff.*.xfuncname") to include a comment block, if
|
|
exists, that immediately precedes it.
|
|
|
|
* "git config --expiry-date gc.reflogexpire" can read "2.weeks" from
|
|
the configuration and report it as a timestamp, just like "--int"
|
|
would read "1k" and report 1024, to help consumption by scripts.
|
|
|
|
* The shell completion (in contrib/) learned that "git pull" can take
|
|
the "--autostash" option.
|
|
|
|
* The tagnames "git log --decorate" uses to annotate the commits can
|
|
now be limited to subset of available refs with the two additional
|
|
options, --decorate-refs[-exclude]=<pattern>.
|
|
|
|
* "git grep" compiled with libpcre2 sometimes triggered a segfault,
|
|
which is being fixed.
|
|
|
|
* "git send-email" tries to see if the sendmail program is available
|
|
in /usr/lib and /usr/sbin; extend the list of locations to be
|
|
checked to also include directories on $PATH.
|
|
|
|
* "git diff" learned, "--anchored", a variant of the "--patience"
|
|
algorithm, to which the user can specify which 'unique' line to be
|
|
used as anchoring points.
|
|
|
|
* The way "git worktree add" determines what branch to create from
|
|
where and checkout in the new worktree has been updated a bit.
|
|
|
|
* Ancient part of codebase still shows dots after an abbreviated
|
|
object name just to show that it is not a full object name, but
|
|
these ellipses are confusing to people who newly discovered Git
|
|
who are used to seeing abbreviated object names and find them
|
|
confusing with the range syntax.
|
|
|
|
* With a configuration variable rebase.abbreviateCommands set,
|
|
"git rebase -i" produces the todo list with a single-letter
|
|
command names.
|
|
|
|
* "git worktree add" learned to run the post-checkout hook, just like
|
|
"git checkout" does, after the initial checkout.
|
|
|
|
* "git svn" has been updated to strip CRs in the commit messages, as
|
|
recent versions of Subversion rejects them.
|
|
|
|
* "git imap-send" did not correctly quote the folder name when
|
|
making a request to the server, which has been corrected.
|
|
|
|
* Error messages from "git rebase" have been somewhat cleaned up.
|
|
|
|
* Git has been taught to support an https:// URL used for http.proxy
|
|
when using recent versions of libcurl.
|
|
|
|
* "git merge" learned to pay attention to merge.verifySignatures
|
|
configuration variable and pretend as if '--verify-signatures'
|
|
option was given from the command line.
|
|
|
|
* "git describe" was taught to dig trees deeper to find a
|
|
<commit-ish>:<path> that refers to a given blob object.
|
|
|
|
|
|
Performance, Internal Implementation, Development Support etc.
|
|
|
|
* An earlier update made it possible to use an on-stack in-core
|
|
lockfile structure (as opposed to having to deliberately leak an
|
|
on-heap one). Many codepaths have been updated to take advantage
|
|
of this new facility.
|
|
|
|
* Calling cmd_foo() as if it is a general purpose helper function is
|
|
a no-no. Correct two instances of such to set an example.
|
|
|
|
* We try to see if somebody runs our test suite with a shell that
|
|
does not support "local" like bash/dash does.
|
|
|
|
* An early part of piece-by-piece rewrite of "git bisect" in C.
|
|
|
|
* GSoC to piece-by-piece rewrite "git submodule" in C.
|
|
|
|
* Optimize the code to find shortest unique prefix of object names.
|
|
|
|
* Pathspec-limited revision traversal was taught not to keep finding
|
|
unneeded differences once it knows two trees are different inside
|
|
given pathspec.
|
|
|
|
* Conversion from uchar[20] to struct object_id continues.
|
|
|
|
* Code cleanup.
|
|
|
|
* A single-word "unsigned flags" in the diff options is being split
|
|
into a structure with many bitfields.
|
|
|
|
* TravisCI build updates.
|
|
|
|
* Parts of a test to drive the long-running content filter interface
|
|
has been split into its own module, hopefully to eventually become
|
|
reusable.
|
|
|
|
* Drop (perhaps overly cautious) sanity check before using the index
|
|
read from the filesystem at runtime.
|
|
|
|
* The build procedure has been taught to avoid some unnecessary
|
|
instability in the build products.
|
|
|
|
* A new mechanism to upgrade the wire protocol in place is proposed
|
|
and demonstrated that it works with the older versions of Git
|
|
without harming them.
|
|
|
|
* An infrastructure to define what hash function is used in Git is
|
|
introduced, and an effort to plumb that throughout various
|
|
codepaths has been started.
|
|
|
|
* The code to iterate over loose object files got optimized.
|
|
|
|
* An internal function that was left for backward compatibility has
|
|
been removed, as there is no remaining callers.
|
|
|
|
* Historically, the diff machinery for rename detection had a
|
|
hardcoded limit of 32k paths; this is being lifted to allow users
|
|
trade cycles with a (possibly) easier to read result.
|
|
|
|
* The tracing infrastructure has been optimized for cases where no
|
|
tracing is requested.
|
|
|
|
* In preparation for implementing narrow/partial clone, the object
|
|
walking machinery has been taught a way to tell it to "filter" some
|
|
objects from enumeration.
|
|
|
|
* A few structures and variables that are implementation details of
|
|
the decorate API have been renamed and then the API got documented
|
|
better.
|
|
|
|
* Assorted updates for TravisCI integration.
|
|
(merge 4f26366679 sg/travis-fixes later to maint).
|
|
|
|
* Introduce a helper to simplify code to parse a common pattern that
|
|
expects either "--key" or "--key=<something>".
|
|
|
|
* "git version --build-options" learned to report the host CPU and
|
|
the exact commit object name the binary was built from.
|
|
|
|
Also contains various documentation updates and code clean-ups.
|
|
|
|
|
|
Fixes since v2.15
|
|
-----------------
|
|
|
|
* "auto" as a value for the columnar output configuration ought to
|
|
judge "is the output consumed by humans?" with the same criteria as
|
|
"auto" for coloured output configuration, i.e. either the standard
|
|
output stream is going to tty, or a pager is in use. We forgot the
|
|
latter, which has been fixed.
|
|
|
|
* The experimental "color moved lines differently in diff output"
|
|
feature was buggy around "ignore whitespace changes" edges, which
|
|
has been corrected.
|
|
|
|
* Instead of using custom line comparison and hashing functions to
|
|
implement "moved lines" coloring in the diff output, use the pair
|
|
of these functions from lower-layer xdiff/ code.
|
|
|
|
* Some codepaths did not check for errors when asking what branch the
|
|
HEAD points at, which have been fixed.
|
|
|
|
* "git commit", after making a commit, did not check for errors when
|
|
asking on what branch it made the commit, which has been corrected.
|
|
|
|
* "git status --ignored -u" did not stop at a working tree of a
|
|
separate project that is embedded in an ignored directory and
|
|
listed files in that other project, instead of just showing the
|
|
directory itself as ignored.
|
|
|
|
* A broken access to object databases in recent update to "git grep
|
|
--recurse-submodules" has been fixed.
|
|
|
|
* A recent regression in "git rebase -i" that broke execution of git
|
|
commands from subdirectories via "exec" instruction has been fixed.
|
|
|
|
* A (possibly flakey) test fix.
|
|
|
|
* "git check-ref-format --branch @{-1}" bit a "BUG()" when run
|
|
outside a repository for obvious reasons; clarify the documentation
|
|
and make sure we do not even try to expand the at-mark magic in
|
|
such a case, but still call the validation logic for branch names.
|
|
|
|
* "git fetch --recurse-submodules" now knows that submodules can be
|
|
moved around in the superproject in addition to getting updated,
|
|
and finds the ones that need to be fetched accordingly.
|
|
|
|
* Command line completion (in contrib/) update.
|
|
|
|
* Description of blame.{showroot,blankboundary,showemail,date}
|
|
configuration variables have been added to "git config --help".
|
|
|
|
* After an error from lstat(), diff_populate_filespec() function
|
|
sometimes still went ahead and used invalid data in struct stat,
|
|
which has been fixed.
|
|
|
|
* UNC paths are also relevant in Cygwin builds and they are now
|
|
tested just like Mingw builds.
|
|
|
|
* Correct start-up sequence so that a repository could be placed
|
|
immediately under the root directory again (which was broken at
|
|
around Git 2.13).
|
|
|
|
* The credential helper for libsecret (in contrib/) has been improved
|
|
to allow possibly prompting the end user to unlock secrets that are
|
|
currently locked (otherwise the secrets may not be loaded).
|
|
|
|
* MinGW updates.
|
|
|
|
* Error checking in "git imap-send" for empty response has been
|
|
improved.
|
|
|
|
* Recent update to the refs infrastructure implementation started
|
|
rewriting packed-refs file more often than before; this has been
|
|
optimized again for most trivial cases.
|
|
|
|
* Some error messages did not quote filenames shown in it, which have
|
|
been fixed.
|
|
|
|
* "git rebase -i" recently started misbehaving when a submodule that
|
|
is configured with 'submodule.<name>.ignore' is dirty; this has
|
|
been corrected.
|
|
|
|
* Building with NO_LIBPCRE1_JIT did not disable it, which has been fixed.
|
|
|
|
* We used to add an empty alternate object database to the system
|
|
that does not help anything; it has been corrected.
|
|
|
|
* Doc update around use of "format-patch --subject-prefix" etc.
|
|
|
|
* A fix for an ancient bug in "git apply --ignore-space-change" codepath.
|
|
|
|
* Clarify and enhance documentation for "merge-base --fork-point", as
|
|
it was clear what it computed but not why/what for.
|
|
|
|
* A few scripts (both in production and tests) incorrectly redirected
|
|
their error output. These have been corrected.
|
|
|
|
* "git notes" sent its error message to its standard output stream,
|
|
which was corrected.
|
|
|
|
* The three-way merge performed by "git cherry-pick" was confused
|
|
when a new submodule was added in the meantime, which has been
|
|
fixed (or "papered over").
|
|
|
|
* The sequencer machinery (used by "git cherry-pick A..B", and "git
|
|
rebase -i", among other things) would have lost a commit if stopped
|
|
due to an unlockable index file, which has been fixed.
|
|
|
|
* "git apply --inaccurate-eof" when used with "--ignore-space-change"
|
|
triggered an internal sanity check, which has been fixed.
|
|
|
|
* Command line completion (in contrib/) has been taught about the
|
|
"--copy" option of "git branch".
|
|
|
|
* When "git rebase" prepared a mailbox of changes and fed it to "git
|
|
am" to replay them, it was confused when a stray "From " happened
|
|
to be in the log message of one of the replayed changes. This has
|
|
been corrected.
|
|
|
|
* There was a recent semantic mismerge in the codepath to write out a
|
|
section of a configuration section, which has been corrected.
|
|
|
|
* Mentions of "git-rebase" and "git-am" (dashed form) still remained
|
|
in end-user visible strings emitted by the "git rebase" command;
|
|
they have been corrected.
|
|
|
|
* Contrary to the documentation, "git pull -4/-6 other-args" did not
|
|
ask the underlying "git fetch" to go over IPv4/IPv6, which has been
|
|
corrected.
|
|
|
|
* "git checkout --recursive" may overwrite and rewind the history of
|
|
the branch that happens to be checked out in submodule
|
|
repositories, which might not be desirable. Detach the HEAD but
|
|
still allow the recursive checkout to succeed in such a case.
|
|
(merge 57f22bf997 sb/submodule-recursive-checkout-detach-head later to maint).
|
|
|
|
* "git branch --set-upstream" has been deprecated and (sort of)
|
|
removed, as "--set-upstream-to" is the preferred one these days.
|
|
The documentation still had "--set-upstream" listed on its
|
|
synopsis section, which has been corrected.
|
|
(merge a060f3d3d8 tz/branch-doc-remove-set-upstream later to maint).
|
|
|
|
* Internally we use 0{40} as a placeholder object name to signal the
|
|
codepath that there is no such object (e.g. the fast-forward check
|
|
while "git fetch" stores a new remote-tracking ref says "we know
|
|
there is no 'old' thing pointed at by the ref, as we are creating
|
|
it anew" by passing 0{40} for the 'old' side), and expect that a
|
|
codepath to locate an in-core object to return NULL as a sign that
|
|
the object does not exist. A look-up for an object that does not
|
|
exist however is quite costly with a repository with large number
|
|
of packfiles. This access pattern has been optimized.
|
|
(merge 87b5e236a1 jk/fewer-pack-rescan later to maint).
|
|
|
|
* In addition to "git stash -m message", the command learned to
|
|
accept "git stash -mmessage" form.
|
|
(merge 5675473fcb ph/stash-save-m-option-fix later to maint).
|
|
|
|
* @{-N} in "git checkout @{-N}" may refer to a detached HEAD state,
|
|
but the documentation was not clear about it, which has been fixed.
|
|
(merge 75ce149575 ks/doc-checkout-previous later to maint).
|
|
|
|
* A regression in the progress eye-candy was fixed.
|
|
(merge 9c5951cacf jk/progress-delay-fix later to maint).
|
|
|
|
* The code internal to the recursive merge strategy was not fully
|
|
prepared to see a path that is renamed to try overwriting another
|
|
path that is only different in case on case insensitive systems.
|
|
This does not matter in the current code, but will start to matter
|
|
once the rename detection logic starts taking hints from nearby
|
|
paths moving to some directory and moves a new path along with them.
|
|
(merge 4cba2b0108 en/merge-recursive-icase-removal later to maint).
|
|
|
|
* An v2.12-era regression in pathspec match logic, which made it look
|
|
into submodule tree even when it is not desired, has been fixed.
|
|
(merge eef3df5a93 bw/pathspec-match-submodule-boundary later to maint).
|
|
|
|
* Amending commits in git-gui broke the author name that is non-ascii
|
|
due to incorrect enconding conversion.
|
|
|
|
* Recent update to the submodule configuration code broke "diff-tree"
|
|
by accidentally stopping to read from the index upfront.
|
|
(merge fd66bcc31f bw/submodule-config-cleanup later to maint).
|
|
|
|
* Git shows a message to tell the user that it is waiting for the
|
|
user to finish editing when spawning an editor, in case the editor
|
|
opens to a hidden window or somewhere obscure and the user gets
|
|
lost.
|
|
(merge abfb04d0c7 ls/editor-waiting-message later to maint).
|
|
|
|
* The "safe crlf" check incorrectly triggered for contents that does
|
|
not use CRLF as line endings, which has been corrected.
|
|
(merge 649f1f0948 tb/check-crlf-for-safe-crlf later to maint).
|
|
|
|
* "git clone --shared" to borrow from a (secondary) worktree did not
|
|
work, even though "git clone --local" did. Both are now accepted.
|
|
(merge b3b05971c1 es/clone-shared-worktree later to maint).
|
|
|
|
* The build procedure now allows not just the repositories but also
|
|
the refs to be used to take pre-formatted manpages and html
|
|
documents to install.
|
|
(merge 65289e9dcd rb/quick-install-doc later to maint).
|
|
|
|
* Update the shell prompt script (in contrib/) to strip trailing CR
|
|
from strings read from various "state" files.
|
|
(merge 041fe8fc83 ra/prompt-eread-fix later to maint).
|
|
|
|
* "git merge -s recursive" did not correctly abort when the index is
|
|
dirty, if the merged tree happened to be the same as the current
|
|
HEAD, which has been fixed.
|
|
|
|
* Bytes with high-bit set were encoded incorrectly and made
|
|
credential helper fail.
|
|
(merge 4c267f2ae3 jd/fix-strbuf-add-urlencode-bytes later to maint).
|
|
|
|
* "git rebase -p -X<option>" did not propagate the option properly
|
|
down to underlying merge strategy backend.
|
|
(merge dd6fb0053c js/fix-merge-arg-quoting-in-rebase-p later to maint).
|
|
|
|
* "git merge -s recursive" did not correctly abort when the index is
|
|
dirty, if the merged tree happened to be the same as the current
|
|
HEAD, which has been fixed.
|
|
(merge f309e8e768 ew/empty-merge-with-dirty-index-maint later to maint).
|
|
|
|
* Other minor doc, test and build updates and code cleanups.
|
|
(merge 1a1fc2d5b5 rd/man-prune-progress later to maint).
|
|
(merge 0ba014035a rd/man-reflog-add-n later to maint).
|
|
(merge e54b63359f rd/doc-notes-prune-fix later to maint).
|
|
(merge ff4c9b413a sp/doc-info-attributes later to maint).
|
|
(merge 7db2cbf4f1 jc/receive-pack-hook-doc later to maint).
|
|
(merge 5a0526264b tg/t-readme-updates later to maint).
|
|
(merge 5e83cca0b8 jk/no-optional-locks later to maint).
|
|
(merge 826c778f7c js/hashmap-update-sample later to maint).
|
|
(merge 176b2d328c sg/setup-doc-update later to maint).
|
|
(merge 1b09073514 rs/am-builtin-leakfix later to maint).
|
|
(merge addcf6cfde rs/fmt-merge-msg-string-leak-fix later to maint).
|
|
(merge c3ff8f6c14 rs/strbuf-read-once-reset-length later to maint).
|
|
(merge 6b0eb884f9 db/doc-workflows-neuter-the-maintainer later to maint).
|
|
(merge 8c87bdfb21 jk/cvsimport-quoting later to maint).
|
|
(merge 176cb979fe rs/fmt-merge-msg-leakfix later to maint).
|
|
(merge 5a03360e73 tb/delimit-pretty-trailers-args-with-comma later to maint).
|
|
(merge d0e6326026 ot/pretty later to maint).
|
|
(merge 44103f4197 sb/test-helper-excludes later to maint).
|
|
(merge 170078693f jt/transport-no-more-rsync later to maint).
|
|
(merge c07b3adff1 bw/path-doc later to maint).
|
|
(merge bf9d7df950 tz/lib-git-svn-svnserve-tests later to maint).
|
|
(merge dec366c9a8 sr/http-sslverify-config-doc later to maint).
|
|
(merge 3f824e91c8 jk/test-suite-tracing later to maint).
|
|
(merge 1feb061701 db/doc-config-section-names-with-bs later to maint).
|
|
(merge 74dea0e13c jh/memihash-opt later to maint).
|
|
(merge 2e9fdc795c ma/bisect-leakfix later to maint).
|