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 111Performance, Internal Implementation, Development Support etc. 112 113 * The embedded args argv-array in the child process is used to build 114 the command line to run pack-objects instead of using a separate 115 array of strings. 116 117 * A test for tags has been restructured so that more parts of it can 118 easily be run on a platform without a working GnuPG. 119 120 * The startup_info data, which records if we are working inside a 121 repository (among other things), are now uniformly available to Git 122 subcommand implementations, and Git avoids attempting to touch 123 references when we are not in a repository. 124 125 * The command line argument parser for "receive-pack" has been 126 rewritten to use parse-options. 127 128 * A major part of "git submodule update" has been ported to C to take 129 advantage of the recently added framework to run download tasks in 130 parallel. 131 132 * Rename bunch of tests on "git clone" for better organization. 133 134 * The tests that involve running httpd leaked the system-wide 135 configuration in /etc/gitconfig to the tested environment. 136 137 * Build updates for MSVC. 138 139 * The repository set-up sequence has been streamlined (the biggest 140 change is that there is no longer git_config_early()), so that we 141 do not attempt to look into refs/* when we know we do not have a 142 Git repository. 143 144 * Code restructuring around the "refs" area to prepare for pluggable 145 refs backends. 146 147 * Sources to many test helper binaries (and the generated helpers) 148 have been moved to t/helper/ subdirectory to reduce clutter at the 149 top level of the tree. 150 151 Note that this can break your tests if you check out revisions 152 across the merge boundary of this topic, e0b58519 (Merge branch 153 'nd/test-helpers', 2016-04-29), as bin-wrappers/test-* are not 154 rebuilt to point the underlying executables. For now, "make 155 distclean" is your friend. 156 157 * Unify internal logic between "git tag -v" and "git verify-tag" 158 commands by making one directly call into the other. 159 (merge bef234b st/verify-tag later to maint). 160 161 * "merge-recursive" strategy incorrectly checked if a path that is 162 involved in its internal merge exists in the working tree. 163 164 165Also contains various documentation updates and code clean-ups. 166 167 168Fixes since v2.8 169---------------- 170 171Unless otherwise noted, all the fixes since v2.8 in the maintenance 172track are contained in this release (see the maintenance releases' 173notes for details). 174 175 * "git config --get-urlmatch", unlike other variants of the "git 176 config --get" family, did not signal error with its exit status 177 when there was no matching configuration. 178 179 * The "--local-env-vars" and "--resolve-git-dir" options of "git 180 rev-parse" failed to work outside a repository when the command's 181 option parsing was rewritten in 1.8.5 era. 182 183 * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work. 184 185 * Fetching of history by naming a commit object name directly didn't 186 work across remote-curl transport. 187 188 * A small memory leak in an error codepath has been plugged in xdiff 189 code. 190 191 * strbuf_getwholeline() did not NUL-terminate the buffer on certain 192 corner cases in its error codepath. 193 194 * "git mergetool" did not work well with conflicts that both sides 195 deleted. 196 197 * "git send-email" had trouble parsing alias file in mailrc format 198 when lines in it had trailing whitespaces on them. 199 200 * When "git merge --squash" stopped due to conflict, the concluding 201 "git commit" failed to read in the SQUASH_MSG that shows the log 202 messages from all the squashed commits. 203 204 * "git merge FETCH_HEAD" dereferenced NULL pointer when merging 205 nothing into an unborn history (which is arguably unusual usage, 206 which perhaps was the reason why nobody noticed it). 207 208 * When "git worktree" feature is in use, "git branch -d" allowed 209 deletion of a branch that is checked out in another worktree, 210 which was wrong. 211 212 * When "git worktree" feature is in use, "git branch -m" renamed a 213 branch that is checked out in another worktree without adjusting 214 the HEAD symbolic ref for the worktree. 215 216 * "git diff -M" used to work better when two originally identical 217 files A and B got renamed to X/A and X/B by pairing A to X/A and B 218 to X/B, but this was broken in the 2.0 timeframe. 219 220 * "git send-pack --all <there>" was broken when its command line 221 option parsing was written in the 2.6 timeframe. 222 223 * "git format-patch --help" showed `-s` and `--no-patch` as if these 224 are valid options to the command. We already hide `--patch` option 225 from the documentation, because format-patch is about showing the 226 diff, and the documentation now hides these options as well. 227 228 * When running "git blame $path" with unnormalized data in the index 229 for the path, the data in the working tree was blamed, even though 230 "git add" would not have changed what is already in the index, due 231 to "safe crlf" that disables the line-end conversion. It has been 232 corrected. 233 234 * A change back in version 2.7 to "git branch" broke display of a 235 symbolic ref in a non-standard place in the refs/ hierarchy (we 236 expect symbolic refs to appear in refs/remotes/*/HEAD to point at 237 the primary branch the remote has, and as .git/HEAD to point at the 238 branch we locally checked out). 239 240 * A partial rewrite of "git submodule" in the 2.7 timeframe changed 241 the way the gitdir: pointer in the submodules point at the real 242 repository location to use absolute paths by accident. This has 243 been corrected. 244 245 * "git commit" misbehaved in a few minor ways when an empty message 246 is given via -m '', all of which has been corrected. 247 248 * Support for CRAM-MD5 authentication method in "git imap-send" did 249 not work well. 250 251 * Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs 252 we use in imap-send, which has been adjusted for the change. 253 (merge 1245c74 ky/imap-send-openssl-1.1.0 later to maint). 254 255 * The socks5:// proxy support added back in 2.6.4 days was not aware 256 that socks5h:// proxies behave differently. 257 258 * "git config" had a codepath that tried to pass a NULL to 259 printf("%s"), which nobody seems to have noticed. 260 261 * On Cygwin, object creation uses the "create a temporary and then 262 rename it to the final name" pattern, not "create a temporary, 263 hardlink it to the final name and then unlink the temporary" 264 pattern. 265 266 This is necessary to use Git on Windows shared directories, and is 267 already enabled for the MinGW and plain Windows builds. It also 268 has been used in Cygwin packaged versions of Git for quite a while. 269 See http://thread.gmane.org/gmane.comp.version-control.git/291853 270 271 * "merge-octopus" strategy did not ensure that the index is clean 272 when merge begins. 273 274 * When "git merge" notices that the merge can be resolved purely at 275 the tree level (without having to merge blobs) and the resulting 276 tree happens to already exist in the object store, it forgot to 277 update the index, which lead to an inconsistent state for later 278 operations. 279 280 * "git submodule" reports the paths of submodules the command 281 recurses into, but this was incorrect when the command was not run 282 from the root level of the superproject. 283 (merge 2ab5660 sb/submodule-path-misc-bugs later to maint). 284 285 * The "user.useConfigOnly" configuration variable makes it an error 286 if users do not explicitly set user.name and user.email. However, 287 its check was not done early enough and allowed another error to 288 trigger, reporting that the default value we guessed from the 289 system setting was unusable. This was a suboptimal end-user 290 experience as we want the users to set user.name/user.email without 291 relying on the auto-detection at all. 292 (merge d3c06c1 da/user-useconfigonly later to maint). 293 294 * "git mv old new" did not adjust the path for a submodule that lives 295 as a subdirectory inside old/ directory correctly. 296 (merge a127331 sb/mv-submodule-fix later to maint). 297 298 * "git replace -e" did not honour "core.editor" configuration. 299 (merge 36b1437 js/replace-edit-use-editor-configuration later to maint). 300 301 * "git push" from a corrupt repository that attempts to push a large 302 number of refs deadlocked; the thread to relay rejection notices 303 for these ref updates blocked on writing them to the main thread, 304 after the main thread at the receiving end notices that the push 305 failed and decides not to read these notices and return a failure. 306 (merge c4b2751 jk/push-client-deadlock-fix later to maint). 307 308 * mmap emulation on Windows has been optimized and work better without 309 consuming paging store when not needed. 310 (merge d5425d1 js/win32-mmap later to maint). 311 312 * A question by "git send-email" to ask the identity of the sender 313 has been updated. 314 (merge 0d6b21e jd/send-email-to-whom later to maint). 315 316 * UI consistency improvements for "git mergetool". 317 (merge cce076e nf/mergetool-prompt later to maint). 318 319 * Other minor clean-ups and documentation updates 320 (merge 8b5a3e9 kn/for-each-tag-branch later to maint). 321 (merge 9c60d9f sb/misc-cleanups later to maint). 322 (merge 7a6a44c cc/apply later to maint). 323 (merge 6594883 nd/remove-unused later to maint). 324 (merge 0ff7410 sg/test-lib-simplify-expr-away later to maint). 325 (merge 060e776 jk/fix-attribute-macro-in-2.5 later to maint). 326 (merge d16df0c rt/string-list-lookup-cleanup later to maint).