1Git 2.6 Release Notes 2===================== 3 4Updates since v2.5 5------------------ 6 7UI, Workflows & Features 8 9 * An asterisk as a substring (as opposed to the entirety) of a path 10 component for both side of a refspec, e.g. 11 "refs/heads/o*:refs/remotes/heads/i*", is now allowed. 12 13 * New userdiff pattern definition for fountain screenwriting markup 14 format has been added. 15 16 * "git log" and friends learned a new "--date=format:..." option to 17 format timestamps using system's strftime(3). 18 19 * "git fast-import" learned to respond to the get-mark command via 20 its cat-blob-fd interface. 21 22 * "git rebase -i" learned "drop commit-object-name subject" command 23 as another way to skip replaying of a commit. 24 25 * A new configuration variable can enable "--follow" automatically 26 when "git log" is run with one pathspec argument. 27 28 * "git status" learned to show a more detailed information regarding 29 the "rebase -i" session in progress. 30 31 * "git cat-file" learned "--batch-all-objects" option to enumerate all 32 available objects in the repository more quickly than "rev-list 33 --all --objects" (the output includes unreachable objects, though). 34 35 * "git fsck" learned to ignore errors on a set of known-to-be-bad 36 objects, and also allows the warning levels of various kinds of 37 non-critical breakages to be tweaked. 38 39 * "git rebase -i"'s list of todo is made configurable. 40 41 * "git send-email" now performs alias-expansion on names that are 42 given via --cccmd, etc. 43 44 * An environment variable GIT_REPLACE_REF_BASE tells Git to look into 45 refs hierarchy other than refs/replace/ for the object replacement 46 data. 47 48 * Allow untracked cache (experimental) to be used when sparse 49 checkout (experimental) is also in use. 50 51 * "git pull --rebase" has been taught to pay attention to 52 rebase.autostash configuration. 53 54 * The command-line completion script (in contrib/) has been updated. 55 56 * A negative !ref entry in multi-value transfer.hideRefs 57 configuration can be used to say "don't hide this one". 58 59 * After "git am" without "-3" stops, running "git am -3" pays attention 60 to "-3" only for the patch that caused the original invocation 61 to stop. 62 63 * When linked worktree is used, simultaneous "notes merge" instances 64 for the same ref in refs/notes/* are prevented from stomping on 65 each other. 66 67 * "git send-email" learned a new option --smtp-auth to limit the SMTP 68 AUTH mechanisms to be used to a subset of what the system library 69 supports. 70 71 * A new configuration variable http.sslVersion can be used to specify 72 what specific version of SSL/TLS to use to make a connection. 73 74 * "git notes merge" can be told with "--strategy=<how>" option how to 75 automatically handle conflicts; this can now be configured by 76 setting notes.mergeStrategy configuration variable. 77 78 * "git log --cc" did not show any patch, even though most of the time 79 the user meant "git log --cc -p -m" to see patch output for commits 80 with a single parent, and combined diff for merge commits. The 81 command is taught to DWIM "--cc" (without "--raw" and other forms 82 of output specification) to "--cc -p -m". 83 84 * "git config --list" output was hard to parse when values consist of 85 multiple lines. "--name-only" option is added to help this. 86 87 * A handful of usability & cosmetic fixes to gitk and l10n updates. 88 89 * A completely empty e-mail address <> is now allowed in the authors 90 file used by git-svn, to match the way it accepts the output from 91 authors-prog. 92 93 94Performance, Internal Implementation, Development Support etc. 95 96 * In preparation for allowing different "backends" to store the refs 97 in a way different from the traditional "one ref per file in 98 $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage, 99 direct filesystem access to ref-like things like CHERRY_PICK_HEAD 100 from scripts and programs has been reduced. 101 102 * Computation of untracked status indicator by bash prompt 103 script (in contrib/) has been optimized. 104 105 * Memory use reduction when commit-slab facility is used to annotate 106 sparsely (which is not recommended in the first place). 107 108 * Clean up refs API and make "git clone" less intimate with the 109 implementation detail. 110 111 * "git pull" was reimplemented in C. 112 113 * The packet tracing machinery allows to capture an incoming pack 114 data to a file for debugging. 115 116 * Move machinery to parse human-readable scaled numbers like 1k, 4M, 117 and 2G as an option parameter's value from pack-objects to 118 parse-options API, to make it available to other codepaths. 119 120 * "git verify-tag" and "git verify-commit" have been taught to share 121 more code, and then learned to optionally show the verification 122 message from the underlying GPG implementation. 123 124 * Various enhancements around "git am" reading patches generated by 125 foreign SCM have been made. 126 127 * Ref listing by "git branch -l" and "git tag -l" commands has 128 started to be rebuilt, based on the for-each-ref machinery. 129 130 * The code to perform multi-tree merges has been taught to repopulate 131 the cache-tree upon a successful merge into the index, so that 132 subsequent "diff-index --cached" (hence "status") and "write-tree" 133 (hence "commit") will go faster. 134 135 The same logic in "git checkout" may now be removed, but that is a 136 separate issue. 137 138 * Tests that assume how reflogs are represented on the filesystem too 139 much have been corrected. 140 141 * "git am" has been rewritten in "C". 142 143 * git_path() and mkpath() are handy helper functions but it is easy 144 to misuse, as the callers need to be careful to keep the number of 145 active results below 4. Their uses have been reduced. 146 147 * The "lockfile" API has been rebuilt on top of a new "tempfile" API. 148 149 * To prepare for allowing a different "ref" backend to be plugged in 150 to the system, update_ref()/delete_ref() have been taught about 151 ref-like things like MERGE_HEAD that are per-worktree (they will 152 always be written to the filesystem inside $GIT_DIR). 153 154 * The gitmodules API that is accessed from the C code learned to 155 cache stuff lazily. 156 157 158Also contains various documentation updates and code clean-ups. 159 160 161Fixes since v2.5 162---------------- 163 164Unless otherwise noted, all the fixes since v2.5 in the maintenance 165track are contained in this release (see the maintenance releases' 166notes for details). 167 168 * "git subtree" (in contrib/) depended on "git log" output to be 169 stable, which was a no-no. Apply a workaround to force a 170 particular date format. 171 (merge e7aac44 da/subtree-date-confusion later to maint). 172 173 * An attempt to delete a ref by pushing into a repository whose HEAD 174 symbolic reference points at an unborn branch that cannot be 175 created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD 176 points at refs/heads/a) failed. 177 (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint). 178 179 * The low-level "git send-pack" did not honor 'user.signingkey' 180 configuration variable when sending a signed-push. 181 (merge d830d39 db/send-pack-user-signingkey later to maint). 182 183 * "sparse checkout" misbehaved for a path that is excluded from the 184 checkout when switching between branches that differ at the path. 185 (merge 7d78241 as/sparse-checkout-removal later to maint). 186 187 * An experimental "untracked cache" feature used uname(2) in a 188 slightly unportable way. 189 (merge 100e433 cb/uname-in-untracked later to maint). 190 191 * A "rebase" replays changes of the local branch on top of something 192 else, as such they are placed in stage #3 and referred to as 193 "theirs", while the changes in the new base, typically a foreign 194 work, are placed in stage #2 and referred to as "ours". Clarify 195 the "checkout --ours/--theirs". 196 (merge f303016 se/doc-checkout-ours-theirs later to maint). 197 198 * The "rev-parse --parseopt" mode parsed the option specification 199 and the argument hint in a strange way to allow '=' and other 200 special characters in the option name while forbidding them from 201 the argument hint. This made it impossible to define an option 202 like "--pair <key>=<value>" with "pair=key=value" specification, 203 which instead would have defined a "--pair=key <value>" option. 204 (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint). 205 206 * Often a fast-import stream builds a new commit on top of the 207 previous commit it built, and it often unconditionally emits a 208 "from" command to specify the first parent, which can be omitted in 209 such a case. This caused fast-import to forget the tree of the 210 previous commit and then re-read it from scratch, which was 211 inefficient. Optimize for this common case. 212 (merge 0df3245 mh/fast-import-optimize-current-from later to maint). 213 214 * Running an aliased command from a subdirectory when the .git thing 215 in the working tree is a gitfile pointing elsewhere did not work. 216 (merge d95138e nd/export-worktree later to maint). 217 218 * "Is this subdirectory a separate repository that should not be 219 touched?" check "git clean" was inefficient. This was replaced 220 with a more optimized check. 221 (merge fbf2fec ee/clean-remove-dirs later to maint). 222 223 * The "new-worktree-mode" hack in "checkout" that was added in 224 nd/multiple-work-trees topic has been removed by updating the 225 implementation of new "worktree add". 226 (merge 65f9b75 es/worktree-add-cleanup later to maint). 227 228 * Remove remaining cruft from "git checkout --to", which 229 transitioned to "git worktree add". 230 (merge 114ff88 es/worktree-add later to maint). 231 232 * An off-by-one error made "git remote" to mishandle a remote with a 233 single letter nickname. 234 (merge bc598c3 mh/get-remote-group-fix later to maint). 235 236 * "git clone $URL", when cloning from a site whose sole purpose is to 237 host a single repository (hence, no path after <scheme>://<site>/), 238 tried to use the site name as the new repository name, but did not 239 remove username or password when <site> part was of the form 240 <user>@<pass>:<host>. The code is taught to redact these. 241 (merge adef956 ps/guess-repo-name-at-root later to maint). 242 243 * Running tests with the "-x" option to make them verbose had some 244 unpleasant interactions with other features of the test suite. 245 (merge 9b5fe78 jk/test-with-x later to maint). 246 247 * t1509 test that requires a dedicated VM environment had some 248 bitrot, which has been corrected. 249 (merge faacc5a ps/t1509-chroot-test-fixup later to maint). 250 251 * "git pull" in recent releases of Git has a regression in the code 252 that allows custom path to the --upload-pack=<program>. This has 253 been corrected. 254 255 Note that this is irrelevant for 'master' with "git pull" rewritten 256 in C. 257 (merge 13e0e28 mm/pull-upload-pack later to maint). 258 259 * When trying to see that an object does not exist, a state errno 260 leaked from our "first try to open a packfile with O_NOATIME and 261 then if it fails retry without it" logic on a system that refuses 262 O_NOATIME. This confused us and caused us to die, saying that the 263 packfile is unreadable, when we should have just reported that the 264 object does not exist in that packfile to the caller. 265 (merge dff6f28 cb/open-noatime-clear-errno later to maint). 266 267 * The codepath to produce error messages had a hard-coded limit to 268 the size of the message, primarily to avoid memory allocation while 269 calling die(). 270 (merge f4c3edc jk/long-error-messages later to maint). 271 272 * strbuf_read() used to have one extra iteration (and an unnecessary 273 strbuf_grow() of 8kB), which was eliminated. 274 (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint). 275 276 * We rewrote one of the build scripts in Perl but this reimplements 277 in Bourne shell. 278 (merge 82aec45 sg/help-group later to maint). 279 280 * The experimental untracked-cache feature were buggy when paths with 281 a few levels of subdirectories are involved. 282 (merge 73f9145 dt/untracked-subdir later to maint). 283 284 * "interpret-trailers" helper mistook a single-liner log message that 285 has a colon as the end of existing trailer. 286 287 * The "interpret-trailers" helper mistook a multi-paragraph title of 288 a commit log message with a colon in it as the end of the trailer 289 block. 290 (merge 5c99995 cc/trailers-corner-case-fix later to maint). 291 292 * "git describe" without argument defaulted to describe the HEAD 293 commit, but "git describe --contains" didn't. Arguably, in a 294 repository used for active development, such defaulting would not 295 be very useful as the tip of branch is typically not tagged, but it 296 is better to be consistent. 297 (merge 2bd0706 sg/describe-contains later to maint). 298 299 * The client side codepaths in "git push" have been cleaned up 300 and the user can request to perform an optional "signed push", 301 i.e. sign only when the other end accepts signed push. 302 (merge 68c757f db/push-sign-if-asked later to maint). 303 304 * Because the configuration system does not allow "alias.0foo" and 305 "pager.0foo" as the configuration key, the user cannot use '0foo' 306 as a custom command name anyway, but "git 0foo" tried to look these 307 keys up and emitted useless warnings before saying '0foo is not a 308 git command'. These warning messages have been squelched. 309 (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint). 310 311 * "git rev-list" does not take "--notes" option, but did not complain 312 when one is given. 313 (merge 2aea7a5 jk/rev-list-has-no-notes later to maint). 314 315 * When re-priming the cache-tree opportunistically while committing 316 the in-core index as-is, we mistakenly invalidated the in-core 317 index too aggressively, causing the experimental split-index code 318 to unnecessarily rewrite the on-disk index file(s). 319 (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint). 320 321 * "git archive" did not use zip64 extension when creating an archive 322 with more than 64k entries, which nobody should need, right ;-)? 323 (merge 88329ca rs/archive-zip-many later to maint). 324 325 * The code in "multiple-worktree" support that attempted to recover 326 from an inconsistent state updated an incorrect file. 327 (merge 82fde87 nd/fixup-linked-gitdir later to maint). 328 329 * On case insensitive systems, "git p4" did not work well with client 330 specs. 331 332 * "git init empty && git -C empty log" said "bad default revision 'HEAD'", 333 which was found to be a bit confusing to new users. 334 (merge ce11360 jk/log-missing-default-HEAD later to maint). 335 336 * Code cleanups and documentation updates. 337 (merge 1c601af es/doc-clean-outdated-tools later to maint). 338 (merge 3581304 kn/tag-doc-fix later to maint). 339 (merge 3a59e59 kb/i18n-doc later to maint). 340 (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint). 341 (merge 14691e3 sb/parse-options-codeformat later to maint). 342 (merge 4a6ada3 ad/bisect-cleanup later to maint). 343 (merge da4c5ad ta/docfix-index-format-tech later to maint). 344 (merge ae25fd3 sb/check-return-from-read-ref later to maint). 345 (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint). 346 (merge 7aa9b9b sg/wt-status-header-inclusion later to maint). 347 (merge f04c690 as/docfix-reflog-expire-unreachable later to maint). 348 (merge 1269847 sg/t3020-typofix later to maint). 349 (merge 8b54c23 jc/calloc-pathspec later to maint). 350 (merge a6926b8 po/po-readme later to maint). 351 (merge 54d160e ss/fix-config-fd-leak later to maint). 352 (merge b80fa84 ah/submodule-typofix-in-error later to maint). 353 (merge 99885bc ah/reflog-typofix-in-error later to maint). 354 (merge 9476c2c ah/read-tree-usage-string later to maint). 355 (merge b8c1d27 ah/pack-objects-usage-strings later to maint). 356 (merge 486e1e1 br/svn-doc-include-paths-config later to maint). 357 (merge 1733ed3 ee/clean-test-fixes later to maint). 358 (merge 5fcadc3 gb/apply-comment-typofix later to maint). 359 (merge b894d3e mp/t7060-diff-index-test later to maint).