rebase: start implementing it as a builtin
[git] / Documentation / RelNotes / 2.19.0.txt
1 Git 2.19 Release Notes
2 ======================
3
4 Updates since v2.18
5 -------------------
6
7 UI, Workflows & Features
8
9  * "git diff" compares the index and the working tree.  For paths
10    added with intent-to-add bit, the command shows the full contents
11    of them as added, but the paths themselves were not marked as new
12    files.  They are now shown as new by default.
13
14    "git apply" learned the "--intent-to-add" option so that an
15    otherwise working-tree-only application of a patch will add new
16    paths to the index marked with the "intent-to-add" bit.
17
18  * "git grep" learned the "--column" option that gives not just the
19    line number but the column number of the hit.
20
21  * The "-l" option in "git branch -l" is an unfortunate short-hand for
22    "--create-reflog", but many users, both old and new, somehow expect
23    it to be something else, perhaps "--list".  This step warns when "-l"
24    is used as a short-hand for "--create-reflog" and warns about the
25    future repurposing of the it when it is used.
26
27  * The userdiff pattern for .php has been updated.
28
29  * The content-transfer-encoding of the message "git send-email" sends
30    out by default was 8bit, which can cause trouble when there is an
31    overlong line to bust RFC 5322/2822 limit.  A new option 'auto' to
32    automatically switch to quoted-printable when there is such a line
33    in the payload has been introduced and is made the default.
34
35  * "git checkout" and "git worktree add" learned to honor
36    checkout.defaultRemote when auto-vivifying a local branch out of a
37    remote tracking branch in a repository with multiple remotes that
38    have tracking branches that share the same names.
39    (merge 8d7b558bae ab/checkout-default-remote later to maint).
40
41  * "git grep" learned the "--only-matching" option.
42
43  * "git rebase --rebase-merges" mode now handles octopus merges as
44    well.
45
46  * Add a server-side knob to skip commits in exponential/fibbonacci
47    stride in an attempt to cover wider swath of history with a smaller
48    number of iterations, potentially accepting a larger packfile
49    transfer, instead of going back one commit a time during common
50    ancestor discovery during the "git fetch" transaction.
51    (merge 42cc7485a2 jt/fetch-negotiator-skipping later to maint).
52
53
54 Performance, Internal Implementation, Development Support etc.
55
56  * The bulk of "git submodule foreach" has been rewritten in C.
57
58  * The in-core "commit" object had an all-purpose "void *util" field,
59    which was tricky to use especially in library-ish part of the
60    code.  All of the existing uses of the field has been migrated to a
61    more dedicated "commit-slab" mechanism and the field is eliminated.
62
63  * A less often used command "git show-index" has been modernized.
64    (merge fb3010c31f jk/show-index later to maint).
65
66  * The conversion to pass "the_repository" and then "a_repository"
67    throughout the object access API continues.
68
69  * Continuing with the idea to programatically enumerate various
70    pieces of data required for command line completion, teach the
71    codebase to report the list of configuration variables
72    subcommands care about to help complete them.
73
74  * Separate "rebase -p" codepath out of "rebase -i" implementation to
75    slim down the latter and make it easier to manage.
76
77  * Make refspec parsing codepath more robust.
78
79  * Some flaky tests have been fixed.
80
81  * Continuing with the idea to programmatically enumerate various
82    pieces of data required for command line completion, the codebase
83    has been taught to enumerate options prefixed with "--no-" to
84    negate them.
85
86  * Build and test procedure for netrc credential helper (in contrib/)
87    has been updated.
88
89  * The conversion to pass "the_repository" and then "a_repository"
90    throughout the object access API continues.
91
92  * Remove unused function definitions and declarations from ewah
93    bitmap subsystem.
94
95  * Code preparation to make "git p4" closer to be usable with Python 3.
96
97  * Tighten the API to make it harder to misuse in-tree .gitmodules
98    file, even though it shares the same syntax with configuration
99    files, to read random configuration items from it.
100
101  * "git fast-import" has been updated to avoid attempting to create
102    delta against a zero-byte-long string, which is pointless.
103
104  * The codebase has been updated to compile cleanly with -pedantic
105    option.
106    (merge 2b647a05d7 bb/pedantic later to maint).
107
108  * The character display width table has been updated to match the
109    latest Unicode standard.
110    (merge 570951eea2 bb/unicode-11-width later to maint).
111
112  * test-lint now looks for broken use of "VAR=VAL shell_func" in test
113    scripts.
114
115  * Conversion from uchar[40] to struct object_id continues.
116
117  * Recent "security fix" to pay attention to contents of ".gitmodules"
118    while accepting "git push" was a bit overly strict than necessary,
119    which has been adjusted.
120
121  * "git fsck" learns to make sure the optional commit-graph file is in
122    a sane state.
123
124  * "git diff --color-moved" feature has further been tweaked.
125
126  * Code restructuring and a small fix to transport protocol v2 during
127    fetching.
128
129  * Parsing of -L[<N>][,[<M>]] parameters "git blame" and "git log"
130    take has been tweaked.
131
132  * lookup_commit_reference() and friends have been updated to find
133    in-core object for a specific in-core repository instance.
134
135  * Various glitches in the heuristics of merge-recursive strategy have
136    been documented in new tests.
137
138  * "git fetch" learned a new option "--negotiation-tip" to limit the
139    set of commits it tells the other end as "have", to reduce wasted
140    bandwidth and cycles, which would be helpful when the receiving
141    repository has a lot of refs that have little to do with the
142    history at the remote it is fetching from.
143
144  * For a large tree, the index needs to hold many cache entries
145    allocated on heap.  These cache entries are now allocated out of a
146    dedicated memory pool to amortize malloc(3) overhead.
147
148  * Tests to cover various conflicting cases have been added for
149    merge-recursive.
150
151  * Tests to cover conflict cases that involve submodules have been
152    added for merge-recursive.
153
154  * Look for broken "&&" chains that are hidden in subshell, many of
155    which have been found and corrected.
156
157  * The singleton commit-graph in-core instance is made per in-core
158    repository instance.
159
160
161 Fixes since v2.18
162 -----------------
163
164  * "git remote update" can take both a single remote nickname and a
165    nickname for remote groups, and the completion script (in contrib/)
166    has been taught about it.
167    (merge 9cd4382ad5 ls/complete-remote-update-names later to maint).
168
169  * "git fetch --shallow-since=<cutoff>" that specifies the cut-off
170    point that is newer than the existing history used to end up
171    grabbing the entire history.  Such a request now errors out.
172    (merge e34de73c56 nd/reject-empty-shallow-request later to maint).
173
174  * Fix for 2.17-era regression around `core.safecrlf`.
175    (merge 6cb09125be as/safecrlf-quiet-fix later to maint).
176
177  * The recent addition of "partial clone" experimental feature kicked
178    in when it shouldn't, namely, when there is no partial-clone filter
179    defined even if extensions.partialclone is set.
180    (merge cac1137dc4 jh/partial-clone later to maint).
181
182  * "git send-pack --signed" (hence "git push --signed" over the http
183    transport) did not read user ident from the config mechanism to
184    determine whom to sign the push certificate as, which has been
185    corrected.
186    (merge d067d98887 ms/send-pack-honor-config later to maint).
187
188  * "git fetch-pack --all" used to unnecessarily fail upon seeing an
189    annotated tag that points at an object other than a commit.
190    (merge c12c9df527 jk/fetch-all-peeled-fix later to maint).
191
192  * When user edits the patch in "git add -p" and the user's editor is
193    set to strip trailing whitespaces indiscriminately, an empty line
194    that is unchanged in the patch would become completely empty
195    (instead of a line with a sole SP on it).  The code introduced in
196    Git 2.17 timeframe failed to parse such a patch, but now it learned
197    to notice the situation and cope with it.
198    (merge f4d35a6b49 pw/add-p-recount later to maint).
199
200  * The code to try seeing if a fetch is necessary in a submodule
201    during a fetch with --recurse-submodules got confused when the path
202    to the submodule was changed in the range of commits in the
203    superproject, sometimes showing "(null)".  This has been corrected.
204
205  * "git submodule" did not correctly adjust core.worktree setting that
206    indicates whether/where a submodule repository has its associated
207    working tree across various state transitions, which has been
208    corrected.
209    (merge 984cd77ddb sb/submodule-core-worktree later to maint).
210
211  * Bugfix for "rebase -i" corner case regression.
212    (merge a9279c6785 pw/rebase-i-keep-reword-after-conflict later to maint).
213
214  * Recently added "--base" option to "git format-patch" command did
215    not correctly generate prereq patch ids.
216    (merge 15b76c1fb3 xy/format-patch-prereq-patch-id-fix later to maint).
217
218  * POSIX portability fix in Makefile to fix a glitch introduced a few
219    releases ago.
220    (merge 6600054e9b dj/runtime-prefix later to maint).
221
222  * "git filter-branch" when used with the "--state-branch" option
223    still attempted to rewrite the commits whose filtered result is
224    known from the previous attempt (which is recorded on the state
225    branch); the command has been corrected not to waste cycles doing
226    so.
227    (merge 709cfe848a mb/filter-branch-optim later to maint).
228
229  * Clarify that setting core.ignoreCase to deviate from reality would
230    not turn a case-incapable filesystem into a case-capable one.
231    (merge 48294b512a ms/core-icase-doc later to maint).
232
233  * "fsck.skipList" did not prevent a blob object listed there from
234    being inspected for is contents (e.g. we recently started to
235    inspect the contents of ".gitmodules" for certain malicious
236    patterns), which has been corrected.
237    (merge fb16287719 rj/submodule-fsck-skip later to maint).
238
239  * "git checkout --recurse-submodules another-branch" did not report
240    in which submodule it failed to update the working tree, which
241    resulted in an unhelpful error message.
242    (merge ba95d4e4bd sb/submodule-move-head-error-msg later to maint).
243
244  * "git rebase" behaved slightly differently depending on which one of
245    the three backends gets used; this has been documented and an
246    effort to make them more uniform has begun.
247    (merge b00bf1c9a8 en/rebase-consistency later to maint).
248
249  * The "--ignore-case" option of "git for-each-ref" (and its friends)
250    did not work correctly, which has been fixed.
251    (merge e674eb2528 jk/for-each-ref-icase later to maint).
252
253  * "git fetch" failed to correctly validate the set of objects it
254    received when making a shallow history deeper, which has been
255    corrected.
256    (merge cf1e7c0770 jt/connectivity-check-after-unshallow later to maint).
257
258  * Partial clone support of "git clone" has been updated to correctly
259    validate the objects it receives from the other side.  The server
260    side has been corrected to send objects that are directly
261    requested, even if they may match the filtering criteria (e.g. when
262    doing a "lazy blob" partial clone).
263    (merge a7e67c11b8 jt/partial-clone-fsck-connectivity later to maint).
264
265  * Handling of an empty range by "git cherry-pick" was inconsistent
266    depending on how the range ended up to be empty, which has been
267    corrected.
268    (merge c5e358d073 jk/empty-pick-fix later to maint).
269
270  * "git reset --merge" (hence "git merge ---abort") and "git reset --hard"
271    had trouble working correctly in a sparsely checked out working
272    tree after a conflict, which has been corrected.
273    (merge b33fdfc34c mk/merge-in-sparse-checkout later to maint).
274
275  * Correct a broken use of "VAR=VAL shell_func" in a test.
276    (merge 650161a277 jc/t3404-one-shot-export-fix later to maint).
277
278  * "git rev-parse ':/substring'" did not consider the history leading
279    only to HEAD when looking for a commit with the given substring,
280    when the HEAD is detached.  This has been fixed.
281    (merge 6b3351e799 wc/find-commit-with-pattern-on-detached-head later to maint).
282
283  * Build doc update for Windows.
284    (merge ede8d89bb1 nd/command-list later to maint).
285
286  * core.commentchar is now honored when preparing the list of commits
287    to replay in "rebase -i".
288
289  * "git pull --rebase" on a corrupt HEAD caused a segfault.  In
290    general we substitute an empty tree object when running the in-core
291    equivalent of the diff-index command, and the codepath has been
292    corrected to do so as well to fix this issue.
293    (merge 3506dc9445 jk/has-uncommitted-changes-fix later to maint).
294
295  * httpd tests saw occasional breakage due to the way its access log
296    gets inspected by the tests, which has been updated to make them
297    less flaky.
298    (merge e8b3b2e275 sg/httpd-test-unflake later to maint).
299
300  * Tests to cover more D/F conflict cases have been added for
301    merge-recursive.
302
303  * "git gc --auto" opens file descriptors for the packfiles before
304    spawning "git repack/prune", which would upset Windows that does
305    not want a process to work on a file that is open by another
306    process.  The issue has been worked around.
307    (merge 12e73a3ce4 kg/gc-auto-windows-workaround later to maint).
308
309  * The recursive merge strategy did not properly ensure there was no
310    change between HEAD and the index before performing its operation,
311    which has been corrected.
312    (merge 55f39cf755 en/dirty-merge-fixes later to maint).
313
314  * "git rebase" started exporting GIT_DIR environment variable and
315    exposing it to hook scripts when part of it got rewritten in C.
316    Instead of matching the old scripted Porcelains' behaviour,
317    compensate by also exporting GIT_WORK_TREE environment as well to
318    lessen the damage.  This can harm existing hooks that want to
319    operate on different repository, but the current behaviour is
320    already broken for them anyway.
321    (merge ab5e67d751 bc/sequencer-export-work-tree-as-well later to maint).
322
323  * "git send-email" when using in a batched mode that limits the
324    number of messages sent in a single SMTP session lost the contents
325    of the variable used to choose between tls/ssl, unable to send the
326    second and later batches, which has been fixed.
327    (merge 636f3d7ac5 jm/send-email-tls-auth-on-batch later to maint).
328
329  * The lazy clone support had a few places where missing but promised
330    objects were not correctly tolerated, which have been fixed.
331
332  * Code cleanup, docfix, build fix, etc.
333    (merge aee9be2ebe sg/update-ref-stdin-cleanup later to maint).
334    (merge 037714252f jc/clean-after-sanity-tests later to maint).
335    (merge 5b26c3c941 en/merge-recursive-cleanup later to maint).
336    (merge 0dcbc0392e bw/config-refer-to-gitsubmodules-doc later to maint).
337    (merge bb4d000e87 bw/protocol-v2 later to maint).
338    (merge 928f0ab4ba vs/typofixes later to maint).
339    (merge d7f590be84 en/rebase-i-microfixes later to maint).
340    (merge 81d395cc85 js/rebase-recreate-merge later to maint).
341    (merge 51d1863168 tz/exclude-doc-smallfixes later to maint).
342    (merge a9aa3c0927 ds/commit-graph later to maint).
343    (merge 5cf8e06474 js/enhanced-version-info later to maint).
344    (merge 6aaded5509 tb/config-default later to maint).
345    (merge 022d2ac1f3 sb/blame-color later to maint).
346    (merge 5a06a20e0c bp/test-drop-caches-for-windows later to maint).