Second batch post 2.19
[git] / RelNotes
1 Git Release Notes
2 =================
3
4 Backward Compatibility Notes
5 ----------------------------
6
7  * "git branch -l <foo>" used to be a way to ask a reflog to be
8    created while creating a new branch, but that is no longer the
9    case.  It is a short-hand for "git branch --list <foo>" now.
10
11  * "git push" into refs/tags/* hierarchy is rejected without getting
12    forced, but "git fetch" (misguidedly) used the "fast forwarding"
13    rule used for the refs/heads/* hierarchy; this has been corrected,
14    which means some fetches of tags that did not fail with older
15    version of Git will fail without "--force" with this version.
16
17
18 Updates since v2.19
19 -------------------
20
21 UI, Workflows & Features
22
23  * Running "git clone" against a project that contain two files with
24    pathnames that differ only in cases on a case insensitive
25    filesystem would result in one of the files lost because the
26    underlying filesystem is incapable of holding both at the same
27    time.  An attempt is made to detect such a case and warn.
28
29  * "git checkout -b newbranch [HEAD]" should not have to do as much as
30    checking out a commit different from HEAD.  An attempt is made to
31    optimize this special case.
32
33  * "git rev-list --stdin </dev/null" used to be an error; it now shows
34    no output without an error.  "git rev-list --stdin --default HEAD"
35    still falls back to the given default when nothing is given on the
36    standard input.
37
38  * Lift code from GitHub to restrict delta computation so that an
39    object that exists in one fork is not made into a delta against
40    another object that does not appear in the same forked repository.
41
42  * "git format-patch" learned new "--interdiff" and "--range-diff"
43    options to explain the difference between this version and the
44    previous attempt in the cover letter (or after the tree-dashes as
45    a comment).
46
47  * "git mailinfo" used in "git am" learned to make a best-effort
48    recovery of a patch corrupted by MUA that sends text/plain with
49    format=flawed option.
50    (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint).
51
52  * The rules used by "git push" and "git fetch" to determine if a ref
53    can or cannot be updated were inconsistent; specifically, fetching
54    to update existing tags were allowed even though tags are supposed
55    to be unmoving anchoring points.  "git fetch" was taught to forbid
56    updates to existing tags without the "--force" option.
57
58
59 Performance, Internal Implementation, Development Support etc.
60
61  * When there are too many packfiles in a repository (which is not
62    recommended), looking up an object in these would require
63    consulting many pack .idx files; a new mechanism to have a single
64    file that consolidates all of these .idx files is introduced.
65
66  * "git submodule update" is getting rewritten piece-by-piece into C.
67
68  * The code for computing history reachability has been shuffled,
69    obtained a bunch of new tests to cover them, and then being
70    improved.
71
72  * The unpack_trees() API used in checking out a branch and merging
73    walks one or more trees along with the index.  When the cache-tree
74    in the index tells us that we are walking a tree whose flattened
75    contents is known (i.e. matches a span in the index), as linearly
76    scanning a span in the index is much more efficient than having to
77    open tree objects recursively and listing their entries, the walk
78    can be optimized, which has been done.
79
80  * When creating a thin pack, which allows objects to be made into a
81    delta against another object that is not in the resulting pack but
82    is known to be present on the receiving end, the code learned to
83    take advantage of the reachability bitmap; this allows the server
84    to send a delta against a base beyond the "boundary" commit.
85
86  * spatch transformation to replace boolean uses of !hashcmp() to
87    newly introduced oideq() is added, and applied, to regain
88    performance lost due to support of multiple hash algorithms.
89
90  * Fix a bug in which the same path could be registered under multiple
91    worktree entries if the path was missing (for instance, was removed
92    manually).  Also, as a convenience, expand the number of cases in
93    which --force is applicable.
94
95
96 Fixes since v2.19
97 -----------------
98
99  * "git interpret-trailers" and its underlying machinery had a buggy
100    code that attempted to ignore patch text after commit log message,
101    which triggered in various codepaths that will always get the log
102    message alone and never get such an input.
103    (merge 66e83d9b41 jk/trailer-fixes later to maint).
104
105  * Malformed or crafted data in packstream can make our code attempt
106    to read or write past the allocated buffer and abort, instead of
107    reporting an error, which has been fixed.
108
109  * "git rebase -i" did not clear the state files correctly when a run
110    of "squash/fixup" is aborted and then the user manually amended the
111    commit instead, which has been corrected.
112    (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint).
113
114  * When fsmonitor is in use, after operation on submodules updates
115    .gitmodules, we lost track of the fact that we did so and relied on
116    stale fsmonitor data.
117    (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint).
118
119  * Fix for a long-standing bug that leaves the index file corrupt when
120    it shrinks during a partial commit.
121    (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint).
122
123  * Further fix for O_APPEND emulation on Windows
124    (merge eeaf7ddac7 js/mingw-o-append later to maint).
125
126  * A corner case bugfix in "git rerere" code.
127    (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint).
128
129  * "git add ':(attr:foo)'" is not supported and is supposed to be
130    rejected while the command line arguments are parsed, but we fail
131    to reject such a command line upfront.
132    (merge 84d938b732 nd/attr-pathspec-fix later to maint).
133
134  * Recent update broke the reachability algorithm when refs (e.g.
135    tags) that point at objects that are not commit were involved,
136    which has been fixed.
137
138  * "git rebase" etc. in Git 2.19 fails to abort when given an empty
139    commit log message as result of editing, which has been corrected.
140    (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint).
141
142  * The code to backfill objects in lazily cloned repository did not
143    work correctly, which has been corrected.
144    (merge e68302011c jt/lazy-object-fetch-fix later to maint).
145
146  * Update error messages given by "git remote" and make them consistent.
147    (merge 5025425dff ms/remote-error-message-update later to maint).
148
149  * "git update-ref" learned to make both "--no-deref" and "--stdin"
150    work at the same time.
151    (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint).
152
153  * Recently added "range-diff" had a corner-case bug to cause it
154    segfault, which has been corrected.
155    (merge e467a90c7a tg/range-diff-corner-case-fix later to maint).
156
157  * Code cleanup, docfix, build fix, etc.
158    (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint).
159    (merge b9b07efdb2 tg/conflict-marker-size later to maint).
160    (merge fa0aeea770 sg/doc-trace-appends later to maint).
161    (merge d64324cb60 tb/void-check-attr later to maint).
162    (merge c3b9bc94b9 en/double-semicolon-fix later to maint).
163    (merge 79336116f5 sg/t3701-tighten-trace later to maint).
164    (merge 801fa63a90 jk/dev-build-format-security later to maint).
165    (merge 0597dd62ba sb/string-list-remove-unused later to maint).
166    (merge db2d36fad8 bw/protocol-v2 later to maint).
167    (merge 456d7cd3a9 sg/split-index-test later to maint).