Merge branch 'jk/long-error-messages'
[alt-git.git] / Documentation / RelNotes / 2.6.0.txt
blobf938768b2a8b7d32ba39cdc7fd9f14f6bc6d9762
1 Git 2.6 Release Notes
2 =====================
4 Updates since v2.5
5 ------------------
7 UI, Workflows & Features
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.
13  * New userdiff pattern definition for fountain screenwriting markup
14    format has been added.
16  * "git log" and friends learned a new "--date=format:..." option to
17    format timestamps using system's strftime(3).
19  * "git fast-import" learned to respond to the get-mark command via
20    its cat-blob-fd interface.
22  * "git rebase -i" learned "drop commit-object-name subject" command
23    as another way to skip replaying of a commit.
25  * A new configuration variable can enable "--follow" automatically
26    when "git log" is run with one pathspec argument.
28  * "git status" learned to show a more detailed information regarding
29    the "rebase -i" session in progress.
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).
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.
39  * "git rebase -i"'s list of todo is made configurable.
41  * "git send-email" now performs alias-expansion on names that are
42    given via --cccmd, etc.
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.
48  * Allow untracked cache (experimental) to be used when sparse
49    checkout (experimental) is also in use.
51  * "git pull --rebase" has been taught to pay attention to
52    rebase.autostash configuration.
54  * The command-line completion script (in contrib/) has been updated.
56  * A negative !ref entry in multi-value transfer.hideRefs
57    configuration can be used to say "don't hide this one".
60 Performance, Internal Implementation, Development Support etc.
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.
68  * Computation of untracked status indicator by bash prompt
69    script (in contrib/) has been optimized.
71  * Memory use reduction when commit-slab facility is used to annotate
72    sparsely (which is not recommended in the first place).
74  * Clean up refs API and make "git clone" less intimate with the
75    implementation detail.
77  * "git pull" was reimplemented in C.
79  * The packet tracing machinery allows to capture an incoming pack
80    data to a file for debugging.
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.
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.
90  * Various enhancements around "git am" reading patches generated by
91    foreign SCM have been made.
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.
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.
101    The same logic in "git checkout" may now be removed, but that is a
102    separate issue.
104  * Tests that assume how reflogs are represented on the filesystem too
105    much have been corrected.
107  * "git am" has been rewritten in "C".
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.
114 Also contains various documentation updates and code clean-ups.
117 Fixes since v2.5
118 ----------------
120 Unless otherwise noted, all the fixes since v2.5 in the maintenance
121 track are contained in this release (see the maintenance releases'
122 notes for details).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
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).
184  * Remove remaining cruft from  "git checkout --to", which
185    transitioned to "git worktree add".
186    (merge 114ff88 es/worktree-add later to maint).
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).
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).
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).
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).
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.
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).
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).