d6fb0c054acb9ba8fd19f7fba865304632d9feec
   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 * remote-hg remote helper misbehaved when interacting with a local Hg
  52   repository relative to the home directory, e.g. "clone hg::~/there".
  53
  54 * imap-send ported to OS X uses Apple's security framework instead of
  55   OpenSSL one.
  56
  57 * Subversion 1.8.0 that was recently released breaks older subversion
  58   clients coming over http/https in various ways.
  59
  60 * "git fast-import" treats an empty path given to "ls" as the root of
  61   the tree.
  62
  63
  64UI, Workflows & Features
  65
  66 * "git config" did not provide a way to set or access numbers larger
  67   than a native "int" on the platform; it now provides 64-bit signed
  68   integers on all platforms.
  69
  70 * "git pull --rebase" always chose to do the bog-standard flattening
  71   rebase.  You can tell it to run "rebase --preserve-merges" by
  72   setting "pull.rebase" configuration to "preserve".
  73
  74 * "git push --no-thin" actually disables the "thin pack transfer"
  75   optimization.
  76
  77 * Magic pathspecs like ":(icase)makefile" that matches both
  78   Makefile and makefile can be used in more places.
  79
  80 * The "http.*" variables can now be specified per URL that the
  81   configuration applies.  For example,
  82
  83   [http]
  84       sslVerify = true
  85   [http "https://weak.example.com/"]
  86       sslVerify = false
  87
  88   would flip http.sslVerify off only when talking to that specified
  89   site.
  90
  91 * "git mv A B" when moving a submodule A has been taught to
  92   relocate its working tree and to adjust the paths in the
  93   .gitmodules file.
  94
  95 * "git blame" can now take more than one -L option to discover the
  96   origin of multiple blocks of the lines.
  97
  98 * The http transport clients can optionally ask to save cookies
  99   with http.savecookies configuration variable.
 100
 101 * "git push" learned a more fine grained control over a blunt
 102   "--force" when requesting a non-fast-forward update with the
 103   "--force-with-lease=<refname>:<expected object name>" option.
 104
 105 * "git diff --diff-filter=<classes of changes>" can now take
 106   lowercase letters (e.g. "--diff-filter=d") to mean "show
 107   everything but these classes".  "git diff-files -q" is now a
 108   deprecated synonym for "git diff-files --diff-filter=d".
 109
 110 * "git fetch" (hence "git pull" as well) learned to check
 111   "fetch.prune" and "remote.*.prune" configuration variables and
 112   to behave as if the "--prune" command line option was given.
 113
 114 * "git check-ignore -z" applied the NUL termination to both its input
 115   (with --stdin) and its output, but "git check-attr -z" ignored the
 116   option on the output side. Make both honor -z on the input and
 117   output side the same way.
 118
 119 * "git whatchanged" may still be used by old timers, but mention of
 120   it in documents meant for new users will only waste readers' time
 121   wonderig what the difference is between it and "git log".  Make it
 122   less prominent in the general part of the documentation and explain
 123   that it is merely a "git log" with different default behaviour in
 124   its own document.
 125
 126
 127Performance, Internal Implementation, etc.
 128
 129 * Many commands use --dashed-option as a operation mode selector
 130   (e.g. "git tag --delete") that the user can use at most one
 131   (e.g. "git tag --delete --verify" is a nonsense) and you cannot
 132   negate (e.g. "git tag --no-delete" is a nonsense).  parse-options
 133   API learned a new OPT_CMDMODE macro to make it easier to implement
 134   such a set of options.
 135
 136 * OPT_BOOLEAN() in parse-options API was misdesigned to be "counting
 137   up" but many subcommands expect it to behave as "on/off". Update
 138   them to use OPT_BOOL() which is a proper boolean.
 139
 140 * "git gc" exits early without doing a double-work when it detects
 141   that another instance of itself is already running.
 142
 143 * Under memory pressure and/or file descriptor pressure, we used to
 144   close pack windows that are not used and also closed filehandle to
 145   an open but unused packfiles. These are now controlled separately
 146   to better cope with the load.
 147
 148Also contains various documentation updates and code clean-ups.
 149
 150
 151Fixes since v1.8.4
 152------------------
 153
 154Unless otherwise noted, all the fixes since v1.8.4 in the maintenance
 155track are contained in this release (see release notes to them for
 156details).
 157
 158 * "git ls-files -k" needs to crawl only the part of the working tree
 159   that may overlap the paths in the index to find killed files, but
 160   shared code with the logic to find all the untracked files, which
 161   made it unnecessarily inefficient.
 162   (merge 680be04 jc/ls-files-killed-optim later to maint).
 163
 164 * The commit object names in the insn sheet that was prepared at the
 165   beginning of "rebase -i" session can become ambiguous as the
 166   rebasing progresses and the repository gains more commits. Make
 167   sure the internal record is kept with full 40-hex object names.
 168   (merge 75c6976 es/rebase-i-no-abbrev later to maint).
 169
 170 * "git rebase --preserve-merges" internally used the merge machinery
 171   and as a side effect, left merge summary message in the log, but
 172   when rebasing, there should not be a need for merge summary.
 173   (merge a9f739c rt/rebase-p-no-merge-summary later to maint).
 174
 175 * A call to xread() was used without a loop around to cope with short
 176   read in the codepath to stream new contents to a pack.
 177   (merge e92527c js/xread-in-full later to maint).
 178
 179 * "git rebase -i" forgot that the comment character can be
 180   configurable while reading its insn sheet.
 181   (merge 7bca7af es/rebase-i-respect-core-commentchar later to maint).
 182
 183 * The mailmap support code read past the allocated buffer when the
 184   mailmap file ended with an incomplete line.
 185   (merge f972a16 jk/mailmap-incomplete-line later to maint).
 186
 187 * We used to send a large request to read(2)/write(2) as a single
 188   system call, which was bad from the latency point of view when
 189   the operation needs to be killed, and also triggered an error on
 190   broken 64-bit systems that refuse to take more than 2GB read or
 191   write in one go.
 192   (merge a487916 sp/clip-read-write-to-8mb later to maint).
 193
 194 * "git fetch" that auto-followed tags incorrectly reused the
 195   connection with Git-aware transport helper (like the sample "ext::"
 196   helper shipped with Git).
 197   (merge 0f73f8b jc/transport-do-not-use-connect-twice-in-fetch later to maint).
 198
 199 * "git log --full-diff -- <pathspec>" showed a huge diff for paths
 200   outside the given <pathspec> for each commit, instead of showing
 201   the change relative to the parent of the commit.  "git reflog -p"
 202   had a similar problem.
 203   (merge 838f9a1 tr/log-full-diff-keep-true-parents later to maint).
 204
 205 * Setting submodule.*.path configuration variable to true (without
 206   giving "= value") caused Git to segfault.
 207   (merge 4b05440 jl/some-submodule-config-are-not-boolean later to maint).
 208
 209 * "git rebase -i" (there could be others, as the root cause is pretty
 210   generic) fed a random, data dependeant string to 'echo' and
 211   expects it to come out literally, corrupting its error message.
 212   (merge 89b0230 mm/no-shell-escape-in-die-message later to maint).
 213
 214 * Some people still use rather old versions of bash, which cannot
 215   grok some constructs like 'printf -v varname' the prompt and
 216   completion code started to use recently.
 217   (merge a44aa69 bc/completion-for-bash-3.0 later to maint).
 218
 219 * Code to read configuration from a blob object did not compile on
 220   platforms with fgetc() etc. implemented as macros.
 221   (merge 49d6cfa hv/config-from-blob later to maint-1.8.3).
 222
 223 * The recent "short-cut clone connectivity check" topic broke a
 224   shallow repository when a fetch operation tries to auto-follow tags.
 225   (merge 6da8bdc nd/fetch-pack-shallow-fix later to maint-1.8.3).