close

./devel/git-base, GIT Tree History Storage Tool (base package)

[ Image CVSweb ] [ Image Homepage ] [ Image RSS ] [ Image Required by ] [ Image Add to tracker ]


Branch: CURRENT, Version: 2.54.0, Package name: git-base-2.54.0, Maintainer: pkgsrc-users

Git is a free and open source distributed version control system
designed to handle everything from small to very large projects with
speed and efficiency.

Git is easy to learn and has a tiny footprint with lightning fast
performance. It outclasses SCM tools like Subversion, CVS, Perforce,
and ClearCase with features like cheap local branching, convenient
staging areas, and multiple workflows.

This package contains only the git program (and subcommands). It does
not contain man pages or the tk-based repository browser or the git
subcommands that rely on Perl.


Required to run:
[www/curl] [lang/perl5] [security/openssl] [security/p5-Authen-SASL] [mail/p5-Email-Valid] [mail/p5-MailTools] [devel/p5-Error] [mail/p5-Net-SMTP-SSL] [devel/pcre2]

Required to build:
[pkgtools/cwrappers]

Package options: openssl

Master sites:

Filesize: 7935.91 KB

Version history: (Expand)


CVS history: (Expand)


   2026-04-20 20:24:33 by Adam Ciarcinski | Files touched by this commit (6) | Package updated
Log message:
git: updated to 2.54.0

2.54.0

UI, Workflows & Features

"git add -p" and friends note what the current status of the hunk
being shown is.

"git history" history rewriting (experimental) command has been
added.

"git replay" is taught to drop commits that become empty (not the
ones that are empty in the original).

The help text and the documentation for the "--expire" option of
"git worktree [list|prune]" have been improved.

When "git show-index" is run outside a repository, it silently
defaults to SHA-1; the tool now warns when this happens.

"git merge-file" can be run outside a repository, but it ignored
all configuration, even the per-user ones.  The command now uses
available configuration files to find its customization.

"auto filter" logic for large-object promisor remote.

"git rev-list" and friends learn "--maximal-only" to show \ 
only the
commits that are not reachable by other commits.

Command line completion (in contrib/) update for
"stash import/export".

"git repo info" learns "--keys" action to list known keys.

Extend the alias configuration syntax to allow aliases using
characters outside ASCII alphanumeric (plus -).

A signature on a commit that was GPG signed a long time ago ought to
be still valid after the key that was used to sign it has expired,
but we showed them in alarming red.

"git subtree split --prefix=P <commit>" now checks the prefix P
against the tree of the (potentially quite different from the
current working tree) given commit.

"git add -p" learned a new mode that allows the user to revisit a
file that was already dealt with.

Allow the directory in which reference backends store their data to
be specified.

"gitweb" has been taught to be mobile friendly.

"git apply --directory=./un/../normalized/path" now normalizes the
given path before using it.

"git maintenance" starts using the "geometric" strategy by \ 
default.

"git config list" is taught to show the values interpreted for
specific type with "--type=<X>" option.

