4 Backward compatibility notes
5 ----------------------------
7 "git submodule foreach $cmd $args" used to treat "$cmd $args" the same
8 way "ssh" did, concatenating them into a single string and letting the
9 shell unquote. Careless users who forget to sufficiently quote $args
10 gets their argument split at $IFS whitespaces by the shell, and got
11 unexpected results due to this. Starting from this release, the
12 command line is passed directly to the shell, if it has an argument.
14 Read-only support for experimental loose-object format, in which users
15 could optionally choose to write in their loose objects for a short
16 while between v1.4.3 to v1.5.3 era, has been dropped.
18 The meanings of "--tags" option to "git fetch" has changed; the
19 command fetches tags _in addition to_ what are fetched by the same
20 command line without the option.
22 A handful of ancient commands that have long been deprecated are
23 finally gone (repo-config, tar-tree, lost-found, and peek-remote).
26 Backward compatibility notes (for Git 2.0)
27 ------------------------------------------
29 When "git push [$there]" does not say what to push, we have used the
30 traditional "matching" semantics so far (all your branches were sent
31 to the remote as long as there already are branches of the same name
32 over there). In Git 2.0, the default will change to the "simple"
33 semantics, which pushes:
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
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.
42 Use the user preference configuration variable "push.default" to
43 change this. If you are an old-timer who is used to the "matching"
44 semantics, you can set the variable to "matching" to keep the
45 traditional behaviour. If you want to live in the future early, you
46 can set it to "simple" today without waiting for Git 2.0.
48 When "git add -u" (and "git add -A") is run inside a subdirectory and
49 does not specify which paths to add on the command line, it
50 will operate on the entire tree in Git 2.0 for consistency
51 with "git commit -a" and other commands. There will be no
52 mechanism to make plain "git add -u" behave like "git add -u .".
53 Current users of "git add -u" (without a pathspec) should start
54 training their fingers to explicitly say "git add -u ."
55 before Git 2.0 comes. A warning is issued when these commands are
56 run without a pathspec and when you have local changes outside the
57 current directory, because the behaviour in Git 2.0 will be different
58 from today's version in such a situation.
60 In Git 2.0, "git add <path>" will behave as "git add -A <path>", so
61 that "git add dir/" will notice paths you removed from the directory
62 and record the removal. Versions before Git 2.0, including this
63 release, will keep ignoring removals, but the users who rely on this
64 behaviour are encouraged to start using "git add --ignore-removal <path>"
65 now before 2.0 is released.
67 The default prefix for "git svn" will change in Git 2.0. For a long
68 time, "git svn" created its remote-tracking branches directly under
69 refs/remotes, but it will place them under refs/remotes/origin/ unless
70 it is told otherwise with its --prefix option.
76 Foreign interfaces, subsystems and ports.
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.
82 * Various bugfixes to remote-bzr and remote-hg (in contrib/).
85 UI, Workflows & Features
87 * "gitweb" learned to treat ref hierarchies other than refs/heads as
88 if they are additional branch namespaces (e.g. refs/changes/ in
91 * "git for-each-ref --format=..." learned a few formatting directives;
92 e.g. "%(color:red)%(HEAD)%(color:reset) %(refname:short) %(subject)".
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.
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".
102 * "git rev-parse --parseopt" learned a new "--stuck-long" option to
103 help scripts parse options with an optional parameter.
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.
110 Performance, Internal Implementation, etc.
112 * The deprecated parse-options macro OPT_BOOLEAN has been removed;
113 use OPT_BOOL or OPT_COUNTUP in new code.
115 * A few duplicate implementations of prefix/suffix string comparison
116 functions have been unified to starts_with() and ends_with().
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.
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.
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.
134 Also contains various documentation updates and code clean-ups.
140 Unless otherwise noted, all the fixes since v1.8.5 in the maintenance
141 track are contained in this release (see the maintenance releases' notes
144 * "git mv A B/", when B does not exist as a directory, should error
146 (merge c57f628 mm/mv-file-to-no-such-dir-with-slash later to maint).
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.
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).
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).
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).
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).
171 * "git diff -- ':(icase)makefile'" was unnecessarily rejected at the
173 (merge 887c6c1 nd/magic-pathspec later to maint).
175 * "git cat-file --batch-check=ok" did not check the existence of
177 (merge 4ef8d1d sb/sha1-loose-object-info-check-existence later to maint).
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).
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).