| Git 2.11 Release Notes |
| ====================== |
| |
| Updates since v2.10 |
| ------------------- |
| |
| UI, Workflows & Features |
| |
| * "git format-patch --cover-letter HEAD^" to format a single patch |
| with a separate cover letter now numbers the output as [PATCH 0/1] |
| and [PATCH 1/1] by default. |
| |
| * An incoming "git push" that attempts to push too many bytes can now |
| be rejected by setting a new configuration variable at the receiving |
| end. |
| |
| * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand", |
| which was not intuitive, given that "git nosuchcommand" said "git: |
| 'nosuchcommand' is not a git command". |
| |
| * "git clone --resurse-submodules --reference $path $URL" is a way to |
| reduce network transfer cost by borrowing objects in an existing |
| $path repository when cloning the superproject from $URL; it |
| learned to also peek into $path for presense of corresponding |
| repositories of submodules and borrow objects from there when able. |
| |
| * The "git diff --submodule={short,log}" mechanism has been enhanced |
| to allow "--submodule=diff" to show the patch between the submodule |
| commits bound to the superproject. |
| |
| * Even though "git hash-objects", which is a tool to take an |
| on-filesystem data stream and put it into the Git object store, |
| allowed to perform the "outside-world-to-Git" conversions (e.g. |
| end-of-line conversions and application of the clean-filter), and |
| it had the feature on by default from very early days, its reverse |
| operation "git cat-file", which takes an object from the Git object |
| store and externalize for the consumption by the outside world, |
| lacked an equivalent mechanism to run the "Git-to-outside-world" |
| conversion. The command learned the "--filters" option to do so. |
| |
| |
| Performance, Internal Implementation, Development Support etc. |
| |
| * The delta-base-cache mechanism has been a key to the performance in |
| a repository with a tightly packed packfile, but it did not scale |
| well even with a larger value of core.deltaBaseCacheLimit. |
| |
| * Enhance "git status --porcelain" output by collecting more data on |
| the state of the index and the working tree files, which may |
| further be used to teach git-prompt (in contrib/) to make fewer |
| calls to git. |
| |
| * Extract a small helper out of the function that reads the authors |
| script file "git am" internally uses. |
| (merge a77598e jc/am-read-author-file later to maint). |
| |
| * Lifts calls to exit(2) and die() higher in the callchain in |
| sequencer.c files so that more helper functions in it can be used |
| by callers that want to handle error conditions themselves. |
| |
| * "git am" has been taught to make an internal call to "git apply"'s |
| innards without spawning the latter as a separate process. |
| |
| * The ref-store abstraction was introduced to the refs API so that we |
| can plug in different backends to store references. |
| |
| * The "unsigned char sha1[20]" to "struct object_id" conversion |
| continues. Notable changes in this round includes that ce->sha1, |
| i.e. the object name recorded in the cache_entry, turns into an |
| object_id. |
| |
| * JGit can show a fake ref "capabilities^{}" to "git fetch" when it |
| does not advertise any refs, but "git fetch" was not prepared to |
| see such an advertisement. When the other side disconnects without |
| giving any ref advertisement, we used to say "there may not be a |
| repository at that URL", but we may have seen other advertisement |
| like "shallow" and ".have" in which case we definitely know that a |
| repository is there. The code to detect this case has also been |
| updated. |
| |
| * Some codepaths in "git pack-objects" were not ready to use an |
| existing pack bitmap; now they are and as the result they have |
| become faster. |
| |
| |
| Also contains various documentation updates and code clean-ups. |
| |
| |
| Fixes since v2.10 |
| ----------------- |
| |
| Unless otherwise noted, all the fixes since v2.9 in the maintenance |
| track are contained in this release (see the maintenance releases' |
| notes for details). |
| |
| * Clarify various ways to specify the "revision ranges" in the |
| documentation. |
| |
| * "diff-highlight" script (in contrib/) learned to work better with |
| "git log -p --graph" output. |
| |
| * The test framework left the number of tests and success/failure |
| count in the t/test-results directory, keyed by the name of the |
| test script plus the process ID. The latter however turned out not |
| to serve any useful purpose. The process ID part of the filename |
| has been removed. |
| |
| * Having a submodule whose ".git" repository is somehow corrupt |
| caused a few commands that recurse into submodules loop forever. |
| |
| * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but |
| the resulting repository becomes an invalid one. Teach the command |
| to forbid removal of HEAD. |
| |
| * A test spawned a short-lived background process, which sometimes |
| prevented the test directory from getting removed at the end of the |
| script on some platforms. |
| |
| * Update a few tests that used to use GIT_CURL_VERBOSE to use the |
| newer GIT_TRACE_CURL. |
| |
| * "git pack-objects --include-tag" was taught that when we know that |
| we are sending an object C, we want a tag B that directly points at |
| C but also a tag A that points at the tag B. We used to miss the |
| intermediate tag B in some cases. |
| (merge b773dde jk/pack-tag-of-tag later to maint). |
| |
| * Update Japanese translation for "git-gui". |
| (merge 02748bc sy/git-gui-i18n-ja later to maint). |
| |
| * "git fetch http::/site/path" did not die correctly and segfaulted |
| instead. |
| (merge d63ed6e jk/fix-remote-curl-url-wo-proto later to maint). |
| |
| * "git commit-tree" stopped reading commit.gpgsign configuration |
| variable that was meant for Porcelain "git commit" in Git 2.9; we |
| forgot to update "git gui" to look at the configuration to match |
| this change. |
| (merge f14a310 js/git-gui-commit-gpgsign later to maint). |
| |
| * "git add --chmod=+x" added recently lacked documentation, which has |
| been corrected. |
| (merge 7ef7903 et/add-chmod-x later to maint). |
| |
| * "git log --cherry-pick" used to include merge commits as candidates |
| to be matched up with other commits, resulting a lot of wasted time. |
| The patch-id generation logic has been updated to ignore merges to |
| avoid the wastage. |
| (merge 7c81040 jk/patch-ids-no-merges later to maint). |
| |
| * The http transport (with curl-multi option, which is the default |
| these days) failed to remove curl-easy handle from a curlm session, |
| which led to unnecessary API failures. |
| (merge 2abc848 ew/http-do-not-forget-to-call-curl-multi-remove-handle later to maint). |
| |
| * There were numerous corner cases in which the configuration files |
| are read and used or not read at all depending on the directory a |
| Git command was run, leading to inconsistent behaviour. The code |
| to set-up repository access at the beginning of a Git process has |
| been updated to fix them. |
| (merge 4d0efa1 jk/setup-sequence-update later to maint). |
| |
| * "git diff -W" output needs to extend the context backward to |
| include the header line of the current function and also forward to |
| include the body of the entire current function up to the header |
| line of the next one. This process may have to merge to adjacent |
| hunks, but the code forgot to do so in some cases. |
| (merge 45d2f75 rs/xdiff-merge-overlapping-hunks-for-W-context later to maint). |
| |
| * Performance tests done via "t/perf" did not use the same set of |
| build configuration if the user relied on autoconf generated |
| configuration. |
| (merge cd5c281 ks/perf-build-with-autoconf later to maint). |
| |
| * "git format-patch --base=..." feature that was recently added |
| showed the base commit information after "-- " e-mail signature |
| line, which turned out to be inconvenient. The base information |
| has been moved above the signature line. |
| (merge 480871e jt/format-patch-base-info-above-sig later to maint). |
| |
| * More i18n. |
| (merge 43073f8 va/i18n later to maint). |
| |
| * Even when "git pull --rebase=preserve" (and the underlying "git |
| rebase --preserve") can complete without creating any new commit |
| (i.e. fast-forwards), it still insisted on having a usable ident |
| information (read: user.email is set correctly), which was less |
| than nice. As the underlying commands used inside "git rebase" |
| would fail with a more meaningful error message and advice text |
| when the bogus ident matters, this extra check was removed. |
| (merge 1e461c4 jk/rebase-i-drop-ident-check later to maint). |
| |
| * "git gc --aggressive" used to limit the delta-chain length to 250, |
| which is way too deep for gaining additional space savings and is |
| detrimental for runtime performance. The limit has been reduced to |
| 50. |
| (merge 07e7dbf jk/reduce-gc-aggressive-depth later to maint). |
| |
| * Other minor doc, test and build updates and code cleanups. |
| (merge e78d57e bw/pathspec-remove-unused-extern-decl later to maint). |
| (merge ce25e4c rs/checkout-some-states-are-const later to maint). |
| (merge a8342a4 rs/strbuf-remove-fix later to maint). |
| (merge b56aa5b rs/unpack-trees-reduce-file-scope-global later to maint). |
| (merge 5efc60c mr/vcs-svn-printf-ulong later to maint). |