"git add <submodule>" has been taught to honor
submodule.<name>.ignore that is set to "all" (and requires \ 
"git add
-f" to override it).

Hook commands are now allowed to be defined (possibly centrally)
in the configuration files, and run multiple of them for the same
hook event.

The way end-users can add their own "git <cmd>" subcommand by
storing "git-<cmd>" in a directory on their $PATH has not been
documented clearly, which has been corrected.

"git send-email" learns to pass hostname/port to Authen::SASL
module.

"git send-email" learns to support use of client-side certificates.

"git send-email" has learned to be a bit more careful when it
accepts charset to use from the end-user, to avoid y (mistaken
yes when expecting a charset like UTF-8) and other nonsense.

"git status" learned to show comparison between the current branch
and various other branches listed on status.compareBranches
configuration.

"git repo structure" command learns to report maximum values on
various aspects of objects it inspects.

"git rebase" learns "--trailer" option to drive the
interpret-trailers machinery.

"git fast-import" learned to optionally replace signature on
commits whose signatures get invalidated due to replaying by
signing afresh.

"git history" learned the "split" subcommand.

The reference-transaction hook was taught to be triggered before
taking locks on references in the "preparing" phase.

"git apply" now reports the name of the input file along with the
line number when it encounters a corrupt patch, and correctly
resets the line counter when processing multiple patch files.

The HTTP transport learned to react to "429 Too Many Requests".

"git repo info -h" and "git repo structure -h" limit their \ 
help output
to the part that is specific to the subcommand.

"git format-patch --cover-letter" learns to use a simpler format
instead of the traditional shortlog format to list its commits with
a new --commit-list-format option and format.commitListFormat
configuration variable.

git backfill learned to accept revision and pathspec arguments.

"git replay" (experimental) learns, in addition to "pick" and
"replay", a new operating mode "revert".

"git replay" now supports replaying down to the root commit.

Handling of signed commits and tags in fast-import has been made more
configurable.

"git config list" is the official way to spell "git config \ 
-l" and
"git config --list".  Use it to update the documentation.

Performance, Internal Implementation, Development Support etc.

Avoid local submodule repository directory paths overlapping with
each other by encoding submodule names before using them as path
components.

The string_list API gains a new helper, string_list_sort_u(), and
new unit tests to extend coverage.

Improve set-up time of a perf test.

ISO C23 redefines strchr and friends that traditionally took
a const pointer and returned a non-const pointer derived from it to
preserve constness (i.e., if you ask for a substring in a const
string, you get a const pointer to the substring).  Update code
paths that used non-const pointer to receive their results that did
not have to be non-const to adjust.

Rename three functions around the commit_list data structure.

Transaction to create objects (or not) is currently tied to the
repository, but in the future a repository can have multiple object
sources, which may have different transaction mechanisms.  Make the
odb transaction API per object source.

"git merge-ours" is taught to work better in a sparse checkout.

Allow recording process ID of the process that holds the lock next
to a lockfile for diagnosis.

Reduce dependency on the_repository of xdiff-interface layer.

Code clean-up to use the commit_stack API.

"git diff --anchored=<text>" has been optimized.

A CodingGuidelines update.

Add process ancestry data to trace2 on macOS to match what we
already do on Linux and Windows.  Also adjust the way Windows
implementation reports this information to match the other two.

A handful of places used refs_for_each_ref_in() API incorrectly,
which has been corrected.

Some tests assumed "iconv" is available without honoring ICONV
prerequisite, which has been corrected.

Revamp object enumeration API around odb.

Additional tests were introduced to see the interaction with netrc
auth with auth failure on the http transport.

A couple of bugs in use of flag bits around odb API has been
corrected, and the flag bits reordered.

Plumb gitk/git-gui build and install procedure in meson based
builds.

The code to accept shallow "git push" has been optimized.

Simplify build procedure for oxskeychain (in contrib/).

Fix dependency screw-up in meson-based builds.

Wean the mailmap code off of the_repository dependency.

API clean-up for the worktree subsystem.

The last uses of the_repository in "tree-diff.c" have been
eradicated.

Clean-up the code around "git repo info" command.

Mark the merge-ort codebase to prevent more uses of the_repository
from getting added.

The core.attributesfile is intended to be set per repository, but
was kept track of by a single global variable in-core, which has
been corrected by moving it to per-repository data structure.

Use the hook API to replace ad-hoc invocation of hook scripts via
the run_command() API.

Code refactoring around refs-for-each-* API functions.

The parse-options API learned to notice an options[] array with
duplicated long options.
(merge 237e520d81 rs/parse-options-duplicated-long-options later to maint).

The code to maintain mapping between object names in multiple hash
functions is being added, written in Rust.

A bit of OIDmap API enhancement and cleanup.

Move gitlab CI from macOS 14 images that are being deprecated.

The object source API is getting restructured to allow plugging new
backends.

Reduce dependence on the global the_hash_algo and the_repository
variables of wt-status code path.

The way combined list-object filter options are parsed has been
revamped.

Editorconfig filename patterns were specified incorrectly, making
many source files inside subdirectories unaffected, which has been
corrected.

The run_command() API lost its implicit dependency on the singleton
the_repository instance.

The unit test helper function was taught to use backslash
mnemonic notation for certain control characters like "\t", instead
of octal notation like "\011".

Adjust test-lint to allow "sed -E" to use ERE in the patterns.

Clar (unit testing framework) update from the upstream.

Reduce system overhead "git upload-pack" spends on relaying "git
pack-objects" output to the "git fetch" running on the other end of
the connection.

Add a coccinelle rule to break the build when "struct strbuf" gets
passed by value.

Further work on incremental repacking using MIDX/bitmap

The logic to count objects has been cleaned up.

Tweak the build infrastructure by moving tools around.

Uses of prio_queue as a LIFO stack of commits have been written
with commit_stack.

The cleanup of remaining bitmaps in "ahead_behind()" has been
simplified.

split-index.c has been updated to not use the global the_repository
and the_hash_algo variables.

The unsigned integer that is used as a bitset to specify the kind
of branches interpret_branch_name() function has been changed to
use a dedicated enum type.

Various updates to contrib/diff-highlight, including documentation
updates, test improvements, and color configuration handling.

Code paths that loop over another array to push each element into a
strvec have been rewritten to use strvec_pushv() instead.

In case homebrew breaks REG_ENHANCED again, leave an in-code comment
to suggest use of our replacement regex as a workaround.

MinGW build updates.

The way dash 0.5.13 handles non-ASCII contents in here-doc
is buggy and breaks our existing tests, which unfortunately
have been rewritten to avoid triggering the bug.

Object name handling (disambiguation and abbreviation) has been
refactored to be backend-generic, moving logic into the respective
object database backends.

pack-objects’s --stdin-packs=follow mode learns to handle
excluded-but-open packs.

A few code paths that spawned child processes for network
connection weren’t wait(2)ing for their children and letting "init"
reap them instead; they have been tightened.

Adjust the codebase for C23 that changes functions like strchr()
that discarded constness when they return a pointer into a const
string to preserve constness.

A handful of inappropriate uses of the_repository have been
rewritten to use the right repository structure instance in the
read-cache.c codepath.

Internals of "git fsck" have been refactored to not depend on the
global the_repository variable.

Reduce dependency on the_repository in add-patch.c file.

The way the "git log -L<range>:<file>" feature is bolted \ 
onto the
log/diff machinery is being reworked a bit to make the feature
compatible with more diff options, like -S/G.

Further work to adjust the codebase for C23 that changes functions
like strchr() that discarded constness when they return a pointer into
a const string to preserve constness.

"git rev-list --maximal-only" has been optimized by borrowing the
logic used by "git show-branch --independent", which computes the
same kind of information much more efficiently.

Fixes since v2.53

HTTP transport failed to authenticate in some code paths, which has
been corrected.
(merge ed0f7a62f7 ap/http-probe-rpc-use-auth later to maint).

The computation of column width made by "git diff --stat" was
confused when pathnames contain non-ASCII characters.
(merge 04f5d95ef7 lp/diff-stat-utf8-display-width-fix later to maint).

The "-z" and "--max-depth" documentation (and implementation of
"-z") in the "git last-modified" command have been updated.
(merge 9dcc09bed1 tc/last-modified-options-cleanup later to maint).

A handful of code paths that started using batched ref update API
(after Git 2.51 or so) lost detailed error output, which have been
corrected.
(merge eff9299eac kn/ref-batch-output-error-reporting-fix later to maint).

"git blame --ignore-revs=…​ --color-lines" did not account for
ignored revisions passing blame to the same commit an adjacent line
gets blamed for.
(merge d519082d4e rs/blame-ignore-colors-fix later to maint).

Coccinelle rules update.
(merge 60614838a4 tc/memzero-array later to maint).

Giving "git last-modified" a tree (not a commit-ish) died an
uncontrolled death, which has been corrected.
(merge 525ef52301 tc/last-modified-not-a-tree later to maint).

Test contrib/ things in CI to catch breakages before they enter the
"next" branch.
(merge c591c3ceff jc/ci-test-contrib-too later to maint).

A handful of documentation pages have been modernized to use the
"synopsis" style.
(merge a34d1d53a6 ja/doc-synopsis-style-even-more later to maint).

Small clean-up of xdiff library to remove unnecessary data
duplication.
(merge 5086213bd2 pw/xdiff-cleanups later to maint).

Update sample commit-msg hook to complain when a log message has
material mailinfo considers the end of log message in the middle.
(merge 83804c361b pw/commit-msg-sample-hook later to maint).

"git pack-objects --stdin-packs" with \ 
"--exclude-promisor-objects"
fetched objects that are promised, which was not wanted.  This has
been fixed.
(merge f4eff7116d ps/pack-concat-wo-backfill later to maint).

"git switch <name>", in an attempt to create a local branch \ 
<name>
after a remote tracking branch of the same name gave an advice
message to disambiguate using "git checkout", which has been
updated to use "git switch".
(merge 12fee11f21 jc/checkout-switch-restore later to maint).

It does not make much sense to apply the "incomplete-line"
whitespace rule to symbolic links, whose contents almost always
lack the final newline.  "git apply" and "git diff" are now \ 
taught
to exclude them for a change to symbolic links.
(merge 6a41481c6d jc/whitespace-incomplete-line later to maint).

"git format-patch --from=<me>" did not honor the command line
option when writing out the cover letter, which has been corrected.

Update build procedure for mergetool documentation in meson-based builds.
(merge 58e4eeeeb5 pw/meson-doc-mergetool later to maint).

An earlier attempt to optimize "git subtree" discarded too much
relevant histories, which has been corrected.

A prefetch call can be triggered to access a stale diff_queue entry
after diffcore-break breaks a filepair into two and freed the
original entry that is no longer used, leading to a segfault, which
has been corrected.
(merge 2d88ab078d hy/diff-lazy-fetch-with-break-fix later to maint).

"git fetch --deepen" that tries to go beyond merged branch used to
get confused where the updated shallow points are, which has been
corrected.
(merge 3ef68ff40e sp/shallow-deepen-relative-fix later to maint).

"fsck" iterates over packfiles and its access to pack data caused
the list to be permuted, which caused it to loop forever; the code
to access pack data by "fsck" has been updated to avoid this.
(merge 13eb65d366 ps/fsck-stream-from-the-right-object-instance later to maint).

"git log --graph --stat" did not count the display width of colored
graph part of its own output correctly, which has been corrected.
(merge 064b869efc lp/diff-stat-utf8-display-width-fix later to maint).

The configuration variable format.noprefix did not behave as a
proper boolean variable, which has now been fixed and documented.
(merge ea3a62c40e kh/format-patch-noprefix-is-boolean later to maint).

CI fix.
(merge eb35167dd4 ps/ci-reduce-gitlab-envsize later to maint).

"git diff --no-index --find-object=<object-name>" outside a
repository of course wouldn’t be able to find the object and died
while parsing the command line.  The command is made to die in a
bit more user-friendly way.
(merge b0ddc7947c mm/diff-no-index-find-object later to maint).

Fix typo-induced breakages in fsmonitor-watchman sample hook.
(merge 41366e4677 pt/fsmonitor-watchman-sample-fix later to maint).

"git for-each-repo" started from a secondary worktree did not work
as expected, which has been corrected.
(merge e87493b9b4 ds/for-each-repo-w-worktree later to maint).

The construct test "$(command)" = expectation loses the exit
status from the command, which has been fixed by breaking up the
statement into pieces.
(merge d3edca979a fp/t3310-unhide-git-failures later to maint).

While discovering a ".git" directory, the code treats any stat()
failure as a sign that a filesystem entity .git does not exist
there, and ignores ".git" that is not a "gitdir" file or a
directory.  The code has been tightened to notice and report
filesystem corruption better.
(merge 1dd27bfbfd ty/setup-error-tightening later to maint).

Plug a few leaks where mmap’ed memory regions are not unmapped.
(merge a8a69bbb64 jk/unleak-mmap later to maint).

A test now uses the symbolic constant $ZERO_OID instead of 40 "0" to
work better with SHA-256 as well as SHA-1.
(merge 30310f3cc4 ss/t3200-test-zero-oid later to maint).

Instead of hardcoded origin, use the configured default remote
when fetching from submodules.
(merge 3b5fb32da8 ng/submodule-default-remote later to maint).

The code in "git help" that shows configuration items in sorted
order was awkwardly organized and prone to bugs.

"imap-send" used to use functions whose use is going to be removed
with OpenSSL 4.0; rewrite them using public API that has been
available since OpenSSL 1.1 since 2016 or so.
(merge 6392a0b75d bb/imap-send-openssl-4.0-prep later to maint).

Fix an example in the user-manual.
(merge 5514f14617 gj/user-manual-fix-grep-example later to maint).

The final clean-up phase of the diff output could turn the result of
histogram diff algorithm suboptimal, which has been corrected.
(merge e417277ae9 yc/histogram-hunk-shift-fix later to maint).

"git diff -U<num>" was too lenient in its command line parsing and
took an empty string as a valid <num>.
(merge 4f6a803aba ty/doc-diff-u-wo-number later to maint).

The handling of the incomplete lines at the end by "git
diff-highlight" has been fixed.

merge-file --object-id used to trigger a BUG when run in a linked
worktree, which has been fixed.
(merge 57246b7c62 mr/merge-file-object-id-worktree-fix later to maint).

"git apply -p<n>" parses <n> more carefully now.
(merge d05d84c5f5 mf/apply-p-no-atoi later to maint).

A test to run a .bat file with whitespaces in the name with arguments
with whitespaces in them was flaky in that sometimes it got killed
before it produced expected side effects, which has been rewritten to
make it more robust.
(merge 3ad4921838 jk/t0061-bat-test-update later to maint).

"git ls-remote +refs/tags/:refs/tags/ https://…​" run outside a
repository would dereference a NULL while trying to see if the given
refspec is a single-object refspec, which has been corrected.
(merge 4e5dc601dd kj/refspec-parsing-outside-repository later to maint).

Fix a regression in writing the commit-graph where commits with dates
exceeding 34 bits (beyond year 2514) could cause an underflow and
crash Git during the generation data overflow chunk writing.

The value of a wrong pointer variable was referenced in an error
message that reported that it shouldn’t be NULL.
(merge 753ecf4205 yc/path-walk-fix-error-reporting later to maint).

The check in "receive-pack" to prevent a checked out branch from
getting updated via updateInstead mechanism has been corrected.

"git backfill" is capable of auto-detecting a sparsely checked out
working tree, which was broken.
(merge 339eba65a7 th/backfill-auto-detect-sparseness-fix later to maint).

add_files_to_cache() used diff_files() to detect only the paths that
are different between the index and the working tree and add them,
which does not need rename detection, which interfered with unnecessary
conflicts.
(merge c0ce43376b ng/add-files-to-cache-wo-rename later to maint).

Doc mark-up update for entries in the glossary with bulleted lists.
(merge a65cbd87ea jk/doc-markup-sub-list-indentation later to maint).

CI dependency updates.
(merge 4bdb17e3a8 jc/ci-github-actions-use-checkout-v5 later to maint).

Other code cleanup, docfix, build fix, etc.
(merge d79fff4a11 jk/remote-tracking-ref-leakfix later to maint).
   2026-02-06 11:06:21 by Thomas Klausner | Files touched by this commit (1305)
Log message:
*: recursive bump for nettle 4.0 shlib major bump
   2026-02-03 10:13:32 by Adam Ciarcinski | Files touched by this commit (4) | Package updated
Log message:
git: updated to 2.53.0

Git v2.53 Release Notes

UI, Workflows & Features

"git maintenance" command learned "is-needed" subcommand to \ 
tell if
it is necessary to perform various maintenance tasks.

"git replay" (experimental) learned to perform ref updates itself
in a transaction by default, instead of emitting where each refs
should point at and leaving the actual update to another command.

"git blame" learns "--diff-algorithm=<algo>" option.

"git repo info" learned "--all" option.

Both "git apply" and "git diff" learn a new whitespace error \ 
class,
"incomplete-line".

Add a new manual that describes the data model.

"git fast-import" learns "--signed-commits=strip-if-invalid" \ 
option
to drop invalid cryptographic signature from objects.

The use of "revision" (a connected set of commits) has been
clarified in the "git replay" documentation.

A help message from "git branch" now mentions "git help" \ 
instead of
"man" when suggesting to read some documentation.

"git repo struct" learned to take "-z" as a synonym to \ 
"--format=nul".

More object database related information are shown in "git repo
structure" output.

Improve the error message when a bad argument is given to the
--onto option of "git replay".  Test coverage of "git replay" has
been improved.

The iconv library on macOS fails to correctly handle stateful
ISO/IEC 2022:1994 encoded strings.  Work it around instead of
replacing it wholesale from homebrew.

Upstream symbolic link support on Windows from Git-for-Windows.

Performance, Internal Implementation, Development Support etc.

The list of packfiles used in a running Git process is moved from
the packed_git structure into the packfile store.

Some ref backend storage can hold not just the object name of an
annotated tag, but the object name of the object the tag points at.
The code to handle this information has been streamlined.

As "git diff --quiet" only cares about the existence of any
changes, disable rename/copy detection to skip more expensive
processing whose result will be discarded anyway.

A part of code paths that deals with loose objects has been cleaned
up.

"make strip" has been taught to strip "scalar" as well as \ 
"git".

Dockerized jobs at the GitHub Actions CI have been taught to show
more details of failed tests.

Code refactoring around object database sources.

Halve the memory consumed by artificial filepairs created during
"git diff --find-copies-harder", also making the operation run
faster.

The "git_istream" abstraction has been revamped to make it easier
to interface with pluggable object database design.

Rewrite the only use of "mktemp()" that is subject to TOCTOU race
and Stop using the insecure "mktemp()" function.
(merge 10bba537c4 rs/ban-mktemp later to maint).

In-code comment update to clarify that single-letter options are
outside of the scope of command line completion script.
(merge dc8a00fafe jc/completion-no-single-letter-options later to maint).

MEMZERO_ARRAY() helper is introduced to avoid clearing only the
first N bytes of an N-element array whose elements are larger than
a byte.

"git diff-files -R --find-copies-harder" has been taught to use
the potential copy sources from the index correctly.

Require C99 style flexible array member support from all platforms.

The code path that enumerates promisor objects have been optimized
to skip pointlessly parsing blob objects.

Prepare test suite for Git for Windows that supports symbolic
links.

Import newer version of "clar", unit testing framework.
(merge 84071a6dea ps/clar-integers later to maint).

The packfile_store data structure is moved from object store to odb
source.

The object-info API has been cleaned up.

Further preparation to upstream symbolic link support on Windows.

Remove implicit reliance on the_repository global in the APIs
around tree objects and make it explicit which repository to work
in.

"git bugreport" and "git version --build-options" learned to
include use of gettext feature, to make it easier to diagnose
problems around l10n.

Dscho observed that SVN tests are taking too much time in CI leak
checking tasks, but most time is spent not in our code but in libsvn
code (which happen to be written in Perl), whose leaks have little
value to discover for us.  Skip SVN, P4, and CVS tests in the leak
checking tasks.
(merge 047bd7dfe3 js/ci-leak-skip-svn later to maint).

Fixes since v2.52

Ever since we added whitespace rules for this project, we misspelt
an entry, which has been corrected.
(merge 358e94dc70 jc/gitattributes-whitespace-no-indent-fix later to maint).

The code to expand attribute macros has been rewritten to avoid
recursion to avoid running out of stack space in an uncontrolled
way.
(merge 42ed046866 jk/attr-macroexpand-wo-recursion later to maint).

Adding a repository that uses a different hash function is a no-no,
but "git submodule add" did not prevent it, which has been corrected.
(merge 6fe288bfbc bc/submodule-force-same-hash later to maint).

An earlier check added to osx keychain credential helper to avoid
storing the credential itself supplied was overeager and rejected
credential material supplied by other helper backends that it would
have wanted to store, which has been corrected.
(merge 4580bcd235 kn/osxkeychain-idempotent-store-fix later to maint).

The "git repo structure" subcommand tried to align its output but
mixed up byte count and display column width, which has been
corrected.
(merge 7a03a10a3a jx/repo-struct-utf8width-fix later to maint).

Yet another corner case fix around renames in the "ort" merge
strategy.
(merge a562d90a35 en/ort-rename-another-fix later to maint).

Test leakfix.
(merge 14b561e768 jk/test-mktemp-leakfix later to maint).

Update a version of action used at the GitHub Actions CI.
(merge cd99203f86 js/ci-github-setup-go-update later to maint).

The "return errno = EFOO, -1" construct, which is heavily used in
compat/mingw.c and triggers warnings under "-Wcomma", has been
rewritten to avoid the warnings.
(merge af3919816f js/mingw-assign-comma-fix later to maint).

Makefile based build have recently been updated to build a
libgit.a that also has reftable and xdiff objects; CMake based
build procedure has been updated to match.
(merge b0d5c88cca js/cmake-libgit-fix later to maint).

Under-allocation fix.
(merge d22a488482 js/wincred-get-credential-alloc-fix later to maint).

"git worktree list" attempts to show paths to worktrees while
aligning them, but miscounted display columns for the paths when
non-ASCII characters were involved, which has been corrected.
(merge 08dfa59835 pw/worktree-list-display-width-fix later to maint).

"Windows+meson" job at the GitHub Actions CI was hard to debug, as
it did not show and save failed test artifacts, which has been
corrected.
(merge 17bd1108ea jk/ci-windows-meson-test-fix later to maint).

Emulation code clean-up.
(merge 2367c6bcd6 gf/win32-pthread-cond-wait-err later to maint).

Various issues detected by Asan have been corrected.
(merge a031b6181a jk/asan-bonanza later to maint).

"git config get --path" segfaulted on an ":(optional)path" that
does not exist, which has been corrected.
(merge 0bd16856ff jc/optional-path later to maint).

The "--committer-date-is-author-date" option of "git \ 
am/rebase" is
a misguided one.  The documentation is updated to discourage its
use.
(merge fbf3d0669f kh/doc-committer-date-is-author-date later to maint).

The option help text given by "git config unset -h" described
the "--all" option to "replace", not "unset", \ 
multiple variables,
which has been corrected.
(merge 18bf67b753 rs/config-unset-opthelp-fix later to maint).

The error message given by "git config set", when the variable
being updated has more than one values defined, used old style "git
config" syntax with an incorrect option in its hint, both of which
have been corrected.
(merge df963f0df4 rs/config-set-multi-error-message-fix later to maint).

"git replay" forgot to omit the "gpgsig-sha256" extended header
from the resulting commit the same way it omits "gpgsig", which has
been corrected.
(merge 9f3a115087 pw/replay-exclude-gpgsig-fix later to maint).

A few tests have been updated to work under the shell compatible
mode of zsh.
(merge a92f243a94 bc/zsh-testsuite later to maint).

The way patience diff finds LCS has been optimized.
(merge c7e3b8085b yc/xdiff-patience-optim later to maint).

Recent optimization to "last-modified" command introduced use of
uninitialized block of memory, which has been corrected.
(merge fe4e60759b tc/last-modified-active-paths-optimization later to maint).

"git last-modified" used to mishandle "--" to mark the \ 
beginning of
pathspec, which has been corrected.
(merge 05491b90ce js/last-modified-with-sparse-checkouts later to maint).

Emulation code clean-up.
(merge 42aa7603aa gf/win32-pthread-cond-init later to maint).

"git submodule add" to add a submodule under <name> segfaulted,
when a submodule.<name>.something is already in .gitmodules file
without defining where its submodule.<name>.path is, which has been
corrected.
(merge dd8e8c786e jc/submodule-add later to maint).

"git fetch" that involves fetching tags, when a tag being fetched
needs to overwrite existing one, failed to fetch other tags, which
has been corrected.
(merge b7b17ec8a6 kn/fix-fetch-backfill-tag-with-batched-ref-updates later to maint).

Document "rev-list --filter-provided-objects" better.
(merge 6d8dc99478 jt/doc-rev-list-filter-provided-objects later to maint).

Even when there is no changes in the packfile and no need to
recompute bitmaps, "git repack" recomputed and updated the MIDX
file, which has been corrected.
(merge 6ce9d558ce ps/repack-avoid-noop-midx-rewrite later to maint).

Update HTTP tests to adjust for changes in curl 8.18.0
(merge 17f4b01da7 jk/test-curl-updates later to maint).

Workaround the "iconv" shipped as part of macOS, which is broken
handling stateful ISO/IEC 2022 encoded strings.
(merge cee341e9dd rs/macos-iconv-workaround later to maint).

Running "git diff" with "--name-only" and other options that \ 
allows
us not to look at the blob contents, while objects that are lazily
fetched from a promisor remote, caused use-after-free, which has
been corrected.

The ort merge machinery hit an assertion failure in a history with
criss-cross merges renamed a directory and a non-directory, which
has been corrected.
(merge 979ee83e8a en/ort-recursive-d-f-conflict-fix later to maint).

Diagnose invalid bundle-URI that lack the URI entry, instead of
crashing.
(merge 7796c14a1a sb/bundle-uri-without-uri later to maint).

Mailmap update for Karsten
(merge e97678c4ef js/mailmap-karsten-blees later to maint).

Perf-test fixes.
(merge 79d301c767 jk/t-perf-fixes later to maint).

Fix for a performance regression in "git cat-file".
(merge 9e8b448dd8 jk/cat-file-avoid-bitmap-when-unneeded later to maint).

Update a FAQ entry on synching two separate repositories using the
"git stash export/import" recently introduced.
(merge 02fc44a989 bc/doc-stash-import-export later to maint).

"git fsck" used inconsistent set of refs to show a confused
warning, which has been corrected.

Some error messages from the http transport layer lacked the
terminating newline, which has been corrected.
(merge a8227ae8d5 kt/http-backend-errors later to maint).

"git repack --geometric" did not work with promisor packs, which
has been corrected.

The logic that avoids reusing MIDX files with a wrong checksum was
broken, which has been corrected.
   2026-01-07 09:49:50 by Thomas Klausner | Files touched by this commit (2525)
Log message:
*: recursive bump for icu 78.1
   2025-11-18 17:24:48 by Adam Ciarcinski | Files touched by this commit (5) | Package updated
Log message:
git: updated to 2.52.0

Git v2.52 Release Notes
=======================

UI, Workflows & Features
------------------------

 * The "list" subcommand of "git refs" acts as a front-end for
   "git for-each-ref".

 * "git cmd --help-all" now works outside repositories.

 * "git diff-tree" learned "--max-depth" option.

 * A new subcommand "git repo" gives users a way to grab various
   repository characteristics.

 * A new command "git last-modified" has been added to show the closest
   ancestor commit that touched each path.

 * The "git refs exists" command that works like "git show-ref \ 
--exists"
   has been added.

 * "git repo info" learns the short-hand option "-z" that is \ 
the same as
   "--format=nul", and learns to report the objects format used in the
   repository.

 * "core.commentChar=auto" that attempts to dynamically pick a
   suitable comment character is non-workable, as it is too much
   trouble to support for little benefit, and is marked as deprecated.

 * "git send-email" learned to drive "git imap-send" to \ 
store already
   sent e-mails in an IMAP folder.

 * The "promisor-remote" capability mechanism has been updated to
   allow the "partialCloneFilter" settings and the "token" \ 
value to be
   communicated from the server side.

 * Declare that "git init" that is not otherwise configured uses
   'main' as the initial branch, not 'master', starting Git 3.0.

 * Keep giving hint about the default initial branch name for users
   who may be surprised after Git 3.0 switch-over.

 * The stash.index configuration variable can be set to make "git stash
   pop/apply" pretend that it was invoked with "--index".

 * "git fast-import" learned that \ 
"--signed-commits=<how>" option that
   corresponds to that of "git fast-export".

 * Marking a hunk 'selected' in "git add -p" and then splitting made
   all the split pieces 'selected'; this has been changed to make them
   all 'undecided', which gives better end-user experience.

 * Configuration variables that take a pathname as a value
   (e.g. blame.ignorerevsfile) can be marked as optional by prefixing
   ":(optional)" before its value.

 * Show 'P'ipe command in "git add -p".

 * "git sparse-checkout" subcommand learned a new "clean" \ 
action to
   prune otherwise unused working-tree files that are outside the
   areas of interest.

 * "git fast-import" is taught to handle signed tags, just like it
   recently learned to handle signed commits, in different ways.

 * A new configuration variable commitGraph.changedPaths allows to
   turn "--changed-paths" on by default for "git commit-graph".

 * "Symlink symref" has been added to the list of things that will
   disappear at Git 3.0 boundary.

 * "git maintenance" command learns the "geometric" strategy \ 
where it
   avoids doing maintenance tasks that rebuilds everything from
   scratch.

 * "git repo structure", a new command.

 * The help text and manual page of "git bisect" command have been
   made consistent with each other.

Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------

 * string_list_split*() family of functions have been extended to
   simplify common use cases.

 * Arrays of strbuf is often a wrong data structure to use, and
   strbuf_split*() family of functions that create them often have
   better alternatives.  Update several code paths and replace
   strbuf_split*().

 * Revision traversal limited with pathspec, like "git log dir/*",
   used to ignore changed-paths Bloom filter when the pathspec
   contained wildcards; now they take advantage of the filter when
   they can.

 * Doc lint updates to encourage the newer and easier-to-use
   `synopsis` format, with fixes to a handful of existing uses.

 * Remove dependency on the_repository and other globals from the
   commit-graph code, and other changes unrelated to de-globaling.

 * Discord has been added to the first contribution documentation as
   another way to ask for help.

 * Inspired by Ezekiel's recent effort to showcase Rust interface, the
   hash function implementation used to hash lines have been updated
   to the one used for ELF symbol lookup by Glibc.

 * Instead of scanning for the remaining items to see if there are
   still commits to be explored in the queue, use khash to remember
   which items are still on the queue (an unacceptable alternative is
   to reserve one object flag bits).

 * The bulk-checkin code used to depend on a file-scope static
   singleton variable, which has been updated to pass an instance
   throughout the callchain.

 * The work to build on the bulk-checkin infrastructure to create many
   objects at once in a transaction and to abstract it into the
   generic object layer continues.

 * CodingGuidelines now spells out how bitfields are to be written.

 * Adjust to the way newer versions of cURL selectively enable tracing
   options, so that our tests can continue to work.

 * The clear_alloc_state() API function was not fully clearing the
   structure for reuse, but since nobody reuses it, replace it with a
   variant that frees the structure as well, making the callers simpler.

 * "git range-diff" learned a way to limit the memory consumed by
   O(N*N) cost matrix.

 * Some places in the code confused a variable that is *not* a boolean
   to enable color but is an enum that records what the user requested
   to do about color.  A couple of bugs of this sort have been fixed,
   while the code has been cleaned up to prevent similar bugs in the
   future.

 * The build procedure based on meson learned a target to only build
   documentation, similar to "make doc".
   (merge ff4ec8ded0 ps/meson-build-docs later to maint).

 * Dip our toes a bit to (optionally) use Rust implemented helper
   called from our C code.

 * Documentation for "git log --pretty" options has been updated
   to make it easier to translate.

 * Instead of three library archives (one for git, one for reftable,
   and one for xdiff), roll everything into a single libgit.a archive.
   This would help later effort to FFI into Rust.

 * The beginning of SHA1-SHA256 interoperability work.

 * Build procedure for a few credential helpers (in contrib/) have
   been updated.

 * CI improvements to handle the recent Rust integration better.

 * The code in "git repack" machinery has been cleaned up to prepare
   for incremental update of midx files.

 * Two slightly different ways to get at "all the packfiles" in API
   has been cleaned up.

 * The code to walk revision graph to compute merge base has been
   optimized.

 * AI guidelines has been added to our documentation set.

 * Contributed credential helpers (obviously in contrib/) now have "cd
   $there && make install" target.

 * The "MyFirstContribution" tutorial tells the reader how to send out
   their patches; the section gained a hint to verify the message
   reached the mailing list.

 * The "debug" ref-backend was missing a method implementation, which
   has been corrected.

 * Build procedure for Wincred credential helper has been updated.

 * The build procedure based on meson learned to allow builders to
   specify the directory to install HTML documents.

 * Building "git contacts" script (in contrib/) left the resulting
   file unexecutable, which has been corrected.

Fixes since v2.51
-----------------

Unless otherwise noted, all the changes in 2.51.X maintenance track,
including security updates, are included in this release.

 * During interactive rebase, using 'drop' on a merge commit lead to
   an error, which was incorrect.

 * "git refs migrate" to migrate the reflog entries from a refs
   backend to another had a handful of bugs squashed.

 * "git remote rename origin upstream" failed to move origin/HEAD to
   upstream/HEAD when origin/HEAD is unborn and performed other
   renames extremely inefficiently, which has been corrected.
   (merge 16c4fa26b9 ps/remote-rename-fix later to maint).

 * "git describe" has been optimized by using better data structure.
   (merge 08bb69d70f rs/describe-with-prio-queue later to maint).

 * "git push" had a code path that led to BUG() but it should have
   been a die(), as it is a response to a usual but invalid end-user
   action to attempt pushing an object that does not exist.

 * Various bugs about rename handling in "ort" merge strategy have
   been fixed.

 * "git jump" (in contrib/) fails to parse the diff header correctly
   when a file has a space in its name, which has been corrected.
   (merge 621ce9c1c6 gh/git-jump-pathname-with-sp later to maint).

 * "git diff --no-index" run inside a subdirectory under control of a
   Git repository operated at the top of the working tree and stripped
   the prefix from the output, and oddballs like "-" (stdin) did not
   work correctly because of it.  Correct the set-up by undoing what
   the set-up sequence did to cwd and prefix.

 * Various options to "git diff" that makes comparison ignore certain
   aspects of the differences (like "space changes are ignored",
   "differences in lines that match these regular expressions are
   ignored") did not work well with "--name-only" and friends.
   (merge b55e6d36eb ly/diff-name-only-with-diff-from-content later to maint).

 * The above caused regressions, which has been corrected.

 * Documentation for "git rebase" has been updated.
   (merge 3f7f2b0359 je/doc-rebase later to maint).

 * The start_delayed_progress() function in the progress eye-candy API
   did not clear its internal state, making an initial delay value
   larger than 1 second ineffective, which has been corrected.

 * The compatObjectFormat extension is used to hide an incomplete
   feature that is not yet usable for any purpose other than
   developing the feature further.  Document it as such to discourage
   its use by mere mortals.

 * "git log -L..." compared trees of multiple parents with the tree of the
   merge result in an unnecessarily inefficient way.
   (merge 0a15bb634c sg/line-log-merge-optim later to maint).

 * Under a race against another process that is repacking the
   repository, especially a partially cloned one, "git fetch" may
   mistakenly think some objects we do have are missing, which has
   been corrected.

 * "git fetch" can clobber a symref that is dangling when the
   remote-tracking HEAD is set to auto update, which has been
   corrected.

 * "git describe <blob>" misbehaves and/or crashes in some corner
   cases, which has been taught to exit with failure gracefully.
   (merge 7c10e48e81 jk/describe-blob later to maint).

 * Manual page for "gitk" is updated with the current maintainer's
   name.

 * Update the instructions for using GGG in the MyFirstContribution
   document to say that a GitHub PR could be made against `git/git`
   instead of `gitgitgadget/git`.

 * Makefile tried to run multiple "cargo build" which would not work
   very well; serialize their execution to work around this problem.

 * "git repack --path-walk" lost objects in some corner cases, which
   has been corrected.

 * "git ls-files <pathspec>..." should not necessarily have to expand
   the index fully if a sparsified directory is excluded by the
   pathspec; the code is taught to expand the index on demand to avoid
   this.
   (merge 681f26bccc ds/ls-files-lazy-unsparse later to maint).

 * Windows "real-time monitoring" interferes with the execution of
   tests and affects negatively in both correctness and performance,
   which has been disabled in Gitlab CI.

 * A broken or malicious "git fetch" can say that it has the same
   object for many many times, and the upload-pack serving it can
   exhaust memory storing them redundantly, which has been corrected.

 * A corner case bug in "git log -L..." has been corrected.

 * "git rev-parse --short" and friends failed to disambiguate two
   objects with object names that share common prefix longer than 32
   characters, which has been fixed.
   (merge 8655908b9e jc/longer-disambiguation-fix later to maint).

 * Some among "git add -p" and friends ignored color.diff and/or
   color.ui configuration variables, which is an old regression, which
   has been corrected.

 * "git subtree" (in contrib/) did not work correctly when splitting
   squashed subtrees, which has been improved.

 * Import a newer version of the clar unit testing framework.
   (merge 93dbb6b3c5 ps/clar-updates later to maint).

 * "git send-email --compose --reply-to=<address>" used to add
   duplicated Reply-To: header, which made mailservers unhappy.  This
   has been corrected.
   (merge f448f65719 nb/send-email-no-dup-reply-to later to maint).

 * "git rebase -i" failed to clean-up the commit log message when the
   command commits the final one in a chain of "fixup" commands, which
   has been corrected.

 * There are double frees and leaks around setup_revisions() API used
   in "git stash show", which has been fixed, and setup_revisions()
   API gained a wrapper to make it more ergonomic when using it with
   strvec-manged argc/argv pairs.
   (merge a04bc71725 jk/setup-revisions-freefix later to maint).

 * Deal more gracefully with directory / file conflicts when the files
   backend is used for ref storage, by failing only the ones that are
   involved in the conflict while allowing others.

 * "git last-modified" operating in non-recursive mode used to trigger
   a BUG(), which has been corrected.

 * The use of "git config get" command to learn how ANSI color
   sequence is for a particular type, e.g., "git config get
   --type=color --default=reset no.such.thing", isn't very ergonomic.
   (merge e4dabf4fd6 ps/config-get-color-fixes later to maint).

 * The "do you still use it?" message given by a command that is
   deeply deprecated and allow us to suggest alternatives has been
   updated.

 * Clang-format update to let our control macros be formatted the way we
   had them traditionally, e.g., "for_each_string_list_item()" without
   space before the parentheses.

 * A few places where a size_t value was cast to curl_off_t without
   checking has been updated to use the existing helper function.

 * "git reflog write" did not honor the configured user.name/email
   which has been corrected.

 * Handling of an empty subdirectory of .git/refs/ in the ref-files
   backend has been corrected.

 * Our CI script requires "sudo" that can be told to preserve
   environment, but Ubuntu replaced with "sudo" with an implementation
   that lacks the feature.  Work this around by reinstalling the
   original version.

 * The reftable backend learned to sanity check its on-disk data more
   carefully.
   (merge 466a3a1afd kn/reftable-consistency-checks later to maint).

 * A lot of code clean-up of xdiff.
   Split out of a larger topic.
   (merge 8b9c5d2e3a en/xdiff-cleanup later to maint).

 * "git format-patch --range-diff=... --notes=..." did not drive the
   underlying range-diff with correct --notes parameter, ending up
   comparing with different set of notes from its main patch output
   you would get from "git format-patch --notes=..." for a singleton
   patch.

 * The code in "git add -p" and friends to iterate over hunks was
   riddled with bugs, which has been corrected.

 * A few more things that patch authors can do to help maintainer to
   keep track of their topics better.
   (merge 1a41698841 tb/doc-submitting-patches later to maint).

 * An earlier addition to "git diff --no-index A B" to limit the
   output with pathspec after the two directories misbehaved when
   these directories were given with a trailing slash, which has been
   corrected.

 * The "--short" option of "git status" that meant output \ 
for humans
   and "-z" option to show NUL delimited output format did not mix
   well, and colored some but not all things.  The command has been
   updated to color all elements consistently in such a case.

 * Unicode width table update.

 * GPG signing test set-up has been broken for a year, which has been
   corrected.
   (merge 516bf45749 jc/t1016-setup-fix later to maint).

 * Recent OpenSSH creates the Unix domain socket to communicate with
   ssh-agent under $HOME instead of /tmp, which causes our test to
   fail doe to overly long pathname in our test environment, which has
   been worked around by using "ssh-agent -T".

 * strbuf_split*() to split a string into multiple strbufs is often a
   wrong API to use.  A few uses of it have been removed by
   simplifying the code.
   (merge 2ab72a16d9 ob/gpg-interface-cleanup later to maint).

 * "git shortlog" knows "--committer" and \ 
"--author" options, which
   the command line completion (in contrib/) did not handle well,
   which has been corrected.
   (merge c568fa8e1c kf/log-shortlog-completion-fix later to maint).

 * "git bisect" command did not react correctly to "git bisect \ 
help"
   and "git bisect unknown", which has been corrected.
   (merge 2bb3a012f3 rz/bisect-help-unknown later to maint).

 * The 'q'(uit) command in "git add -p" has been improved to quit
   without doing any meaningless work before leaving, and giving EOF
   (typically control-D) to the prompt is made to behave the same way.

 * The wildmatch code had a corner case bug that mistakenly makes
   "foo**/bar" match with "foobar", which has been corrected.
   (merge 1940a02dc1 jk/match-pathname-fix later to maint).

 * Tests did not set up GNUPGHOME correctly, which is fixed but some
   flaky tests are exposed in t1016, which needs to be addressed
   before this topic can move forward.
   (merge 6cd8369ef3 tz/test-prepare-gnupghome later to maint).

 * The patterns used in the .gitignore files use backslash in the way
   documented for fnmatch(3); document as such to reduce confusion.
   (merge 8a6d158a1d jk/doc-backslash-in-exclude later to maint).

 * The version of macos image used in GitHub CI has been updated to
   macos-14, as the macos-13 that we have been using got deprecated.
   Perforce binary used there has been changed to arm64 version to
   match.
   (merge 73b9cdb7c4 jc/ci-use-macos-14 later to maint).
   (merge ffff0bb0da jc/ci-use-arm64-p4-on-macos later to maint).

 * Other code cleanup, docfix, build fix, etc.
   2025-10-28 09:00:19 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
git: updated to 2.51.2

Git 2.51.2 Release Notes
========================

In addition to fixes for an unfortunate regression introduced in Git
2.51.1 that caused "git diff --quiet -w" to be not so quiet when there
are additions, deletions and conflicts, this maintenance release merges
more fixes/improvements that have landed on the master front, primarily
to make the CI part of the system a bit more robust.

Fixes since Git 2.51.1
----------------------

 * Recently we attempted to improve "git diff -w --quiet" and friends
   to handle cases where patch output would be suppressed, but it
   introduced a bug that emits unnecessary output, which has been
   corrected.

 * The code to squelch output from "git diff -w --name-status"
   etc. for paths that "git diff -w -p" would have stayed silent
   leaked output from dry-run patch generation, which has been
   corrected.

 * Windows "real-time monitoring" interferes with the execution of
   tests and affects negatively in both correctness and performance,
   which has been disabled in Gitlab CI.

 * An earlier addition to "git diff --no-index A B" to limit the
   output with pathspec after the two directories misbehaved when
   these directories were given with a trailing slash, which has been
   corrected.

 * The "--short" option of "git status" that meant output \ 
for humans
   and "-z" option to show NUL delimited output format did not mix
   well, and colored some but not all things.  The command has been
   updated to color all elements consistently in such a case.

 * Unicode width table update.

 * Recent OpenSSH creates the Unix domain socket to communicate with
   ssh-agent under $HOME instead of /tmp, which causes our test to
   fail doe to overly long pathname in our test environment, which has
   been worked around by using "ssh-agent -T".

Also contains various documentation updates, code cleanups and minor fixups.
   2025-10-23 22:40:24 by Thomas Klausner | Files touched by this commit (2999)
Log message:
*: recursive bump for pcre2

Running an old binary against the new pcre doesn't work:
/usr/pkg/lib/libpcre2-8.so.0: version PCRE2_10.47 required by \ 
/usr/pkg/lib/libglib-2.0.so.0 not defined
   2025-10-16 10:45:32 by Adam Ciarcinski | Files touched by this commit (4) | Package updated
Log message:
git: updated to 2.51.1

Git 2.51.1 Release Notes
========================

There shouldn't be anything exciting to see here.  This is primarily
to flush the "do you still use it?" improvements that has landed on
the master front, together with a handful of low-hanging, low-impact
fixes that should be safe.

Fixes since Git 2.51.0
----------------------

 * The "do you still use it?" message given by a command that is
   deeply deprecated and allow us to suggest alternatives has been
   updated.

 * The compatObjectFormat extension is used to hide an incomplete
   feature that is not yet usable for any purpose other than
   developing the feature further.  Document it as such to discourage
   its use by mere mortals.

 * Manual page for "gitk" is updated with the current maintainer's
   name.

 * Update the instructions for using GGG in the MyFirstContribution
   document to say that a GitHub PR could be made against `git/git`
   instead of `gitgitgadget/git`.

 * Clang-format update to let our control macros be formatted the way we
   had them traditionally, e.g., "for_each_string_list_item()" without
   space before the parentheses.

 * A few places where a size_t value was cast to curl_off_t without
   checking has been updated to use the existing helper function.

 * The start_delayed_progress() function in the progress eye-candy API
   did not clear its internal state, making an initial delay value
   larger than 1 second ineffective, which has been corrected.

 * Makefile tried to run multiple "cargo build" which would not work
   very well; serialize their execution to work around this problem.

 * Adjust to the way newer versions of cURL selectively enable tracing
   options, so that our tests can continue to work.

 * During interactive rebase, using 'drop' on a merge commit led to
   an error, which has been corrected.

 * "git refs migrate" to migrate the reflog entries from a refs
   backend to another had a handful of bugs squashed.

 * "git push" had a code path that led to BUG() but it should have
   been a die(), as it is a response to a usual but invalid end-user
   action to attempt pushing an object that does not exist.

 * Various bugs about rename handling in "ort" merge strategy have
   been fixed.

 * "git diff --no-index" run inside a subdirectory under control of a
   Git repository operated at the top of the working tree and stripped
   the prefix from the output, and oddballs like "-" (stdin) did not
   work correctly because of it.  Correct the set-up by undoing what
   the set-up sequence did to cwd and prefix.

 * Various options to "git diff" that make comparison ignore certain
   aspects of the differences (like "space changes are ignored",
   "differences in lines that match these regular expressions are
   ignored") did not work well with "--name-only" and friends.

 * Under a race against another process that is repacking the
   repository, especially a partially cloned one, "git fetch" may
   mistakenly think some objects we do have are missing, which has
   been corrected.

 * "git repack --path-walk" lost objects in some corner cases, which
   has been corrected.
   cf. <CABPp-BHFxxGrqKc0m==TjQNjDGdO=H5Rf6EFsf2nfE1=TuraOQ@mail.gmail.com>

 * Fixes multiple crashes around midx write-out codepaths.

 * A broken or malicious "git fetch" can say that it has the same
   object for many many times, and the upload-pack serving it can
   exhaust memory storing them redundantly, which has been corrected.

 * A corner case bug in "git log -L..." has been corrected.

 * Some among "git add -p" and friends ignored color.diff and/or
   color.ui configuration variables, which is an old regression, which
   has been corrected.

 * "git rebase -i" failed to clean-up the commit log message when the
   command commits the final one in a chain of "fixup" commands, which
   has been corrected.

 * Deal more gracefully with directory / file conflicts when the files
   backend is used for ref storage, by failing only the ones that are
   involved in the conflict while allowing others.

Also contains various documentation updates, code cleanups and minor fixups.