mirror of
https://github.com/git/git
synced 2024-10-31 01:43:41 +00:00
cd3e606211
Signed-off-by: Junio C Hamano <gitster@pobox.com>
438 lines
18 KiB
Text
438 lines
18 KiB
Text
Git 2.34 Release Notes
|
|
======================
|
|
|
|
Updates since Git 2.33
|
|
----------------------
|
|
|
|
Backward compatibility notes
|
|
|
|
* The "--preserve-merges" option of "git rebase" has been removed.
|
|
|
|
|
|
UI, Workflows & Features
|
|
|
|
* Pathname expansion (like "~username/") learned a way to specify a
|
|
location relative to Git installation (e.g. its $sharedir which is
|
|
$(prefix)/share), with "%(prefix)".
|
|
|
|
* The `ort` strategy is used instead of `recursive` as the default
|
|
merge strategy.
|
|
|
|
* The userdiff pattern for "java" language has been updated.
|
|
|
|
* "git rebase" by default skips changes that are equivalent to
|
|
commits that are already in the history the branch is rebased onto;
|
|
give messages when this happens to let the users be aware of
|
|
skipped commits, and also teach them how to tell "rebase" to keep
|
|
duplicated changes.
|
|
|
|
* The advice message that "git cherry-pick" gives when it asks
|
|
conflicted replay of a commit to be resolved by the end user has
|
|
been updated.
|
|
|
|
* After "git clone --recurse-submodules", all submodules are cloned
|
|
but they are not by default recursed into by other commands. With
|
|
submodule.stickyRecursiveClone configuration set, submodule.recurse
|
|
configuration is set to true in a repository created by "clone"
|
|
with "--recurse-submodules" option.
|
|
|
|
* The logic for auto-correction of misspelt subcommands learned to go
|
|
interactive when the help.autocorrect configuration variable is set
|
|
to 'prompt'.
|
|
|
|
* "git maintenance" scheduler learned to use systemd timers as a
|
|
possible backend.
|
|
|
|
* "git diff --submodule=diff" showed failure from run_command() when
|
|
trying to run diff inside a submodule, when the user manually
|
|
removes the submodule directory.
|
|
|
|
* "git bundle unbundle" learned to show progress display.
|
|
|
|
* In cone mode, the sparse-index code path learned to remove ignored
|
|
files (like build artifacts) outside the sparse cone, allowing the
|
|
entire directory outside the sparse cone to be removed, which is
|
|
especially useful when the sparse patterns change.
|
|
|
|
* Taking advantage of the CGI interface, http-backend has been
|
|
updated to enable protocol v2 automatically when the other side
|
|
asks for it.
|
|
|
|
* The credential-cache helper has been adjusted to Windows.
|
|
|
|
* The error in "git help no-such-git-command" is handled better.
|
|
|
|
* The unicode character width table (used for output alignment) has
|
|
been updated.
|
|
|
|
* The ref iteration code used to optionally allow dangling refs to be
|
|
shown, which has been tightened up.
|
|
|
|
* "git add", "git mv", and "git rm" have been adjusted to avoid
|
|
updating paths outside of the sparse-checkout definition unless
|
|
the user specifies a "--sparse" option.
|
|
|
|
* "git repack" has been taught to generate multi-pack reachability
|
|
bitmaps.
|
|
|
|
* "git fsck" has been taught to report mismatch between expected and
|
|
actual types of an object better.
|
|
|
|
* In addition to GnuPG, ssh public crypto can be used for object and
|
|
push-cert signing. Note that this feature cannot be used with
|
|
ssh-keygen from OpenSSH 8.7, whose support for it is broken. Avoid
|
|
using it unless you update to OpenSSH 8.8.
|
|
|
|
* "git log --grep=string --author=name" learns to highlight hits just
|
|
like "git grep string" does.
|
|
|
|
|
|
|
|
Performance, Internal Implementation, Development Support etc.
|
|
|
|
* "git bisect" spawned "git show-branch" only to pretty-print the
|
|
title of the commit after checking out the next version to be
|
|
tested; this has been rewritten in C.
|
|
|
|
* "git add" can work better with the sparse index.
|
|
|
|
* Support for ancient versions of cURL library (pre 7.19.4) has been
|
|
dropped.
|
|
|
|
* A handful of tests that assumed implementation details of files
|
|
backend for refs have been cleaned up.
|
|
|
|
* trace2 logs learned to show parent process name to see in what
|
|
context Git was invoked.
|
|
|
|
* Loading of ref tips to prepare for common ancestry negotiation in
|
|
"git fetch-pack" has been optimized by taking advantage of the
|
|
commit graph when available.
|
|
|
|
* Remind developers that the userdiff patterns should be kept simple
|
|
and permissive, assuming that the contents they apply are always
|
|
syntactically correct.
|
|
|
|
* The current implementation of GIT_TEST_FAIL_PREREQS is broken in
|
|
that checking for the lack of a prerequisite would not work. Avoid
|
|
the use of "if ! test_have_prereq X" in a test script.
|
|
|
|
* The revision traversal API has been optimized by taking advantage
|
|
of the commit-graph, when available, to determine if a commit is
|
|
reachable from any of the existing refs.
|
|
|
|
* "git fetch --quiet" optimization to avoid useless computation of
|
|
info that will never be displayed.
|
|
|
|
* Callers from older advice_config[] based API has been updated to
|
|
use the newer advice_if_enabled() and advice_enabled() API.
|
|
|
|
* Teach "test_pause" and "debug" helpers to allow using the HOME and
|
|
TERM environment variables the user usually uses.
|
|
|
|
* "make INSTALL_STRIP=-s install" allows the installation step to use
|
|
"install -s" to strip the binaries as they get installed.
|
|
|
|
* Code that handles large number of refs in the "git fetch" code
|
|
path has been optimized.
|
|
|
|
* The reachability bitmap file used to be generated only for a single
|
|
pack, but now we've learned to generate bitmaps for history that
|
|
span across multiple packfiles.
|
|
|
|
* The code to make "git grep" recurse into submodules has been
|
|
updated to migrate away from the "add submodule's object store as
|
|
an alternate object store" mechanism (which is suboptimal).
|
|
|
|
* The tracing of process ancestry information has been enhanced.
|
|
|
|
* Reduce number of write(2) system calls while sending the
|
|
ref advertisement.
|
|
|
|
* Update the build procedure to use the "-pedantic" build when
|
|
DEVELOPER makefile macro is in effect.
|
|
|
|
* Large part of "git submodule add" gets rewritten in C.
|
|
|
|
* The run-command API has been updated so that the callers can easily
|
|
ask the file descriptors open for packfiles to be closed immediately
|
|
before spawning commands that may trigger auto-gc.
|
|
|
|
* An oddball OPTION_ARGUMENT feature has been removed from the
|
|
parse-options API.
|
|
|
|
* The mergesort implementation used to sort linked list has been
|
|
optimized.
|
|
|
|
* Remove external declaration of functions that no longer exist.
|
|
|
|
* "git multi-pack-index write --bitmap" learns to propagate the
|
|
hashcache from original bitmap to resulting bitmap.
|
|
|
|
* CI learns to run the leak sanitizer builds.
|
|
|
|
* "git grep --recurse-submodules" takes trees and blobs from the
|
|
submodule repository, but the textconv settings when processing a
|
|
blob from the submodule is not taken from the submodule repository.
|
|
A test is added to demonstrate the issue, without fixing it.
|
|
|
|
* Teach "git help -c" into helping the command line completion of
|
|
configuration variables.
|
|
|
|
* When "git cmd -h" shows more than one line of usage text (e.g.
|
|
the cmd subcommand may take sub-sub-command), parse-options API
|
|
learned to align these lines, even across i18n/l10n.
|
|
|
|
* Prevent "make sparse" from running for the source files that
|
|
haven't been modified.
|
|
|
|
* The code path to write a new version of .midx multi-pack index files
|
|
has learned to release the mmaped memory holding the current
|
|
version of .midx before removing them from the disk, as some
|
|
platforms do not allow removal of a file that still has mapping.
|
|
|
|
* A new feature has been added to abort early in the test framework.
|
|
|
|
|
|
Fixes since v2.33
|
|
-----------------
|
|
|
|
* Input validation of "git pack-objects --stdin-packs" has been
|
|
corrected.
|
|
|
|
* Bugfix for common ancestor negotiation recently introduced in "git
|
|
push" code path.
|
|
|
|
* "git pull" had various corner cases that were not well thought out
|
|
around its --rebase backend, e.g. "git pull --ff-only" did not stop
|
|
but went ahead and rebased when the history on other side is not a
|
|
descendant of our history. The series tries to fix them up.
|
|
|
|
* "git apply" miscounted the bytes and failed to read to the end of
|
|
binary hunks.
|
|
|
|
* "git range-diff" code clean-up.
|
|
|
|
* "git commit --fixup" now works with "--edit" again, after it was
|
|
broken in v2.32.
|
|
|
|
* Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
|
|
new version has a blocker bug for that architecture.
|
|
|
|
* Checking out all the paths from HEAD during the last conflicted
|
|
step in "git rebase" and continuing would cause the step to be
|
|
skipped (which is expected), but leaves MERGE_MSG file behind in
|
|
$GIT_DIR and confuses the next "git commit", which has been
|
|
corrected.
|
|
|
|
* Various bugs in "git rebase -r" have been fixed.
|
|
|
|
* mmap() imitation used to call xmalloc() that dies upon malloc()
|
|
failure, which has been corrected to just return an error to the
|
|
caller to be handled.
|
|
|
|
* "git diff --relative" segfaulted and/or produced incorrect result
|
|
when there are unmerged paths.
|
|
|
|
* The delayed checkout code path in "git checkout" etc. were chatty
|
|
even when --quiet and/or --no-progress options were given.
|
|
|
|
* "git branch -D <branch>" used to refuse to remove a broken branch
|
|
ref that points at a missing commit, which has been corrected.
|
|
|
|
* Build update for Apple clang.
|
|
|
|
* The parser for the "--nl" option of "git column" has been
|
|
corrected.
|
|
|
|
* "git upload-pack" which runs on the other side of "git fetch"
|
|
forgot to take the ref namespaces into account when handling
|
|
want-ref requests.
|
|
|
|
* The sparse-index support can corrupt the index structure by storing
|
|
a stale and/or uninitialized data, which has been corrected.
|
|
|
|
* Buggy tests could damage repositories outside the throw-away test
|
|
area we created. We now by default export GIT_CEILING_DIRECTORIES
|
|
to limit the damage from such a stray test.
|
|
|
|
* Even when running "git send-email" without its own threaded
|
|
discussion support, a threading related header in one message is
|
|
carried over to the subsequent message to result in an unwanted
|
|
threading, which has been corrected.
|
|
|
|
* The output from "git fast-export", when its anonymization feature
|
|
is in use, showed an annotated tag incorrectly.
|
|
|
|
* Recent "diff -m" changes broke "gitk", which has been corrected.
|
|
|
|
* The "git apply -3" code path learned not to bother the lower level
|
|
merge machinery when the three-way merge can be trivially resolved
|
|
without the content level merge. This fixes a regression caused by
|
|
recent "-3way first and fall back to direct application" change.
|
|
|
|
* The code that optionally creates the *.rev reverse index file has
|
|
been optimized to avoid needless computation when it is not writing
|
|
the file out.
|
|
|
|
* "git range-diff -I... <range> <range>" segfaulted, which has been
|
|
corrected.
|
|
|
|
* The order in which various files that make up a single (conceptual)
|
|
packfile has been reevaluated and straightened up. This matters in
|
|
correctness, as an incomplete set of files must not be shown to a
|
|
running Git.
|
|
|
|
* The "mode" word is useless in a call to open(2) that does not
|
|
create a new file. Such a call in the files backend of the ref
|
|
subsystem has been cleaned up.
|
|
|
|
* "git update-ref --stdin" failed to flush its output as needed,
|
|
which potentially led the conversation to a deadlock.
|
|
|
|
* When "git am --abort" fails to abort correctly, it still exited
|
|
with exit status of 0, which has been corrected.
|
|
|
|
* Correct nr and alloc members of strvec struct to be of type size_t.
|
|
|
|
* "git stash", where the tentative change involves changing a
|
|
directory to a file (or vice versa), was confused, which has been
|
|
corrected.
|
|
|
|
* "git clone" from a repository whose HEAD is unborn into a bare
|
|
repository didn't follow the branch name the other side used, which
|
|
is corrected.
|
|
|
|
* "git cvsserver" had a long-standing bug in its authentication code,
|
|
which has finally been corrected (it is unclear and is a separate
|
|
question if anybody is seriously using it, though).
|
|
|
|
* "git difftool --dir-diff" mishandled symbolic links.
|
|
|
|
* Sensitive data in the HTTP trace were supposed to be redacted, but
|
|
we failed to do so in HTTP/2 requests.
|
|
|
|
* "make clean" has been updated to remove leftover .depend/
|
|
directories, even when it is not told to use them to compute header
|
|
dependencies.
|
|
|
|
* Protocol v0 clients can get stuck parsing a malformed feature line.
|
|
|
|
* A few kinds of changes "git status" can show were not documented.
|
|
(merge d2a534c515 ja/doc-status-types-and-copies later to maint).
|
|
|
|
* The mergesort implementation used to sort linked list has been
|
|
optimized.
|
|
(merge c90cfc225b rs/mergesort later to maint).
|
|
|
|
* An editor session launched during a Git operation (e.g. during 'git
|
|
commit') can leave the terminal in a funny state. The code path
|
|
has updated to save the terminal state before, and restore it
|
|
after, it spawns an editor.
|
|
(merge 3d411afabc cm/save-restore-terminal later to maint).
|
|
|
|
* "git cat-file --batch" with the "--batch-all-objects" option is
|
|
supposed to iterate over all the objects found in a repository, but
|
|
it used to translate these object names using the replace mechanism,
|
|
which defeats the point of enumerating all objects in the repository.
|
|
This has been corrected.
|
|
(merge bf972896d7 jk/cat-file-batch-all-wo-replace later to maint).
|
|
|
|
* Recent sparse-index work broke safety against attempts to add paths
|
|
with trailing slashes to the index, which has been corrected.
|
|
(merge c8ad9d04c6 rs/make-verify-path-really-verify-again later to maint).
|
|
|
|
* The "--color-lines" and "--color-by-age" options of "git blame"
|
|
have been missing, which are now documented.
|
|
(merge 8c32856133 bs/doc-blame-color-lines later to maint).
|
|
|
|
* The PATH used in CI job may be too wide and let incompatible dlls
|
|
to be grabbed, which can cause the build&test to fail. Tighten it.
|
|
(merge 7491ef6198 js/windows-ci-path-fix later to maint).
|
|
|
|
* Avoid performance measurements from getting ruined by gc and other
|
|
housekeeping pauses interfering in the middle.
|
|
(merge be79131a53 rs/disable-gc-during-perf-tests later to maint).
|
|
|
|
* Stop "git add --dry-run" from creating new blob and tree objects.
|
|
(merge e578d0311d rs/add-dry-run-without-objects later to maint).
|
|
|
|
* "git commit" gave duplicated error message when the object store
|
|
was unwritable, which has been corrected.
|
|
(merge 4ef91a2d79 ab/fix-commit-error-message-upon-unwritable-object-store later to maint).
|
|
|
|
* Recent sparse-index addition, namely any use of index_name_pos(),
|
|
can expand sparse index entries and breaks any code that walks
|
|
cache-tree or existing index entries. One such instance of such a
|
|
breakage has been corrected.
|
|
|
|
* The xxdiff difftool backend can exit with status 128, which the
|
|
difftool-helper that launches the backend takes as a significant
|
|
failure, when it is not significant at all. Work it around.
|
|
(merge 571f4348dd da/mergetools-special-case-xxdiff-exit-128 later to maint).
|
|
|
|
* Improve test framework around unwritable directories.
|
|
(merge 5d22e18965 ab/test-cleanly-recreate-trash-directory later to maint).
|
|
|
|
* "git push" client talking to an HTTP server did not diagnose the
|
|
lack of the final status report from the other side correctly,
|
|
which has been corrected.
|
|
(merge c5c3486f38 jk/http-push-status-fix later to maint).
|
|
|
|
* Update "git archive" documentation and give explicit mention on the
|
|
compression level for both zip and tar.gz format.
|
|
(merge c4b208c309 bs/archive-doc-compression-level later to maint).
|
|
|
|
* Drop "git sparse-checkout" from the list of common commands.
|
|
(merge 6a9a50a8af sg/sparse-index-not-that-common-a-command later to maint).
|
|
|
|
* "git branch -c/-m new old" was not described to copy config, which
|
|
has been corrected.
|
|
(merge 8252ec300e jc/branch-copy-doc later to maint).
|
|
|
|
* Squelch over-eager warning message added during this cycle.
|
|
|
|
* Fix long-standing shell syntax error in the completion script.
|
|
(merge 46b0585286 re/completion-fix-test-equality later to maint).
|
|
|
|
* Teach "git commit-graph" command not to allow using replace objects
|
|
at all, as we do not use the commit-graph at runtime when we see
|
|
object replacement.
|
|
(merge 095d112f8c ab/ignore-replace-while-working-on-commit-graph later to maint).
|
|
|
|
* "git pull --no-verify" did not affect the underlying "git merge".
|
|
(merge 47bfdfb3fd ar/fix-git-pull-no-verify later to maint).
|
|
|
|
* One CI task based on Fedora image noticed a not-quite-kosher
|
|
construct recently, which has been corrected.
|
|
|
|
* "git pull --ff-only" and "git pull --rebase --ff-only" should make
|
|
it a no-op to attempt pulling from a remote that is behind us, but
|
|
instead the command errored out by saying it was impossible to
|
|
fast-forward, which may technically be true, but not a useful thing
|
|
to diagnose as an error. This has been corrected.
|
|
(merge 361cb52383 jc/fix-pull-ff-only-when-already-up-to-date later to maint).
|
|
|
|
* The way Cygwin emulates a unix-domain socket, on top of which the
|
|
simple-ipc mechanism is implemented, can race with the program on
|
|
the other side that wants to use the socket, and briefly make it
|
|
appear as a regular file before lstat(2) starts reporting it as a
|
|
socket. We now have a workaround on the side that connects to a
|
|
unix domain socket.
|
|
|
|
* Other code cleanup, docfix, build fix, etc.
|
|
(merge f188160be9 ab/bundle-remove-verbose-option later to maint).
|
|
(merge 8c6b4332b4 rs/close-pack-leakfix later to maint).
|
|
(merge 51b04c05b7 bs/difftool-msg-tweak later to maint).
|
|
(merge dd20e4a6db ab/make-compdb-fix later to maint).
|
|
(merge 6ffb990dc4 os/status-docfix later to maint).
|
|
(merge 100c2da2d3 rs/p3400-lose-tac later to maint).
|
|
(merge 76f3b69896 tb/aggregate-ignore-leading-whitespaces later to maint).
|
|
(merge 6e4fd8bfcd tz/doc-link-to-bundle-format-fix later to maint).
|
|
(merge f6c013dfa1 jc/doc-commit-header-continuation-line later to maint).
|
|
(merge ec9a37d69b ab/pkt-line-cleanup later to maint).
|
|
(merge 8650c6298c ab/fix-make-lint-docs later to maint).
|
|
(merge 1c720357ce ab/test-lib-diff-cleanup later to maint).
|
|
(merge 6b615dbece ks/submodule-add-message-fix later to maint).
|
|
(merge 203eb8381a jc/doc-format-patch-clarify-auto-base later to maint).
|
|
(merge 559664c792 ab/test-lib later to maint).
|