Documentation / RelNotes / 2.11.0.txton commit Merge branch 'tg/add-chmod+x-fix' (ebc6358)
   1Git 2.11 Release Notes
   2======================
   3
   4Updates since v2.10
   5-------------------
   6
   7UI, Workflows & Features
   8
   9 * "git format-patch --cover-letter HEAD^" to format a single patch
  10   with a separate cover letter now numbers the output as [PATCH 0/1]
  11   and [PATCH 1/1] by default.
  12
  13 * An incoming "git push" that attempts to push too many bytes can now
  14   be rejected by setting a new configuration variable at the receiving
  15   end.
  16
  17 * "git nosuchcommand --help" said "No manual entry for gitnosuchcommand",
  18   which was not intuitive, given that "git nosuchcommand" said "git:
  19   'nosuchcommand' is not a git command".
  20
  21 * "git clone --resurse-submodules --reference $path $URL" is a way to
  22   reduce network transfer cost by borrowing objects in an existing
  23   $path repository when cloning the superproject from $URL; it
  24   learned to also peek into $path for presense of corresponding
  25   repositories of submodules and borrow objects from there when able.
  26
  27 * The "git diff --submodule={short,log}" mechanism has been enhanced
  28   to allow "--submodule=diff" to show the patch between the submodule
  29   commits bound to the superproject.
  30
  31 * Even though "git hash-objects", which is a tool to take an
  32   on-filesystem data stream and put it into the Git object store,
  33   allowed to perform the "outside-world-to-Git" conversions (e.g.
  34   end-of-line conversions and application of the clean-filter), and
  35   it had the feature on by default from very early days, its reverse
  36   operation "git cat-file", which takes an object from the Git object
  37   store and externalize for the consumption by the outside world,
  38   lacked an equivalent mechanism to run the "Git-to-outside-world"
  39   conversion.  The command learned the "--filters" option to do so.
  40
  41
  42Performance, Internal Implementation, Development Support etc.
  43
  44 * The delta-base-cache mechanism has been a key to the performance in
  45   a repository with a tightly packed packfile, but it did not scale
  46   well even with a larger value of core.deltaBaseCacheLimit.
  47
  48 * Enhance "git status --porcelain" output by collecting more data on
  49   the state of the index and the working tree files, which may
  50   further be used to teach git-prompt (in contrib/) to make fewer
  51   calls to git.
  52
  53 * Extract a small helper out of the function that reads the authors
  54   script file "git am" internally uses.
  55   (merge a77598e jc/am-read-author-file later to maint).
  56
  57 * Lifts calls to exit(2) and die() higher in the callchain in
  58   sequencer.c files so that more helper functions in it can be used
  59   by callers that want to handle error conditions themselves.
  60
  61 * "git am" has been taught to make an internal call to "git apply"'s
  62   innards without spawning the latter as a separate process.
  63
  64 * The ref-store abstraction was introduced to the refs API so that we
  65   can plug in different backends to store references.
  66
  67 * The "unsigned char sha1[20]" to "struct object_id" conversion
  68   continues.  Notable changes in this round includes that ce->sha1,
  69   i.e. the object name recorded in the cache_entry, turns into an
  70   object_id.
  71
  72 * JGit can show a fake ref "capabilities^{}" to "git fetch" when it
  73   does not advertise any refs, but "git fetch" was not prepared to
  74   see such an advertisement.  When the other side disconnects without
  75   giving any ref advertisement, we used to say "there may not be a
  76   repository at that URL", but we may have seen other advertisement
  77   like "shallow" and ".have" in which case we definitely know that a
  78   repository is there.  The code to detect this case has also been
  79   updated.
  80
  81 * Some codepaths in "git pack-objects" were not ready to use an
  82   existing pack bitmap; now they are and as the result they have
  83   become faster.
  84
  85
  86Also contains various documentation updates and code clean-ups.
  87
  88
  89Fixes since v2.10
  90-----------------
  91
  92Unless otherwise noted, all the fixes since v2.9 in the maintenance
  93track are contained in this release (see the maintenance releases'
  94notes for details).
  95
  96 * Clarify various ways to specify the "revision ranges" in the
  97   documentation.
  98
  99 * "diff-highlight" script (in contrib/) learned to work better with
 100   "git log -p --graph" output.
 101
 102 * The test framework left the number of tests and success/failure
 103   count in the t/test-results directory, keyed by the name of the
 104   test script plus the process ID.  The latter however turned out not
 105   to serve any useful purpose.  The process ID part of the filename
 106   has been removed.
 107
 108 * Having a submodule whose ".git" repository is somehow corrupt
 109   caused a few commands that recurse into submodules loop forever.
 110
 111 * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but
 112   the resulting repository becomes an invalid one.  Teach the command
 113   to forbid removal of HEAD.
 114
 115 * A test spawned a short-lived background process, which sometimes
 116   prevented the test directory from getting removed at the end of the
 117   script on some platforms.
 118
 119 * Update a few tests that used to use GIT_CURL_VERBOSE to use the
 120   newer GIT_TRACE_CURL.
 121
 122 * "git pack-objects --include-tag" was taught that when we know that
 123   we are sending an object C, we want a tag B that directly points at
 124   C but also a tag A that points at the tag B.  We used to miss the
 125   intermediate tag B in some cases.
 126   (merge b773dde jk/pack-tag-of-tag later to maint).
 127
 128 * Update Japanese translation for "git-gui".
 129   (merge 02748bc sy/git-gui-i18n-ja later to maint).
 130
 131 * "git fetch http::/site/path" did not die correctly and segfaulted
 132   instead.
 133   (merge d63ed6e jk/fix-remote-curl-url-wo-proto later to maint).
 134
 135 * "git commit-tree" stopped reading commit.gpgsign configuration
 136   variable that was meant for Porcelain "git commit" in Git 2.9; we
 137   forgot to update "git gui" to look at the configuration to match
 138   this change.
 139   (merge f14a310 js/git-gui-commit-gpgsign later to maint).
 140
 141 * "git add --chmod=+x" added recently lacked documentation, which has
 142   been corrected.
 143   (merge 7ef7903 et/add-chmod-x later to maint).
 144
 145 * "git log --cherry-pick" used to include merge commits as candidates
 146   to be matched up with other commits, resulting a lot of wasted time.
 147   The patch-id generation logic has been updated to ignore merges to
 148   avoid the wastage.
 149   (merge 7c81040 jk/patch-ids-no-merges later to maint).
 150
 151 * The http transport (with curl-multi option, which is the default
 152   these days) failed to remove curl-easy handle from a curlm session,
 153   which led to unnecessary API failures.
 154   (merge 2abc848 ew/http-do-not-forget-to-call-curl-multi-remove-handle later to maint).
 155
 156 * There were numerous corner cases in which the configuration files
 157   are read and used or not read at all depending on the directory a
 158   Git command was run, leading to inconsistent behaviour.  The code
 159   to set-up repository access at the beginning of a Git process has
 160   been updated to fix them.
 161   (merge 4d0efa1 jk/setup-sequence-update later to maint).
 162
 163 * "git diff -W" output needs to extend the context backward to
 164   include the header line of the current function and also forward to
 165   include the body of the entire current function up to the header
 166   line of the next one.  This process may have to merge to adjacent
 167   hunks, but the code forgot to do so in some cases.
 168   (merge 45d2f75 rs/xdiff-merge-overlapping-hunks-for-W-context later to maint).
 169
 170 * Performance tests done via "t/perf" did not use the same set of
 171   build configuration if the user relied on autoconf generated
 172   configuration.
 173   (merge cd5c281 ks/perf-build-with-autoconf later to maint).
 174
 175 * "git format-patch --base=..." feature that was recently added
 176   showed the base commit information after "-- " e-mail signature
 177   line, which turned out to be inconvenient.  The base information
 178   has been moved above the signature line.
 179   (merge 480871e jt/format-patch-base-info-above-sig later to maint).
 180
 181 * More i18n.
 182   (merge 43073f8 va/i18n later to maint).
 183
 184 * Even when "git pull --rebase=preserve" (and the underlying "git
 185   rebase --preserve") can complete without creating any new commit
 186   (i.e. fast-forwards), it still insisted on having a usable ident
 187   information (read: user.email is set correctly), which was less
 188   than nice.  As the underlying commands used inside "git rebase"
 189   would fail with a more meaningful error message and advice text
 190   when the bogus ident matters, this extra check was removed.
 191   (merge 1e461c4 jk/rebase-i-drop-ident-check later to maint).
 192
 193 * "git gc --aggressive" used to limit the delta-chain length to 250,
 194   which is way too deep for gaining additional space savings and is
 195   detrimental for runtime performance.  The limit has been reduced to
 196   50.
 197   (merge 07e7dbf jk/reduce-gc-aggressive-depth later to maint).
 198
 199 * Other minor doc, test and build updates and code cleanups.
 200   (merge e78d57e bw/pathspec-remove-unused-extern-decl later to maint).
 201   (merge ce25e4c rs/checkout-some-states-are-const later to maint).
 202   (merge a8342a4 rs/strbuf-remove-fix later to maint).
 203   (merge b56aa5b rs/unpack-trees-reduce-file-scope-global later to maint).
 204   (merge 5efc60c mr/vcs-svn-printf-ulong later to maint).