348 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			348 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
Git 2.23 Release Notes
 | 
						|
======================
 | 
						|
 | 
						|
Updates since v2.22
 | 
						|
-------------------
 | 
						|
 | 
						|
Backward compatibility note
 | 
						|
 | 
						|
 * The "--base" option of "format-patch" computed the patch-ids for
 | 
						|
   prerequisite patches in an unstable way, which has been updated to
 | 
						|
   compute in a way that is compatible with "git patch-id --stable".
 | 
						|
 | 
						|
 * The "git log" command by default behaves as if the --mailmap option
 | 
						|
   was given.
 | 
						|
 | 
						|
 | 
						|
UI, Workflows & Features
 | 
						|
 | 
						|
 * The "git fast-export/import" pair has been taught to handle commits
 | 
						|
   with log messages in encoding other than UTF-8 better.
 | 
						|
 | 
						|
 * In recent versions of Git, per-worktree refs are exposed in
 | 
						|
   refs/worktrees/<wtname>/ hierarchy, which means that worktree names
 | 
						|
   must be a valid refname component.  The code now sanitizes the names
 | 
						|
   given to worktrees, to make sure these refs are well-formed.
 | 
						|
 | 
						|
 * "git merge" learned "--quit" option that cleans up the in-progress
 | 
						|
   merge while leaving the working tree and the index still in a mess.
 | 
						|
 | 
						|
 * "git format-patch" learns a configuration to set the default for
 | 
						|
   its --notes=<ref> option.
 | 
						|
 | 
						|
 * The code to show args with potential typo that cannot be
 | 
						|
   interpreted as a commit-ish has been improved.
 | 
						|
 | 
						|
 * "git clone --recurse-submodules" learned to set up the submodules
 | 
						|
   to ignore commit object names recorded in the superproject gitlink
 | 
						|
   and instead use the commits that happen to be at the tip of the
 | 
						|
   remote-tracking branches from the get-go, by passing the new
 | 
						|
   "--remote-submodules" option.
 | 
						|
 | 
						|
 * The pattern "git diff/grep" use to extract funcname and words
 | 
						|
   boundary for Matlab has been extend to cover Octave, which is more
 | 
						|
   or less equivalent.
 | 
						|
 | 
						|
 * "git help git" was hard to discover (well, at least for some
 | 
						|
   people).
 | 
						|
 | 
						|
 * The pattern "git diff/grep" use to extract funcname and words
 | 
						|
   boundary for Rust has been added.
 | 
						|
 | 
						|
 * "git status" can be told a non-standard default value for the
 | 
						|
   "--[no-]ahead-behind" option with a new configuration variable
 | 
						|
   status.aheadBehind.
 | 
						|
 | 
						|
 * "git fetch" and "git pull" reports when a fetch results in
 | 
						|
   non-fast-forward updates to let the user notice unusual situation.
 | 
						|
   The commands learned "--no-show-forced-updates" option to disable
 | 
						|
   this safety feature.
 | 
						|
 | 
						|
 * Two new commands "git switch" and "git restore" are introduced to
 | 
						|
   split "checking out a branch to work on advancing its history" and
 | 
						|
   "checking out paths out of the index and/or a tree-ish to work on
 | 
						|
   advancing the current history" out of the single "git checkout"
 | 
						|
   command.
 | 
						|
 | 
						|
 * "git branch --list" learned to always output the detached HEAD as
 | 
						|
   the first item (when the HEAD is detached, of course), regardless
 | 
						|
   of the locale.
 | 
						|
 | 
						|
 * The conditional inclusion mechanism learned to base the choice on
 | 
						|
   the branch the HEAD currently is on.
 | 
						|
 | 
						|
 * "git rev-list --objects" learned the "--no-object-names" option to
 | 
						|
   squelch the path to the object that is used as a grouping hint for
 | 
						|
   pack-objects.
 | 
						|
 | 
						|
 * A new tag.gpgSign configuration variable turns "git tag -a" into
 | 
						|
   "git tag -s".
 | 
						|
 | 
						|
 * "git multi-pack-index" learned expire and repack subcommands.
 | 
						|
 | 
						|
 * "git blame" learned to "ignore" commits in the history, whose
 | 
						|
   effects (as well as their presence) get ignored.
 | 
						|
 | 
						|
 * "git cherry-pick/revert" learned a new "--skip" action.
 | 
						|
 | 
						|
 * The tips of refs from the alternate object store can be used as
 | 
						|
   starting point for reachability computation now.
 | 
						|
 | 
						|
 * Extra blank lines in "git status" output have been reduced.
 | 
						|
 | 
						|
 * The commits in a repository can be described by multiple
 | 
						|
   commit-graph files now, which allows the commit-graph files to be
 | 
						|
   updated incrementally.
 | 
						|
 | 
						|
 * "git range-diff" output has been tweaked for easier identification
 | 
						|
   of which part of what file the patch shown is about.
 | 
						|
 | 
						|
 | 
						|
