Merge branch 'ds/sparse-add'
[git] / Documentation / RelNotes / 2.26.0.txt
1 Git 2.26 Release Notes
2 ======================
3
4 Updates since v2.25
5 -------------------
6
7 UI, Workflows & Features
8
9  * Sample credential helper for using .netrc has been updated to work
10    out of the box.
11
12  * gpg.minTrustLevel configuration variable has been introduced to
13    tell various signature verification codepaths the required minimum
14    trust level.
15
16  * The command line completion (in contrib/) learned to complete
17    subcommands and arguments to "git worktree".
18
19  * Disambiguation logic to tell revisions and pathspec apart has been
20    tweaked so that backslash-escaped glob special characters do not
21    count in the "wildcards are pathspec" rule.
22
23  * One effect of specifying where the GIT_DIR is (either with the
24    environment variable, or with the "git --git-dir=<where> cmd"
25    option) is to disable the repository discovery.  This has been
26    placed a bit more stress in the documentation, as new users often
27    get confused.
28
29  * Two help messages given when "git add" notices the user gave it
30    nothing to add have been updated to use advise() API.
31
32  * A new version of fsmonitor-watchman hook has been introduced, to
33    avoid races.
34
35  * "git config" learned to show in which "scope", in addition to in
36    which file, each config setting comes from.
37
38  * The basic 7 colors learned the brighter counterparts
39    (e.g. "brightred").
40
41  * "git sparse-checkout" learned a new "add" subcommand.
42
43  * A configuration element used for credential subsystem can now use
44    wildcard pattern to specify for which set of URLs the entry
45    applies.
46
47  * "git clone --recurse-submodules --single-branch" now uses the same
48    single-branch option when cloning the submodules.
49
50  * "git rm" and "git stash" learns the new "--pathspec-from-file"
51    option.
52
53  * "git am --short-current-patch" is a way to show the piece of e-mail
54    for the stopped step, which is not suitable to directly feed "git
55    apply" (it is designed to be a good "git am" input).  It learned a
56    new option to show only the patch part.
57
58  * Handling of conflicting renames in merge-recursive have further
59    been made consistent with how existing codepaths try to mimic what
60    is done to add/add conflicts.
61
62
63 Performance, Internal Implementation, Development Support etc.
64
65  * Tell .editorconfig that in this project, *.txt files are indented
66    with tabs.
67
68  * The test-lint machinery knew to check "VAR=VAL shell_function"
69    construct, but did not check "VAR= shell_funciton", which has been
70    corrected.
71
72  * Replace "git config --bool" calls with "git config --type=bool" in
73    sample templates.
74
75  * The effort to move "git-add--interactive" to C continues.
76
77  * Improve error message generation for "git submodule add".
78
79  * Preparation of test scripts for the day when the object names will
80    use SHA-256 continues.
81
82  * Warn programmers about pretend_object_file() that allows the code
83    to tentatively use in-core objects.
84
85  * The way "git pack-objects" reuses objects stored in existing pack
86    to generate its result has been improved.
87
88  * The transport protocol version 2 becomes the default one.
89
90  * Traditionally, we avoided threaded grep while searching in objects
91    (as opposed to files in the working tree) as accesses to the object
92    layer is not thread-safe.  This limitation is getting lifted.
93
94  * "git rebase -i" (and friends) used to unnecessarily check out the
95    tip of the branch to be rebased, which has been corrected.
96
97  * A low-level API function get_oid(), that accepts various ways to
98    name an object, used to issue end-user facing error messages
99    without l10n, which has been updated to be translatable.
100
101  * Unneeded connectivity check is now disabled in a partial clone when
102    fetching into it.
103
104  * Some rough edges in the sparse-checkout feature, especially around
105    the cone mode, have been cleaned up.
106
107  * The diff-* plumbing family of subcommands now pay attention to the
108    diff.wsErrorHighlight configuration, which has been ignored before;
109    this allows "git add -p" to also show the whitespace problems to
110    the end user.
111
112  * Some codepaths were given a repository instance as a parameter to
113    work in the repository, but passed the_repository instance to its
114    callees, which has been cleaned up (somewhat).
115
116  * Memory footprint and performance of "git name-rev" has been
117    improved.
118
119  * The object reachability bitmap machinery and the partial cloning
120    machinery were not prepared to work well together, because some
121    object-filtering criteria that partial clones use inherently rely
122    on object traversal, but the bitmap machinery is an optimization
123    to bypass that object traversal.  There however are some cases
124    where they can work together, and they were taught about them.
125
126  * "git rebase" has learned to use the merge backend (i.e. the
127    machinery that drives "rebase -i") by default, while allowing
128    "--apply" option to use the "apply" backend (e.g. the moral
129    equivalent of "format-patch piped to am").  The rebase.backend
130    configuration variable can be set to customize.
131
132  * Underlying machinery of "git bisect--helper" is being refactored
133    into pieces that are more easily reused.
134
135
136 Fixes since v2.25
137 -----------------
138
139  * "git commit" gives output similar to "git status" when there is
140    nothing to commit, but without honoring the advise.statusHints
141    configuration variable, which has been corrected.
142
143  * has_object_file() said "no" given an object registered to the
144    system via pretend_object_file(), making it inconsistent with
145    read_object_file(), causing lazy fetch to attempt fetching an
146    empty tree from promisor remotes.
147
148  * Complete an update to tutorial that encourages "git switch" over
149    "git checkout" that was done only half-way.
150
151  * C pedantry ;-) fix.
152
153  * The code that tries to skip over the entries for the paths in a
154    single directory using the cache-tree was not careful enough
155    against corrupt index file.
156
157  * Reduce unnecessary round-trip when running "ls-remote" over the
158    stateless RPC mechanism.
159
160  * "git restore --staged" did not correctly update the cache-tree
161    structure, resulting in bogus trees to be written afterwards, which
162    has been corrected.
163
164  * The code recently added to move to the entry beyond the ones in the
165    same directory in the index in the sparse-cone mode did not count
166    the number of entries to skip over incorrectly, which has been
167    corrected.
168
169  * Rendering by "git log --graph" of ancestry lines leading to a merge
170    commit were made suboptimal to waste vertical space a bit with a
171    recent update, which has been corrected.
172
173  * Work around test breakages caused by custom regex engine used in
174    libasan, when address sanitizer is used with more recent versions
175    of gcc and clang.
176
177  * Minor bugfixes to "git add -i" that has recently been rewritten in C.
178    (merge 849e43cc18 js/builtin-add-i-cmds later to maint).
179
180  * "git fetch --refmap=" option has got a better documentation.
181
182  * "git checkout X" did not correctly fail when X is not a local
183    branch but could name more than one remote-tracking branches
184    (i.e. to be dwimmed as the starting point to create a corresponding
185    local branch), which has been corrected.
186    (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint).
187
188  * Corner case bugs in "git clean" that stems from a (necessarily for
189    performance reasons) awkward calling convention in the directory
190    enumeration API has been corrected.
191
192  * A fetch that is told to recursively fetch updates in submodules
193    inevitably produces reams of output, and it becomes hard to spot
194    error messages.  The command has been taught to enumerate
195    submodules that had errors at the end of the operation.
196    (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint).
197
198  * The "--recurse-submodules" option of various subcommands did not
199    work well when run in an alternate worktree, which has been
200    corrected.
201    (merge a9472afb63 pb/recurse-submodule-in-worktree-fix later to maint).
202
203  * Futureproofing a test not to depend on the current implementation
204    detail.
205
206  * Running "git rm" on a submodule failed unnecessarily when
207    .gitmodules is only cache-dirty, which has been corrected.
208    (merge 7edee32985 dt/submodule-rm-with-stale-cache later to maint).
209
210  * C pedantry ;-) fix.
211    (merge cf82bff73f jk/clang-sanitizer-fixes later to maint).
212
213  * "git grep --no-index" should not get affected by the contents of
214    the .gitmodules file but when "--recurse-submodules" is given or
215    the "submodule.recurse" variable is set, it did.  Now these
216    settings are ignored in the "--no-index" mode.
217
218  * Technical details of the bundle format has been documented.
219
220  * Unhelpful warning messages during documentation build have been squelched.
221
222  * "git rebase -i" identifies existing commits in its todo file with
223    their abbreviated object name, which could become ambigous as it
224    goes to create new commits, and has a mechanism to avoid ambiguity
225    in the main part of its execution.  A few other cases however were
226    not covered by the protection against ambiguity, which has been
227    corrected.
228    (merge 26027625dd js/rebase-i-with-colliding-hash later to maint).
229
230  * Allow the rebase.missingCommitsCheck configuration to kick in when
231    "rebase --edit-todo" and "rebase --continue" restarts the procedure.
232    (merge 5a5445d878 ag/edit-todo-drop-check later to maint).
233
234  * The way "git submodule status" reports an initialized but not yet
235    populated submodule has not been reimplemented correctly when a
236    part of the "git submodule" command was rewritten in C, which has
237    been corrected.
238    (merge f38c92452d pk/status-of-uncloned-submodule later to maint).
239
240  * The code to automatically shrink the fan-out in the notes tree had
241    an off-by-one bug, which has been killed.
242    (merge dbc27477ff jh/notes-fanout-fix later to maint).
243
244  * The index-pack code now diagnoses a bad input packstream that
245    records the same object twice when it is used as delta base; the
246    code used to declare a software bug when encountering such an
247    input, but it is an input error.
248    (merge a21781011f jk/index-pack-dupfix later to maint).
249
250  * The code to compute the commit-graph has been taught to use a more
251    robust way to tell if two object directories refer to the same
252    thing.
253    (merge a7df60cac8 tb/commit-graph-object-dir later to maint).
254
255  * "git remote rename X Y" needs to adjust configuration variables
256    (e.g. branch.<name>.remote) whose value used to be X to Y.
257    branch.<name>.pushRemote is now also updated.
258
259  * Update to doc-diff.
260    (merge 2607d39da3 jk/doc-diff-parallel later to maint).
261
262  * Doc markup fix.
263    (merge 0aa6ce3094 jk/push-option-doc-markup-fix later to maint).
264
265  * "git check-ignore" did not work when the given path is explicitly
266    marked as not ignored with a negative entry in the .gitignore file.
267    (merge 7ec8125fba en/check-ignore later to maint).
268
269  * The merge-recursive machinery failed to refresh the cache entry for
270    a merge result in a couple of places, resulting in an unnecessary
271    merge failure, which has been fixed.
272    (merge fb1c18fc46 en/t3433-rebase-stat-dirty-failure later to maint).
273
274  * Fix for a bug revealed by a recent change to make the protocol v2
275    the default.
276    (merge 3e96c66805 ds/partial-clone-fixes later to maint).
277
278  * In rare cases "git worktree add <path>" could think that <path>
279    was already a registered worktree even when it wasn't and refuse
280    to add the new worktree. This has been corrected.
281    (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint).
282
283  * "git push" should stop from updating a branch that is checked out
284    when receive.denyCurrentBranch configuration is set, but it failed
285    to pay attention to checkouts in secondary worktrees.  This has
286    been corrected.
287    (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint).
288
289  * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and
290    checked it out, even when the BRANCH is checked out in a different
291    worktree.  This has been corrected.
292    (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint).
293
294  * "git describe" in a repository with multiple root commits sometimes
295    gave up looking for the best tag to describe a given commit with
296    too early, which has been adjusted.
297
298  * "git merge signed-tag" while lacking the public key started to say
299    "No signature", which was utterly wrong.  This regression has been
300    reverted.
301    (merge 0106b1d4be hi/gpg-use-check-signature later to maint).
302
303  * MinGW's poll() emulation has been improved.
304    (merge 94f4d01932 am/mingw-poll-fix later to maint).
305
306  * "git show" and others gave an object name in raw format in its
307    error output, which has been corrected to give it in hex.
308    (merge 237a28173f hd/show-one-mergetag-fix later to maint).
309
310  * "git fetch" over HTTP walker protocol did not show any progress
311    output.  We inherently do not know how much work remains, but still
312    we can show something not to bore users.
313    (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint).
314
315  * Other code cleanup, docfix, build fix, etc.
316    (merge 26f924d50e en/simplify-check-updates-in-unpack-trees later to maint).
317    (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint).
318    (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint).
319    (merge c513a958b6 ss/t6025-modernize later to maint).
320    (merge b441717256 dl/test-must-fail-fixes later to maint).
321    (merge d031049da3 mt/sparse-checkout-doc-update later to maint).
322    (merge 145136a95a jc/skip-prefix later to maint).
323    (merge 5290d45134 jk/alloc-cleanups later to maint).
324    (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint).
325    (merge 517b60564e rs/strbuf-insertstr later to maint).
326    (merge f696a2b1c8 jk/mailinfo-cleanup later to maint).
327    (merge 076ee3e8a2 js/test-write-junit-xml-fix later to maint).
328    (merge de26f02db1 js/test-avoid-pipe later to maint).
329    (merge bfe2bbb47f js/test-unc-fetch later to maint).
330    (merge 08809c09aa js/mingw-open-in-gdb later to maint).
331    (merge cc4f2eb828 jk/doc-credential-helper later to maint).
332    (merge e0020b2f82 es/outside-repo-errmsg-hints later to maint).
333    (merge a2dc43414c es/doc-mentoring later to maint).
334    (merge 539052f42f jk/run-command-formatfix later to maint).
335    (merge 02bbbe9df9 es/worktree-cleanup later to maint).
336    (merge 2ce6d075fa rs/micro-cleanups later to maint).
337    (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint).
338    (merge 3c29e21eb0 ma/test-cleanup later to maint).
339    (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint).
340    (merge 7f487ce062 js/ci-windows-update later to maint).
341    (merge d68ce906c7 rs/commit-graph-code-simplification later to maint).
342    (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint).
343    (merge fd0bc17557 kk/complete-diff-color-moved later to maint).
344    (merge 65bf820d0e en/test-cleanup later to maint).