|
| 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 | + * Code cleanup, docfix, build fix, etc. |
| 110 | + (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint). |
| 111 | + (merge b9b07efdb2 tg/conflict-marker-size later to maint). |
| 112 | + (merge fa0aeea770 sg/doc-trace-appends later to maint). |
0 commit comments