1Git v1.9 Release Notes 2====================== 3 4Backward compatibility notes 5---------------------------- 6 7"git submodule foreach $cmd $args" used to treat "$cmd $args" the same 8way "ssh" did, concatenating them into a single string and letting the 9shell unquote. Careless users who forget to sufficiently quote $args 10gets their argument split at $IFS whitespaces by the shell, and got 11unexpected results due to this. Starting from this release, the 12command line is passed directly to the shell, if it has an argument. 13 14Read-only support for experimental loose-object format, in which users 15could optionally choose to write in their loose objects for a short 16while between v1.4.3 to v1.5.3 era, has been dropped. 17 18 19Backward compatibility notes (for Git 2.0) 20------------------------------------------ 21 22When "git push [$there]" does not say what to push, we have used the 23traditional "matching" semantics so far (all your branches were sent 24to the remote as long as there already are branches of the same name 25over there). In Git 2.0, the default will change to the "simple" 26semantics, which pushes: 27 28 - only the current branch to the branch with the same name, and only 29 when the current branch is set to integrate with that remote 30 branch, if you are pushing to the same remote as you fetch from; or 31 32 - only the current branch to the branch with the same name, if you 33 are pushing to a remote that is not where you usually fetch from. 34 35Use the user preference configuration variable "push.default" to 36change this. If you are an old-timer who is used to the "matching" 37semantics, you can set the variable to "matching" to keep the 38traditional behaviour. If you want to live in the future early, you 39can set it to "simple" today without waiting for Git 2.0. 40 41When "git add -u" (and "git add -A") is run inside a subdirectory and 42does not specify which paths to add on the command line, it 43will operate on the entire tree in Git 2.0 for consistency 44with "git commit -a" and other commands. There will be no 45mechanism to make plain "git add -u" behave like "git add -u .". 46Current users of "git add -u" (without a pathspec) should start 47training their fingers to explicitly say "git add -u ." 48before Git 2.0 comes. A warning is issued when these commands are 49run without a pathspec and when you have local changes outside the 50current directory, because the behaviour in Git 2.0 will be different 51from today's version in such a situation. 52 53In Git 2.0, "git add <path>" will behave as "git add -A <path>", so 54that "git add dir/" will notice paths you removed from the directory 55and record the removal. Versions before Git 2.0, including this 56release, will keep ignoring removals, but the users who rely on this 57behaviour are encouraged to start using "git add --ignore-removal <path>" 58now before 2.0 is released. 59 60The default prefix for "git svn" will change in Git 2.0. For a long 61time, "git svn" created its remote-tracking branches directly under 62refs/remotes, but it will place them under refs/remotes/origin/ unless 63it is told otherwise with its --prefix option. 64 65 66Updates since v1.8.5 67-------------------- 68 69Foreign interfaces, subsystems and ports. 70 71 * The HTTP transport, when talking GSS-Negotinate, uses "100 72 Continue" response to avoid having to rewind and resend a large 73 payload, which may not be always doable. 74 75 * Various bugfixes to remote-bzr and remote-hg (in contrib/). 76 77 78UI, Workflows & Features 79 80 * "git for-each-ref --format=..." learned a few formatting directives; 81 e.g. "%(color:red)%(HEAD)%(color:reset) %(refname:short) %(subject)". 82 83 * The command string given to "git submodule foreach" is passed 84 directly to the shell, without being eval'ed. This is a backward 85 incompatible change that may break existing users. 86 87 * "git log" and friends learned the "--exclude=<glob>" option, to 88 allow people to say "list history of all branches except those that 89 match this pattern" with "git log --exclude='*/*' --branches". 90 91 * "git rev-parse --parseopt" learned a new "--stuck-long" option to 92 help scripts parse options with an optional parameter. 93 94 95Performance, Internal Implementation, etc. 96 97 * The new PERLLIB_EXTRA makefile variable can be used to specify 98 additional directories Perl modules (e.g. the ones necessary to run 99 git-svn) are installed on the platform when building. 100 101 * "git merge-base" learned the "--fork-point" mode, that implements 102 the same logic used in "git pull --rebase" to find a suitable fork 103 point out of the reflog entries for the remote-tracking branch the 104 work has been based on. 105 106 107 108Also contains various documentation updates and code clean-ups. 109 110 111Fixes since v1.8.5 112------------------ 113 114Unless otherwise noted, all the fixes since v1.8.5 in the maintenance 115track are contained in this release (see the maintenance releases' notes 116for details). 117 118 * "git diff -- ':(icase)makefile'" was unnecessarily rejected at the 119 command line parser. 120 (merge 887c6c1 nd/magic-pathspec later to maint). 121 122 * "git cat-file --batch-check=ok" did not check the existence of 123 the named object. 124 (merge 4ef8d1d sb/sha1-loose-object-info-check-existence later to maint). 125 126 * "git am --abort" sometimes complained about not being able to write 127 a tree with an 0{40} object in it. 128 (merge 77b43ca jk/two-way-merge-corner-case-fix later to maint). 129 130 * Two processes creating loose objects at the same time could have 131 failed unnecessarily when the name of their new objects started 132 with the same byte value, due to a race condition. 133 (merge b2476a6 jh/loose-object-dirs-creation-race later to maint).