1 Git v2.38 Release Notes
2 =======================
4 UI, Workflows & Features
6 * "git remote show [-n] frotz" now pays attention to negative
9 * "git push" sometimes perform poorly when reachability bitmaps are
10 used, even in a repository where other operations are helped by
11 bitmaps. The push.useBitmaps configuration variable is introduced
12 to allow disabling use of reachability bitmaps only for "git push".
14 * "git grep -m<max-hits>" is a way to limit the hits shown per file.
16 * "git merge-tree" learned a new mode where it takes two commits and
17 computes a tree that would result in the merge commit, if the
18 histories leading to these two commits were to be merged.
20 * "git mv A B" in a sparsely populated working tree can be asked to
21 move a path between directories that are "in cone" (i.e. expected
22 to be materialized in the working tree) and "out of cone"
23 (i.e. expected to be hidden). The handling of such cases has been
26 * Earlier, HTTP transport clients learned to tell the server side
27 what locale they are in by sending Accept-Language HTTP header, but
28 this was done only for some requests but not others.
30 * Introduce a discovery.barerepository configuration variable that
31 allows users to forbid discovery of bare repositories.
33 * Various messages that come from the pack-bitmap codepaths have been
36 * "git rebase -i" learns to update branches whose tip appear in the
37 rebased range with "--update-refs" option.
39 * "git ls-files" learns the "--format" option to tweak its output.
41 * "git cat-file" learned an option to use the mailmap when showing
42 commit and tag objects.
44 * When "git merge" finds that it cannot perform a merge, it should
45 restore the working tree to the state before the command was
46 initiated, but in some corner cases it didn't.
48 * Operating modes like "--batch" of "git cat-file" command learned to
49 take NUL-terminated input, instead of one-item-per-line.
51 * "git rm" has become more aware of the sparse-index feature.
53 * "git rev-list --disk-usage" learned to take an optional value
54 "human" to show the reported value in human-readable format, like
57 * The "diagnose" feature to create a zip archive for diagnostic
58 material has been lifted from "scalar" and made into a feature of
61 * The namespaces used by "log --decorate" from "refs/" hierarchy by
62 default has been tightened.
64 * "git rev-list --ancestry-path=C A..B" is a natural extension of
65 "git rev-list A..B"; instead of choosing a subset of A..B to those
66 that have ancestry relationship with A, it lets a subset with
67 ancestry relationship with C.
69 * "scalar" now enables built-in fsmonitor on enlisted repositories,
72 * The bash prompt (in contrib/) learned to optionally indicate when
73 the index is unmerged.
76 Performance, Internal Implementation, Development Support etc.
78 * Collection of what is referenced by objects in promisor packs have
79 been optimized to inspect these objects in the in-pack order.
81 * Introduce a helper to see if a branch is already being worked on
82 (hence should not be newly checked out in a working tree), which
83 performs much better than the existing find_shared_symref() to
84 replace many uses of the latter.
86 * Teach "git archive" to (optionally and then by default) avoid
87 spawning an external "gzip" process when creating ".tar.gz" (and
90 * Allow large objects read from a packstream to be streamed into a
91 loose object file straight, without having to keep it in-core as a
94 * Further preparation to turn git-submodule.sh into a builtin
97 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
98 macro, which would improve maintainability and readability.
100 * Teach "make all" to build gitweb as well.
102 * Tweak tests so that they still work when the "git init" template
103 did not create .git/info directory.
105 * Add Coccinelle rules to detect the pattern of initializing and then
106 finalizing a structure without using it in between at all, which
107 happens after code restructuring and the compilers fail to
108 recognize as an unused variable.
110 * The code to convert between GPG trust level strings and internal
111 constants we use to represent them have been cleaned up.
113 * Support for libnettle as SHA256 implementation has been added.
115 * The way "git multi-pack" uses parse-options API has been improved.
117 * A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
118 macro has been improved.
120 * API tweak to make it easier to run fuzz testing on commit-graph parser.
122 * Omit fsync-related trace2 entries when their values are all zero.
124 * The codepath to write multi-pack index has been taught to release a
125 large chunk of memory that holds an array of objects in the packs,
126 as soon as it is done with the array, to reduce memory consumption.
128 * Add a level of redirection to array allocation API in xdiff part,
129 to make it easier to share with the libgit2 project.
131 * "git fetch" client logs the partial clone filter used in the trace2
134 * The "bundle URI" design gets documented.
136 * The common ancestor negotiation exchange during a "git fetch"
137 session now leaves trace log.
139 * Test portability improvements.
140 (merge 4d1d843be7 mt/rot13-in-c later to maint).
146 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
147 correctly record a removed file to the index, which was fixed.
149 * Certain diff options are currently ignored when combined-diff is
150 shown; mark them as incompatible with the feature.
152 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
153 add some missing information to the documentation.
155 * Fixes for tests when the source directory has unusual characters in
156 its path, e.g. whitespaces, double-quotes, etc.
158 * "git mktree --missing" lazily fetched objects that are missing from
159 the local object store, which was totally unnecessary for the purpose
160 of creating the tree object(s) from its input.
162 * Give _() markings to fatal/warning/usage: labels that are shown in
163 front of these messages.
165 * References to commands-to-be-typed-literally in "git rebase"
166 documentation mark-up have been corrected.
168 * In a non-bare repository, the behavior of Git when the
169 core.worktree configuration variable points at a directory that has
170 a repository as its subdirectory, regressed in Git 2.27 days.
172 * Recent update to vimdiff layout code has been made more robust
173 against different end-user vim settings.
175 * Plug various memory leaks, both in the main code and in test-tool
178 * Fixes a long-standing corner case bug around directory renames in
179 the merge-ort strategy.
181 * The resolve-undo information in the index was not protected against
182 GC, which has been corrected.
184 * A corner case bug where lazily fetching objects from a promisor
185 remote resulted in infinite recursion has been corrected.
187 * "git clone" from a repository with some ref whose HEAD is unborn
188 did not set the HEAD in the resulting repository correctly, which
191 * An earlier attempt to plug leaks placed a clean-up label to jump to
192 at a bogus place, which as been corrected.
194 * Variable quoting fix in the vimdiff driver of "git mergetool"
196 * "git shortlog -n" relied on the underlying qsort() to be stable,
197 which shouldn't have. Fixed.
199 * A fix for a regression in test framework.
201 * mkstemp() emulation on Windows has been improved.
203 * Add missing documentation for "include" and "includeIf" features in
204 "git config" file format, which incidentally teaches the command
205 line completion to include them in its offerings.
207 * Avoid "white/black-list" in documentation and code comments.
209 * Workaround for a compiler warning against use of die() in
210 osx-keychain (in contrib/).
212 * Workaround for a false positive compiler warning.
214 * "git p4" working on UTF-16 files on Windows did not implement
215 CRLF-to-LF conversion correctly, which has been corrected.
217 * "git p4" did not handle non-ASCII client name well, which has been
220 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
221 while recreating the throw-away merges.
223 * "git checkout" miscounted the paths it updated, which has been
226 * Fix for a bug that makes write-tree to fail to write out a
227 non-existent index as a tree, introduced in 2.37.
229 * There was a bug in the codepath to upgrade generation information
230 in commit-graph from v1 to v2 format, which has been corrected.
232 * Gitweb had legacy URL shortener that is specific to the way
233 projects hosted on kernel.org used to (but no longer) work, which
236 * Fix build procedure for Windows that uses CMake so that it can pick
237 up the shell interpreter from local installation location.
239 * Conditionally allow building Python interpreter on Windows
241 * Fix to lstat() emulation on Windows.
243 * Older gcc with -Wall complains about the universal zero initializer
244 "struct s = { 0 };" idiom, which makes developers' lives
245 inconvenient (as -Werror is enabled by DEVELOPER=YesPlease). The
246 build procedure has been tweaked to help these compilers.
248 * Plug memory leaks in the failure code path in the "merge-ort" merge
251 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.
253 * A follow-up fix to a fix for a regression in 2.36 around hooks.
255 * Avoid repeatedly running getconf to ask libc version in the test
256 suite, and instead just as it once per script.
258 * Platform-specific code that determines if a directory is OK to use
259 as a repository has been taught to report more details, especially
262 * "vimdiff3" regression fix.
264 * "git fsck" reads mode from tree objects but canonicalizes the mode
265 before passing it to the logic to check object sanity, which has
266 hid broken tree objects from the checking logic. This has been
267 corrected, but to help exiting projects with broken tree objects
268 that they cannot fix retroactively, the severity of anomalies this
269 code detects has been demoted to "info" for now.
271 * Fixes to sparse index compatibility work for "reset" and "checkout"
274 * An earlier optimization discarded a tree-object buffer that is
275 still in use, which has been corrected.
276 (merge 1490d7d82d jk/is-promisor-object-keep-tree-in-use later to maint).
278 * Fix deadlocks between main Git process and subprocess spawned via
279 the pipe_command() API, that can kill "git add -p" that was
280 reimplemented in C recently.
281 (merge 716c1f649e jk/pipe-command-nonblock later to maint).
283 * The sequencer machinery translated messages left in the reflog by
284 mistake, which has been corrected.
286 * xcalloc(), imitating calloc(), takes "number of elements of the
287 array", and "size of a single element", in this order. A call that
288 does not follow this ordering has been corrected.
289 (merge c4bbd9bb8f sg/xcalloc-cocci-fix later to maint).
291 * The preload-index codepath made copies of pathspec to give to
292 multiple threads, which were left leaked.
293 (merge 23578904da ad/preload-plug-memleak later to maint).
295 * Update the version of Ubuntu used for GitHub Actions CI from 18.04
297 (merge ef46584831 ds/github-actions-use-newer-ubuntu later to maint).
299 * Other code cleanup, docfix, build fix, etc.
300 (merge 77b9e85c0f vd/fix-perf-tests later to maint).