343 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			343 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Plaintext
		
	
	
| Git v2.47 Release Notes
 | |
| =======================
 | |
| 
 | |
| UI, Workflows & Features
 | |
| ------------------------
 | |
| 
 | |
|  * Many Porcelain commands that internally use the merge machinery
 | |
|    were taught to consistently honor the diff.algorithm configuration.
 | |
| 
 | |
|  * A few descriptions in "git show-ref -h" have been clarified.
 | |
| 
 | |
|  * A 'P' command to "git add -p" that passes the patch hunk to the
 | |
|    pager has been added.
 | |
| 
 | |
|  * "git grep -W" omits blank lines that follow the found function at
 | |
|    the end of the file, just like it omits blank lines before the next
 | |
|    function.
 | |
| 
 | |
|  * The value of http.proxy can have "path" at the end for a socks
 | |
|    proxy that listens to a unix-domain socket, but we started to
 | |
|    discard it when we taught proxy auth code path to use the
 | |
|    credential helpers, which has been corrected.
 | |
| 
 | |
|  * The code paths to compact multiple reftable files have been updated
 | |
|    to correctly deal with multiple compaction triggering at the same
 | |
|    time.
 | |
| 
 | |
|  * Support to specify ref backend for submodules has been enhanced.
 | |
| 
 | |
|  * "git svn" has been taught about svn:global-ignores property
 | |
|    recent versions of Subversion has.
 | |
| 
 | |
|  * The default object hash and ref backend format used to be settable
 | |
|    only with explicit command line option to "git init" and
 | |
|    environment variables, but now they can be configured in the user's
 | |
|    global and system wide configuration.
 | |
| 
 | |
|  * "git send-email" learned "--translate-aliases" option that reads
 | |
|    addresses from the standard input and emits the result of applying
 | |
|    aliases on them to the standard output.
 | |
| 
 | |
|  * 'git for-each-ref' learned a new "--format" atom to find the branch
 | |
|    that the history leading to a given commit "%(is-base:<commit>)" is
 | |
|    likely based on.
 | |
| 
 | |
|  * The command line prompt support used to be littered with bash-isms,
 | |
|    which has been corrected to work with more shells.
 | |
| 
 | |
|  * Support for the RUNTIME_PREFIX feature has been added to z/OS port.
 | |
| 
 | |
|  * "git send-email" learned "--mailmap" option to allow rewriting the
 | |
|    recipient addresses.
 | |
| 
 | |
|  * "git mergetool" learned to use VSCode as a merge backend.
 | |
| 
 | |
|  * "git pack-redundant" has been marked for removal in Git 3.0.
 | |
| 
 | |
|  * One-line messages to "die" and other helper functions will get LF
 | |
|    added by these helper functions, but many existing messages had an
 | |
|    unnecessary LF at the end, which have been corrected.
 | |
| 
 | |
|  * The "scalar clone" command learned the "--no-tags" option.
 | |
| 
 | |
|  * The environment GIT_ADVICE has been intentionally kept undocumented
 | |
|    to discourage its use by interactive users.  Add documentation to
 | |
|    help tool writers.
 | |
| 
 | |
|  * "git apply --3way" learned to take "--ours" and other options.
 | |
| 
 | |
| 
 | |
| Performance, Internal Implementation, Development Support etc.
 | |
| --------------------------------------------------------------
 | |
| 
 | |
|  * A build tweak knob has been simplified by not setting the value
 | |
|    that is already the default; another unused one has been removed.
 | |
| 
 | |
|  * A CI job that use clang-format to check coding style issues in new
 | |
|    code has been added.
 | |
| 
 | |
|  * The reviewing guidelines document now explicitly encourages people
 | |
|    to give positive reviews and how.
 | |
| 
 | |
|  * Test script linter has been updated to catch an attempt to use
 | |
|    one-shot export construct "VAR=VAL func" for shell functions (which
 | |
|    does not work for some shells) better.
 | |
| 
 | |
|  * Some project conventions have been added to CodingGuidelines.
 | |
| 
 | |
|  * In the refs subsystem, implicit reliance of the_repository has been
 | |
|    eliminated; the repository associated with the ref store object is
 | |
|    used instead.
 | |
| 
 | |
|  * Various tests in reftable library have been rewritten using the unit test
 | |
|    framework.
 | |
