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