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