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 18The meanings of "--tags" option to "git fetch" has changed; the 19command fetches tags _in addition to_ what are fetched by the same 20command line without the option. 21 22A handful of ancient commands that have long been deprecated are 23finally gone (repo-config, tar-tree, lost-found, and peek-remote). 24 25 26Backward compatibility notes (for Git 2.0) 27------------------------------------------ 28 29When "git push [$there]" does not say what to push, we have used the 30traditional "matching" semantics so far (all your branches were sent 31to the remote as long as there already are branches of the same name 32over there). In Git 2.0, the default will change to the "simple" 33semantics, which pushes: 34 35 - only the current branch to the branch with the same name, and only 36 when the current branch is set to integrate with that remote 37 branch, if you are pushing to the same remote as you fetch from; or 38 39 - only the current branch to the branch with the same name, if you 40 are pushing to a remote that is not where you usually fetch from. 41 42Use the user preference configuration variable "push.default" to 43change this. If you are an old-timer who is used to the "matching" 44semantics, you can set the variable to "matching" to keep the 45traditional behaviour. If you want to live in the future early, you 46can set it to "simple" today without waiting for Git 2.0. 47 48When "git add -u" (and "git add -A") is run inside a subdirectory and 49does not specify which paths to add on the command line, it 50will operate on the entire tree in Git 2.0 for consistency 51with "git commit -a" and other commands. There will be no 52mechanism to make plain "git add -u" behave like "git add -u .". 53Current users of "git add -u" (without a pathspec) should start 54training their fingers to explicitly say "git add -u ." 55before Git 2.0 comes. A warning is issued when these commands are 56run without a pathspec and when you have local changes outside the 57current directory, because the behaviour in Git 2.0 will be different 58from today's version in such a situation. 59 60In Git 2.0, "git add <path>" will behave as "git add -A <path>", so 61that "git add dir/" will notice paths you removed from the directory 62and record the removal. Versions before Git 2.0, including this 63release, will keep ignoring removals, but the users who rely on this 64behaviour are encouraged to start using "git add --ignore-removal <path>" 65now before 2.0 is released. 66 67The default prefix for "git svn" will change in Git 2.0. For a long 68time, "git svn" created its remote-tracking branches directly under 69refs/remotes, but it will place them under refs/remotes/origin/ unless 70it is told otherwise with its --prefix option. 71 72 73Updates since v1.8.5 74-------------------- 75 76Foreign interfaces, subsystems and ports. 77 78 * The HTTP transport, when talking GSS-Negotiate, uses "100 79 Continue" response to avoid having to rewind and resend a large 80 payload, which may not be always doable. 81 82 * Various bugfixes to remote-bzr and remote-hg (in contrib/). 83 84 85UI, Workflows & Features 86 87 * "gitweb" learned to treat ref hierarchies other than refs/heads as 88 if they are additional branch namespaces (e.g. refs/changes/ in 89 Gerrit). 90 91 * "git for-each-ref --format=..." learned a few formatting directives; 92 e.g. "%(color:red)%(HEAD)%(color:reset) %(refname:short) %(subject)". 93 94 * The command string given to "git submodule foreach" is passed 95 directly to the shell, without being eval'ed. This is a backward 96 incompatible change that may break existing users. 97 98 * "git log" and friends learned the "--exclude=<glob>" option, to 99 allow people to say "list history of all branches except those that 100 match this pattern" with "git log --exclude='*/*' --branches". 101 102 * "git rev-parse --parseopt" learned a new "--stuck-long" option to 103 help scripts parse options with an optional parameter. 104 105 * The "--tags" option to "git fetch" no longer tells the command to 106 fetch _only_ the tags. It instead fetches tags _in addition to_ 107 what are fetched by the same command line without the option. 108 109 110Performance, Internal Implementation, etc. 111 112 * The deprecated parse-options macro OPT_BOOLEAN has been removed; 113 use OPT_BOOL or OPT_COUNTUP in new code. 114 115 * A few duplicate implementations of prefix/suffix string comparison 116 functions have been unified to starts_with() and ends_with(). 117 118 * The new PERLLIB_EXTRA makefile variable can be used to specify 119 additional directories Perl modules (e.g. the ones necessary to run 120 git-svn) are installed on the platform when building. 121 122 * "git merge-base" learned the "--fork-point" mode, that implements 123 the same logic used in "git pull --rebase" to find a suitable fork 124 point out of the reflog entries for the remote-tracking branch the 125 work has been based on. 126 127 * A third-party "receive-pack" (the responder to "git push") can 128 advertise the "no-thin" capability to tell "git push" not to use 129 the thin-pack optimization. Our receive-pack has always been 130 capable of accepting and fattening a thin-pack, and will continue 131 not to ask "git push" to use a non-thin pack. 132 133 134Also contains various documentation updates and code clean-ups. 135 136 137Fixes since v1.8.5 138------------------ 139 140Unless otherwise noted, all the fixes since v1.8.5 in the maintenance 141track are contained in this release (see the maintenance releases' notes 142for details). 143 144 * "git mv A B/", when B does not exist as a directory, should error 145 out, but it didn't. 146 (merge c57f628 mm/mv-file-to-no-such-dir-with-slash later to maint). 147 148 * A workaround to an old bug in glibc prior to glibc 2.17 has been 149 retired; this would remove a side effect of the workaround that 150 corrupts system error messages in non-C locales. 151 152 * SSL-related options were not passed correctly to underlying socket 153 layer in "git send-email". 154 (merge 5508f3e tr/send-email-ssl later to maint). 155 156 * "git commit -v" appends the patch to the log message before 157 editing, and then removes the patch when the editor returned 158 control. However, the patch was not stripped correctly when the 159 first modified path was a submodule. 160 (merge 1a72cfd jl/commit-v-strip-marker later to maint). 161 162 * "git fetch --depth=0" was a no-op, and was silently ignored. 163 Diagnose it as an error. 164 (merge 5594bca nd/transport-positive-depth-only later to maint). 165 166 * Remote repository URL expressed in scp-style host:path notation are 167 parsed more carefully (e.g. "foo/bar:baz" is local, "[::1]:/~user" asks 168 to connect to user's home directory on host at address ::1. 169 (merge a2036d7 tb/clone-ssh-with-colon-for-port later to maint). 170 171 * "git diff -- ':(icase)makefile'" was unnecessarily rejected at the 172 command line parser. 173 (merge 887c6c1 nd/magic-pathspec later to maint). 174 175 * "git cat-file --batch-check=ok" did not check the existence of 176 the named object. 177 (merge 4ef8d1d sb/sha1-loose-object-info-check-existence later to maint). 178 179 * "git am --abort" sometimes complained about not being able to write 180 a tree with an 0{40} object in it. 181 (merge 77b43ca jk/two-way-merge-corner-case-fix later to maint). 182 183 * Two processes creating loose objects at the same time could have 184 failed unnecessarily when the name of their new objects started 185 with the same byte value, due to a race condition. 186 (merge b2476a6 jh/loose-object-dirs-creation-race later to maint).