| 
 | |
|  * A test that fails on an unusually slow machine was found, and made
 | |
|    less likely to cause trouble by lengthening the expiry value it
 | |
|    uses.
 | |
| 
 | |
|  * An existing test of hashmap API has been rewritten with the
 | |
|    unit-test framework.
 | |
| 
 | |
|  * A policy document that describes platform support levels and
 | |
|    expectation on platform stakeholders has been introduced.
 | |
| 
 | |
|  * The refs API has been taught to give symref target information to
 | |
|    the users of ref iterators, allowing for-each-ref and friends to
 | |
|    avoid an extra ref_resolve_* API call per a symbolic ref.
 | |
| 
 | |
|  * Unit-test framework has learned a simple control structure to allow
 | |
|    embedding test statements in-line instead of having to create a new
 | |
|    function to contain them.
 | |
| 
 | |
|  * Incremental updates of multi-pack index files is getting worked on.
 | |
| 
 | |
|  * Use of API functions that implicitly depend on the_repository
 | |
|    object in the config subsystem has been rewritten to pass a
 | |
|    repository object through the callchain.
 | |
| 
 | |
|  * Unused parameters have been either marked as UNUSED to squelch
 | |
|    -Wunused warnings or dropped from many functions..
 | |
| 
 | |
|  * The code in the reftable library has been cleaned up by discarding
 | |
|    unused "generic" interface.
 | |
| 
 | |
|  * The underlying machinery for "git diff-index" has long been made to
 | |
|    expand the sparse index as needed, but the command fully expanded
 | |
|    the sparse index upfront, which now has been taught not to do.
 | |
| 
 | |
|  * More trace2 events at key points on push and fetch code paths have
 | |
|    been added.
 | |
| 
 | |
|  * Make our codebase compilable with the -Werror=unused-parameter
 | |
|    option.
 | |
| 
 | |
|  * "git cat-file" works well with the sparse-index, and gets marked as
 | |
|    such.
 | |
| 
 | |
|  * CI started failing completely for linux32 jobs, as the step to
 | |
|    upload failed test directory uses GitHub actions that is deprecated
 | |
|    and is now disabled.
 | |
| 
 | |
|  * Import clar unit tests framework libgit2 folks invented for our
 | |
|    use.
 | |
| 
 | |
|  * The error messages from the test script checker have been improved.
 | |
| 
 | |
|  * The convention to calling into built-in command implementation has
 | |
|    been updated to pass the repository, if known, together with the
 | |
|    prefix value.
 | |
| 
 | |
|  * "git apply" had custom buffer management code that predated before
 | |
|    use of strbuf got widespread, which has been updated to use strbuf,
 | |
|    which also plugged some memory leaks.
 | |
| 
 | |
|  * The reftable backend learned to more efficiently handle exclude
 | |
|    patterns while enumerating the refs.
 | |
| 
 | |
|  * CI updates.  FreeBSD image has been updated to 13.4.
 | |
|    (merge 2eeb29702e cb/ci-freebsd-13-4 later to maint).
 | |
| 
 | |
|  * Give timeout to the locking code to write to reftable, instead of
 | |
|    failing on the first failure without retrying.
 | |
| 
 | |
|  * The checksum at the tail of files are now computed without
 | |
|    collision detection protection.  This is safe as the consumer of
 | |
|    the information to protect itself from replay attacks checks for
 | |
|    hash collisions independently.
 | |
| 
 | |
| 
 | |
| Fixes since v2.46
 | |
| -----------------
 | |
| 
 | |
|  * "git add -p" by users with diff.suppressBlankEmpty set to true
 | |
|    failed to parse the patch that represents an unmodified empty line
 | |
|    with an empty line (not a line with a single space on it), which
 | |
|    has been corrected.
 | |
| 
 | |
|  * "git checkout --ours" (no other arguments) complained that the
 | |
|    option is incompatible with branch switching, which is technically
 | |
|    correct, but found confusing by some users.  It now says that the
 | |
|    user needs to give pathspec to specify what paths to checkout.
 | |
| 
 | |
|  * It has been documented that we avoid "VAR=VAL shell_func" and why.
 | |
| 
 | |
|  * "git rebase --help" referred to "offset" (the difference between
 | |
|    the location a change was taken from and the change gets replaced)
 | |
