Documentation / RelNotes / 1.8.5.txton commit Merge branch 'bk/refs-multi-update' (9a86b89)
   1Git v1.8.5 Release Notes
   2========================
   3
   4Backward compatibility notes (for Git 2.0)
   5------------------------------------------
   6
   7When "git push [$there]" does not say what to push, we have used the
   8traditional "matching" semantics so far (all your branches were sent
   9to the remote as long as there already are branches of the same name
  10over there).  In Git 2.0, the default will change to the "simple"
  11semantics that pushes:
  12
  13 - only the current branch to the branch with the same name, and only
  14   when the current branch is set to integrate with that remote
  15   branch, if you are pushing to the same remote as you fetch from; or
  16
  17 - only the current branch to the branch with the same name, if you
  18   are pushing to a remote that is not where you usually fetch from.
  19
  20Use the user preference configuration variable "push.default" to
  21change this.  If you are an old-timer who is used to the "matching"
  22semantics, you can set the variable to "matching" to keep the
  23traditional behaviour.  If you want to live in the future early, you
  24can set it to "simple" today without waiting for Git 2.0.
  25
  26When "git add -u" (and "git add -A") is run inside a subdirectory and
  27does not specify which paths to add on the command line, it
  28will operate on the entire tree in Git 2.0 for consistency
  29with "git commit -a" and other commands.  There will be no
  30mechanism to make plain "git add -u" behave like "git add -u .".
  31Current users of "git add -u" (without a pathspec) should start
  32training their fingers to explicitly say "git add -u ."
  33before Git 2.0 comes.  A warning is issued when these commands are
  34run without a pathspec and when you have local changes outside the
  35current directory, because the behaviour in Git 2.0 will be different
  36from today's version in such a situation.
  37
  38In Git 2.0, "git add <path>" will behave as "git add -A <path>", so
  39that "git add dir/" will notice paths you removed from the directory
  40and record the removal.  Versions before Git 2.0, including this
  41release, will keep ignoring removals, but the users who rely on this
  42behaviour are encouraged to start using "git add --ignore-removal <path>"
  43now before 2.0 is released.
  44
  45
  46Updates since v1.8.4
  47--------------------
  48
  49Foreign interfaces, subsystems and ports.
  50
  51 * "git-svn" used with SVN 1.8.0 when talking over https:// connection
  52   dumped core due to a bug in the serf library that SVN uses.  Work
  53   it around on our side, even though the SVN side is being fixed.
  54
  55 * On MacOS X, we detected if the filesystem needs the "pre-composed
  56   unicode strings" workaround, but did not automatically enable it.
  57   Now we do.
  58
  59 * remote-hg remote helper misbehaved when interacting with a local Hg
  60   repository relative to the home directory, e.g. "clone hg::~/there".
  61
  62 * imap-send ported to OS X uses Apple's security framework instead of
  63   OpenSSL one.
  64
  65 * Subversion 1.8.0 that was recently released breaks older subversion
  66   clients coming over http/https in various ways.
  67
  68 * "git fast-import" treats an empty path given to "ls" as the root of
  69   the tree.
  70
  71
  72UI, Workflows & Features
  73
  74 * A packfile that stores the same object more than once is broken and
  75   will be rejected by "git index-pack" that is run when receiving
  76   data over the wire.
  77
  78 * Earlier we started rejecting an attempt to add 0{40} object name to
  79   the index and to tree objects, but it sometimes is necessary to
  80   allow so to be able to use tools like filter-branch to correct such
  81   broken tree objects.  "filter-branch" can again be used to to do
  82   so.
  83
  84 * "git config" did not provide a way to set or access numbers larger
  85   than a native "int" on the platform; it now provides 64-bit signed
  86   integers on all platforms.
  87
  88 * "git pull --rebase" always chose to do the bog-standard flattening
  89   rebase.  You can tell it to run "rebase --preserve-merges" by
  90   setting "pull.rebase" configuration to "preserve".
  91
  92 * "git push --no-thin" actually disables the "thin pack transfer"
  93   optimization.
  94
  95 * Magic pathspecs like ":(icase)makefile" that matches both
  96   Makefile and makefile can be used in more places.
  97
  98 * The "http.*" variables can now be specified per URL that the
  99   configuration applies.  For example,
 100
 101   [http]
 102       sslVerify = true
 103   [http "https://weak.example.com/"]
 104       sslVerify = false
 105
 106   would flip http.sslVerify off only when talking to that specified
 107   site.
 108
 109 * "git mv A B" when moving a submodule A has been taught to
 110   relocate its working tree and to adjust the paths in the
 111   .gitmodules file.
 112
 113 * "git blame" can now take more than one -L option to discover the
 114   origin of multiple blocks of the lines.
 115
 116 * The http transport clients can optionally ask to save cookies
 117   with http.savecookies configuration variable.
 118
 119 * "git push" learned a more fine grained control over a blunt
 120   "--force" when requesting a non-fast-forward update with the
 121   "--force-with-lease=<refname>:<expected object name>" option.
 122
 123 * "git diff --diff-filter=<classes of changes>" can now take
 124   lowercase letters (e.g. "--diff-filter=d") to mean "show
 125   everything but these classes".  "git diff-files -q" is now a
 126   deprecated synonym for "git diff-files --diff-filter=d".
 127
 128 * "git fetch" (hence "git pull" as well) learned to check
 129   "fetch.prune" and "remote.*.prune" configuration variables and
 130   to behave as if the "--prune" command line option was given.
 131
 132 * "git check-ignore -z" applied the NUL termination to both its input
 133   (with --stdin) and its output, but "git check-attr -z" ignored the
 134   option on the output side. Make both honor -z on the input and
 135   output side the same way.
 136
 137 * "git whatchanged" may still be used by old timers, but mention of
 138   it in documents meant for new users will only waste readers' time
 139   wonderig what the difference is between it and "git log".  Make it
 140   less prominent in the general part of the documentation and explain
 141   that it is merely a "git log" with different default behaviour in
 142   its own document.
 143
 144
 145Performance, Internal Implementation, etc.
 146
 147 * If a build-time fallback is set to "cat" instead of "less", we
 148   should apply the same "no subprocess or pipe" optimization as we
 149   apply to user-supplied GIT_PAGER=cat.
 150
 151 * Many commands use --dashed-option as a operation mode selector
 152   (e.g. "git tag --delete") that the user can use at most one
 153   (e.g. "git tag --delete --verify" is a nonsense) and you cannot
 154   negate (e.g. "git tag --no-delete" is a nonsense).  parse-options
 155   API learned a new OPT_CMDMODE macro to make it easier to implement
 156   such a set of options.
 157
 158 * OPT_BOOLEAN() in parse-options API was misdesigned to be "counting
 159   up" but many subcommands expect it to behave as "on/off". Update
 160   them to use OPT_BOOL() which is a proper boolean.
 161
 162 * "git gc" exits early without doing a double-work when it detects
 163   that another instance of itself is already running.
 164
 165 * Under memory pressure and/or file descriptor pressure, we used to
 166   close pack windows that are not used and also closed filehandle to
 167   an open but unused packfiles. These are now controlled separately
 168   to better cope with the load.
 169
 170Also contains various documentation updates and code clean-ups.
 171
 172
 173Fixes since v1.8.4
 174------------------
 175
 176Unless otherwise noted, all the fixes since v1.8.4 in the maintenance
 177track are contained in this release (see release notes to them for
 178details).
 179
 180 * "git cvsserver" computed the permission mode bits incorrectly for
 181   executable files.
 182   (merge 1b48d56 jc/cvsserver-perm-bit-fix later to maint).
 183
 184 * When send-email comes up with an error message to die with upon
 185   failure to start an SSL session, it tried to read the error string
 186   from a wrong place.
 187   (merge 6cb0c88 bc/send-email-ssl-die-message-fix later to maint).
 188
 189 * The implementation of "add -i" has a crippling code to work around
 190   ActiveState Perl limitation but it by mistake also triggered on Git
 191   for Windows where MSYS perl is used.
 192   (merge df17e77 js/add-i-mingw later to maint).
 193
 194 * We made sure that we notice the user-supplied GIT_DIR is actually a
 195   gitfile, but did not do the same when the default ".git" is a
 196   gitfile.
 197   (merge 487a2b7 nd/git-dir-pointing-at-gitfile later to maint).
 198
 199 * When an object is not found after checking the packfiles and then
 200   loose object directory, read_sha1_file() re-checks the packfiles to
 201   prevent racing with a concurrent repacker; teach the same logic to
 202   has_sha1_file().
 203   (merge 45e8a74 jk/has-sha1-file-retry-packed later to maint).
 204
 205 * "git commit --author=$name", when $name is not in the canonical
 206   "A. U. Thor <au.thor@example.xz>" format, looks for a matching name
 207   from existing history, but did not consult mailmap to grab the
 208   preferred author name.
 209   (merge ea16794 ap/commit-author-mailmap later to maint).
 210
 211 * "git ls-files -k" needs to crawl only the part of the working tree
 212   that may overlap the paths in the index to find killed files, but
 213   shared code with the logic to find all the untracked files, which
 214   made it unnecessarily inefficient.
 215   (merge 680be04 jc/ls-files-killed-optim later to maint).
 216
 217 * The commit object names in the insn sheet that was prepared at the
 218   beginning of "rebase -i" session can become ambiguous as the
 219   rebasing progresses and the repository gains more commits. Make
 220   sure the internal record is kept with full 40-hex object names.
 221   (merge 75c6976 es/rebase-i-no-abbrev later to maint).
 222
 223 * "git rebase --preserve-merges" internally used the merge machinery
 224   and as a side effect, left merge summary message in the log, but
 225   when rebasing, there should not be a need for merge summary.
 226   (merge a9f739c rt/rebase-p-no-merge-summary later to maint).
 227
 228 * A call to xread() was used without a loop around to cope with short
 229   read in the codepath to stream new contents to a pack.
 230   (merge e92527c js/xread-in-full later to maint).
 231
 232 * "git rebase -i" forgot that the comment character can be
 233   configurable while reading its insn sheet.
 234   (merge 7bca7af es/rebase-i-respect-core-commentchar later to maint).
 235
 236 * The mailmap support code read past the allocated buffer when the
 237   mailmap file ended with an incomplete line.
 238   (merge f972a16 jk/mailmap-incomplete-line later to maint).
 239
 240 * We used to send a large request to read(2)/write(2) as a single
 241   system call, which was bad from the latency point of view when
 242   the operation needs to be killed, and also triggered an error on
 243   broken 64-bit systems that refuse to take more than 2GB read or
 244   write in one go.
 245   (merge a487916 sp/clip-read-write-to-8mb later to maint).
 246
 247 * "git fetch" that auto-followed tags incorrectly reused the
 248   connection with Git-aware transport helper (like the sample "ext::"
 249   helper shipped with Git).
 250   (merge 0f73f8b jc/transport-do-not-use-connect-twice-in-fetch later to maint).
 251
 252 * "git log --full-diff -- <pathspec>" showed a huge diff for paths
 253   outside the given <pathspec> for each commit, instead of showing
 254   the change relative to the parent of the commit.  "git reflog -p"
 255   had a similar problem.
 256   (merge 838f9a1 tr/log-full-diff-keep-true-parents later to maint).
 257
 258 * Setting submodule.*.path configuration variable to true (without
 259   giving "= value") caused Git to segfault.
 260   (merge 4b05440 jl/some-submodule-config-are-not-boolean later to maint).
 261
 262 * "git rebase -i" (there could be others, as the root cause is pretty
 263   generic) fed a random, data dependeant string to 'echo' and
 264   expects it to come out literally, corrupting its error message.
 265   (merge 89b0230 mm/no-shell-escape-in-die-message later to maint).
 266
 267 * Some people still use rather old versions of bash, which cannot
 268   grok some constructs like 'printf -v varname' the prompt and
 269   completion code started to use recently.
 270   (merge a44aa69 bc/completion-for-bash-3.0 later to maint).
 271
 272 * Code to read configuration from a blob object did not compile on
 273   platforms with fgetc() etc. implemented as macros.
 274   (merge 49d6cfa hv/config-from-blob later to maint-1.8.3).
 275
 276 * The recent "short-cut clone connectivity check" topic broke a
 277   shallow repository when a fetch operation tries to auto-follow tags.
 278   (merge 6da8bdc nd/fetch-pack-shallow-fix later to maint-1.8.3).