| Git Release Notes |
| ================= |
| |
| Backward Compatibility Notes |
| ---------------------------- |
| |
| * "git branch -l <foo>" used to be a way to ask a reflog to be |
| created while creating a new branch, but that is no longer the |
| case. It is a short-hand for "git branch --list <foo>" now. |
| |
| * "git push" into refs/tags/* hierarchy is rejected without getting |
| forced, but "git fetch" (misguidedly) used the "fast forwarding" |
| rule used for the refs/heads/* hierarchy; this has been corrected, |
| which means some fetches of tags that did not fail with older |
| version of Git will fail without "--force" with this version. |
| |
| |
| Updates since v2.19 |
| ------------------- |
| |
| UI, Workflows & Features |
| |
| * Running "git clone" against a project that contain two files with |
| pathnames that differ only in cases on a case insensitive |
| filesystem would result in one of the files lost because the |
| underlying filesystem is incapable of holding both at the same |
| time. An attempt is made to detect such a case and warn. |
| |
| * "git checkout -b newbranch [HEAD]" should not have to do as much as |
| checking out a commit different from HEAD. An attempt is made to |
| optimize this special case. |
| |
| * "git rev-list --stdin </dev/null" used to be an error; it now shows |
| no output without an error. "git rev-list --stdin --default HEAD" |
| still falls back to the given default when nothing is given on the |
| standard input. |
| |
| * Lift code from GitHub to restrict delta computation so that an |
| object that exists in one fork is not made into a delta against |
| another object that does not appear in the same forked repository. |
| |
| * "git format-patch" learned new "--interdiff" and "--range-diff" |
| options to explain the difference between this version and the |
| previous attempt in the cover letter (or after the tree-dashes as |
| a comment). |
| |
| * "git mailinfo" used in "git am" learned to make a best-effort |
| recovery of a patch corrupted by MUA that sends text/plain with |
| format=flawed option. |
| (merge 3aa4d81f88 rs/mailinfo-format-flowed later to maint). |
| |
| * The rules used by "git push" and "git fetch" to determine if a ref |
| can or cannot be updated were inconsistent; specifically, fetching |
| to update existing tags were allowed even though tags are supposed |
| to be unmoving anchoring points. "git fetch" was taught to forbid |
| updates to existing tags without the "--force" option. |
| |
| |
| Performance, Internal Implementation, Development Support etc. |
| |
| * When there are too many packfiles in a repository (which is not |
| recommended), looking up an object in these would require |
| consulting many pack .idx files; a new mechanism to have a single |
| file that consolidates all of these .idx files is introduced. |
| |
| * "git submodule update" is getting rewritten piece-by-piece into C. |
| |
| * The code for computing history reachability has been shuffled, |
| obtained a bunch of new tests to cover them, and then being |
| improved. |
| |
| * The unpack_trees() API used in checking out a branch and merging |
| walks one or more trees along with the index. When the cache-tree |
| in the index tells us that we are walking a tree whose flattened |
| contents is known (i.e. matches a span in the index), as linearly |
| scanning a span in the index is much more efficient than having to |
| open tree objects recursively and listing their entries, the walk |
| can be optimized, which has been done. |
| |
| * When creating a thin pack, which allows objects to be made into a |
| delta against another object that is not in the resulting pack but |
| is known to be present on the receiving end, the code learned to |
| take advantage of the reachability bitmap; this allows the server |
| to send a delta against a base beyond the "boundary" commit. |
| |
| * spatch transformation to replace boolean uses of !hashcmp() to |
| newly introduced oideq() is added, and applied, to regain |
| performance lost due to support of multiple hash algorithms. |
| |
| * Fix a bug in which the same path could be registered under multiple |
| worktree entries if the path was missing (for instance, was removed |
| manually). Also, as a convenience, expand the number of cases in |
| which --force is applicable. |
| |
| |
| Fixes since v2.19 |
| ----------------- |
| |
| * "git interpret-trailers" and its underlying machinery had a buggy |
| code that attempted to ignore patch text after commit log message, |
| which triggered in various codepaths that will always get the log |
| message alone and never get such an input. |
| (merge 66e83d9b41 jk/trailer-fixes later to maint). |
| |
| * Malformed or crafted data in packstream can make our code attempt |
| to read or write past the allocated buffer and abort, instead of |
| reporting an error, which has been fixed. |
| |
| * "git rebase -i" did not clear the state files correctly when a run |
| of "squash/fixup" is aborted and then the user manually amended the |
| commit instead, which has been corrected. |
| (merge 10d2f35436 js/rebase-i-autosquash-fix later to maint). |
| |
| * When fsmonitor is in use, after operation on submodules updates |
| .gitmodules, we lost track of the fact that we did so and relied on |
| stale fsmonitor data. |
| (merge 43f1180814 bp/mv-submodules-with-fsmonitor later to maint). |
| |
| * Fix for a long-standing bug that leaves the index file corrupt when |
| it shrinks during a partial commit. |
| (merge 6c003d6ffb jk/reopen-tempfile-truncate later to maint). |
| |
| * Further fix for O_APPEND emulation on Windows |
| (merge eeaf7ddac7 js/mingw-o-append later to maint). |
| |
| * A corner case bugfix in "git rerere" code. |
| (merge ad2bf0d9b4 en/rerere-multi-stage-1-fix later to maint). |
| |
| * "git add ':(attr:foo)'" is not supported and is supposed to be |
| rejected while the command line arguments are parsed, but we fail |
| to reject such a command line upfront. |
| (merge 84d938b732 nd/attr-pathspec-fix later to maint). |
| |
| * Recent update broke the reachability algorithm when refs (e.g. |
| tags) that point at objects that are not commit were involved, |
| which has been fixed. |
| |
| * "git rebase" etc. in Git 2.19 fails to abort when given an empty |
| commit log message as result of editing, which has been corrected. |
| (merge a3ec9eaf38 en/sequencer-empty-edit-result-aborts later to maint). |
| |
| * The code to backfill objects in lazily cloned repository did not |
| work correctly, which has been corrected. |
| (merge e68302011c jt/lazy-object-fetch-fix later to maint). |
| |
| * Update error messages given by "git remote" and make them consistent. |
| (merge 5025425dff ms/remote-error-message-update later to maint). |
| |
| * "git update-ref" learned to make both "--no-deref" and "--stdin" |
| work at the same time. |
| (merge d345e9fbe7 en/update-ref-no-deref-stdin later to maint). |
| |
| * Recently added "range-diff" had a corner-case bug to cause it |
| segfault, which has been corrected. |
| (merge e467a90c7a tg/range-diff-corner-case-fix later to maint). |
| |
| * Code cleanup, docfix, build fix, etc. |
| (merge 96a7501aad ts/doc-build-manpage-xsl-quietly later to maint). |
| (merge b9b07efdb2 tg/conflict-marker-size later to maint). |
| (merge fa0aeea770 sg/doc-trace-appends later to maint). |
| (merge d64324cb60 tb/void-check-attr later to maint). |
| (merge c3b9bc94b9 en/double-semicolon-fix later to maint). |
| (merge 79336116f5 sg/t3701-tighten-trace later to maint). |
| (merge 801fa63a90 jk/dev-build-format-security later to maint). |
| (merge 0597dd62ba sb/string-list-remove-unused later to maint). |
| (merge db2d36fad8 bw/protocol-v2 later to maint). |
| (merge 456d7cd3a9 sg/split-index-test later to maint). |