|    incorrectly and called it "fuzz", which has been corrected.
 | |
| 
 | |
|  * "git notes add -m '' --allow-empty" and friends that take prepared
 | |
|    data to create notes should not invoke an editor, but it started
 | |
|    doing so since Git 2.42, which has been corrected.
 | |
| 
 | |
|  * An expensive operation to prepare tracing was done in re-encoding
 | |
|    code path even when the tracing was not requested, which has been
 | |
|    corrected.
 | |
| 
 | |
|  * More leakfixes.
 | |
| 
 | |
|  * The credential helper to talk to OSX keychain sometimes sent
 | |
|    garbage bytes after the username, which has been corrected.
 | |
| 
 | |
|  * A recent update broke "git ls-remote" used outside a repository,
 | |
|    which has been corrected.
 | |
| 
 | |
|  * The patch parser in 'git apply' has been a bit more lenient against
 | |
|    unexpected mode bits, like 100664, recorded on extended header lines.
 | |
| 
 | |
|  * "git config --value=foo --fixed-value section.key newvalue" barfed
 | |
|    when the existing value in the configuration file used the
 | |
|    valueless true syntax, which has been corrected.
 | |
| 
 | |
|  * The patch parser in "git patch-id" has been tightened to avoid
 | |
|    getting confused by lines that look like a patch header in the log
 | |
|    message.
 | |
| 
 | |
|  * "git reflog expire" failed to honor annotated tags when computing
 | |
|    reachable commits.
 | |
| 
 | |
|  * A flakey test and incorrect calls to strtoX() functions have been
 | |
|    fixed.
 | |
| 
 | |
|  * Follow-up on 2.45.1 regression fix.
 | |
| 
 | |
|  * "git rev-list ... | git diff-tree -p --remerge-diff --stdin" should
 | |
|    behave more or less like "git log -p --remerge-diff" but instead it
 | |
|    crashed, forgetting to prepare a temporary object store needed.
 | |
| 
 | |
|  * "git bundle unbundle" outside a repository triggered a BUG()
 | |
|    unnecessarily, which has been corrected.
 | |
| 
 | |
|  * Maintenance tasks other than "gc" now properly go background when
 | |
|    "git maintenance" runs them.
 | |
| 
 | |
|  * We created a useless pseudo-merge reachability bitmap that is about
 | |
|    0 commits, and attempted to include commits that are not in packs,
 | |
|    which made no sense.  These bugs have been corrected.
 | |
|    (merge a72dfab8b8 tb/pseudo-merge-bitmap-fixes later to maint).
 | |
| 
 | |
|  * "git rebase -x --quiet" was not quiet, which was corrected.
 | |
| 
 | |
|  * The code path for compacting reftable files saw some bugfixes
 | |
|    against concurrent operation.
 | |
| 
 | |
|  * The code forgot to discard unnecessary in-core commit buffer data
 | |
|    for commits that "git log --skip=<number>" traversed but omitted
 | |
|    from the output, which has been corrected.
 | |
| 
 | |
|  * "git verify-pack" and "git index-pack" started dying outside a
 | |
|    repository, which has been corrected.
 | |
| 
 | |
|  * A data corruption bug when multi-pack-index is used and the same
 | |
|    objects are stored in multiple packfiles has been corrected.
 | |
| 
 | |
|  * "git pack-refs --auto" for the files backend was too aggressive,
 | |
|    which has been a bit tamed.
 | |
|    (merge c3459ae9ef ps/pack-refs-auto-heuristics later to maint).
 | |
| 
 | |
|  * A file descriptor left open is now properly closed when "git
 | |
|    sparse-checkout" updates the sparse patterns.
 | |
| 
 | |
|  * In a few corner cases "git diff --exit-code" failed to report
 | |
|    "changes" (e.g., renamed without any content change), which has
 | |
|    been corrected.
 | |
| 
 | |
|  * Cygwin does have /dev/tty support that is needed by things like
 | |
|    single-key input mode.
 | |
| 
 | |
|  * The interpret-trailers command failed to recognise the end of the
 | |
|    message when the commit log ends in an incomplete line.
 | |
| 
 | |
|  * "git rebase --autostash" failed to resurrect the autostashed
 | |
|    changes when the command gets aborted after giving back control
 | |
|    asking for hlep in conflict resolution.
 | |