Performance, Internal Implementation, Development Support etc.
 | 
						|
 | 
						|
 * Update supporting parts of "git rebase" to remove code that should
 | 
						|
   no longer be used.
 | 
						|
 | 
						|
 * Developer support to emulate unsatisfied prerequisites in tests to
 | 
						|
   ensure that the remainder of the tests still succeeds when tests
 | 
						|
   with prerequisites are skipped.
 | 
						|
 | 
						|
 * "git update-server-info" learned not to rewrite the file with the
 | 
						|
   same contents.
 | 
						|
 | 
						|
 * The way of specifying the path to find dynamic libraries at runtime
 | 
						|
   has been simplified.  The old default to pass -R/path/to/dir has been
 | 
						|
   replaced with the new default to pass -Wl,-rpath,/path/to/dir,
 | 
						|
   which is the more recent GCC uses.  Those who need to build with an
 | 
						|
   old GCC can still use "CC_LD_DYNPATH=-R"
 | 
						|
 | 
						|
 * Prepare use of reachability index in topological walker that works
 | 
						|
   on a range (A..B).
 | 
						|
 | 
						|
 * A new tutorial targeting specifically aspiring git-core
 | 
						|
   developers has been added.
 | 
						|
 | 
						|
 * Auto-detect how to tell HP-UX aCC where to use dynamically linked
 | 
						|
   libraries from at runtime.
 | 
						|
 | 
						|
 * "git mergetool" and its tests now spawn fewer subprocesses.
 | 
						|
 | 
						|
 * Dev support update to help tracing out tests.
 | 
						|
 | 
						|
 * Support to build with MSVC has been updated.
 | 
						|
 | 
						|
 * "git fetch" that grabs from a group of remotes learned to run the
 | 
						|
   auto-gc only once at the very end.
 | 
						|
 | 
						|
 * A handful of Windows build patches have been upstreamed.
 | 
						|
 | 
						|
 * The code to read state files used by the sequencer machinery for
 | 
						|
   "git status" has been made more robust against a corrupt or stale
 | 
						|
   state files.
 | 
						|
 | 
						|
 * "git for-each-ref" with multiple patterns have been optimized.
 | 
						|
 | 
						|
 * The tree-walk API learned to pass an in-core repository
 | 
						|
   instance throughout more codepaths.
 | 
						|
 | 
						|
 * When one step in multi step cherry-pick or revert is reset or
 | 
						|
   committed, the command line prompt script failed to notice the
 | 
						|
   current status, which has been improved.
 | 
						|
 | 
						|
 * Many GIT_TEST_* environment variables control various aspects of
 | 
						|
   how our tests are run, but a few followed "non-empty is true, empty
 | 
						|
   or unset is false" while others followed the usual "there are a few
 | 
						|
   ways to spell true, like yes, on, etc., and also ways to spell
 | 
						|
   false, like no, off, etc." convention.
 | 
						|
 | 
						|
 * Adjust the dir-iterator API and apply it to the local clone
 | 
						|
   optimization codepath.
 | 
						|
 | 
						|
 * We have been trying out a few language features outside c89; the
 | 
						|
   coding guidelines document did not talk about them and instead had
 | 
						|
   a blanket ban against them.
 | 
						|
 | 
						|
 * A test helper has been introduced to optimize preparation of test
 | 
						|
   repositories with many simple commits, and a handful of test
 | 
						|
   scripts have been updated to use it.
 | 
						|
 | 
						|
 | 
						|
Fixes since v2.22
 | 
						|
