|
| 1 | +Git 2.9 Release Notes |
| 2 | +===================== |
| 3 | + |
| 4 | +Backward compatibility note |
| 5 | +--------------------------- |
| 6 | + |
| 7 | +The 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 | + |
| 11 | +Merging two branches that have no common ancestor with "git merge" is |
| 12 | +by default forbidden now to prevent creating such an unusual merge by |
| 13 | +mistake. |
| 14 | + |
| 15 | +The output formats of "git log" that indents the commit log message by |
| 16 | +4 spaces now expands HT in the log message by default. You can use |
| 17 | +the "--no-expand-tabs" option to disable this. |
| 18 | + |
| 19 | + |
| 20 | +Updates since v2.8 |
| 21 | +------------------ |
| 22 | + |
| 23 | +UI, 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 apply -v" learned to report paths in the patch that were |
| 60 | + skipped via --include/--exclude mechanism or being outside the |
| 61 | + current working directory. |
| 62 | + |
| 63 | + * Shell completion (in contrib/) updates. |
| 64 | + |
| 65 | + * The commit object name reported when "rebase -i" stops has been |
| 66 | + shortened. |
| 67 | + |
| 68 | + * "git worktree add" can be given "--no-checkout" option to only |
| 69 | + create an empty worktree without checking out the files. |
| 70 | + |
| 71 | + * "git mergetools" learned to drive ExamDiff. |
| 72 | + |
| 73 | + * "git pull --rebase" learned "--[no-]autostash" option, so that |
| 74 | + the rebase.autostash configuration variable set to true can be |
| 75 | + overridden from the command line. |
| 76 | + |
| 77 | + * When "git log" shows the log message indented by 4-spaces, the |
| 78 | + remainder of a line after a HT does not align in the way the author |
| 79 | + originally intended. The command now expands tabs by default in |
| 80 | + such a case, and allows the users to override it with a new option, |
| 81 | + "--no-expand-tabs". |
| 82 | + |
| 83 | + * "git send-email" now uses a more readable timestamps when |
| 84 | + formulating a message ID. |
| 85 | + (merge f916ab0 ew/send-email-readable-message-id later to maint). |
| 86 | + |
| 87 | + * "git rerere" can encounter two or more files with the same conflict |
| 88 | + signature that have to be resolved in different ways, but there was |
| 89 | + no way to record these separate resolutions. |
| 90 | + (merge 890fca8 jc/rerere-multi later to maint). |
| 91 | + |
| 92 | + |
| 93 | +Performance, Internal Implementation, Development Support etc. |
| 94 | + |
| 95 | + * The embedded args argv-array in the child process is used to build |
| 96 | + the command line to run pack-objects instead of using a separate |
| 97 | + array of strings. |
| 98 | + (merge 65a3629 mp/upload-pack-use-embedded-args later to maint). |
| 99 | + |
| 100 | + * A test for tags has been restructured so that more parts of it can |
| 101 | + easily be run on a platform without a working GnuPG. |
| 102 | + |
| 103 | + * The startup_info data, which records if we are working inside a |
| 104 | + repository (among other things), are now uniformly available to Git |
| 105 | + subcommand implementations, and Git avoids attempting to touch |
| 106 | + references when we are not in a repository. |
| 107 | + (merge 11e6b3f jk/startup-info later to maint). |
| 108 | + |
| 109 | + * The command line argument parser for "receive-pack" has been |
| 110 | + rewritten to use parse-options. |
| 111 | + |
| 112 | + * A major part of "git submodule update" has been ported to C to take |
| 113 | + advantage of the recently added framework to run download tasks in |
| 114 | + parallel. |
| 115 | + |
| 116 | + * Rename bunch of tests on "git clone" for better organization. |
| 117 | + (merge 8fbb03a sb/clone-t57-t56 later to maint). |
| 118 | + |
| 119 | + * The tests that involve running httpd leaked the system-wide |
| 120 | + configuration in /etc/gitconfig to the tested environment. |
| 121 | + (merge 1fad503 jk/test-httpd-config-nosystem later to maint). |
| 122 | + |
| 123 | + * Build updates for MSVC. |
| 124 | + (merge 0ef60af ss/msvc later to maint). |
| 125 | + |
| 126 | + * The repository set-up sequence has been streamlined (the biggest |
| 127 | + change is that there is no longer git_config_early()), so that we |
| 128 | + do not attempt to look into refs/* when we know we do not have a |
| 129 | + Git repository. |
| 130 | + (merge 274db84 jk/check-repository-format later to maint). |
| 131 | + |
| 132 | + * Code restructuring around the "refs" area to prepare for pluggable |
| 133 | + refs backends. |
| 134 | + |
| 135 | + |
| 136 | +Also contains various documentation updates and code clean-ups. |
| 137 | + |
| 138 | + |
| 139 | +Fixes since v2.8 |
| 140 | +---------------- |
| 141 | + |
| 142 | +Unless otherwise noted, all the fixes since v2.8 in the maintenance |
| 143 | +track are contained in this release (see the maintenance releases' |
| 144 | +notes for details). |
| 145 | + |
| 146 | + * "git config --get-urlmatch", unlike other variants of the "git |
| 147 | + config --get" family, did not signal error with its exit status |
| 148 | + when there was no matching configuration. |
| 149 | + (merge 24990b2 jk/config-get-urlmatch later to maint). |
| 150 | + |
| 151 | + * The "--local-env-vars" and "--resolve-git-dir" options of "git |
| 152 | + rev-parse" failed to work outside a repository when the command's |
| 153 | + option parsing was rewritten in 1.8.5 era. |
| 154 | + (merge fc7d47f jk/rev-parse-local-env-vars later to maint). |
| 155 | + |
| 156 | + * "git index-pack --keep[=<msg>] pack-$name.pack" simply did not work. |
| 157 | + (merge 0e94242 jc/maint-index-pack-keep later to maint). |
| 158 | + |
| 159 | + * Fetching of history by naming a commit object name directly didn't |
| 160 | + work across remote-curl transport. |
| 161 | + (merge 754ecb1 gf/fetch-pack-direct-object-fetch later to maint). |
| 162 | + |
| 163 | + * A small memory leak in an error codepath has been plugged in xdiff |
| 164 | + code. |
| 165 | + (merge 87f1625 rj/xdiff-prepare-plug-leak-on-error-codepath later to maint). |
| 166 | + |
| 167 | + * strbuf_getwholeline() did not NUL-terminate the buffer on certain |
| 168 | + corner cases in its error codepath. |
| 169 | + (merge b709043 jk/getwholeline-getdelim-empty later to maint). |
| 170 | + |
| 171 | + * "git mergetool" did not work well with conflicts that both sides |
| 172 | + deleted. |
| 173 | + (merge a298604 da/mergetool-delete-delete-conflict later to maint). |
| 174 | + |
| 175 | + * "git send-email" had trouble parsing alias file in mailrc format |
| 176 | + when lines in it had trailing whitespaces on them. |
| 177 | + (merge a277d1e jk/send-email-rtrim-mailrc-alias later to maint). |
| 178 | + |
| 179 | + * When "git merge --squash" stopped due to conflict, the concluding |
| 180 | + "git commit" failed to read in the SQUASH_MSG that shows the log |
| 181 | + messages from all the squashed commits. |
| 182 | + (merge b64c1e0 ss/commit-squash-msg later to maint). |
| 183 | + |
| 184 | + * "git merge FETCH_HEAD" dereferenced NULL pointer when merging |
| 185 | + nothing into an unborn history (which is arguably unusual usage, |
| 186 | + which perhaps was the reason why nobody noticed it). |
| 187 | + (merge b84e65d jv/merge-nothing-into-void later to maint). |
| 188 | + |
| 189 | + * When "git worktree" feature is in use, "git branch -d" allowed |
| 190 | + deletion of a branch that is checked out in another worktree, |
| 191 | + which was wrong. |
| 192 | + (merge f292244 ky/branch-d-worktree later to maint). |
| 193 | + |
| 194 | + * When "git worktree" feature is in use, "git branch -m" renamed a |
| 195 | + branch that is checked out in another worktree without adjusting |
| 196 | + the HEAD symbolic ref for the worktree. |
| 197 | + (merge 18eb3a9 ky/branch-m-worktree later to maint). |
| 198 | + |
| 199 | + * "git diff -M" used to work better when two originally identical |
| 200 | + files A and B got renamed to X/A and X/B by pairing A to X/A and B |
| 201 | + to X/B, but this was broken in the 2.0 timeframe. |
| 202 | + (merge ca4e3ca sg/diff-multiple-identical-renames later to maint). |
| 203 | + |
| 204 | + * "git send-pack --all <there>" was broken when its command line |
| 205 | + option parsing was written in the 2.6 timeframe. |
| 206 | + (merge c677756 sk/send-pack-all-fix later to maint). |
| 207 | + |
| 208 | + * "git format-patch --help" showed `-s` and `--no-patch` as if these |
| 209 | + are valid options to the command. We already hide `--patch` option |
| 210 | + from the documentation, because format-patch is about showing the |
| 211 | + diff, and the documentation now hides these options as well. |
| 212 | + (merge b73a1bc es/format-patch-doc-hide-no-patch later to maint). |
| 213 | + |
| 214 | + * When running "git blame $path" with unnormalized data in the index |
| 215 | + for the path, the data in the working tree was blamed, even though |
| 216 | + "git add" would not have changed what is already in the index, due |
| 217 | + to "safe crlf" that disables the line-end conversion. It has been |
| 218 | + corrected. |
| 219 | + (merge a08feb8 tb/blame-force-read-cache-to-workaround-safe-crlf later to maint). |
| 220 | + |
| 221 | + * A change back in version 2.7 to "git branch" broke display of a |
| 222 | + symbolic ref in a non-standard place in the refs/ hierarchy (we |
| 223 | + expect symbolic refs to appear in refs/remotes/*/HEAD to point at |
| 224 | + the primary branch the remote has, and as .git/HEAD to point at the |
| 225 | + branch we locally checked out). |
| 226 | + (merge 95c38fb jk/branch-shortening-funny-symrefs later to maint). |
| 227 | + |
| 228 | + * A partial rewrite of "git submodule" in the 2.7 timeframe changed |
| 229 | + the way the gitdir: pointer in the submodules point at the real |
| 230 | + repository location to use absolute paths by accident. This has |
| 231 | + been corrected. |
| 232 | + (merge 1f15ba1 sb/submodule-helper-clone-regression-fix later to maint). |
| 233 | + |
| 234 | + * "git commit" misbehaved in a few minor ways when an empty message |
| 235 | + is given via -m '', all of which has been corrected. |
| 236 | + (merge 27014cb ad/commit-have-m-option later to maint). |
| 237 | + |
| 238 | + * Support for CRAM-MD5 authentication method in "git imap-send" did |
| 239 | + not work well. |
| 240 | + (merge eb94ee7 ky/imap-send later to maint). |
| 241 | + |
| 242 | + * Upcoming OpenSSL 1.1.0 will break compilation b updating a few APIs |
| 243 | + we use in imap-send, which has been adjusted for the change. |
| 244 | + (merge 1245c74 ky/imap-send-openssl-1.1.0 later to maint). |
| 245 | + |
| 246 | + * The socks5:// proxy support added back in 2.6.4 days was not aware |
| 247 | + that socks5h:// proxies behave differently. |
| 248 | + (merge 87f8a0b jc/http-socks5h later to maint). |
| 249 | + |
| 250 | + * "git config" had a codepath that tried to pass a NULL to |
| 251 | + printf("%s"), which nobody seems to have noticed. |
| 252 | + (merge 1cae428 jk/do-not-printf-NULL later to maint). |
| 253 | + |
| 254 | + * On Cygwin, object creation uses the "create a temporary and then |
| 255 | + rename it to the final name" pattern, not "create a temporary, |
| 256 | + hardlink it to the final name and then unlink the temporary" |
| 257 | + pattern. |
| 258 | + |
| 259 | + This is necessary to use Git on Windows shared directories, and is |
| 260 | + already enabled for the MinGW and plain Windows builds. It also |
| 261 | + has been used in Cygwin packaged versions of Git for quite a while. |
| 262 | + See http://thread.gmane.org/gmane.comp.version-control.git/291853 |
| 263 | + (merge e53a64b ad/cygwin-wants-rename later to maint). |
| 264 | + |
| 265 | + * "merge-octopus" strategy did not ensure that the index is clean |
| 266 | + when merge begins. |
| 267 | + |
| 268 | + * When "git merge" notices that the merge can be resolved purely at |
| 269 | + the tree level (without having to merge blobs) and the resulting |
| 270 | + tree happens to already exist in the object store, it forgot to |
| 271 | + update the index, which lead to an inconsistent state for later |
| 272 | + operations. |
| 273 | + |
| 274 | + * "git submodule" reports the paths of submodules the command |
| 275 | + recurses into, but this was incorrect when the command was not run |
| 276 | + from the root level of the superproject. |
| 277 | + (merge 2ab5660 sb/submodule-path-misc-bugs later to maint). |
| 278 | + |
| 279 | + * Other minor clean-ups and documentation updates |
| 280 | + (merge aed7480 mm/lockfile-error-message later to maint). |
| 281 | + (merge bfee614 jc/index-pack later to maint). |
| 282 | + (merge f870899 ss/exc-flag-is-a-collection-of-bits later to maint). |
| 283 | + (merge dde7891 pb/t7502-drop-dup later to maint). |
| 284 | + (merge 3bd1b51 cc/doc-recommend-performance-trace-to-file later to maint). |
| 285 | + (merge 7d5e9c9 jk/credential-cache-comment-exit later to maint). |
| 286 | + (merge 16a86d4 nd/apply-doc later to maint). |
| 287 | + (merge c3f6b85 pb/opt-cmdmode-doc later to maint). |
| 288 | + (merge 30211fb oa/doc-diff-check later to maint). |
| 289 | + (merge 01d98e8 ak/use-hashmap-iter-first-in-submodule-config later to maint). |
| 290 | + (merge 8b5a3e9 kn/for-each-tag-branch later to maint). |
| 291 | + (merge 9c60d9f sb/misc-cleanups later to maint). |
| 292 | + (merge 7a6a44c cc/apply later to maint). |
| 293 | + (merge 8e9b208 js/mingw-tests-2.8 later to maint). |
| 294 | + (merge d55de70 jc/makefile-redirection-stderr later to maint). |
| 295 | + (merge 4232b21 ep/trace-doc-sample-fix later to maint). |
| 296 | + (merge ef8c95e ew/send-email-drop-data-dumper later to maint). |
| 297 | + (merge 24041d6 jc/xstrfmt-null-with-prec-0 later to maint). |
| 298 | + (merge 7bec7f5 jk/use-write-script-more later to maint). |
0 commit comments