|    (merge bf6ab087d1 pw/rebase-autostash-fix later to maint).
 | |
| 
 | |
|  * The "imap-send" now allows to be compiled with NO_OPENSSL and
 | |
|    OPENSSL_SHA1 defined together.
 | |
|    (merge 997950a750 jk/no-openssl-with-openssl-sha1 later to maint).
 | |
| 
 | |
|  * The support to customize build options to adjust for older versions
 | |
|    and/or older systems for the interop tests has been improved.
 | |
|    (merge 22ef5f02a8 jk/interop-test-build-options later to maint).
 | |
| 
 | |
|  * Update the character width table for Unicode 16.
 | |
|    (merge 44dc651132 bb/unicode-width-table-16 later to maint).
 | |
| 
 | |
|  * In Git 2.39, Git.pm stopped working in a bare repository, which has
 | |
|    been corrected.
 | |
|    (merge d3edb0bdde jk/git-pm-bare-repo-fix later to maint).
 | |
| 
 | |
|  * When a remote-helper dies before Git writes to it, SIGPIPE killed
 | |
|    Git silently.  We now explain the situation a bit better to the end
 | |
|    user in our error message.
 | |
|    (merge 6e7fac9bca jk/diag-unexpected-remote-helper-death later to maint).
 | |
| 
 | |
|  * A few usability fixes to "git jump" (in contrib/).
 | |
|    (merge 083b82544d jk/jump-quickfix-fixes later to maint).
 | |
| 
 | |
|  * "git diff --exit-code" ignored modified binary files, which has
 | |
|    been corrected.
 | |
|    (merge 9a41735af6 rs/diff-exit-code-binary later to maint).
 | |
| 
 | |
|  * When a subprocess to work in a submodule spawned by "git submodule"
 | |
|    fails with SIGPIPE, the parent Git process caught the death of it,
 | |
|    but gave a generic "failed to work in that submodule", which was
 | |
|    misleading.  We now behave as if the parent got SIGPIPE and die.
 | |
|    (merge 082caf527e pw/submodule-process-sigpipe later to maint).
 | |
| 
 | |
|  * "git archive" with pathspec magic that uses the attribute
 | |
|    information did not work well, which has been corrected.
 | |
|    (merge 296743a7ca rs/archive-with-attr-pathspec-fix later to maint).
 | |
| 
 | |
|  * Background tasks "git maintenance" runs may need to use credential
 | |
|    information when going over the network, but a credential helper
 | |
|    may work only in an interactive environment, and end up blocking a
 | |
|    scheduled task waiting for UI.  Credential helpers can now behave
 | |
|    differently when they are not running interactively.
 | |
|    (merge b9183b0a02 ds/background-maintenance-with-credential later to maint).
 | |
| 
 | |
|  * "git --git-dir=nowhere cmd" failed to properly notice that it
 | |
|    wasn't in any repository while processing includeIf.onbranch
 | |
|    configuration and instead crashed.
 | |
| 
 | |
|  * When "git sparse-checkout disable" turns a sparse checkout into a
 | |
|    regular checkout, the index is fully expanded.  This totally
 | |
|    expected behaviour however had an "oops, we are expanding the
 | |
|    index" advice message, which has been corrected.
 | |
|    (merge 537e516a39 ds/sparse-checkout-expansion-advice later to maint).
 | |
| 
 | |
|  * macOS with fsmonitor daemon can hang forever when a submodule is
 | |
|    involved, which has been corrected.
 | |
| 
 | |
|  * Other code cleanup, docfix, build fix, etc.
 | |
|    (merge be10ac7037 jc/mailinfo-header-cleanup later to maint).
 | |
|    (merge 4460e052e0 jc/range-diff-lazy-setup later to maint).
 | |
|    (merge 0627c58e7a ak/typofixes later to maint).
 | |
|    (merge 83799f1500 jk/t9001-deflake later to maint).
 | |
|    (merge e02cc08a88 ak/typofix-2.46-maint later to maint).
 | |
|    (merge 5c5d29e1c4 ps/ci-gitlab-upgrade later to maint).
 | |
|    (merge 9c4c840901 jc/doc-discarding-stalled-topics later to maint).
 | |
|    (merge 5e6f359f6b ds/read-cache-mempool-leakfix later to maint).
 |