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 60Performance, Internal Implementation, Development Support etc. 61 62 * In preparation for allowing different "backends" to store the refs 63 in a way different from the traditional "one ref per file in 64 $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage, 65 direct filesystem access to ref-like things like CHERRY_PICK_HEAD 66 from scripts and programs has been reduced. 67 68 * Computation of untracked status indicator by bash prompt 69 script (in contrib/) has been optimized. 70 71 * Memory use reduction when commit-slab facility is used to annotate 72 sparsely (which is not recommended in the first place). 73 74 * Clean up refs API and make "git clone" less intimate with the 75 implementation detail. 76 77 * "git pull" was reimplemented in C. 78 79 * The packet tracing machinery allows to capture an incoming pack 80 data to a file for debugging. 81 82 * Move machinery to parse human-readable scaled numbers like 1k, 4M, 83 and 2G as an option parameter's value from pack-objects to 84 parse-options API, to make it available to other codepaths. 85 86 * "git verify-tag" and "git verify-commit" have been taught to share 87 more code, and then learned to optionally show the verification 88 message from the underlying GPG implementation. 89 90 * Various enhancements around "git am" reading patches generated by 91 foreign SCM have been made. 92 93 * Ref listing by "git branch -l" and "git tag -l" commands has 94 started to be rebuilt, based on the for-each-ref machinery. 95 96 * The code to perform multi-tree merges has been taught to repopulate 97 the cache-tree upon a successful merge into the index, so that 98 subsequent "diff-index --cached" (hence "status") and "write-tree" 99 (hence "commit") will go faster. 100 101 The same logic in "git checkout" may now be removed, but that is a 102 separate issue. 103 104 * Tests that assume how reflogs are represented on the filesystem too 105 much have been corrected. 106 107 * "git am" has been rewritten in "C". 108 109 * git_path() and mkpath() are handy helper functions but it is easy 110 to misuse, as the callers need to be careful to keep the number of 111 active results below 4. Their uses have been reduced. 112 113 114Also contains various documentation updates and code clean-ups. 115 116 117Fixes since v2.5 118---------------- 119 120Unless otherwise noted, all the fixes since v2.5 in the maintenance 121track are contained in this release (see the maintenance releases' 122notes for details). 123 124 * "git subtree" (in contrib/) depended on "git log" output to be 125 stable, which was a no-no. Apply a workaround to force a 126 particular date format. 127 (merge e7aac44 da/subtree-date-confusion later to maint). 128 129 * An attempt to delete a ref by pushing into a repository whose HEAD 130 symbolic reference points at an unborn branch that cannot be 131 created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD 132 points at refs/heads/a) failed. 133 (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint). 134 135 * The low-level "git send-pack" did not honor 'user.signingkey' 136 configuration variable when sending a signed-push. 137 (merge d830d39 db/send-pack-user-signingkey later to maint). 138 139 * "sparse checkout" misbehaved for a path that is excluded from the 140 checkout when switching between branches that differ at the path. 141 (merge 7d78241 as/sparse-checkout-removal later to maint). 142 143 * An experimental "untracked cache" feature used uname(2) in a 144 slightly unportable way. 145 (merge 100e433 cb/uname-in-untracked later to maint). 146 147 * A "rebase" replays changes of the local branch on top of something 148 else, as such they are placed in stage #3 and referred to as 149 "theirs", while the changes in the new base, typically a foreign 150 work, are placed in stage #2 and referred to as "ours". Clarify 151 the "checkout --ours/--theirs". 152 (merge f303016 se/doc-checkout-ours-theirs later to maint). 153 154 * The "rev-parse --parseopt" mode parsed the option specification 155 and the argument hint in a strange way to allow '=' and other 156 special characters in the option name while forbidding them from 157 the argument hint. This made it impossible to define an option 158 like "--pair <key>=<value>" with "pair=key=value" specification, 159 which instead would have defined a "--pair=key <value>" option. 160 (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint). 161 162 * Often a fast-import stream builds a new commit on top of the 163 previous commit it built, and it often unconditionally emits a 164 "from" command to specify the first parent, which can be omitted in 165 such a case. This caused fast-import to forget the tree of the 166 previous commit and then re-read it from scratch, which was 167 inefficient. Optimize for this common case. 168 (merge 0df3245 mh/fast-import-optimize-current-from later to maint). 169 170 * Running an aliased command from a subdirectory when the .git thing 171 in the working tree is a gitfile pointing elsewhere did not work. 172 (merge d95138e nd/export-worktree later to maint). 173 174 * "Is this subdirectory a separate repository that should not be 175 touched?" check "git clean" was inefficient. This was replaced 176 with a more optimized check. 177 (merge 38ae878 ee/clean-remove-dirs later to maint). 178 179 * The "new-worktree-mode" hack in "checkout" that was added in 180 nd/multiple-work-trees topic has been removed by updating the 181 implementation of new "worktree add". 182 (merge 65f9b75 es/worktree-add-cleanup later to maint). 183 184 * Remove remaining cruft from "git checkout --to", which 185 transitioned to "git worktree add". 186 (merge 114ff88 es/worktree-add later to maint). 187 188 * An off-by-one error made "git remote" to mishandle a remote with a 189 single letter nickname. 190 (merge bc598c3 mh/get-remote-group-fix later to maint). 191 192 * "git clone $URL", when cloning from a site whose sole purpose is to 193 host a single repository (hence, no path after <scheme>://<site>/), 194 tried to use the site name as the new repository name, but did not 195 remove username or password when <site> part was of the form 196 <user>@<pass>:<host>. The code is taught to redact these. 197 (merge adef956 ps/guess-repo-name-at-root later to maint). 198 199 * Running tests with the "-x" option to make them verbose had some 200 unpleasant interactions with other features of the test suite. 201 (merge 9b5fe78 jk/test-with-x later to maint). 202 203 * t1509 test that requires a dedicated VM environment had some 204 bitrot, which has been corrected. 205 (merge faacc5a ps/t1509-chroot-test-fixup later to maint). 206 207 * "git pull" in recent releases of Git has a regression in the code 208 that allows custom path to the --upload-pack=<program>. This has 209 been corrected. 210 211 Note that this is irrelevant for 'master' with "git pull" rewritten 212 in C. 213 (merge 22d6857 mm/pull-upload-pack later to maint). 214 215 * Code cleanups and documentation updates. 216 (merge 1c601af es/doc-clean-outdated-tools later to maint). 217 (merge 3581304 kn/tag-doc-fix later to maint). 218 (merge 3a59e59 kb/i18n-doc later to maint). 219 (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint). 220 (merge 14691e3 sb/parse-options-codeformat later to maint). 221 (merge 4a6ada3 ad/bisect-cleanup later to maint). 222 (merge da4c5ad ta/docfix-index-format-tech later to maint). 223 (merge ae25fd3 sb/check-return-from-read-ref later to maint).