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