1Git 2.9 Release Notes 2===================== 3 4Backward compatibility note 5--------------------------- 6 7The end-user facing Porcelain level commands in the "git diff" and 8"git log" by default enables the rename detection; you can still use 9"diff.renames" configuration variable to disable this. 10 11Merging two branches that have no common ancestor with "git merge" is 12by default forbidden now to prevent creating such an unusual merge by 13mistake. 14 15The output formats of "git log" that indents the commit log message by 164 spaces now expands HT in the log message by default. You can use 17the "--no-expand-tabs" option to disable this. 18 19"git commit-tree" plumbing command required the user to always sign 20its result when the user sets the commit.gpgsign configuration 21variable, which was an ancient mistake, which this release corrects. 22A script that drives commit-tree, if it relies on this mistake, now 23needs to read commit.gpgsign and pass the -S option as necessary. 24 25 26Updates since v2.8 27------------------ 28 29UI, Workflows & Features 30 31 * Comes with git-multimail 1.3.1 (in contrib/). 32 33 * The end-user facing Porcelain level commands like "diff" and "log" 34 now enables the rename detection by default. 35 36 * The credential.helper configuration variable is cumulative and 37 there is no good way to override it from the command line. As 38 a special case, giving an empty string as its value now serves 39 as the signal to clear the values specified in various files. 40 41 * A new "interactive.diffFilter" configuration can be used to 42 customize the diff shown in "git add -i" session. 43 44 * "git p4" now allows P4 author names to be mapped to Git author 45 names. 46 47 * "git rebase -x" can be used without passing "-i" option. 48 49 * "git -c credential.<var>=<value> submodule" can now be used to 50 propagate configuration variables related to credential helper 51 down to the submodules. 52 53 * "git tag" can create an annotated tag without explicitly given an 54 "-a" (or "-s") option (i.e. when a tag message is given). A new 55 configuration variable, tag.forceSignAnnotated, can be used to tell 56 the command to create signed tag in such a situation. 57 58 * "git merge" used to allow merging two branches that have no common 59 base by default, which led to a brand new history of an existing 60 project created and then get pulled by an unsuspecting maintainer, 61 which allowed an unnecessary parallel history merged into the 62 existing project. The command has been taught not to allow this by 63 default, with an escape hatch "--allow-unrelated-histories" option 64 to be used in a rare event that merges histories of two projects 65 that started their lives independently. 66 67 * "git pull" has been taught to pass --allow-unrelated-histories 68 option to underlying "git merge". 69 70 * "git apply -v" learned to report paths in the patch that were 71 skipped via --include/--exclude mechanism or being outside the 72 current working directory. 73 74 * Shell completion (in contrib/) updates. 75 76 * The commit object name reported when "rebase -i" stops has been 77 shortened. 78 79 * "git worktree add" can be given "--no-checkout" option to only 80 create an empty worktree without checking out the files. 81 82 * "git mergetools" learned to drive ExamDiff. 83 84 * "git pull --rebase" learned "--[no-]autostash" option, so that 85 the rebase.autostash configuration variable set to true can be 86 overridden from the command line. 87 88 * When "git log" shows the log message indented by 4-spaces, the 89 remainder of a line after a HT does not align in the way the author 90 originally intended. The command now expands tabs by default in 91 such a case, and allows the users to override it with a new option, 92 "--no-expand-tabs". 93 94 * "git send-email" now uses a more readable timestamps when 95 formulating a message ID. 96 97 * "git rerere" can encounter two or more files with the same conflict 98 signature that have to be resolved in different ways, but there was 99 no way to record these separate resolutions. 100 (merge 890fca8 jc/rerere-multi later to maint). 101 102 * "git p4" learned to record P4 jobs in Git commit that imports from 103 the history in Perforce. 104 105 * "git describe --contains" often made a hard-to-justify choice of 106 tag to give name to a given commit, because it tried to come up 107 with a name with smallest number of hops from a tag, causing an old 108 commit whose close descendant that is recently tagged were not 109 described with respect to an old tag but with a newer tag. It did 110 not help that its computation of "hop" count was further tweaked to 111 penalize being on a side branch of a merge. The logic has been 112 updated to favor using the tag with the oldest tagger date, which 113 is a lot easier to explain to the end users: "We describe a commit 114 in terms of the (chronologically) oldest tag that contains the 115 commit." 116 (merge 7550424 js/name-rev-use-oldest-ref later to maint). 117 118 * "git clone" learned "--shallow-submodules" option. 119 120 * HTTP transport clients learned to throw extra HTTP headers at the 121 server, specified via http.extraHeader configuration variable. 122 123 * Patch output from "git diff" and friends has been tweaked to be 124 more readable by using a blank line as a strong hint that the 125 contents before and after it belong to a logically separate unit. 126 127 128Performance, Internal Implementation, Development Support etc. 129 130 * The embedded args argv-array in the child process is used to build 131 the command line to run pack-objects instead of using a separate 132 array of strings. 133 134 * A test for tags has been restructured so that more parts of it can 135 easily be run on a platform without a working GnuPG. 136 137 * The startup_info data, which records if we are working inside a 138 repository (among other things), are now uniformly available to Git 139 subcommand implementations, and Git avoids attempting to touch 140 references when we are not in a repository. 141 142 * The command line argument parser for "receive-pack" has been 143 rewritten to use parse-options. 144 145 * A major part of "git submodule update" has been ported to C to take 146 advantage of the recently added framework to run download tasks in 147 parallel. 148 149 * Rename bunch of tests on "git clone" for better organization. 150 151 * The tests that involve running httpd leaked the system-wide 152 configuration in /etc/gitconfig to the tested environment. 153 154 * Build updates for MSVC. 155 156 * The repository set-up sequence has been streamlined (the biggest 157 change is that there is no longer git_config_early()), so that we 158 do not attempt to look into refs/* when we know we do not have a 159 Git repository. 160 161 * Code restructuring around the "refs" area to prepare for pluggable 162 refs backends. 163 164 * Sources to many test helper binaries (and the generated helpers) 165 have been moved to t/helper/ subdirectory to reduce clutter at the 166 top level of the tree. 167 168 Note that this can break your tests if you check out revisions 169 across the merge boundary of this topic, e0b58519 (Merge branch 170 'nd/test-helpers', 2016-04-29), as bin-wrappers/test-* are not 171 rebuilt to point the underlying executables. For now, "make 172 distclean" is your friend. 173 174 * Unify internal logic between "git tag -v" and "git verify-tag" 175 commands by making one directly call into the other. 176 (merge bef234b st/verify-tag later to maint). 177 178 * "merge-recursive" strategy incorrectly checked if a path that is 179 involved in its internal merge exists in the working tree. 180 181 * The test scripts for "git p4" (but not "git p4" implementation 182 itself) has been updated so that they would work even on a system 183 where the installed version of Python is python 3. 184 (merge 1fb3fb4 ld/p4-test-py3 later to maint). 185 186 * As nobody maintains our in-tree git.spec.in and distros use their 187 own spec file, we stopped pretending that we support "make rpm". 188 189 * Move from unsigned char[20] to struct object_id continues. 190 191 192Also contains various documentation updates and code clean-ups. 193 194 195Fixes since v2.8 196---------------- 197 198Unless otherwise noted, all the fixes since v2.8 in the maintenance 199track are contained in this release (see the maintenance releases' 200notes for details). 201 202 * "git config --get-urlmatch", unlike other variants of the "git 203 config --get" family, did not signal error with its exit status 204 when there was no matching configuration. 205 206 * The "--local-env-vars" and "--resolve-git-dir" options of "git 207 rev-parse" failed to work outside a repository when the command's 208 option parsing was rewritten in 1.8.5 era. 209 210 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work. 211 212 * Fetching of history by naming a commit object name directly didn't 213 work across remote-curl transport. 214 215 * A small memory leak in an error codepath has been plugged in xdiff 216 code. 217 218 * strbuf_getwholeline() did not NUL-terminate the buffer on certain 219 corner cases in its error codepath. 220 221 * "git mergetool" did not work well with conflicts that both sides 222 deleted. 223 224 * "git send-email" had trouble parsing alias file in mailrc format 225 when lines in it had trailing whitespaces on them. 226 227 * When "git merge --squash" stopped due to conflict, the concluding 228 "git commit" failed to read in the SQUASH_MSG that shows the log 229 messages from all the squashed commits. 230 231 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging 232 nothing into an unborn history (which is arguably unusual usage, 233 which perhaps was the reason why nobody noticed it). 234 235 * When "git worktree" feature is in use, "git branch -d" allowed 236 deletion of a branch that is checked out in another worktree, 237 which was wrong. 238 239 * When "git worktree" feature is in use, "git branch -m" renamed a 240 branch that is checked out in another worktree without adjusting 241 the HEAD symbolic ref for the worktree. 242 243 * "git diff -M" used to work better when two originally identical 244 files A and B got renamed to X/A and X/B by pairing A to X/A and B 245 to X/B, but this was broken in the 2.0 timeframe. 246 247 * "git send-pack --all <there>" was broken when its command line 248 option parsing was written in the 2.6 timeframe. 249 250 * "git format-patch --help" showed `-s` and `--no-patch` as if these 251 are valid options to the command. We already hide `--patch` option 252 from the documentation, because format-patch is about showing the 253 diff, and the documentation now hides these options as well. 254 255 * When running "git blame $path" with unnormalized data in the index 256 for the path, the data in the working tree was blamed, even though 257 "git add" would not have changed what is already in the index, due 258 to "safe crlf" that disables the line-end conversion. It has been 259 corrected. 260 261 * A change back in version 2.7 to "git branch" broke display of a 262 symbolic ref in a non-standard place in the refs/ hierarchy (we 263 expect symbolic refs to appear in refs/remotes/*/HEAD to point at 264 the primary branch the remote has, and as .git/HEAD to point at the 265 branch we locally checked out). 266 267 * A partial rewrite of "git submodule" in the 2.7 timeframe changed 268 the way the gitdir: pointer in the submodules point at the real 269 repository location to use absolute paths by accident. This has 270 been corrected. 271 272 * "git commit" misbehaved in a few minor ways when an empty message 273 is given via -m '', all of which has been corrected. 274 275 * Support for CRAM-MD5 authentication method in "git imap-send" did 276 not work well. 277 278 * Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs 279 we use in imap-send, which has been adjusted for the change. 280 (merge 1245c74 ky/imap-send-openssl-1.1.0 later to maint). 281 282 * The socks5:// proxy support added back in 2.6.4 days was not aware 283 that socks5h:// proxies behave differently. 284 285 * "git config" had a codepath that tried to pass a NULL to 286 printf("%s"), which nobody seems to have noticed. 287 288 * On Cygwin, object creation uses the "create a temporary and then 289 rename it to the final name" pattern, not "create a temporary, 290 hardlink it to the final name and then unlink the temporary" 291 pattern. 292 293 This is necessary to use Git on Windows shared directories, and is 294 already enabled for the MinGW and plain Windows builds. It also 295 has been used in Cygwin packaged versions of Git for quite a while. 296 See http://thread.gmane.org/gmane.comp.version-control.git/291853 297 298 * "merge-octopus" strategy did not ensure that the index is clean 299 when merge begins. 300 301 * When "git merge" notices that the merge can be resolved purely at 302 the tree level (without having to merge blobs) and the resulting 303 tree happens to already exist in the object store, it forgot to 304 update the index, which lead to an inconsistent state for later 305 operations. 306 307 * "git submodule" reports the paths of submodules the command 308 recurses into, but this was incorrect when the command was not run 309 from the root level of the superproject. 310 (merge 2ab5660 sb/submodule-path-misc-bugs later to maint). 311 312 * The "user.useConfigOnly" configuration variable makes it an error 313 if users do not explicitly set user.name and user.email. However, 314 its check was not done early enough and allowed another error to 315 trigger, reporting that the default value we guessed from the 316 system setting was unusable. This was a suboptimal end-user 317 experience as we want the users to set user.name/user.email without 318 relying on the auto-detection at all. 319 (merge d3c06c1 da/user-useconfigonly later to maint). 320 321 * "git mv old new" did not adjust the path for a submodule that lives 322 as a subdirectory inside old/ directory correctly. 323 (merge a127331 sb/mv-submodule-fix later to maint). 324 325 * "git replace -e" did not honour "core.editor" configuration. 326 (merge 36b1437 js/replace-edit-use-editor-configuration later to maint). 327 328 * "git push" from a corrupt repository that attempts to push a large 329 number of refs deadlocked; the thread to relay rejection notices 330 for these ref updates blocked on writing them to the main thread, 331 after the main thread at the receiving end notices that the push 332 failed and decides not to read these notices and return a failure. 333 (merge f924b52a jk/push-client-deadlock-fix later to maint). 334 335 * mmap emulation on Windows has been optimized and work better without 336 consuming paging store when not needed. 337 (merge d5425d1 js/win32-mmap later to maint). 338 339 * A question by "git send-email" to ask the identity of the sender 340 has been updated. 341 (merge 0d6b21e jd/send-email-to-whom later to maint). 342 343 * UI consistency improvements for "git mergetool". 344 (merge cce076e nf/mergetool-prompt later to maint). 345 346 * "git rebase -m" could be asked to rebase an entire branch starting 347 from the root, but failed by assuming that there always is a parent 348 commit to the first commit on the branch. 349 (merge 79f4344 bw/rebase-merge-entire-branch later to maint). 350 351 * Fix a broken "p4 lfs" test. 352 (merge 9e220fe ls/p4-lfs-test-fix-2.7.0 later to maint). 353 354 * Recent update to Git LFS broke "git p4" by changing the output from 355 its "lfs pointer" subcommand. 356 (merge 82f2567 ls/p4-lfs later to maint). 357 358 * "git fetch" test t5510 was flaky while running a (forced) automagic 359 garbage collection. 360 (merge bb05510 js/close-packs-before-gc later to maint). 361 362 * Documentation updates to help contributors setting up Travis CI 363 test for their patches. 364 (merge 0e5d028 ls/travis-submitting-patches later to maint). 365 366 * Some multi-byte encoding can have a backslash byte as a later part 367 of one letter, which would confuse "highlight" filter used in 368 gitweb. 369 (merge 029f372 sk/gitweb-highlight-encoding later to maint). 370 371 * "git commit-tree" plumbing command required the user to always sign 372 its result when the user sets the commit.gpgsign configuration 373 variable, which was an ancient mistake. Rework "git rebase" that 374 relied on this mistake so that it reads commit.gpgsign and pass (or 375 not pass) the -S option to "git commit-tree" to keep the end-user 376 expectation the same, while teaching "git commit-tree" to ignore 377 the configuration variable. This will stop requiring the users to 378 sign commit objects used internally as an implementation detail of 379 "git stash". 380 (merge 6694856 jc/commit-tree-ignore-commit-gpgsign later to maint). 381 382 383 * Other minor clean-ups and documentation updates 384 (merge 8b5a3e9 kn/for-each-tag-branch later to maint). 385 (merge 99dab16 sb/misc-cleanups later to maint). 386 (merge 7a6a44c cc/apply later to maint). 387 (merge 6594883 nd/remove-unused later to maint). 388 (merge 0ff7410 sg/test-lib-simplify-expr-away later to maint). 389 (merge 060e776 jk/fix-attribute-macro-in-2.5 later to maint). 390 (merge d16df0c rt/string-list-lookup-cleanup later to maint). 391 (merge 376eb60 sb/config-exit-status-list later to maint). 392 (merge 9cea46c ew/doc-split-pack-disables-bitmap later to maint). 393 (merge fa72245 ew/normal-to-e later to maint). 394 (merge 2e39a24 rn/glossary-typofix later to maint). 395 (merge cadfbef sb/clean-test-fix later to maint).