]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.44.0.txt
Merge branch 'tb/multi-pack-reuse-experiment'
[thirdparty/git.git] / Documentation / RelNotes / 2.44.0.txt
1 Git v2.44 Release Notes
2 =======================
3
4 Backward Compatibility Notes
5
6 * "git chekcout -B <branch>" used to allow switching to a branch that
7 is in use on another worktree, but this was by mistake. The users
8 need to use "--ignore-other-worktrees" option.
9
10
11 UI, Workflows & Features
12
13 * "git add" and "git stash" learned to support the ":(attr:...)"
14 magic pathspec.
15
16 * "git rebase --autosquash" is now enabled for non-interactive rebase,
17 but it is still incompatible with the apply backend.
18
19 * Introduce "git replay", a tool meant on the server side without
20 working tree to recreate a history.
21
22 * "git merge-file" learned to take the "--diff-algorithm" option to
23 use algorithm different from the default "myers" diff.
24
25 * Command line completion (in contrib/) learned to complete path
26 arguments to the "add/set" subcommands of "git sparse-checkout"
27 better.
28
29 * "git checkout -B <branch> [<start-point>]" allowed a branch that is
30 in use in another worktree to be updated and checked out, which
31 might be a bit unexpected. The rule has been tightened, which is a
32 breaking change. "--ignore-other-worktrees" option is required to
33 unbreak you, if you are used to the current behaviour that "-B"
34 overrides the safety.
35
36 * The builtin_objectmode attribute is populated for each path
37 without adding anything in .gitattributes files, which would be
38 useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
39 to limit to executables.
40
41 * "git fetch" learned to pay attention to "fetch.all" configuration
42 variable, which pretends as if "--all" was passed from the command
43 line when no remote parameter was given.
44
45 * In addition to (rather cryptic) Security Identifiers, show username
46 and domain in the error message when we barf on mismatch between
47 the Git directory and the current user on Windows.
48
49 * The error message given when "git branch -d branch" fails due to
50 commits unique to the branch has been split into an error and a new
51 conditional advice message.
52
53 * When given an existing but unreadable file as a configuration file,
54 gitweb behaved as if the file did not exist at all, but now it
55 errors out. This is a change that may break backward compatibility.
56
57 * When $HOME/.gitignore is missing but XDG config file available, we
58 should write into the latter, not former. "git gc" and "git
59 maintenance" wrote into a wrong "global config" file, which have
60 been corrected.
61
62 * Define "special ref" as a very narrow set that consists of
63 FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
64 be classified as such are actually just pseudorefs.
65
66 * All conditional "advice" messages show how to turn them off, which
67 becomes repetitive. Setting advice.* configuration explicitly on
68 now omits the instruction part.
69
70 * The "disable repository discovery of a bare repository" check,
71 triggered by setting safe.bareRepository configuration variable to
72 'explicit', has been loosened to exclude the ".git/" directory inside
73 a non-bare repository from the check. So you can do "cd .git &&
74 git cmd" to run a Git command that works on a bare repository without
75 explicitly specifying $GIT_DIR now.
76
77 * The completion script (in contrib/) learned more options that can
78 be used with "git log".
79
80 * The labels on conflict markers for the common ancestor, our version,
81 and the other version are available to custom 3-way merge driver
82 via %S, %X, and %Y placeholders.
83
84 * The write codepath for the reftable data learned to honor
85 core.fsync configuration.
86
87 * The "--fsck-objects" option of "git index-pack" now can take the
88 optional parameter to tweak severity of different fsck errors.
89
90 * The wincred credential backend has been taught to support oauth
91 refresh token the same way as credential-cache and
92 credential-libsecret backends.
93
94
95 Performance, Internal Implementation, Development Support etc.
96
97 * Process to add some form of low-level unit tests has started.
98
99 * Add support for GitLab CI.
100
101 * "git for-each-ref --no-sort" still sorted the refs alphabetically
102 which paid non-trivial cost. It has been redefined to show output
103 in an unspecified order, to allow certain optimizations to take
104 advantage of.
105
106 * Simplify API implementation to delete references by eliminating
107 duplication.
108
109 * Subject approxidate() and show_date() machinery to OSS-Fuzz.
110
111 * A new helper to let us pretend that we called lstat() when we know
112 our cache_entry is up-to-date via fsmonitor.
113
114 * The optimization based on fsmonitor in the "diff --cached"
115 codepath is resurrected with the "fake-lstat" introduced earlier.
116
117 * Test balloon to use C99 "bool" type from <stdbool.h> has been
118 added.
119
120 * "git clone" has been prepared to allow cloning a repository with
121 non-default hash function into a repository that uses the reftable
122 backend.
123
124 * Streaming spans of packfile data used to be done only from a
125 single, primary, pack in a repository with multiple packfiles. It
126 has been extended to allow reuse from other packfiles, too.
127
128 * Comment updates to help developers not to attempt to modify
129 messages from plumbing commands that must stay constant.
130
131 It might make sense to reassess the plumbing needs every few years,
132 but that should be done as a separate effort.
133
134 * Move test-ctype helper to the unit-test framework.
135
136 * Instead of manually creating refs/ hierarchy on disk upon a
137 creation of a secondary worktree, which is only usable via the
138 files backend, use the refs API to populate it.
139
140 * CI for GitLab learned to drive macOS jobs.
141
142 * A few tests to "git commit -o <pathspec>" and "git commit -i
143 <pathspec>" has been added.
144
145 * Tests on ref API are moved around to prepare for reftable.
146
147 * The Makefile often had to say "-L$(path) -R$(path)" that repeats
148 the path to the same library directory for link time and runtime.
149 A Makefile template is used to reduce such repetition.
150
151 * The priority queue test has been migrated to the unit testing
152 framework.
153
154
155 Fixes since v2.43
156 -----------------
157
158 * The way CI testing used "prove" could lead to running the test
159 suite twice needlessly, which has been corrected.
160
161 * Update ref-related tests.
162
163 * "git format-patch --encode-email-headers" ignored the option when
164 preparing the cover letter, which has been corrected.
165
166 * Newer versions of Getopt::Long started giving warnings against our
167 (ab)use of it in "git send-email". Bump the minimum version
168 requirement for Perl to 5.8.1 (from September 2002) to allow
169 simplifying our implementation.
170
171 * Earlier we stopped relying on commit-graph that (still) records
172 information about commits that are lost from the object store,
173 which has negative performance implications. The default has been
174 flipped to disable this pessimization.
175
176 * Stale URLs have been updated to their current counterparts (or
177 archive.org) and HTTP links are replaced with working HTTPS links.
178
179 * trace2 streams used to record the URLs that potentially embed
180 authentication material, which has been corrected.
181
182 * The sample pre-commit hook that tries to catch introduction of new
183 paths that use potentially non-portable characters did not notice
184 an existing path getting renamed to such a problematic path, when
185 rename detection was enabled.
186
187 * The command line parser for the "log" family of commands was too
188 loose when parsing certain numbers, e.g., silently ignoring the
189 extra 'q' in "git log -n 1q" without complaining, which has been
190 tightened up.
191
192 * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
193 to interpret "--rev" as a rev, and "--path" as a path. This was
194 fixed for many programs like "reset" and "checkout".
195
196 * "git bisect reset" has been taught to clean up state files and refs
197 even when BISECT_START file is gone.
198
199 * Some codepaths did not correctly parse configuration variables
200 specified with valueless "true", which has been corrected.
201
202 * Code clean-up for sanity checking of command line options for "git
203 show-ref".
204
205 * The code to parse the From e-mail header has been updated to avoid
206 recursion.
207
208 * "git fetch --atomic" issued an unnecessary empty error message,
209 which has been corrected.
210
211 * Command line completion script (in contrib/) learned to work better
212 with the reftable backend.
213
214 * "git status" is taught to show both the branch being bisected and
215 being rebased when both are in effect at the same time.
216
217 * "git archive --list extra garbage" silently ignored excess command
218 line parameters, which has been corrected.
219
220 * "git sparse-checkout set" added default patterns even when the
221 patterns are being fed from the standard input, which has been
222 corrected.
223
224 * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
225 not handle "--end-of-options" correctly after a recent update.
226
227 * Unlike other environment variables that took the usual
228 true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
229 which has been corrected.
230
231 * Clearing in-core repository (happens during e.g., "git fetch
232 --recurse-submodules" with commit graph enabled) made in-core
233 commit object in an inconsistent state by discarding the necessary
234 data from commit-graph too early, which has been corrected.
235
236 * Update to a new feature recently added, "git show-ref --exists".
237 (merge 0aabeaa562 tc/show-ref-exists-fix later to maint).
238
239 * oss-fuzz tests are built and run in CI.
240 (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).
241
242 * Rename detection logic ignored the final line of a file if it is an
243 incomplete line.
244 (merge 1c5bc6971e en/diffcore-delta-final-line-fix later to maint).
245
246 * GitHub CI update.
247 (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).
248
249 * "git diff --no-rename A B" did not disable rename detection but did
250 not trigger an error from the command line parser.
251 (merge 457f96252f rs/parse-options-with-keep-unknown-abbrev-fix later to maint).
252
253 * "git archive --remote=<remote>" learned to talk over the smart
254 http (aka stateless) transport.
255 (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).
256
257 * Fetching via protocol v0 over Smart HTTP transport sometimes failed
258 to correctly auto-follow tags.
259 (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).
260
261 * The documentation for the --exclude-per-directory option marked it
262 as deprecated, which confused readers into thinking there may be a
263 plan to remove it in the future, which was not our intention.
264 (merge 0009542cab jc/ls-files-doc-update later to maint).
265
266 * "git diff --no-index file1 file2" segfaulted while invoking the
267 external diff driver, which has been corrected.
268 (merge 85a9a63c92 jk/diff-external-with-no-index later to maint).
269
270 * Rewrite //-comments to /* comments */ in files whose comments
271 prevalently use the latter.
272 (merge de65079d7b jc/comment-style-fixes later to maint).
273
274 * Cirrus CI jobs started breaking because we specified version of
275 FreeBSD that is no longer available, which has been corrected.
276 (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).
277
278 * A caller called index_file_exists() that takes a string expressed
279 as <ptr, length> with a wrong length, which has been corrected.
280 (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).
281
282 * Other code cleanup, docfix, build fix, etc.
283 (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
284 (merge 9cce3be2df bk/bisect-doc-fix later to maint).
285 (merge 8f50984cf4 ne/doc-filter-blob-limit-fix later to maint).
286 (merge f10b0989b8 la/strvec-comment-fix later to maint).
287 (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
288 (merge f10031fadd nb/rebase-x-shell-docfix later to maint).
289 (merge af3d2c160f jc/majordomo-to-subspace later to maint).
290 (merge ee9895b0ff sd/negotiate-trace-fix later to maint).
291 (merge 976d0251ce jc/coc-whitespace-fix later to maint).
292 (merge 9023198280 jt/p4-spell-re-with-raw-string later to maint).
293 (merge 36c9c44fa4 tb/pack-bitmap-drop-unused-struct-member later to maint).
294 (merge 19ed0dff8f js/win32-retry-pipe-write-on-enospc later to maint).
295 (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).