-----------------
 | 
						|
 | 
						|
 * A relative pathname given to "git init --template=<path> <repo>"
 | 
						|
   ought to be relative to the directory "git init" gets invoked in,
 | 
						|
   but it instead was made relative to the repository, which has been
 | 
						|
   corrected.
 | 
						|
 | 
						|
 * "git worktree add" used to fail when another worktree connected to
 | 
						|
   the same repository was corrupt, which has been corrected.
 | 
						|
 | 
						|
 * The ownership rule for the file descriptor to fast-import remote
 | 
						|
   backend was mixed up, leading to an unrelated file descriptor getting
 | 
						|
   closed, which has been fixed.
 | 
						|
 | 
						|
 * A "merge -c" instruction during "git rebase --rebase-merges" should
 | 
						|
   give the user a chance to edit the log message, even when there is
 | 
						|
   otherwise no need to create a new merge and replace the existing
 | 
						|
   one (i.e. fast-forward instead), but did not.  Which has been
 | 
						|
   corrected.
 | 
						|
 | 
						|
 * Code cleanup and futureproof.
 | 
						|
 | 
						|
 * More parameter validation.
 | 
						|
 | 
						|
 * "git update-server-info" used to leave stale packfiles in its
 | 
						|
   output, which has been corrected.
 | 
						|
 | 
						|
 * The server side support for "git fetch" used to show incorrect
 | 
						|
   value for the HEAD symbolic ref when the namespace feature is in
 | 
						|
   use, which has been corrected.
 | 
						|
 | 
						|
 * "git am -i --resolved" segfaulted after trying to see a commit as
 | 
						|
   if it were a tree, which has been corrected.
 | 
						|
 | 
						|
 * "git bundle verify" needs to see if prerequisite objects exist in
 | 
						|
   the receiving repository, but the command did not check if we are
 | 
						|
   in a repository upfront, which has been corrected.
 | 
						|
 | 
						|
 * "git merge --squash" is designed to update the working tree and the
 | 
						|
   index without creating the commit, and this cannot be countermanded
 | 
						|
   by adding the "--commit" option; the command now refuses to work
 | 
						|
   when both options are given.
 | 
						|
 | 
						|
 * The data collected by fsmonitor was not properly written back to
 | 
						|
   the on-disk index file, breaking t7519 tests occasionally, which
 | 
						|
   has been corrected.
 | 
						|
 | 
						|
 * Update to Unicode 12.1 width table.
 | 
						|
 | 
						|
 * The command line to invoke a "git cat-file" command from inside
 | 
						|
   "git p4" was not properly quoted to protect a caret and running a
 | 
						|
   broken command on Windows, which has been corrected.
 | 
						|
 | 
						|
 * "git request-pull" learned to warn when the ref we ask them to pull
 | 
						|
   from in the local repository and in the published repository are
 | 
						|
   different.
 | 
						|
 | 
						|
 * When creating a partial clone, the object filtering criteria is
 | 
						|
   recorded for the origin of the clone, but this incorrectly used a
 | 
						|
   hardcoded name "origin" to name that remote; it has been corrected
 | 
						|
   to honor the "--origin <name>" option.
 | 
						|
 | 
						|
 * "git fetch" into a lazy clone forgot to fetch base objects that are
 | 
						|
   necessary to complete delta in a thin packfile, which has been
 | 
						|
   corrected.
 | 
						|
 | 
						|
 * The filter_data used in the list-objects-filter (which manages a
 | 
						|
   lazily sparse clone repository) did not use the dynamic array API
 | 
						|
   correctly---'nr' is supposed to point at one past the last element
 | 
						|
   of the array in use.  This has been corrected.
 | 
						|
 | 
						|
 * The description about slashes in gitignore patterns (used to
 | 
						|
   indicate things like "anchored to this level only" and "only
 | 
						|
   matches directories") has been revamped.
 | 
						|
 | 
						|
 * The URL decoding code has been updated to avoid going past the end
 | 
						|
   of the string while parsing %-<hex>-<hex> sequence.
 | 
						|
 | 
						|
 * The list of for-each like macros used by clang-format has been
 | 
						|
   updated.
 | 
						|
 | 
						|
 * "git branch --list" learned to show branches that are checked out
 | 
						|
   in other worktrees connected to the same repository prefixed with
 | 
						|
   '+', similar to the way the currently checked out branch is shown
 | 
						|
   with '*' in front.
 | 
						|
   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).
 | 
						|
 | 
						|
 * Code restructuring during 2.20 period broke fetching tags via
 | 
						|
   "import" based transports.
 | 
						|
 | 
						|
 * The commit-graph file is now part of the "files that the runtime
 | 
						|
   may keep open file descriptors on, all of which would need to be
 | 
						|
   closed when done with the object store", and the file descriptor to
 | 
						|
   an existing commit-graph file now is closed before "gc" finalizes a
 | 
						|
   new instance to replace it.
 | 
						|
 | 
						|
 * "git checkout -p" needs to selectively apply a patch in reverse,
 | 
						|
   which did not work well.
 | 
						|
 | 
						|
 * Code clean-up to avoid signed integer wraparounds during binary search.
 | 
						|
 | 
						|
 * "git interpret-trailers" always treated '#' as the comment
 | 
						|
   character, regardless of core.commentChar setting, which has been
 | 
						|
   corrected.
 | 
						|
 | 
						|
 * "git stash show 23" used to work, but no more after getting
 | 
						|
   rewritten in C; this regression has been corrected.
 | 
						|
 | 
						|
 * "git rebase --abort" used to leave refs/rewritten/ when concluding
 | 
						|
   "git rebase -r", which has been corrected.
 | 
						|
 | 
						|
 * An incorrect list of options was cached after command line
 | 
						|
   completion failed (e.g. trying to complete a command that requires
 | 
						|
   a repository outside one), which has been corrected.
 | 
						|
 | 
						|
 * The code to parse scaled numbers out of configuration files has
 | 
						|
   been made more robust and also easier to follow.
 | 
						|
 | 
						|
 * The codepath to compute delta islands used to spew progress output
 | 
						|
   without giving the callers any way to squelch it, which has been
 | 
						|
   fixed.
 | 
						|
 | 
						|
 * Protocol capabilities that go over wire should never be translated,
 | 
						|
   but it was incorrectly marked for translation, which has been
 | 
						|
   corrected.  The output of protocol capabilities for debugging has
 | 
						|
   been tweaked a bit.
 | 
						|
 | 
						|
 * Use "Erase in Line" CSI sequence that is already used in the editor
 | 
						|
   support to clear cruft in the progress output.
 | 
						|
 | 
						|
 * "git submodule foreach" did not protect command line options passed
 | 
						|
   to the command to be run in each submodule correctly, when the
 | 
						|
   "--recursive" option was in use.
 | 
						|
 | 
						|
 * The configuration variable rebase.rescheduleFailedExec should be
 | 
						|
   effective only while running an interactive rebase and should not
 | 
						|
   affect anything when running a non-interactive one, which was not
 | 
						|
   the case.  This has been corrected.
 | 
						|
 | 
						|
 * The "git clone" documentation refers to command line options in its
 | 
						|
   description in the short form; they have been replaced with long
 | 
						|
   forms to make them more recognisable.
 | 
						|
 | 
						|
 * Generation of pack bitmaps are now disabled when .keep files exist,
 | 
						|
   as these are mutually exclusive features.
 | 
						|
   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).
 | 
						|
 | 
						|
 * "git rm" to resolve a conflicted path leaked an internal message
 | 
						|
   "needs merge" before actually removing the path, which was
 | 
						|
   confusing.  This has been corrected.
 | 
						|
 | 
						|
 * "git stash --keep-index" did not work correctly on paths that have
 | 
						|
   been removed, which has been fixed.
 | 
						|
   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).
 | 
						|
 | 
						|
 * Window 7 update ;-)
 | 
						|
 | 
						|
 * A codepath that reads from GPG for signed object verification read
 | 
						|
   past the end of allocated buffer, which has been fixed.
 | 
						|
 | 
						|
 * "git clean" silently skipped a path when it cannot lstat() it; now
 | 
						|
   it gives a warning.
 | 
						|
 | 
						|
 * "git push --atomic" that goes over the transport-helper (namely,
 | 
						|
   the smart http transport) failed to prevent refs to be pushed when
 | 
						|
   it can locally tell that one of the ref update will fail without
 | 
						|
   having to consult the other end, which has been corrected.
 | 
						|
 | 
						|
 * The internal diff machinery can be made to read out of bounds while
 | 
						|
   looking for --function-context line in a corner case, which has been
 | 
						|
   corrected.
 | 
						|
   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).
 | 
						|
 | 
						|
 * Other code cleanup, docfix, build fix, etc.
 | 
						|
   (merge fbec05c210 cc/test-oidmap later to maint).
 | 
						|
   (merge 7a06fb038c jk/no-system-includes-in-dot-c later to maint).
 | 
						|
   (merge 81ed2b405c cb/xdiff-no-system-includes-in-dot-c later to maint).
 | 
						|
   (merge d61e6ce1dd sg/fsck-config-in-doc later to maint).
 |