]>
Commit | Line | Data |
---|---|---|
79bcaf00 JH |
1 | Git 2.29 Release Notes |
2 | ====================== | |
3 | ||
4 | Updates since v2.28 | |
5 | ------------------- | |
6 | ||
7 | UI, Workflows & Features | |
8 | ||
9 | * "git help log" has been enhanced by sharing more material from the | |
10 | documentation for the underlying "git rev-list" command. | |
11 | ||
12 | * "git for-each-ref --format=<>" learned %(contents:size). | |
13 | ||
85b4e0a6 JH |
14 | * "git merge" learned to selectively omit " into <branch>" at the end |
15 | of the title of default merge message with merge.suppressDest | |
16 | configuration. | |
17 | ||
7814e8a0 JH |
18 | * The component to respond to "git fetch" request is made more |
19 | configurable to selectively allow or reject object filtering | |
20 | specification used for partial cloning. | |
21 | ||
2befe972 JH |
22 | * Stop when "sendmail.*" configuration variables are defined, which |
23 | could be a mistaken attempt to define "sendemail.*" variables. | |
24 | ||
25 | * The existing backends for "git mergetool" based on variants of vim | |
26 | have been refactored and then support for "nvim" has been added. | |
27 | ||
28 | * "git bisect" learns the "--first-parent" option to find the first | |
29 | breakage along the first-parent chain. | |
30 | ||
31 | * "git log --first-parent -p" showed patches only for single-parent | |
32 | commits on the first-parent chain; the "--first-parent" option has | |
33 | been made to imply "-m". Use "--no-diff-merges" to restore the | |
34 | previous behaviour to omit patches for merge commits. | |
35 | ||
675a4aaf JH |
36 | * The commit labels used to explain each side of conflicted hunks |
37 | placed by the sequencer machinery have been made more readable by | |
38 | humans. | |
39 | ||
e9b77c84 JH |
40 | * The "--batch-size" option of "git multi-pack-index repack" command |
41 | is now used to specify that very small packfiles are collected into | |
42 | one until the total size roughly exceeds it. | |
43 | ||
44 | * The recent addition of SHA-256 support is marked as experimental in | |
45 | the documentation. | |
46 | ||
47 | * "git fetch" learned --no-write-fetch-head option to avoid writing | |
48 | the FETCH_HEAD file. | |
49 | ||
20de7e7e JH |
50 | * Command line completion (in contrib/) usually omits redundant, |
51 | deprecated and/or dangerous options from its output; it learned to | |
52 | optionally include all of them. | |
53 | ||
e1971363 JH |
54 | * The output from the "diff" family of the commands had abbreviated |
55 | object names of blobs involved in the patch, but its length was not | |
56 | affected by the --abbrev option. Now it is. | |
57 | ||
54e85e7a JH |
58 | * "git worktree" gained a "repair" subcommand to help users recover |
59 | after moving the worktrees or repository manually without telling | |
60 | Git. Also, "git init --separate-git-dir" no longer corrupts | |
61 | administrative data related to linked worktrees. | |
62 | ||
63 | * The "--format=" option to the "for-each-ref" command and friends | |
64 | learned a few more tricks, e.g. the ":short" suffix that applies to | |
65 | "objectname" now also can be used for "parent", "tree", etc. | |
66 | ||
385c171a JH |
67 | * "git worktree add" learns that the "-d" is a synonym to "--detach" |
68 | option to create a new worktree without being on a branch. | |
69 | ||
79bcaf00 JH |
70 | |
71 | Performance, Internal Implementation, Development Support etc. | |
72 | ||
73 | * The changed-path Bloom filter is improved using ideas from an | |
74 | independent implementation. | |
75 | ||
76 | * Updates to the changed-paths bloom filter. | |
77 | ||
78 | * The test framework has been updated so that most tests will run | |
79 | with predictable (artificial) timestamps. | |
80 | ||
81 | * Preliminary clean-up of the refs API in preparation for adding a | |
82 | new refs backend "reftable". | |
83 | ||
84 | * Dev support to limit the use of test_must_fail to only git commands. | |
85 | ||
dc04167d JH |
86 | * While packing many objects in a repository with a promissor remote, |
87 | lazily fetching missing objects from the promissor remote one by | |
88 | one may be inefficient---the code now attempts to fetch all the | |
89 | missing objects in batch (obviously this won't work for a lazy | |
90 | clone that lazily fetches tree objects as you cannot even enumerate | |
91 | what blobs are missing until you learn which trees are missing). | |
92 | ||
93 | * The pretend-object mechanism checks if the given object already | |
94 | exists in the object store before deciding to keep the data | |
95 | in-core, but the check would have triggered lazy fetching of such | |
96 | an object from a promissor remote. | |
97 | ||
4f0a8be7 JH |
98 | * The argv_array API is useful for not just managing argv but any |
99 | "vector" (NULL-terminated array) of strings, and has seen adoption | |
100 | to a certain degree. It has been renamed to "strvec" to reduce the | |
101 | barrier to adoption. | |
102 | ||
675a4aaf JH |
103 | * The final leg of SHA-256 transition plus doc updates. Note that |
104 | there is no inter-operability between SHA-1 and SHA-256 | |
105 | repositories yet. | |
7814e8a0 JH |
106 | |
107 | * CMake support to build with MSVC for Windows bypassing the Makefile. | |
108 | ||
878e7276 JH |
109 | * A new helper function has_object() has been introduced to make it |
110 | easier to mark object existence checks that do and don't want to | |
111 | trigger lazy fetches, and a few such checks are converted using it. | |
112 | ||
2befe972 JH |
113 | * A no-op replacement function implemented as a C preprocessor macro |
114 | does not perform as good a job as one implemented as a "static | |
115 | inline" function in catching errors in parameters; replace the | |
116 | former with the latter in <git-compat-util.h> header. | |
117 | ||
118 | * Test framework update. | |
119 | (merge d572f52a64 es/test-cmp-typocatcher later to maint). | |
120 | ||
675a4aaf JH |
121 | * Updates to "git merge" tests, in preparation for a new merge |
122 | strategy backend. | |
123 | ||
124 | * midx and commit-graph files now use the byte defined in their file | |
125 | format specification for identifying the hash function used for | |
126 | object names. | |
127 | ||
20de7e7e JH |
128 | * The FETCH_HEAD is now always read from the filesystem regardless of |
129 | the ref backend in use, as its format is much richer than the | |
130 | normal refs, and written directly by "git fetch" as a plain file.. | |
131 | ||
e1971363 JH |
132 | * A handful of places in in-tree code still relied on being able to |
133 | execute the git subcommands, especially built-ins, in "git-foo" | |
134 | form, which have been corrected. | |
135 | ||
3a238e53 JH |
136 | * An unused binary has been discarded, and and a bunch of commands |
137 | have been turned into into built-in. | |
138 | ||
139 | * A handful of places in in-tree code still relied on being able to | |
140 | execute the git subcommands, especially built-ins, in "git-foo" | |
141 | form, which have been corrected. | |
142 | ||
54e85e7a JH |
143 | * When a packfile is removed by "git repack", multi-pack-index gets |
144 | cleared; the code was taught to do so less aggressively by first | |
145 | checking if the midx actually refers to a pack that no longer | |
146 | exists. | |
147 | ||
148 | * Internal API clean-up to handle two options "diff-index" and "log" | |
149 | have, which happen to share the same short form, more sensibly. | |
150 | ||
385c171a JH |
151 | * The "add -i/-p" machinery has been written in C but it is not used |
152 | by default yet. It is made default to those who are participating | |
153 | in feature.experimental experiment. | |
154 | ||
155 | * Allow maintainers to tweak $(TAR) invocations done while making | |
156 | distribution tarballs. | |
157 | ||
79bcaf00 JH |
158 | |
159 | Fixes since v2.28 | |
160 | ----------------- | |
161 | ||
162 | * "git clone --separate-git-dir=$elsewhere" used to stomp on the | |
163 | contents of the existing directory $elsewhere, which has been | |
164 | taught to fail when $elsewhere is not an empty directory. | |
165 | (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint). | |
166 | ||
79bcaf00 JH |
167 | * With the base fix to 2.27 regresion, any new extensions in a v0 |
168 | repository would still be silently honored, which is not quite | |
169 | right. Instead, complain and die loudly. | |
170 | (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint). | |
171 | ||
172 | * Fetching from a lazily cloned repository resulted at the server | |
173 | side in attempts to lazy fetch objects that the client side has, | |
174 | many of which will not be available from the third-party anyway. | |
175 | (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint). | |
176 | ||
177 | * Fix to an ancient bug caused by an over-eager attempt for | |
178 | optimization. | |
179 | (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint). | |
180 | ||
181 | * Pushing a ref whose name contains non-ASCII character with the | |
182 | "--force-with-lease" option did not work over smart HTTP protocol, | |
183 | which has been corrected. | |
184 | (merge cd85b447bf bc/push-cas-cquoted-refname later to maint). | |
185 | ||
186 | * "git mv src dst", when src is an unmerged path, errored out | |
187 | correctly but with an incorrect error message to claim that src is | |
188 | not tracked, which has been clarified. | |
189 | (merge 9b906af657 ct/mv-unmerged-path-error later to maint). | |
190 | ||
191 | * Fix to a regression introduced during 2.27 cycle. | |
192 | (merge cada7308ad en/fill-directory-exponential later to maint). | |
193 | ||
dc04167d JH |
194 | * Command line completion (in contrib/) update. |
195 | (merge 688b87c81b mp/complete-show-color-moved later to maint). | |
196 | ||
4f0a8be7 JH |
197 | * All "mergy" operations that internally use the merge-recursive |
198 | machinery should honor the merge.renormalize configuration, but | |
199 | many of them didn't. | |
200 | ||
7814e8a0 JH |
201 | * Doc cleanup around "worktree". |
202 | (merge dc9c144be5 es/worktree-doc-cleanups later to maint). | |
203 | ||
878e7276 JH |
204 | * The "git blame --first-parent" option was not documented, but now |
205 | it is. | |
206 | (merge 11bc12ae1e rp/blame-first-parent-doc later to maint). | |
207 | ||
2befe972 JH |
208 | * The logic to find the ref transaction hook script attempted to |
209 | cache the path to the found hook without realizing that it needed | |
210 | to keep a copied value, as the API it used returned a transitory | |
211 | buffer space. This has been corrected. | |
212 | (merge 09b2aa30c9 ps/ref-transaction-hook later to maint). | |
213 | ||
214 | * Recent versions of "git diff-files" shows a diff between the index | |
215 | and the working tree for "intent-to-add" paths as a "new file" | |
216 | patch; "git apply --cached" should be able to take "git diff-files" | |
217 | and should act as an equivalent to "git add" for the path, but the | |
218 | command failed to do so for such a path. | |
219 | (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint). | |
220 | ||
675a4aaf JH |
221 | * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a |
222 | bit was not showing the mode bits from the working tree. | |
223 | (merge cb0dd22b82 rp/ita-diff-modefix later to maint). | |
224 | ||
225 | * Ring buffer with size 4 used for bin-hex translation resulted in a | |
226 | wrong object name in the sequencer's todo output, which has been | |
227 | corrected. | |
228 | (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint). | |
229 | ||
230 | * When given more than one target line ranges, "git blame -La,b | |
231 | -Lc,d" was over-eager to coalesce groups of original lines and | |
232 | showed incorrect results, which has been corrected. | |
233 | (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint). | |
234 | ||
235 | * The regexp to identify the function boundary for FORTRAN programs | |
236 | has been updated. | |
237 | (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint). | |
238 | ||
239 | * A few end-user facing messages have been updated to be | |
240 | hash-algorithm agnostic. | |
241 | (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint). | |
242 | ||
243 | * "unlink" emulation on MinGW has been optimized. | |
244 | (merge 680e0b4524 jh/mingw-unlink later to maint). | |
245 | ||
e9b77c84 JH |
246 | * The purpose of "git init --separate-git-dir" is to initialize a |
247 | new project with the repository separate from the working tree, | |
248 | or, in the case of an existing project, to move the repository | |
249 | (the .git/ directory) out of the working tree. It does not make | |
250 | sense to use --separate-git-dir with a bare repository for which | |
251 | there is no working tree, so disallow its use with bare | |
252 | repositories. | |
253 | (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint). | |
254 | ||
255 | * "ls-files -o" mishandled the top-level directory of another git | |
256 | working tree that hangs in the current git working tree. | |
257 | (merge ab282aa548 en/dir-nonbare-embedded later to maint). | |
258 | ||
259 | * Fix some incorrect UNLEAK() annotations. | |
260 | (merge 3e19816dc0 jk/unleak-fixes later to maint). | |
261 | ||
262 | * Use more buffered I/O where we used to call many small write(2)s. | |
263 | (merge a698d67b08 rs/more-buffered-io later to maint). | |
264 | ||
265 | * The patch-id computation did not ignore the "incomplete last line" | |
266 | marker like whitespaces. | |
267 | (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint). | |
268 | ||
e1971363 JH |
269 | * Updates into a lazy/partial clone with a submodule did not work |
270 | well with transfer.fsckobjects set. | |
271 | ||
272 | * The parser for "git for-each-ref --format=..." was too loose when | |
273 | parsing the "%(trailers...)" atom, and forgot that "trailers" and | |
274 | "trailers:<modifiers>" are the only two allowed forms, which has | |
275 | been corrected. | |
276 | (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint). | |
277 | ||
278 | * Long ago, we decided to use 3 threads by default when running the | |
279 | index-pack task in parallel, which has been adjusted a bit upwards. | |
280 | (merge fbff95b67f jk/index-pack-w-more-threads later to maint). | |
281 | ||
282 | * "git restore/checkout --no-overlay" with wildcarded pathspec | |
283 | mistakenly removed matching paths in subdirectories, which has been | |
284 | corrected. | |
285 | (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint). | |
286 | ||
287 | * The description of --cached/--index options in "git apply --help" | |
288 | has been updated. | |
289 | (merge d064702be3 rp/apply-cached-doc later to maint). | |
290 | ||
291 | * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and | |
292 | running "git log --ignore-missing $ZERO_OID" fell back to start | |
293 | digging from HEAD; it has been corrected to become a no-op, like | |
294 | "git log --tags=no-tag-matches-this-pattern" does. | |
295 | (merge 04a0e98515 jk/rev-input-given-fix later to maint). | |
296 | ||
297 | * Various callers of run_command API has been modernized. | |
298 | (merge afbdba391e jc/run-command-use-embedded-args later to maint). | |
299 | ||
3a238e53 JH |
300 | * List of options offered and accepted by "git add -i/-p" were |
301 | inconsistent, which have been corrected. | |
302 | (merge ce910287e7 pw/add-p-allowed-options-fix later to maint). | |
303 | ||
304 | * Various callers of run_command API has been modernized. | |
305 | (merge afbdba391e jc/run-command-use-embedded-args later to maint). | |
306 | ||
307 | * "git diff --stat -w" showed 0-line changes for paths whose changes | |
308 | were only whitespaces, which was not intuitive. We now omit such | |
309 | paths from the stat output. | |
310 | (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint). | |
311 | ||
312 | * It was possible for xrealloc() to send a non-NULL pointer that has | |
313 | been freed, which has been fixed. | |
314 | (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint). | |
315 | ||
54e85e7a | 316 | * "git status" has trouble showing where it came from by interpreting |
385c171a | 317 | reflog entries that record certain events, e.g. "checkout @{u}", and |
54e85e7a JH |
318 | gives a hard/fatal error. Even though it inherently is impossible |
319 | to give a correct answer because the reflog entries lose some | |
320 | information (e.g. "@{u}" does not record what branch the user was | |
321 | on hence which branch 'the upstream' needs to be computed, and even | |
322 | if the record were available, the relationship between branches may | |
323 | have changed), at least hide the error to allow "status" show its | |
324 | output. | |
325 | ||
385c171a JH |
326 | * "git status --short" quoted a path with SP in it when tracked, but |
327 | not those that are untracked, ignored or unmerged. They are all | |
328 | shown quoted consistently. | |
329 | ||
330 | * "git diff/show" on a change that involves a submodule used to read | |
331 | the information on commits in the submodule from a wrong repository | |
332 | and gave a wrong information when the commit-graph is involved. | |
333 | (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint). | |
334 | ||
335 | * Unlike "git config --local", "git config --worktree" did not fail | |
336 | early and cleanly when started outside a git repository. | |
337 | (merge 378fe5fc3d mt/config-fail-nongit-early later to maint). | |
338 | ||
79bcaf00 | 339 | * Other code cleanup, docfix, build fix, etc. |
e8ab941b JH |
340 | (merge 84544f2ea3 sk/typofixes later to maint). |
341 | (merge b17f411ab5 ar/help-guides-doc later to maint). | |
342 | (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint). | |
343 | (merge 861c4ce141 en/typofixes later to maint). | |
344 | (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint). | |
345 | (merge e2bfa50ac3 jb/doc-packfile-name later to maint). | |
4f0a8be7 JH |
346 | (merge 918d8ff780 es/worktree-cleanup later to maint). |
347 | (merge dc156bc31f ma/t1450-quotefix later to maint). | |
348 | (merge 56e743426b en/merge-recursive-comment-fixes later to maint). | |
349 | (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint). | |
350 | (merge de20baf2c9 ny/notes-doc-sample-update later to maint). | |
351 | (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint). | |
878e7276 | 352 | (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint). |
2befe972 | 353 | (merge ac900fddb7 ma/stop-progress-null-fix later to maint). |
675a4aaf JH |
354 | (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint). |
355 | (merge a831908599 rs/preserve-merges-unused-code-removal later to maint). | |
356 | (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint). | |
357 | (merge 847b37271e pb/set-url-docfix later to maint). | |
e9b77c84 JH |
358 | (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint). |
359 | (merge ce820cbd58 dl/subtree-docs later to maint). | |
20de7e7e | 360 | (merge 55fe225dde jk/leakfix later to maint). |
3a238e53 JH |
361 | (merge ee22a29215 so/pretty-abbrev-doc later to maint). |
362 | (merge 3100fd5588 jc/post-checkout-doc later to maint). | |
363 | (merge 17bae89476 pb/doc-external-diff-env later to maint). | |
54e85e7a | 364 | (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint). |
385c171a JH |
365 | (merge 1302badd16 ea/blame-use-oideq later to maint). |
366 | (merge e6d5a11fed al/t3200-back-on-a-branch later to maint). | |
367 | (merge 324efcf6b6 pw/add-p-leakfix later to maint). | |
368 | (merge 1c6ffb546b jk/add-i-fixes later to maint). |