mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
402 lines
17 KiB
Plaintext
402 lines
17 KiB
Plaintext
Git 2.30 Release Notes
|
|
======================
|
|
|
|
Updates since v2.29
|
|
-------------------
|
|
|
|
UI, Workflows & Features
|
|
|
|
* Userdiff for PHP update.
|
|
|
|
* Userdiff for Rust update.
|
|
|
|
* Userdiff for CSS update.
|
|
|
|
* The command line completion script (in contrib/) learned that "git
|
|
stash show" takes the options "git diff" takes.
|
|
|
|
* "git worktree list" now shows if each worktree is locked. This
|
|
possibly may open us to show other kinds of states in the future.
|
|
|
|
* "git maintenance", an extended big brother of "git gc", continues
|
|
to evolve.
|
|
|
|
* "git push --force-with-lease[=<ref>]" can easily be misused to lose
|
|
commits unless the user takes good care of their own "git fetch".
|
|
A new option "--force-if-includes" attempts to ensure that what is
|
|
being force-pushed was created after examining the commit at the
|
|
tip of the remote ref that is about to be force-replaced.
|
|
|
|
* "git clone" learned clone.defaultremotename configuration variable
|
|
to customize what nickname to use to call the remote the repository
|
|
was cloned from.
|
|
|
|
* "git checkout" learned to use checkout.guess configuration variable
|
|
and enable/disable its "--[no-]guess" option accordingly.
|
|
|
|
* "git resurrect" script (in contrib/) learned that the object names
|
|
may be longer than 40-hex depending on the hash function in use.
|
|
|
|
* "git diff A...B" learned "git diff --merge-base A B", which is a
|
|
longer short-hand to say the same thing.
|
|
|
|
* A sample 'push-to-checkout' hook, that performs the same as
|
|
what the built-in default action does, has been added.
|
|
|
|
* "git diff" family of commands learned the "-I<regex>" option to
|
|
ignore hunks whose changed lines all match the given pattern.
|
|
|
|
* The userdiff pattern learned to identify the function definition in
|
|
POSIX shells and bash.
|
|
|
|
* "git checkout-index" did not consistently signal an error with its
|
|
exit status, but now it does.
|
|
|
|
* A commit and tag object may have CR at the end of each and
|
|
every line (you can create such an object with hash-object or
|
|
using --cleanup=verbatim to decline the default clean-up
|
|
action), but it would make it impossible to have a blank line
|
|
to separate the title from the body of the message. We are now
|
|
more lenient and accept a line with lone CR on it as a blank line,
|
|
too.
|
|
|
|
* Exit codes from "git remote add" etc. were not usable by scripted
|
|
callers, but now they are.
|
|
|
|
* "git archive" now allows compression level higher than "-9"
|
|
when generating tar.gz output.
|
|
|
|
* Zsh autocompletion (in contrib/) update.
|
|
|
|
* The maximum length of output filenames "git format-patch" creates
|
|
has become configurable (used to be capped at 64).
|
|
|
|
* "git rev-parse" learned the "--end-of-options" to help scripts to
|
|
safely take a parameter that is supposed to be a revision, e.g.
|
|
"git rev-parse --verify -q --end-of-options $rev".
|
|
|
|
* The command line completion script (in contrib/) learned to expand
|
|
commands that are alias of alias.
|
|
|
|
* "git update-ref --stdin" learns to take multiple transactions in a
|
|
single session.
|
|
|
|
* Various subcommands of "git config" that take value_regex
|
|
learned the "--literal-value" option to take the value_regex option
|
|
as a literal string.
|
|
|
|
* The transport layer was taught to optionally exchange the session
|
|
ID assigned by the trace2 subsystem during fetch/push transactions.
|
|
|
|
* "git imap-send" used to ignore configuration variables like
|
|
core.askpass; this has been corrected.
|
|
|
|
* "git $cmd $args", when $cmd is not a recognised subcommand, by
|
|
default tries to see if $cmd is a typo of an existing subcommand
|
|
and optionally executes the corrected command if there is only one
|
|
possibility, depending on the setting of help.autocorrect; the
|
|
users can now disable the whole thing, including the cycles spent
|
|
to find a likely typo, by setting the configuration variable to
|
|
'never'.
|
|
|
|
* "@" sometimes worked (e.g. "git push origin @:there") as a part of
|
|
a refspec element, but "git push origin @" did not work, which has
|
|
been corrected.
|
|
|
|
|
|
Performance, Internal Implementation, Development Support etc.
|
|
|
|
* Use "git archive" more to produce the release tarball.
|
|
|
|
* GitHub Actions automated test improvement to skip tests on a tree
|
|
identical to what has already been tested.
|
|
|
|
* Test-coverage for running commit-graph task "git maintenance" has
|
|
been extended.
|
|
|
|
* Our test scripts can be told to run only individual pieces while
|
|
skipping others with the "--run=..." option; they were taught to
|
|
take a substring of test title, in addition to numbers, to name the
|
|
test pieces to run.
|
|
|
|
* Adjust tests so that they won't scream when the default initial
|
|
branch name is different from 'master'.
|
|
|
|
* Rewriting "git bisect" in C continues.
|
|
|
|
* More preliminary tests have been added to document desired outcomes
|
|
of various "directory rename" situations.
|
|
|
|
* Micro clean-up of a couple of test scripts.
|
|
|
|
* "git diff" and other commands that share the same machinery to
|
|
compare with working tree files have been taught to take advantage
|
|
of the fsmonitor data when available.
|
|
|
|
* The code to detect premature EOF in the sideband demultiplexer has
|
|
been cleaned up.
|
|
|
|
* "git fetch --depth=<n>" over the stateless RPC / smart HTTP
|
|
transport handled EOF from the client poorly at the server end.
|
|
|
|
* A specialization of hashmap that uses a string as key has been
|
|
introduced. Hopefully it will see wider use over time.
|
|
|
|
* "git bisect start/next" in a large span of history spends a lot of
|
|
time trying to come up with exactly the half-way point; this can be
|
|
optimized by stopping when we see a commit that is close enough to
|
|
the half-way point.
|
|
|
|
* A lazily defined test prerequisite can now be defined in terms of
|
|
another lazily defined test prerequisite.
|
|
|
|
* Expectation for the original contributor after responding to a
|
|
review comment to use the explanation in a patch update has been
|
|
described.
|
|
|
|
* Multiple "credential-store" backends can race to lock the same
|
|
file, causing everybody else but one to fail---reattempt locking
|
|
with some timeout to reduce the rate of the failure.
|
|
|
|
* "git-parse-remote" shell script library outlived its usefulness.
|
|
|
|
* Like die() and error(), a call to warning() will also trigger a
|
|
trace2 event.
|
|
|
|
* Use of non-reentrant localtime() has been removed.
|
|
|
|
* Non-reentrant time-related library functions and ctime/asctime with
|
|
awkward calling interfaces are banned from the codebase.
|
|
|
|
|
|
Fixes since v2.29
|
|
-----------------
|
|
|
|
* In 2.29, "--committer-date-is-author-date" option of "rebase" and
|
|
"am" subcommands lost the e-mail address by mistake, which has been
|
|
corrected.
|
|
(merge 5f35edd9d7 jk/committer-date-is-author-date-fix later to maint).
|
|
|
|
* "git checkout -p A...B [-- <path>]" did not work, even though the
|
|
same command without "-p" correctly used the merge-base between
|
|
commits A and B.
|
|
(merge 35166b1fb5 dl/checkout-p-merge-base later to maint).
|
|
|
|
* The side-band status report can be sent at the same time as the
|
|
primary payload multiplexed, but the demultiplexer on the receiving
|
|
end incorrectly split a single status report into two, which has
|
|
been corrected.
|
|
(merge 712b0377db js/avoid-split-sideband-message later to maint).
|
|
|
|
* "git fast-import" wasted a lot of memory when many marks were in use.
|
|
(merge 3f018ec716 jk/fast-import-marks-alloc-fix later to maint).
|
|
|
|
* A test helper "test_cmp A B" was taught to diagnose missing files A
|
|
or B as a bug in test, but some tests legitimately wanted to notice
|
|
a failure to even create file B as an error, in addition to leaving
|
|
the expected result in it, and were misdiagnosed as a bug. This
|
|
has been corrected.
|
|
(merge 262d5ad5a5 es/test-cmp-typocatcher later to maint).
|
|
|
|
* When "git commit-graph" detects the same commit recorded more than
|
|
once while it is merging the layers, it used to die. The code now
|
|
ignores all but one of them and continues.
|
|
(merge 85102ac71b ds/commit-graph-merging-fix later to maint).
|
|
|
|
* The meaning of a Signed-off-by trailer can vary from project to
|
|
project; this and also what it means to this project has been
|
|
clarified in the documentation.
|
|
(merge 3abd4a67d9 bk/sob-dco later to maint).
|
|
|
|
* "git credential' didn't honor the core.askPass configuration
|
|
variable (among other things), which has been corrected.
|
|
(merge 567ad2c0f9 tk/credential-config later to maint).
|
|
|
|
* Dev support to catch a tentative definition of a variable in our C
|
|
code as an error.
|
|
(merge 5539183622 jk/no-common later to maint).
|
|
|
|
* "git rebase --rebase-merges" did not correctly pass --gpg-sign
|
|
command line option to underlying "git merge" when replaying a merge
|
|
using non-default merge strategy or when replaying an octopus merge
|
|
(because replaying a two-head merge with the default strategy was
|
|
done in a separate codepath, the problem did not trigger for most
|
|
users), which has been corrected.
|
|
(merge 43ad4f2eca sc/sequencer-gpg-octopus later to maint).
|
|
|
|
* "git apply -R" did not handle patches that touch the same path
|
|
twice correctly, which has been corrected. This is most relevant
|
|
in a patch that changes a path from a regular file to a symbolic
|
|
link (and vice versa).
|
|
(merge b0f266de11 jt/apply-reverse-twice later to maint).
|
|
|
|
* A recent oid->hash conversion missed one spot, breaking "git svn".
|
|
(merge 03bb366de4 bc/svn-hash-oid-fix later to maint).
|
|
|
|
* The documentation on the "--abbrev=<n>" option did not say the
|
|
output may be longer than "<n>" hexdigits, which has been
|
|
clarified.
|
|
(merge cda34e0d0c jc/abbrev-doc later to maint).
|
|
|
|
* "git p4" now honors init.defaultBranch configuration.
|
|
(merge 1b09d1917f js/p4-default-branch later to maint).
|
|
|
|
* Recently the format of an internal state file "rebase -i" uses has
|
|
been tightened up for consistency, which would hurt those who start
|
|
"rebase -i" with old git and then continue with new git. Loosen
|
|
the reader side a bit (which we may want to tighten again in a year
|
|
or so).
|
|
(merge c779386182 jc/sequencer-stopped-sha-simplify later to maint).
|
|
|
|
* The code to see if "git stash drop" can safely remove refs/stash
|
|
has been made more careful.
|
|
(merge 4f44c5659b rs/empty-reflog-check-fix later to maint).
|
|
|
|
* "git log -L<range>:<path>" is documented to take no pathspec, but
|
|
this was not enforced by the command line option parser, which has
|
|
been corrected.
|
|
(merge 39664cb0ac jc/line-log-takes-no-pathspec later to maint).
|
|
|
|
* "git format-patch --output=there" did not work as expected and
|
|
instead crashed. The option is now supported.
|
|
(merge dc1672dd10 jk/format-patch-output later to maint).
|
|
|
|
* Define ARM64 compiled with MSVC to be little-endian.
|
|
(merge 0c038fc65a dg/bswap-msvc later to maint).
|
|
|
|
* "git rebase -i" did not store ORIG_HEAD correctly.
|
|
(merge 8843302307 pw/rebase-i-orig-head later to maint).
|
|
|
|
* "git blame -L :funcname -- path" did not work well for a path for
|
|
which a userdiff driver is defined.
|
|
|
|
* "make DEVELOPER=1 sparse" used to run sparse and let it emit
|
|
warnings; now such warnings will cause an error.
|
|
(merge 521dc56270 jc/sparse-error-for-developer-build later to maint).
|
|
|
|
* "git blame --ignore-revs-file=<file>" learned to ignore a
|
|
non-existent object name in the input, instead of complaining.
|
|
(merge c714d05875 jc/blame-ignore-fix later to maint).
|
|
|
|
* Running "git diff" while allowing external diff in a state with
|
|
unmerged paths used to segfault, which has been corrected.
|
|
(merge d66851806f jk/diff-release-filespec-fix later to maint).
|
|
|
|
* Build configuration cleanup.
|
|
(merge b990f02fd8 ab/config-mak-uname-simplify later to maint).
|
|
|
|
* Fix regression introduced when nvimdiff support in mergetool was added.
|
|
(merge 12026f46e7 pd/mergetool-nvimdiff later to maint).
|
|
|
|
* The exchange between receive-pack and proc-receive hook did not
|
|
carefully check for errors.
|
|
|
|
* The code was not prepared to deal with pack .idx file that is
|
|
larger than 4GB.
|
|
(merge 81c4c5cf2e jk/4gb-idx later to maint).
|
|
|
|
* Since jgit does not yet work with SHA-256 repositories, mark the
|
|
tests that use it not to run unless we are testing with ShA-1
|
|
repositories.
|
|
(merge ea699b4adc sg/t5310-jgit-wants-sha1 later to maint).
|
|
|
|
* Config parser fix for "git notes".
|
|
(merge 45fef1599a na/notes-displayref-is-not-boolean later to maint).
|
|
|
|
* Move a definition of compatibility wrapper from cache.h to
|
|
git-compat-util.h
|
|
(merge a76b138daa hn/sleep-millisec-decl later to maint).
|
|
|
|
* Error message fix.
|
|
(merge eaf5341538 km/stash-error-message-fix later to maint).
|
|
|
|
* "git pull --rebase --recurse-submodules" checked for local changes
|
|
in a wrong range and failed to run correctly when it should.
|
|
(merge 5176f20ffe pb/pull-rebase-recurse-submodules later to maint).
|
|
|
|
* "git push" that is killed may leave a pack-objects process behind,
|
|
still computing to find a good compression, wasting cycles. This
|
|
has been corrected.
|
|
(merge 8b59935114 jk/stop-pack-objects-when-push-is-killed later to maint).
|
|
|
|
* "git fetch" that is killed may leave a pack-objects process behind,
|
|
still computing to find a good compression, wasting cycles. This
|
|
has been corrected.
|
|
(merge 309a4028e7 jk/stop-pack-objects-when-fetch-is-killed later to maint).
|
|
|
|
* "git add -i" failed to honor custom colors configured to show
|
|
patches, which has been corrected.
|
|
(merge 96386faa03 js/add-i-color-fix later to maint).
|
|
|
|
* Processes that access packdata while the .idx file gets removed
|
|
(e.g. while repacking) did not fail or fall back gracefully as they
|
|
could.
|
|
(merge 506ec2fbda tb/idx-midx-race-fix later to maint).
|
|
|
|
* "git apply" adjusted the permission bits of working-tree files and
|
|
directories according to core.sharedRepository setting by mistake and
|
|
for a long time, which has been corrected.
|
|
(merge eb3c027e17 mt/do-not-use-scld-in-working-tree later to maint).
|
|
|
|
* "fetch-pack" could pass NULL pointer to unlink(2) when it sees an
|
|
invalid filename; the error checking has been tightened to make
|
|
this impossible.
|
|
(merge 6031af387e rs/fetch-pack-invalid-lockfile later to maint).
|
|
|
|
* "git maintenance run/start/stop" needed to be run in a repository
|
|
to hold the lockfile they use, but didn't make sure they are
|
|
actually in a repository, which has been corrected.
|
|
|
|
* The glossary described a branch as an "active" line of development,
|
|
which is misleading---a stale and non-moving branch is still a
|
|
branch.
|
|
(merge eef1ceabd8 so/glossary-branch-is-not-necessarily-active later to maint).
|
|
|
|
* Newer versions of xsltproc can assign IDs in HTML documents it
|
|
generates in a consistent manner. Use the feature to help format
|
|
HTML version of the user manual reproducibly.
|
|
(merge 3569e11d69 ae/doc-reproducible-html later to maint).
|
|
|
|
* Tighten error checking in the codepath that responds to "git fetch".
|
|
(merge d43a21bdbb jk/check-config-parsing-error-in-upload-pack later to maint).
|
|
|
|
* "git pack-redundant" when there is only one packfile used to crash,
|
|
which has been corrected.
|
|
(merge 0696232390 jx/pack-redundant-on-single-pack later to maint).
|
|
|
|
* Other code cleanup, docfix, build fix, etc.
|
|
(merge 3e0a5dc9af cc/doc-filter-branch-typofix later to maint).
|
|
(merge 32c83afc2c cw/ci-ghwf-check-ws-errors later to maint).
|
|
(merge 5eb2ed691b rs/tighten-callers-of-deref-tag later to maint).
|
|
(merge 6db29ab213 jk/fast-import-marks-cleanup later to maint).
|
|
(merge e5cf6d3df4 nk/dir-c-comment-update later to maint).
|
|
(merge 5710dcce74 jk/report-fn-typedef later to maint).
|
|
(merge 9a82db1056 en/sequencer-rollback-lock-cleanup later to maint).
|
|
(merge 4e1bee9a99 js/t7006-cleanup later to maint).
|
|
(merge f5bcde6c58 es/tutorial-mention-asciidoc-early later to maint).
|
|
(merge 714d491af0 so/format-patch-doc-on-default-diff-format later to maint).
|
|
(merge 0795df4b9b rs/clear-commit-marks-in-repo later to maint).
|
|
(merge 9542d56379 sd/prompt-local-variable later to maint).
|
|
(merge 06d43fad18 rs/pack-write-hashwrite-simplify later to maint).
|
|
(merge b7e20b4373 mc/typofix later to maint).
|
|
(merge f6bcd9a8a4 js/test-whitespace-fixes later to maint).
|
|
(merge 53b67a801b js/test-file-size later to maint).
|
|
(merge 970909c2a7 rs/hashwrite-be64 later to maint).
|
|
(merge 5a923bb1f0 ma/list-object-filter-opt-msgfix later to maint).
|
|
(merge 1c3e412916 rs/archive-plug-leak-refname later to maint).
|
|
(merge d44e5267ea rs/plug-diff-cache-leak later to maint).
|
|
(merge 793c1464d3 ab/gc-keep-base-option later to maint).
|
|
(merge b86339b12b mt/worktree-error-message-fix later to maint).
|
|
(merge e01ae2a4a7 js/pull-rebase-use-advise later to maint).
|
|
(merge e63d774242 sn/config-doc-typofix later to maint).
|
|
(merge 08e9df2395 jk/multi-line-indent-style-fix later to maint).
|
|
(merge e66590348a da/vs-build-iconv-fix later to maint).
|
|
(merge 7fe07275be js/cmake-extra-built-ins-fix later to maint).
|
|
(merge 633eebe142 jb/midx-doc-update later to maint).
|
|
(merge 5885367e8f jh/index-v2-doc-on-fsmn later to maint).
|
|
(merge 14639a4779 jc/compat-util-setitimer-fix later to maint).
|
|
(merge 56f56ac50b ab/unreachable-break later to maint).
|
|
(merge 731d578b4f rb/nonstop-config-mak-uname-update later to maint).
|
|
(merge f4698738f9 es/perf-export-fix later to maint).
|
|
(merge 773c694142 nk/refspecs-negative-fix later to maint).
|