Documentation / RelNotes / 2.6.0.txton commit Merge branch 'cc/trailers-corner-case-fix' (cdd00df)
   1Git 2.6 Release Notes
   2=====================
   3
   4Updates since v2.5
   5------------------
   6
   7UI, Workflows & Features
   8
   9 * An asterisk as a substring (as opposed to the entirety) of a path
  10   component for both side of a refspec, e.g.
  11   "refs/heads/o*:refs/remotes/heads/i*", is now allowed.
  12
  13 * New userdiff pattern definition for fountain screenwriting markup
  14   format has been added.
  15
  16 * "git log" and friends learned a new "--date=format:..." option to
  17   format timestamps using system's strftime(3).
  18
  19 * "git fast-import" learned to respond to the get-mark command via
  20   its cat-blob-fd interface.
  21
  22 * "git rebase -i" learned "drop commit-object-name subject" command
  23   as another way to skip replaying of a commit.
  24
  25 * A new configuration variable can enable "--follow" automatically
  26   when "git log" is run with one pathspec argument.
  27
  28 * "git status" learned to show a more detailed information regarding
  29   the "rebase -i" session in progress.
  30
  31 * "git cat-file" learned "--batch-all-objects" option to enumerate all
  32   available objects in the repository more quickly than "rev-list
  33   --all --objects" (the output includes unreachable objects, though).
  34
  35 * "git fsck" learned to ignore errors on a set of known-to-be-bad
  36   objects, and also allows the warning levels of various kinds of
  37   non-critical breakages to be tweaked.
  38
  39 * "git rebase -i"'s list of todo is made configurable.
  40
  41 * "git send-email" now performs alias-expansion on names that are
  42   given via --cccmd, etc.
  43
  44 * An environment variable GIT_REPLACE_REF_BASE tells Git to look into
  45   refs hierarchy other than refs/replace/ for the object replacement
  46   data.
  47
  48 * Allow untracked cache (experimental) to be used when sparse
  49   checkout (experimental) is also in use.
  50
  51 * "git pull --rebase" has been taught to pay attention to
  52   rebase.autostash configuration.
  53
  54 * The command-line completion script (in contrib/) has been updated.
  55
  56 * A negative !ref entry in multi-value transfer.hideRefs
  57   configuration can be used to say "don't hide this one".
  58
  59 * After "git am" without "-3" stops, running "git am -" pays attention
  60   to "-3" only for the patch that caused the original invocation
  61   to stop.
  62
  63 * When linked worktree is used, simultaneous "notes merge" instances
  64   for the same ref in refs/notes/* are prevented from stomping on
  65   each other.
  66
  67 * "git send-email" learned a new option --smtp-auth to limit the SMTP
  68   AUTH mechanisms to be used to a subset of what the system library
  69   supports.
  70
  71 * A new configuration variable http.sslVersion can be used to specify
  72   what specific version of SSL/TLS to use to make a connection.
  73
  74 * "git notes merge" can be told with "--strategy=<how>" option how to
  75   automatically handle conflicts; this can now be configured by
  76   setting notes.mergeStrategy configuration variable.
  77
  78 * "git log --cc" did not show any patch, even though most of the time
  79   the user meant "git log --cc -p -m" to see patch output for commits
  80   with a single parent, and combined diff for merge commits.  The
  81   command is taught to DWIM "--cc" (without "--raw" and other forms
  82   of output specification) to "--cc -p -m".
  83
  84 * "git config --list" output was hard to parse when values consist of
  85   multiple lines.  "--name-only" option is added to help this.
  86
  87
  88Performance, Internal Implementation, Development Support etc.
  89
  90 * In preparation for allowing different "backends" to store the refs
  91   in a way different from the traditional "one ref per file in
  92   $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage,
  93   direct filesystem access to ref-like things like CHERRY_PICK_HEAD
  94   from scripts and programs has been reduced.
  95
  96 * Computation of untracked status indicator by bash prompt
  97   script (in contrib/) has been optimized.
  98
  99 * Memory use reduction when commit-slab facility is used to annotate
 100   sparsely (which is not recommended in the first place).
 101
 102 * Clean up refs API and make "git clone" less intimate with the
 103   implementation detail.
 104
 105 * "git pull" was reimplemented in C.
 106
 107 * The packet tracing machinery allows to capture an incoming pack
 108   data to a file for debugging.
 109
 110 * Move machinery to parse human-readable scaled numbers like 1k, 4M,
 111   and 2G as an option parameter's value from pack-objects to
 112   parse-options API, to make it available to other codepaths.
 113
 114 * "git verify-tag" and "git verify-commit" have been taught to share
 115   more code, and then learned to optionally show the verification
 116   message from the underlying GPG implementation.
 117
 118 * Various enhancements around "git am" reading patches generated by
 119   foreign SCM have been made.
 120
 121 * Ref listing by "git branch -l" and "git tag -l" commands has
 122   started to be rebuilt, based on the for-each-ref machinery.
 123
 124 * The code to perform multi-tree merges has been taught to repopulate
 125   the cache-tree upon a successful merge into the index, so that
 126   subsequent "diff-index --cached" (hence "status") and "write-tree"
 127   (hence "commit") will go faster.
 128
 129   The same logic in "git checkout" may now be removed, but that is a
 130   separate issue.
 131
 132 * Tests that assume how reflogs are represented on the filesystem too
 133   much have been corrected.
 134
 135 * "git am" has been rewritten in "C".
 136
 137 * git_path() and mkpath() are handy helper functions but it is easy
 138   to misuse, as the callers need to be careful to keep the number of
 139   active results below 4.  Their uses have been reduced.
 140
 141 * The "lockfile" API has been rebuilt on top of a new "tempfile" API.
 142
 143 * To prepare for allowing a different "ref" backend to be plugged in
 144   to the system, update_ref()/delete_ref() have been taught about
 145   ref-like things like MERGE_HEAD that are per-worktree (they will
 146   always be written to the filesystem inside $GIT_DIR).
 147
 148 * The gitmodules API that is accessed from the C code learned to
 149   cache stuff lazily.
 150
 151
 152Also contains various documentation updates and code clean-ups.
 153
 154
 155Fixes since v2.5
 156----------------
 157
 158Unless otherwise noted, all the fixes since v2.5 in the maintenance
 159track are contained in this release (see the maintenance releases'
 160notes for details).
 161
 162 * "git subtree" (in contrib/) depended on "git log" output to be
 163   stable, which was a no-no.  Apply a workaround to force a
 164   particular date format.
 165   (merge e7aac44 da/subtree-date-confusion later to maint).
 166
 167 * An attempt to delete a ref by pushing into a repository whose HEAD
 168   symbolic reference points at an unborn branch that cannot be
 169   created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
 170   points at refs/heads/a) failed.
 171   (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint).
 172
 173 * The low-level "git send-pack" did not honor 'user.signingkey'
 174   configuration variable when sending a signed-push.
 175   (merge d830d39 db/send-pack-user-signingkey later to maint).
 176
 177 * "sparse checkout" misbehaved for a path that is excluded from the
 178   checkout when switching between branches that differ at the path.
 179   (merge 7d78241 as/sparse-checkout-removal later to maint).
 180
 181 * An experimental "untracked cache" feature used uname(2) in a
 182   slightly unportable way.
 183   (merge 100e433 cb/uname-in-untracked later to maint).
 184
 185 * A "rebase" replays changes of the local branch on top of something
 186   else, as such they are placed in stage #3 and referred to as
 187   "theirs", while the changes in the new base, typically a foreign
 188   work, are placed in stage #2 and referred to as "ours".  Clarify
 189   the "checkout --ours/--theirs".
 190   (merge f303016 se/doc-checkout-ours-theirs later to maint).
 191
 192 * The "rev-parse --parseopt" mode parsed the option specification
 193   and the argument hint in a strange way to allow '=' and other
 194   special characters in the option name while forbidding them from
 195   the argument hint.  This made it impossible to define an option
 196   like "--pair <key>=<value>" with "pair=key=value" specification,
 197   which instead would have defined a "--pair=key <value>" option.
 198   (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint).
 199
 200 * Often a fast-import stream builds a new commit on top of the
 201   previous commit it built, and it often unconditionally emits a
 202   "from" command to specify the first parent, which can be omitted in
 203   such a case.  This caused fast-import to forget the tree of the
 204   previous commit and then re-read it from scratch, which was
 205   inefficient.  Optimize for this common case.
 206   (merge 0df3245 mh/fast-import-optimize-current-from later to maint).
 207
 208 * Running an aliased command from a subdirectory when the .git thing
 209   in the working tree is a gitfile pointing elsewhere did not work.
 210   (merge d95138e nd/export-worktree later to maint).
 211
 212 * "Is this subdirectory a separate repository that should not be
 213   touched?" check "git clean" was inefficient.  This was replaced
 214   with a more optimized check.
 215   (merge 38ae878 ee/clean-remove-dirs later to maint).
 216
 217 * The "new-worktree-mode" hack in "checkout" that was added in
 218   nd/multiple-work-trees topic has been removed by updating the
 219   implementation of new "worktree add".
 220   (merge 65f9b75 es/worktree-add-cleanup later to maint).
 221
 222 * Remove remaining cruft from  "git checkout --to", which
 223   transitioned to "git worktree add".
 224   (merge 114ff88 es/worktree-add later to maint).
 225
 226 * An off-by-one error made "git remote" to mishandle a remote with a
 227   single letter nickname.
 228   (merge bc598c3 mh/get-remote-group-fix later to maint).
 229
 230 * "git clone $URL", when cloning from a site whose sole purpose is to
 231   host a single repository (hence, no path after <scheme>://<site>/),
 232   tried to use the site name as the new repository name, but did not
 233   remove username or password when <site> part was of the form
 234   <user>@<pass>:<host>.  The code is taught to redact these.
 235   (merge adef956 ps/guess-repo-name-at-root later to maint).
 236
 237 * Running tests with the "-x" option to make them verbose had some
 238   unpleasant interactions with other features of the test suite.
 239   (merge 9b5fe78 jk/test-with-x later to maint).
 240
 241 * t1509 test that requires a dedicated VM environment had some
 242   bitrot, which has been corrected.
 243   (merge faacc5a ps/t1509-chroot-test-fixup later to maint).
 244
 245 * "git pull" in recent releases of Git has a regression in the code
 246   that allows custom path to the --upload-pack=<program>.  This has
 247   been corrected.
 248
 249   Note that this is irrelevant for 'master' with "git pull" rewritten
 250   in C.
 251   (merge 22d6857 mm/pull-upload-pack later to maint).
 252
 253 * When trying to see that an object does not exist, a state errno
 254   leaked from our "first try to open a packfile with O_NOATIME and
 255   then if it fails retry without it" logic on a system that refuses
 256   O_NOATIME.  This confused us and caused us to die, saying that the
 257   packfile is unreadable, when we should have just reported that the
 258   object does not exist in that packfile to the caller.
 259   (merge dff6f28 cb/open-noatime-clear-errno later to maint).
 260
 261 * The codepath to produce error messages had a hard-coded limit to
 262   the size of the message, primarily to avoid memory allocation while
 263   calling die().
 264   (merge f4c3edc jk/long-error-messages later to maint).
 265
 266 * strbuf_read() used to have one extra iteration (and an unnecessary
 267   strbuf_grow() of 8kB), which was eliminated.
 268   (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint).
 269
 270 * We rewrote one of the build scripts in Perl but this reimplements
 271   in Bourne shell.
 272   (merge 82aec45 sg/help-group later to maint).
 273
 274 * The experimental untracked-cache feature were buggy when paths with
 275   a few levels of subdirectories are involved.
 276   (merge 73f9145 dt/untracked-subdir later to maint).
 277
 278 * "interpret-trailers" helper mistook a single-liner log message that
 279   has a colon as the end of existing trailer.
 280   (merge 6262fe9 cc/trailers-corner-case-fix later to maint).
 281
 282 * "git describe" without argument defaulted to describe the HEAD
 283   commit, but "git describe --contains" didn't.  Arguably, in a
 284   repository used for active development, such defaulting would not
 285   be very useful as the tip of branch is typically not tagged, but it
 286   is better to be consistent.
 287   (merge 2bd0706 sg/describe-contains later to maint).
 288
 289 * The client side codepaths in "git push" have been cleaned up
 290   and the user can request to perform an optional "signed push",
 291   i.e. sign only when the other end accepts signed push.
 292   (merge 68c757f db/push-sign-if-asked later to maint).
 293
 294 * Because the configuration system does not allow "alias.0foo" and
 295   "pager.0foo" as the configuration key, the user cannot use '0foo'
 296   as a custom command name anyway, but "git 0foo" tried to look these
 297   keys up and emitted useless warnings before saying '0foo is not a
 298   git command'.  These warning messages have been squelched.
 299   (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint).
 300
 301 * "git rev-list" does not take "--notes" option, but did not complain
 302   when one is given.
 303   (merge 2aea7a5 jk/rev-list-has-no-notes later to maint).
 304
 305 * When re-priming the cache-tree opportunistically while committing
 306   the in-core index as-is, we mistakenly invalidated the in-core
 307   index too aggressively, causing the experimental split-index code
 308   to unnecessarily rewrite the on-disk index file(s).
 309   (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint).
 310
 311 * "git archive" did not use zip64 extension when creating an archive
 312   with more than 64k entries, which nobody should need, right ;-)?
 313   (merge 88329ca rs/archive-zip-many later to maint).
 314
 315 * The code in "multiple-worktree" support that attempted to recover
 316   from an inconsistent state updated an incorrect file.
 317   (merge 82fde87 nd/fixup-linked-gitdir later to maint).
 318
 319 * On case insensitive systems, "git p4" did not work well with client
 320   specs.
 321
 322 * Code cleanups and documentation updates.
 323   (merge 1c601af es/doc-clean-outdated-tools later to maint).
 324   (merge 3581304 kn/tag-doc-fix later to maint).
 325   (merge 3a59e59 kb/i18n-doc later to maint).
 326   (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint).
 327   (merge 14691e3 sb/parse-options-codeformat later to maint).
 328   (merge 4a6ada3 ad/bisect-cleanup later to maint).
 329   (merge da4c5ad ta/docfix-index-format-tech later to maint).
 330   (merge ae25fd3 sb/check-return-from-read-ref later to maint).
 331   (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint).
 332   (merge 7aa9b9b sg/wt-status-header-inclusion later to maint).
 333   (merge f04c690 as/docfix-reflog-expire-unreachable later to maint).
 334   (merge 1269847 sg/t3020-typofix later to maint).
 335   (merge 8b54c23 jc/calloc-pathspec later to maint).
 336   (merge a6926b8 po/po-readme later to maint).
 337   (merge 54d160e ss/fix-config-fd-leak later to maint).
 338   (merge b80fa84 ah/submodule-typofix-in-error later to maint).
 339   (merge 99885bc ah/reflog-typofix-in-error later to maint).
 340   (merge 9476c2c ah/read-tree-usage-string later to maint).
 341   (merge b8c1d27 ah/pack-objects-usage-strings later to maint).
 342   (merge 486e1e1 br/svn-doc-include-paths-config later to maint).