You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
510 lines
22 KiB
510 lines
22 KiB
Git 2.10 Release Notes |
|
====================== |
|
|
|
Backward compatibility notes |
|
---------------------------- |
|
|
|
Updates since v2.9 |
|
------------------ |
|
|
|
UI, Workflows & Features |
|
|
|
* "git pull --rebase --verify-signature" learned to warn the user |
|
that "--verify-signature" is a no-op when rebasing. |
|
|
|
* An upstream project can make a recommendation to shallowly clone |
|
some submodules in the .gitmodules file it ships. |
|
|
|
* "git worktree add" learned that '-' can be used as a short-hand for |
|
"@{-1}", the previous branch. |
|
|
|
* Update the funcname definition to support css files. |
|
|
|
* The completion script (in contrib/) learned to complete "git |
|
status" options. |
|
|
|
* Messages that are generated by auto gc during "git push" on the |
|
receiving end are now passed back to the sending end in such a way |
|
that they are shown with "remote: " prefix to avoid confusing the |
|
users. |
|
|
|
* "git add -i/-p" learned to honor diff.compactionHeuristic |
|
experimental knob, so that the user can work on the same hunk split |
|
as "git diff" output. |
|
|
|
* "upload-pack" allows a custom "git pack-objects" replacement when |
|
responding to "fetch/clone" via the uploadpack.packObjectsHook. |
|
(merge b738396 jk/upload-pack-hook later to maint). |
|
|
|
* Teach format-patch and mailsplit (hence "am") how a line that |
|
happens to begin with "From " in the e-mail message is quoted with |
|
">", so that these lines can be restored to their original shape. |
|
(merge d9925d1 ew/mboxrd-format-am later to maint). |
|
|
|
* "git repack" learned the "--keep-unreachable" option, which sends |
|
loose unreachable objects to a pack instead of leaving them loose. |
|
This helps heuristics based on the number of loose objects |
|
(e.g. "gc --auto"). |
|
(merge e26a8c4 jk/repack-keep-unreachable later to maint). |
|
|
|
* "log --graph --format=" learned that "%>|(N)" specifies the width |
|
relative to the terminal's left edge, not relative to the area to |
|
draw text that is to the right of the ancestry-graph section. It |
|
also now accepts negative N that means the column limit is relative |
|
to the right border. |
|
|
|
* A careless invocation of "git send-email directory/" after editing |
|
0001-change.patch with an editor often ends up sending both |
|
0001-change.patch and its backup file, 0001-change.patch~, causing |
|
embarrassment and a minor confusion. Detect such an input and |
|
offer to skip the backup files when sending the patches out. |
|
(merge 531220b jc/send-email-skip-backup later to maint). |
|
|
|
* "git submodule update" that drives many "git clone" could |
|
eventually hit flaky servers/network conditions on one of the |
|
submodules; the command learned to retry the attempt. |
|
|
|
* The output coloring scheme learned two new attributes, italic and |
|
strike, in addition to existing bold, reverse, etc. |
|
|
|
* "git log" learns log.showSignature configuration variable, and a |
|
command line option "--no-show-signature" to countermand it. |
|
(merge fce04c3 mj/log-show-signature-conf later to maint). |
|
|
|
* A couple of "git svn" updates. |
|
|
|
* More markings of messages for i18n, with updates to various tests |
|
to pass GETTEXT_POISON tests. |
|
|
|
* "git archive" learned to handle files that are larger than 8GB and |
|
commits far in the future than expressible by the traditional US-TAR |
|
format. |
|
(merge 5caeeb8 jk/big-and-future-archive-tar later to maint). |
|
|
|
* A new configuration variable core.sshCommand has been added to |
|
specify what value for GIT_SSH_COMMAND to use per repository. |
|
|
|
* "git worktree prune" protected worktrees that are marked as |
|
"locked" by creating a file in a known location. "git worktree" |
|
command learned a dedicated command pair to create and remove such |
|
a file, so that the users do not have to do this with editor. |
|
|
|
* A handful of "git svn" updates. |
|
|
|
* "git push" learned to accept and pass extra options to the |
|
receiving end so that hooks can read and react to them. |
|
|
|
* "git status" learned to suggest "merge --abort" during a conflicted |
|
merge, just like it already suggests "rebase --abort" during a |
|
conflicted rebase. |
|
(merge b0a61ab mm/status-suggest-merge-abort later to maint). |
|
|
|
* "git jump" script (in contrib/) has been updated a bit. |
|
(merge a91e692 jk/git-jump later to maint). |
|
|
|
* "git push" and "git clone" learned to give better progress meters |
|
to the end user who is waiting on the terminal. |
|
|
|
|
|
Performance, Internal Implementation, Development Support etc. |
|
|
|
* "git fast-import" learned the same performance trick to avoid |
|
creating too small a packfile as "git fetch" and "git push" have, |
|
using *.unpackLimit configuration. |
|
|
|
* When "git daemon" is run without --[init-]timeout specified, a |
|
connection from a client that silently goes offline can hang around |
|
for a long time, wasting resources. The socket-level KEEPALIVE has |
|
been enabled to allow the OS to notice such failed connections. |
|
|
|
* "git upload-pack" command has been updated to use the parse-options |
|
API. |
|
|
|
* The "git apply" standalone program is being libified; this is the |
|
first step to move many state variables into a structure that can |
|
be explicitly (re)initialized to make the machinery callable more |
|
than once. |
|
|
|
* HTTP transport gained an option to produce more detailed debugging |
|
trace. |
|
(merge 73e57aa ep/http-curl-trace later to maint). |
|
|
|
* Instead of taking advantage of a struct string_list that is |
|
allocated with all NULs happens to be STRING_LIST_INIT_NODUP kind, |
|
initialize them explicitly as such, to document their behaviour |
|
better. |
|
(merge 2721ce2 jk/string-list-static-init later to maint). |
|
|
|
* HTTPd tests learned to show the server error log to help diagnosing |
|
a failing tests. |
|
(merge 44f243d nd/test-lib-httpd-show-error-log-in-verbose later to maint). |
|
|
|
* The ownership rule for the piece of memory that hold references to |
|
be fetched in "git fetch" was screwy, which has been cleaned up. |
|
|
|
* "git bisect" makes an internal call to "git diff-tree" when |
|
bisection finds the culprit, but this call did not initialize the |
|
data structure to pass to the diff-tree API correctly. |
|
|
|
* Further preparatory clean-up for "worktree" feature continues. |
|
(merge 0409e0b nd/worktree-cleanup-post-head-protection later to maint). |
|
|
|
* Formats of the various data (and how to validate them) where we use |
|
GPG signature have been documented. |
|
|
|
* A new run-command API function pipe_command() is introduced to |
|
sanely feed data to the standard input while capturing data from |
|
the standard output and the standard error of an external process, |
|
which is cumbersome to hand-roll correctly without deadlocking. |
|
|
|
The codepath to sign data in a prepared buffer with GPG has been |
|
updated to use this API to read from the status-fd to check for |
|
errors (instead of relying on GPG's exit status). |
|
(merge efee955 jk/gpg-interface-cleanup later to maint). |
|
|
|
* Allow t/perf framework to use the features from the most recent |
|
version of Git even when testing an older installed version. |
|
|
|
* The commands in the "log/diff" family have had an FILE* pointer in the |
|
data structure they pass around for a long time, but some codepaths |
|
used to always write to the standard output. As a preparatory step |
|
to make "git format-patch" available to the internal callers, these |
|
codepaths have been updated to consistently write into that FILE* |
|
instead. |
|
|
|
* Conversion from unsigned char sha1[20] to struct object_id |
|
continues. |
|
|
|
* Improve the look of the way "git fetch" reports what happened to |
|
each ref that was fetched. |
|
|
|
* The .c/.h sources are marked as such in our .gitattributes file so |
|
that "git diff -W" and friends would work better. |
|
(merge e82675a rs/help-c-source-with-gitattributes later to maint). |
|
|
|
* Code clean-up to avoid using a variable string that compilers may |
|
feel untrustable as printf-style format given to write_file() |
|
helper function. |
|
|
|
* "git p4" used a location outside $GIT_DIR/refs/ to place its |
|
temporary branches, which has been moved to refs/git-p4-tmp/. |
|
|
|
* Existing autoconf generated test for the need to link with pthread |
|
library did not check all the functions from pthread libraries; |
|
recent FreeBSD has some functions in libc but not others, and we |
|
mistakenly thought linking with libc is enough when it is not. |
|
(merge a9b02de ew/autoconf-pthread later to maint). |
|
|
|
* When "git fsck" reports a broken link (e.g. a tree object contains |
|
a blob that does not exist), both containing object and the object |
|
that is referred to were reported with their 40-hex object names. |
|
The command learned the "--name-objects" option to show the path to |
|
the containing object from existing refs (e.g. "HEAD~24^2:file.txt"). |
|
|
|
* Allow http daemon tests in Travis CI tests. |
|
(merge d9d1426 ls/travis-enable-httpd-tests later to maint). |
|
|
|
* Makefile assumed that -lrt is always available on platforms that |
|
want to use clock_gettime() and CLOCK_MONOTONIC, which is not a |
|
case for recent Mac OS X. The necessary symbols are often found in |
|
libc on many modern systems and having -lrt on the command line, as |
|
long as the library exists, had no effect, but when the platform |
|
removes librt.a that is a different matter--having -lrt will break |
|
the linkage. |
|
|
|
This change could be seen as a regression for those who do need to |
|
specify -lrt, as they now specifically ask for NEEDS_LIBRT when |
|
building. Hopefully they are in the minority these days. |
|
|
|
* Further preparatory work on the refs API before the pluggable |
|
backend series can land. |
|
|
|
* Error handling in the codepaths that updates refs has been |
|
improved. |
|
|
|
* The API to iterate over all the refs (i.e. for_each_ref(), etc.) |
|
has been revamped. |
|
|
|
* A few tests that specifically target "git rebase -i" have been |
|
added. |
|
|
|
* Dumb http transport on the client side has been optimized. |
|
(merge ecba195 ew/http-walker later to maint). |
|
|
|
* Users of the parse_options_concat() API function need to allocate |
|
extra slots in advance and fill them with OPT_END() when they want |
|
to decide the set of supported options dynamically, which makes the |
|
code error-prone and hard to read. This has been corrected by tweaking |
|
the API to allocate and return a new copy of "struct option" array. |
|
(merge 023ff39 jk/parse-options-concat later to maint). |
|
|
|
* "git fetch" exchanges batched have/ack messages between the sender |
|
and the receiver, initially doubling every time and then falling |
|
back to enlarge the window size linearly. The "smart http" |
|
transport, being an half-duplex protocol, outgrows the preset limit |
|
too quickly and becomes inefficient when interacting with a large |
|
repository. The internal mechanism learned to grow the window size |
|
more aggressively when working with the "smart http" transport. |
|
|
|
|
|
Also contains various documentation updates and code clean-ups. |
|
|
|
|
|
Fixes since v2.9 |
|
---------------- |
|
|
|
Unless otherwise noted, all the fixes since v2.8 in the maintenance |
|
track are contained in this release (see the maintenance releases' |
|
notes for details). |
|
|
|
* The commands in `git log` family take %C(auto) in a custom format |
|
string. This unconditionally turned the color on, ignoring |
|
--no-color or with --color=auto when the output is not connected to |
|
a tty; this was corrected to make the format truly behave as |
|
"auto". |
|
|
|
* "git rev-list --count" whose walk-length is limited with "-n" |
|
option did not work well with the counting optimized to look at the |
|
bitmap index. |
|
|
|
* "git show -W" (extend hunks to cover the entire function, delimited |
|
by lines that match the "funcname" pattern) used to show the entire |
|
file when a change added an entire function at the end of the file, |
|
which has been fixed. |
|
|
|
* The documentation set has been updated so that literal commands, |
|
configuration variables and environment variables are consistently |
|
typeset in fixed-width font and bold in manpages. |
|
|
|
* "git svn propset" subcommand that was added in 2.3 days is |
|
documented now. |
|
|
|
* The documentation tries to consistently spell "GPG"; when |
|
referring to the specific program name, "gpg" is used. |
|
|
|
* "git reflog" stopped upon seeing an entry that denotes a branch |
|
creation event (aka "unborn"), which made it appear as if the |
|
reflog was truncated. |
|
|
|
* The git-prompt scriptlet (in contrib/) was not friendly with those |
|
who uses "set -u", which has been fixed. |
|
|
|
* compat/regex code did not cleanly compile. |
|
|
|
* A codepath that used alloca(3) to place an unbounded amount of data |
|
on the stack has been updated to avoid doing so. |
|
|
|
* "git update-index --add --chmod=+x file" may be usable as an escape |
|
hatch, but not a friendly thing to force for people who do need to |
|
use it regularly. "git add --chmod=+x file" can be used instead. |
|
|
|
* Build improvements for gnome-keyring (in contrib/) |
|
|
|
* "git status" used to say "working directory" when it meant "working |
|
tree". |
|
|
|
* Comments about misbehaving FreeBSD shells have been clarified with |
|
the version number (9.x and before are broken, newer ones are OK). |
|
|
|
* "git cherry-pick A" worked on an unborn branch, but "git |
|
cherry-pick A..B" didn't. |
|
|
|
* Fix an unintended regression in v2.9 that breaks "clone --depth" |
|
that recurses down to submodules by forcing the submodules to also |
|
be cloned shallowly, which many server instances that host upstream |
|
of the submodules are not prepared for. |
|
|
|
* Fix unnecessarily waste in the idiomatic use of ': ${VAR=default}' |
|
to set the default value, without enclosing it in double quotes. |
|
|
|
* Some platform-specific code had non-ANSI strict declarations of C |
|
functions that do not take any parameters, which has been |
|
corrected. |
|
|
|
* The internal code used to show local timezone offset is not |
|
prepared to handle timestamps beyond year 2100, and gave a |
|
bogus offset value to the caller. Use a more benign looking |
|
+0000 instead and let "git log" going in such a case, instead |
|
of aborting. |
|
|
|
* One among four invocations of readlink(1) in our test suite has |
|
been rewritten so that the test can run on systems without the |
|
command (others are in valgrind test framework and t9802). |
|
|
|
* t/perf needs /usr/bin/time with GNU extension; the invocation of it |
|
is updated to "gtime" on Darwin. |
|
|
|
* A bug, which caused "git p4" while running under verbose mode to |
|
report paths that are omitted due to branch prefix incorrectly, has |
|
been fixed; the command said "Ignoring file outside of prefix" for |
|
paths that are _inside_. |
|
|
|
* The top level documentation "git help git" still pointed at the |
|
documentation set hosted at now-defunct google-code repository. |
|
Update it to point to https://git.github.io/htmldocs/git.html |
|
instead. |
|
|
|
* A helper function that takes the contents of a commit object and |
|
finds its subject line did not ignore leading blank lines, as is |
|
commonly done by other codepaths. Make it ignore leading blank |
|
lines to match. |
|
|
|
* For a long time, we carried an in-code comment that said our |
|
colored output would work only when we use fprintf/fputs on |
|
Windows, which no longer is the case for the past few years. |
|
|
|
* "gc.autoPackLimit" when set to 1 should not trigger a repacking |
|
when there is only one pack, but the code counted poorly and did |
|
so. |
|
|
|
* Add a test to specify the desired behaviour that currently is not |
|
available in "git rebase -Xsubtree=...". |
|
|
|
* More mark-up updates to typeset strings that are expected to |
|
literally typed by the end user in fixed-width font. |
|
|
|
* "git commit --amend --allow-empty-message -S" for a commit without |
|
any message body could have misidentified where the header of the |
|
commit object ends. |
|
|
|
* "git rebase -i --autostash" did not restore the auto-stashed change |
|
when the operation was aborted. |
|
|
|
* Git does not know what the contents in the index should be for a |
|
path added with "git add -N" yet, so "git grep --cached" should not |
|
show hits (or show lack of hits, with -L) in such a path, but that |
|
logic does not apply to "git grep", i.e. searching in the working |
|
tree files. But we did so by mistake, which has been corrected. |
|
|
|
* "git blame -M" missed a single line that was moved within the file. |
|
|
|
* Fix recently introduced codepaths that are involved in parallel |
|
submodule operations, which gave up on reading too early, and |
|
could have wasted CPU while attempting to write under a corner |
|
case condition. |
|
|
|
* "git grep -i" has been taught to fold case in non-ascii locales |
|
correctly. |
|
|
|
* A test that unconditionally used "mktemp" learned that the command |
|
is not necessarily available everywhere. |
|
|
|
* There are certain house-keeping tasks that need to be performed at |
|
the very beginning of any Git program, and programs that are not |
|
built-in commands had to do them exactly the same way as "git" |
|
potty does. It was easy to make mistakes in one-off standalone |
|
programs (like test helpers). A common "main()" function that |
|
calls cmd_main() of individual program has been introduced to |
|
make it harder to make mistakes. |
|
(merge de61ceb jk/common-main later to maint). |
|
|
|
* The test framework learned a new helper test_match_signal to |
|
check an exit code from getting killed by an expected signal. |
|
|
|
* General code clean-up around a helper function to write a |
|
single-liner to a file. |
|
(merge 7eb6e10 jk/write-file later to maint). |
|
|
|
* One part of "git am" had an oddball helper function that called |
|
stuff from outside "his" as opposed to calling what we have "ours", |
|
which was not gender-neutral and also inconsistent with the rest of |
|
the system where outside stuff is usuall called "theirs" in |
|
contrast to "ours". |
|
|
|
* "git blame file" allowed the lineage of lines in the uncommitted, |
|
unadded contents of "file" to be inspected, but it refused when |
|
"file" did not appear in the current commit. When "file" was |
|
created by renaming an existing file (but the change has not been |
|
committed), this restriction was unnecessarily tight. |
|
(merge c66b470 mh/blame-worktree later to maint). |
|
|
|
* "git add -N dir/file && git write-tree" produced an incorrect tree |
|
when there are other paths in the same directory that sorts after |
|
"file". |
|
(merge 6d6a782 nd/cache-tree-ita later to maint). |
|
|
|
* "git fetch http://user:pass@host/repo..." scrubbed the userinfo |
|
part, but "git push" didn't. |
|
(merge 68f3c07 jk/push-scrub-url later to maint). |
|
|
|
* "git merge" with renormalization did not work well with |
|
merge-recursive, due to "safer crlf" conversion kicking in when it |
|
shouldn't. |
|
(merge 1335d76 jc/renormalize-merge-kill-safer-crlf later to maint). |
|
|
|
* The use of strbuf in "git rm" to build filename to remove was a bit |
|
suboptimal, which has been fixed. |
|
(merge deb8e15 rs/rm-strbuf-optim later to maint). |
|
|
|
* An age old bug that caused "git diff --ignore-space-at-eol" |
|
misbehave has been fixed. |
|
(merge 044fb19 js/ignore-space-at-eol later to maint). |
|
|
|
* "git notes merge" had a code to see if a path exists (and fails if |
|
it does) and then open the path for writing (when it doesn't). |
|
Replace it with open with O_EXCL. |
|
(merge deb9c15 rs/notes-merge-no-toctou later to maint). |
|
|
|
* "git pack-objects" and "git index-pack" mostly operate with off_t |
|
when talking about the offset of objects in a packfile, but there |
|
were a handful of places that used "unsigned long" to hold that |
|
value, leading to an unintended truncation. |
|
(merge ec9d224 nd/pack-ofs-4gb-limit later to maint). |
|
|
|
* Recent update to "git daemon" tries to enable the socket-level |
|
KEEPALIVE, but when it is spawned via inetd, the standard input |
|
file descriptor may not necessarily be connected to a socket. |
|
Suppress an ENOTSOCK error from setsockopt(). |
|
(merge fab6027 ew/daemon-socket-keepalive later to maint). |
|
|
|
* Recent FreeBSD stopped making perl available at /usr/bin/perl; |
|
switch the default the built-in path to /usr/local/bin/perl on not |
|
too ancient FreeBSD releases. |
|
(merge 259f22a ew/find-perl-on-freebsd-in-local later to maint). |
|
|
|
* "git commit --help" said "--no-verify" is only about skipping the |
|
pre-commit hook, and failed to say that it also skipped the |
|
commit-msg hook. |
|
(merge def480f os/no-verify-skips-commit-msg-too later to maint). |
|
|
|
* "git merge" in Git v2.9 was taught to forbid merging an unrelated |
|
lines of history by default, but that is exactly the kind of thing |
|
the "--rejoin" mode of "git subtree" (in contrib/) wants to do. |
|
"git subtree" has been taught to use the "--allow-unrelated-histories" |
|
option to override the default. |
|
(merge 0f12c7d da/subtree-2.9-regression later to maint). |
|
|
|
* The build procedure for "git persistent-https" helper (in contrib/) |
|
has been updated so that it can be built with more recent versions |
|
of Go. |
|
(merge accb613 pm/build-persistent-https-with-recent-go later to maint). |
|
|
|
* There is an optimization used in "git diff $treeA $treeB" to borrow |
|
an already checked-out copy in the working tree when it is known to |
|
be the same as the blob being compared, expecting that open/mmap of |
|
such a file is faster than reading it from the object store, which |
|
involves inflating and applying delta. This however kicked in even |
|
when the checked-out copy needs to go through the convert-to-git |
|
conversion (including the clean filter), which defeats the whole |
|
point of the optimization. The optimization has been disabled when |
|
the conversion is necessary. |
|
(merge 06dec43 jk/diff-do-not-reuse-wtf-needs-cleaning later to maint). |
|
|
|
* "git -c grep.patternType=extended log --basic-regexp" misbehaved |
|
because the internal API to access the grep machinery was not |
|
designed well. |
|
(merge 8465541 jc/grep-commandline-vs-configuration later to maint). |
|
|
|
* Other minor clean-ups and documentation updates |
|
(merge e51b0df pb/commit-editmsg-path later to maint). |
|
(merge b333d0d jk/send-pack-stdio later to maint). |
|
(merge fcf0fe9 lf/sideband-returns-void later to maint). |
|
(merge c2691e2 ah/unpack-trees-advice-messages later to maint). |
|
(merge c61b2af lf/recv-sideband-cleanup later to maint). |
|
(merge 31471ba rs/use-strbuf-addbuf later to maint). |
|
(merge 503e224 nd/test-helpers later to maint). |
|
(merge 16726cf jc/doc-diff-filter-exclude later to maint). |
|
(merge fd2e7da rs/worktree-use-strbuf-absolute-path later to maint). |
|
(merge 406621f sb/submodule-deinit-all later to maint). |
|
(merge 55cbe18 rs/submodule-config-code-cleanup later to maint). |
|
(merge 280abfd sb/pack-protocol-doc-nak later to maint).
|
|
|