| 1 | Git v1.8.5 Release Notes |
| 2 | ======================== |
| 3 | |
| 4 | Backward compatibility notes (for Git 2.0) |
| 5 | ------------------------------------------ |
| 6 | |
| 7 | When "git push [$there]" does not say what to push, we have used the |
| 8 | traditional "matching" semantics so far (all your branches were sent |
| 9 | to the remote as long as there already are branches of the same name |
| 10 | over there). In Git 2.0, the default will change to the "simple" |
| 11 | semantics, which 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 | |
| 20 | Use the user preference configuration variable "push.default" to |
| 21 | change this. If you are an old-timer who is used to the "matching" |
| 22 | semantics, you can set the variable to "matching" to keep the |
| 23 | traditional behaviour. If you want to live in the future early, you |
| 24 | can set it to "simple" today without waiting for Git 2.0. |
| 25 | |
| 26 | When "git add -u" (and "git add -A") is run inside a subdirectory and |
| 27 | does not specify which paths to add on the command line, it |
| 28 | will operate on the entire tree in Git 2.0 for consistency |
| 29 | with "git commit -a" and other commands. There will be no |
| 30 | mechanism to make plain "git add -u" behave like "git add -u .". |
| 31 | Current users of "git add -u" (without a pathspec) should start |
| 32 | training their fingers to explicitly say "git add -u ." |
| 33 | before Git 2.0 comes. A warning is issued when these commands are |
| 34 | run without a pathspec and when you have local changes outside the |
| 35 | current directory, because the behaviour in Git 2.0 will be different |
| 36 | from today's version in such a situation. |
| 37 | |
| 38 | In Git 2.0, "git add <path>" will behave as "git add -A <path>", so |
| 39 | that "git add dir/" will notice paths you removed from the directory |
| 40 | and record the removal. Versions before Git 2.0, including this |
| 41 | release, will keep ignoring removals, but the users who rely on this |
| 42 | behaviour are encouraged to start using "git add --ignore-removal <path>" |
| 43 | now before 2.0 is released. |
| 44 | |
| 45 | The default prefix for "git svn" will change in Git 2.0. For a long |
| 46 | time, "git svn" created its remote-tracking branches directly under |
| 47 | refs/remotes, but it will place them under refs/remotes/origin/ unless |
| 48 | it is told otherwise with its --prefix option. |
| 49 | |
| 50 | |
| 51 | Updates since v1.8.4 |
| 52 | -------------------- |
| 53 | |
| 54 | Foreign interfaces, subsystems and ports. |
| 55 | |
| 56 | * "git-svn" has been taught to use the serf library, which is the |
| 57 | only option SVN 1.8.0 offers us when talking the HTTP protocol. |
| 58 | |
| 59 | * "git-svn" talking over an https:// connection using the serf library |
| 60 | dumped core due to a bug in the serf library that SVN uses. Work |
| 61 | around it on our side, even though the SVN side is being fixed. |
| 62 | |
| 63 | * On MacOS X, we detected if the filesystem needs the "pre-composed |
| 64 | unicode strings" workaround, but did not automatically enable it. |
| 65 | Now we do. |
| 66 | |
| 67 | * remote-hg remote helper misbehaved when interacting with a local Hg |
| 68 | repository relative to the home directory, e.g. "clone hg::~/there". |
| 69 | |
| 70 | * imap-send ported to OS X uses Apple's security framework instead of |
| 71 | OpenSSL's. |
| 72 | |
| 73 | * "git fast-import" treats an empty path given to "ls" as the root of |
| 74 | the tree. |
| 75 | |
| 76 | |
| 77 | UI, Workflows & Features |
| 78 | |
| 79 | * xdg-open can be used as a browser backend for "git web-browse" |
| 80 | (hence to show "git help -w" output), when available. |
| 81 | |
| 82 | * "git grep" and "git show" pay attention to the "--textconv" option |
| 83 | when these commands are told to operate on blob objects (e.g. "git |
| 84 | grep -e pattern --textconv HEAD:Makefile"). |
| 85 | |
| 86 | * "git replace" helper no longer allows an object to be replaced with |
| 87 | another object of a different type to avoid confusion (you can |
| 88 | still manually craft such a replacement using "git update-ref", as an |
| 89 | escape hatch). |
| 90 | |
| 91 | * "git status" no longer prints the dirty status information of |
| 92 | submodules for which submodule.$name.ignore is set to "all". |
| 93 | |
| 94 | * "git rebase -i" honours core.abbrev when preparing the insn sheet |
| 95 | for editing. |
| 96 | |
| 97 | * "git status" during a cherry-pick shows which original commit is |
| 98 | being picked. |
| 99 | |
| 100 | * Instead of typing four capital letters "HEAD", you can say "@" now, |
| 101 | e.g. "git log @". |
| 102 | |
| 103 | * "git check-ignore" follows the same rule as "git add" and "git |
| 104 | status" in that the ignore/exclude mechanism does not take effect |
| 105 | on paths that are already tracked. With the "--no-index" option, it |
| 106 | can be used to diagnose which paths that should have been ignored |
| 107 | have been mistakenly added to the index. |
| 108 | |
| 109 | * Some irrelevant "advice" messages that are shared with "git status" |
| 110 | output have been removed from the commit log template. |
| 111 | |
| 112 | * "update-refs" learned a "--stdin" option to read multiple update |
| 113 | requests and perform them in an all-or-none fashion. |
| 114 | |
| 115 | * Just like "make -C <directory>", "git -C <directory> ..." tells Git |
| 116 | to go there before doing anything else. |
| 117 | |
| 118 | * Just like "git checkout -" knows to check out, and "git merge -" |
| 119 | knows to merge, the branch you were previously on, "git cherry-pick" |
| 120 | now understands "git cherry-pick -" to pick from the previous |
| 121 | branch. |
| 122 | |
| 123 | * "git status" now omits the prefix to make its output a comment in a |
| 124 | commit log editor, which is not necessary for human consumption. |
| 125 | Scripts that parse the output of "git status" are advised to use |
| 126 | "git status --porcelain" instead, as its format is stable and easier |
| 127 | to parse. |
| 128 | |
| 129 | * The ref syntax "foo^{tag}" (with the literal string "{tag}") peels a |
| 130 | tag ref to itself, i.e. it's a no-op., and fails if |
| 131 | "foo" is not a tag. "git rev-parse --verify v1.0^{tag}" is |
| 132 | a more convenient way than "test $(git cat-file -t v1.0) = tag" to |
| 133 | check if v1.0 is a tag. |
| 134 | |
| 135 | * "git branch -v -v" (and "git status") did not distinguish among a |
| 136 | branch that is not based on any other branch, a branch that is in |
| 137 | sync with its upstream branch, and a branch that is configured with an |
| 138 | upstream branch that no longer exists. |
| 139 | |
| 140 | * Earlier we started rejecting any attempt to add the 0{40} object name to |
| 141 | the index and to tree objects, but it sometimes is necessary to |
| 142 | allow this to be able to use tools like filter-branch to correct such |
| 143 | broken tree objects. "filter-branch" can again be used to do this. |
| 144 | |
| 145 | * "git config" did not provide a way to set or access numbers larger |
| 146 | than a native "int" on the platform; it now provides 64-bit signed |
| 147 | integers on all platforms. |
| 148 | |
| 149 | * "git pull --rebase" always chose to do the bog-standard flattening |
| 150 | rebase. You can tell it to run "rebase --preserve-merges" with |
| 151 | "git pull --rebase=preserve" or by |
| 152 | setting "pull.rebase" configuration to "preserve". |
| 153 | |
| 154 | * "git push --no-thin" actually disables the "thin pack transfer" |
| 155 | optimization. |
| 156 | |
| 157 | * Magic pathspecs like ":(icase)makefile" (matches both Makefile |
| 158 | and makefile) and ":(glob)foo/**/bar" (matches "bar" in "foo" |
| 159 | and any subdirectory of "foo") can be used in more places. |
| 160 | |
| 161 | * The "http.*" variables can now be specified for individual URLs. |
| 162 | For example, |
| 163 | |
| 164 | [http] |
| 165 | sslVerify = true |
| 166 | [http "https://weak.example.com/"] |
| 167 | sslVerify = false |
| 168 | |
| 169 | would flip http.sslVerify off only when talking to that specific |
| 170 | site. |
| 171 | |
| 172 | * "git mv A B" when moving a submodule has been taught to |
| 173 | relocate the submodule's working tree and to adjust the paths in the |
| 174 | .gitmodules file. |
| 175 | |
| 176 | * "git blame" can now take more than one -L option to discover the |
| 177 | origin of multiple blocks of lines. |
| 178 | |
| 179 | * The http transport clients can optionally ask to save cookies |
| 180 | with the http.savecookies configuration variable. |
| 181 | |
| 182 | * "git push" learned a more fine grained control over a blunt |
| 183 | "--force" when requesting a non-fast-forward update with the |
| 184 | "--force-with-lease=<refname>:<expected object name>" option. |
| 185 | |
| 186 | * "git diff --diff-filter=<classes of changes>" can now take |
| 187 | lowercase letters (e.g. "--diff-filter=d") to mean "show |
| 188 | everything but these classes". "git diff-files -q" is now a |
| 189 | deprecated synonym for "git diff-files --diff-filter=d". |
| 190 | |
| 191 | * "git fetch" (hence "git pull" as well) learned to check |
| 192 | "fetch.prune" and "remote.*.prune" configuration variables and |
| 193 | to behave as if the "--prune" command line option was given. |
| 194 | |
| 195 | * "git check-ignore -z" applied the NUL termination to both its input |
| 196 | (with --stdin) and its output, but "git check-attr -z" ignored the |
| 197 | option on the output side. Make both honor -z on the input and |
| 198 | output side the same way. |
| 199 | |
| 200 | * "git whatchanged" may still be used by old timers, but mention of |
| 201 | it in documents meant for new users will only waste readers' time |
| 202 | wondering what the difference is between it and "git log". Make it |
| 203 | less prominent in the general part of the documentation and explain |
| 204 | that it is merely a "git log" with different default behaviour in |
| 205 | its own document. |
| 206 | |
| 207 | |
| 208 | Performance, Internal Implementation, etc. |
| 209 | |
| 210 | * "git for-each-ref" when asking for merely the object name does not |
| 211 | have to parse the object pointed at by the refs; the codepath has |
| 212 | been optimized. |
| 213 | |
| 214 | * The HTTP transport will try to use TCP keepalive when able. |
| 215 | |
| 216 | * "git repack" is now written in C. |
| 217 | |
| 218 | * Build procedure for MSVC has been updated. |
| 219 | |
| 220 | * If a build-time fallback is set to "cat" instead of "less", we |
| 221 | should apply the same "no subprocess or pipe" optimization as we |
| 222 | apply to user-supplied GIT_PAGER=cat. |
| 223 | |
| 224 | * Many commands use a --dashed-option as an operation mode selector |
| 225 | (e.g. "git tag --delete") that excludes other operation modes |
| 226 | (e.g. "git tag --delete --verify" is nonsense) and that cannot be |
| 227 | negated (e.g. "git tag --no-delete" is nonsense). The parse-options |
| 228 | API learned a new OPT_CMDMODE macro to make it easier to implement |
| 229 | such a set of options. |
| 230 | |
| 231 | * OPT_BOOLEAN() in the parse-options API was misdesigned to be "counting |
| 232 | up" but many subcommands expect it to behave as "on/off". Update |
| 233 | them to use OPT_BOOL() which is a proper boolean. |
| 234 | |
| 235 | * "git gc" exits early without doing any work when it detects |
| 236 | that another instance of itself is already running. |
| 237 | |
| 238 | * Under memory pressure and/or file descriptor pressure, we used to |
| 239 | close pack windows that are not used and also closed filehandles to |
| 240 | open but unused packfiles. These are now controlled separately |
| 241 | to better cope with the load. |
| 242 | |
| 243 | Also contains various documentation updates and code clean-ups. |
| 244 | |
| 245 | |
| 246 | Fixes since v1.8.4 |
| 247 | ------------------ |
| 248 | |
| 249 | Unless otherwise noted, all the fixes since v1.8.4 in the maintenance |
| 250 | track are contained in this release (see the maintenance releases' notes for |
| 251 | details). |
| 252 | |
| 253 | * An ancient How-To on serving Git repositories on an HTTP server |
| 254 | lacked a warning that it has been mostly superseded with a more |
| 255 | modern way. |
| 256 | (merge 6d52bc3 sc/doc-howto-dumb-http later to maint). |
| 257 | |
| 258 | * The interaction between the use of Perl in our test suite and NO_PERL |
| 259 | has been clarified a bit. |
| 260 | (merge f8fc0ee jn/test-prereq-perl-doc later to maint). |
| 261 | |
| 262 | * The synopsis section of the "git unpack-objects" documentation has been |
| 263 | clarified a bit. |
| 264 | (merge 61e2e22 vd/doc-unpack-objects later to maint). |
| 265 | |
| 266 | * We did not generate the HTML version of the documentation to "git subtree" |
| 267 | in contrib/. |
| 268 | (merge 95c62fb jk/subtree-install-fix later to maint). |
| 269 | |
| 270 | * A fast-import stream expresses a pathname with funny characters by |
| 271 | quoting them in C style; the remote-hg remote helper forgot to unquote |
| 272 | such a path. |
| 273 | (merge 1136265 ap/remote-hg-unquote-cquote later to maint). |
| 274 | |
| 275 | * "git reset -p HEAD" has a codepath to special-case it to behave |
| 276 | differently from resetting to contents of other commits, but a |
| 277 | recent change broke it. |
| 278 | |
| 279 | * Coloring around octopus merges in "log --graph" output was screwy. |
| 280 | (merge 339c17b hn/log-graph-color-octopus later to maint). |
| 281 | |
| 282 | * "git checkout topic", when there is not yet a local "topic" branch |
| 283 | but there is a unique remote-tracking branch for a remote "topic" |
| 284 | branch, pretended as if "git checkout -t -b topic remote/$r/topic" |
| 285 | (for that unique remote $r) was run. This hack however was not |
| 286 | implemented for "git checkout topic --". |
| 287 | (merge bca3969 mm/checkout-auto-track-fix later to maint). |
| 288 | |
| 289 | * One long-standing flaw in the pack transfer protocol used by "git |
| 290 | clone" was that there was no way to tell the other end which branch |
| 291 | "HEAD" points at, and the receiving end needed to guess. A new |
| 292 | capability has been defined in the pack protocol to convey this |
| 293 | information so that cloning from a repository with more than one |
| 294 | branch pointing at the same commit where the HEAD is at now |
| 295 | reliably sets the initial branch in the resulting repository. |
| 296 | (merge 360a326 jc/upload-pack-send-symref later to maint). |
| 297 | |
| 298 | * We did not handle cases where the http transport gets redirected during |
| 299 | the authorization request (e.g. from http:// to https://). |
| 300 | (merge 70900ed jk/http-auth-redirects later to maint). |
| 301 | |
| 302 | * Bash prompting code to deal with an SVN remote as an upstream |
| 303 | was coded in a way unsupported by older Bash versions (3.x). |
| 304 | (merge 52ec889 sg/prompt-svn-remote-fix later to maint). |
| 305 | |
| 306 | * The fall-back parsing of commit objects with broken author or |
| 307 | committer lines was less robust than ideal in picking up the |
| 308 | timestamps. |
| 309 | (merge 03818a4 jk/split-broken-ident later to maint). |
| 310 | |
| 311 | * "git rev-list --objects ^v1.0^ v1.0" gave the v1.0 tag itself in the |
| 312 | output, but "git rev-list --objects v1.0^..v1.0" did not. |
| 313 | (merge 895c5ba jc/revision-range-unpeel later to maint). |
| 314 | |
| 315 | * "git clone" wrote some progress messages to standard output, not |
| 316 | to standard error, and did not suppress them with the |
| 317 | --no-progress option. |
| 318 | (merge 643f918 jk/clone-progress-to-stderr later to maint). |
| 319 | |
| 320 | * "format-patch --from=<whom>" forgot to omit an unnecessary in-body |
| 321 | from line, i.e. when <whom> is the same as the real author. |
| 322 | (merge 662cc30 jk/format-patch-from later to maint). |
| 323 | |
| 324 | * "git shortlog" used to choke and die when there is a malformed |
| 325 | commit (e.g. missing authors); it now simply ignores such a commit |
| 326 | and keeps going. |
| 327 | (merge cd4f09e jk/shortlog-tolerate-broken-commit later to maint). |
| 328 | |
| 329 | * "git merge-recursive" did not parse its "--diff-algorithm=" command |
| 330 | line option correctly. |
| 331 | (merge 6562928 jk/diff-algo later to maint). |
| 332 | |
| 333 | * When running "fetch -q", a long silence while the sender side |
| 334 | computes the set of objects to send can be mistaken by proxies as |
| 335 | dropped connection. The server side has been taught to send a |
| 336 | small empty messages to keep the connection alive. |
| 337 | (merge 115dedd jk/upload-pack-keepalive later to maint). |
| 338 | |
| 339 | * "git rebase" had a portability regression in v1.8.4 that triggered a |
| 340 | bug in some BSD shell implementations. |
| 341 | (merge 99855dd mm/rebase-continue-freebsd-WB later to maint). |
| 342 | |
| 343 | * "git branch --track" had a minor regression in v1.8.3.2 and later |
| 344 | that made it impossible to base your local work on anything but a |
| 345 | local branch of the upstream repository you are tracking. |
| 346 | (merge b0f49ff jh/checkout-auto-tracking later to maint). |
| 347 | |
| 348 | * When the web server responds with "405 Method Not Allowed", "git |
| 349 | http-backend" should tell the client what methods are allowed with |
| 350 | the "Allow" header. |
| 351 | (merge 9247be0 bc/http-backend-allow-405 later to maint). |
| 352 | |
| 353 | * When there is no sufficient overlap between old and new history |
| 354 | during a "git fetch" into a shallow repository, objects that the |
| 355 | sending side knows the receiving end has were unnecessarily sent. |
| 356 | (merge f21d2a7 nd/fetch-into-shallow later to maint). |
| 357 | |
| 358 | * "git cvsserver" computed the permission mode bits incorrectly for |
| 359 | executable files. |
| 360 | (merge 1b48d56 jc/cvsserver-perm-bit-fix later to maint). |
| 361 | |
| 362 | * When send-email obtains an error message to die with upon |
| 363 | failure to start an SSL session, it tried to read the error string |
| 364 | from a wrong place. |
| 365 | (merge 6cb0c88 bc/send-email-ssl-die-message-fix later to maint). |
| 366 | |
| 367 | * The implementation of "add -i" has some crippling code to work around an |
| 368 | ActiveState Perl limitation but it by mistake also triggered on Git |
| 369 | for Windows where MSYS perl is used. |
| 370 | (merge df17e77 js/add-i-mingw later to maint). |
| 371 | |
| 372 | * We made sure that we notice when the user-supplied GIT_DIR is actually a |
| 373 | gitfile, but did not do the same when the default ".git" is a |
| 374 | gitfile. |
| 375 | (merge 487a2b7 nd/git-dir-pointing-at-gitfile later to maint). |
| 376 | |
| 377 | * When an object is not found after checking the packfiles and the |
| 378 | loose object directory, read_sha1_file() re-checks the packfiles to |
| 379 | prevent racing with a concurrent repacker; teach the same logic to |
| 380 | has_sha1_file(). |
| 381 | (merge 45e8a74 jk/has-sha1-file-retry-packed later to maint). |
| 382 | |
| 383 | * "git commit --author=$name", when $name is not in the canonical |
| 384 | "A. U. Thor <au.thor@example.xz>" format, looks for a matching name |
| 385 | from existing history, but did not consult mailmap to grab the |
| 386 | preferred author name. |
| 387 | (merge ea16794 ap/commit-author-mailmap later to maint). |
| 388 | |
| 389 | * "git ls-files -k" needs to crawl only the part of the working tree |
| 390 | that may overlap the paths in the index to find killed files, but |
| 391 | shared code with the logic to find all the untracked files, which |
| 392 | made it unnecessarily inefficient. |
| 393 | (merge 680be04 jc/ls-files-killed-optim later to maint). |
| 394 | |
| 395 | * The shortened commit object names in the insn sheet that is prepared at the |
| 396 | beginning of a "rebase -i" session can become ambiguous as the |
| 397 | rebasing progresses and the repository gains more commits. Make |
| 398 | sure the internal record is kept with full 40-hex object names. |
| 399 | (merge 75c6976 es/rebase-i-no-abbrev later to maint). |
| 400 | |
| 401 | * "git rebase --preserve-merges" internally used the merge machinery |
| 402 | and as a side effect left the merge summary message in the log, but |
| 403 | when rebasing there is no need for the merge summary. |
| 404 | (merge a9f739c rt/rebase-p-no-merge-summary later to maint). |
| 405 | |
| 406 | * A call to xread() was used without a loop around it to cope with short |
| 407 | reads in the codepath to stream new contents to a pack. |
| 408 | (merge e92527c js/xread-in-full later to maint). |
| 409 | |
| 410 | * "git rebase -i" forgot that the comment character is |
| 411 | configurable while reading its insn sheet. |
| 412 | (merge 7bca7af es/rebase-i-respect-core-commentchar later to maint). |
| 413 | |
| 414 | * The mailmap support code read past the allocated buffer when the |
| 415 | mailmap file ended with an incomplete line. |
| 416 | (merge f972a16 jk/mailmap-incomplete-line later to maint). |
| 417 | |
| 418 | * We used to send a large request to read(2)/write(2) as a single |
| 419 | system call, which was bad from the latency point of view when |
| 420 | the operation needs to be killed, and also triggered an error on |
| 421 | broken 64-bit systems that refuse to read or write more than 2GB |
| 422 | in one go. |
| 423 | (merge a487916 sp/clip-read-write-to-8mb later to maint). |
| 424 | |
| 425 | * "git fetch" that auto-followed tags incorrectly reused the |
| 426 | connection with Git-aware transport helper (like the sample "ext::" |
| 427 | helper shipped with Git). |
| 428 | (merge 0f73f8b jc/transport-do-not-use-connect-twice-in-fetch later to maint). |
| 429 | |
| 430 | * "git log --full-diff -- <pathspec>" showed a huge diff for paths |
| 431 | outside the given <pathspec> for each commit, instead of showing |
| 432 | the change relative to the parent of the commit. "git reflog -p" |
| 433 | had a similar problem. |
| 434 | (merge 838f9a1 tr/log-full-diff-keep-true-parents later to maint). |
| 435 | |
| 436 | * Setting a submodule.*.path configuration variable to true (without |
| 437 | giving "= value") caused Git to segfault. |
| 438 | (merge 4b05440 jl/some-submodule-config-are-not-boolean later to maint). |
| 439 | |
| 440 | * "git rebase -i" (there could be others, as the root cause is pretty |
| 441 | generic) fed a random, data dependent string to 'echo' and |
| 442 | expected it to come out literally, corrupting its error message. |
| 443 | (merge 89b0230 mm/no-shell-escape-in-die-message later to maint). |
| 444 | |
| 445 | * Some people still use rather old versions of bash, which cannot |
| 446 | grok some constructs like 'printf -v varname' which the prompt and |
| 447 | completion code started to use recently. |
| 448 | (merge a44aa69 bc/completion-for-bash-3.0 later to maint). |
| 449 | |
| 450 | * Code to read configuration from a blob object did not compile on |
| 451 | platforms with fgetc() etc. implemented as macros. |
| 452 | (merge 49d6cfa hv/config-from-blob later to maint-1.8.3). |
| 453 | |
| 454 | * The recent "short-cut clone connectivity check" topic broke a |
| 455 | shallow repository when a fetch operation tries to auto-follow tags. |
| 456 | (merge 6da8bdc nd/fetch-pack-shallow-fix later to maint-1.8.3). |