1b593e1ea4
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
300 lines
13 KiB
Text
300 lines
13 KiB
Text
Git v2.3 Release Notes
|
||
======================
|
||
|
||
This one ended up to be a release with lots of small corrections and
|
||
improvements without big uncomfortably exciting features. The recent
|
||
security fix that went to 2.2.1 and older maintenance tracks is also
|
||
contained in this update.
|
||
|
||
|
||
Updates since v2.2
|
||
------------------
|
||
|
||
Ports
|
||
|
||
* Recent gcc toolchain on Cygwin started throwing compilation warning,
|
||
which has been squelched.
|
||
|
||
* A few updates to build on platforms that lack tv_nsec,
|
||
clock_gettime, CLOCK_MONOTONIC and HMAC_CTX_cleanup (e.g. older
|
||
RHEL) have been added.
|
||
|
||
|
||
UI, Workflows & Features
|
||
|
||
* It was cumbersome to use "GIT_SSH" mechanism when the user wanted
|
||
to pass an extra set of arguments to the underlying ssh. A new
|
||
environment variable GIT_SSH_COMMAND can be used for this.
|
||
|
||
* A request to store an empty note via "git notes" meant to remove
|
||
note from the object but with --allow-empty we will store a
|
||
(surprise!) note that is empty.
|
||
|
||
* "git interpret-trailers" learned to properly handle the
|
||
"Conflicts:" block at the end.
|
||
|
||
* "git am" learned "--message-id" option to copy the message ID of
|
||
the incoming e-mail to the log message of resulting commit.
|
||
|
||
* "git clone --reference=<over there>" learned the "--dissociate"
|
||
option to go with it; it borrows objects from the reference object
|
||
store while cloning only to reduce network traffic and then
|
||
dissociates the resulting clone from the reference by performing
|
||
local copies of borrowed objects.
|
||
|
||
* "git send-email" learned "--transfer-encoding" option to force a
|
||
non-fault Content-Transfer-Encoding header (e.g. base64).
|
||
|
||
* "git send-email" normally identifies itself via X-Mailer: header in
|
||
the message it sends out. A new command line flag --no-xmailer
|
||
allows the user to squelch the header.
|
||
|
||
* "git push" into a repository with a working tree normally refuses
|
||
to modify the branch that is checked out. The command learned to
|
||
optionally do an equivalent of "git reset --hard" only when there
|
||
is no change to the working tree and the index instead, which would
|
||
be useful to "deploy" by pushing into a repository.
|
||
|
||
* "git new-workdir" (in contrib/) can be used to populate an empty
|
||
and existing directory now.
|
||
|
||
* Credential helpers are asked in turn until one of them give
|
||
positive response, which is cumbersome to turn off when you need to
|
||
run Git in an automated setting. The credential helper interface
|
||
learned to allow a helper to say "stop, don't ask other helpers."
|
||
Also GIT_TERMINAL_PROMPT environment can be set to false to disable
|
||
our built-in prompt mechanism for passwords.
|
||
|
||
* "git branch -d" (delete) and "git branch -m" (move) learned to
|
||
honor "-f" (force) flag; unlike many other subcommands, the way to
|
||
force these have been with separate "-D/-M" options, which was
|
||
inconsistent.
|
||
|
||
* "diff-highlight" filter (in contrib/) allows its color output to be
|
||
customized via configuration variables.
|
||
|
||
* "git imap-send" learned to take "-v" (verbose) and "-q" (quiet)
|
||
command line options.
|
||
|
||
* "git remote add $name $URL" is now allowed when "url.$URL.insteadOf"
|
||
is already defined.
|
||
|
||
* "git imap-send" now can be built to use cURL library to talk to
|
||
IMAP servers (if the library is recent enough, of course).
|
||
This allows you to use authenticate method other than CRAM-MD5,
|
||
among other things.
|
||
|
||
* "git imap-send" now allows GIT_CURL_VERBOSE environment variable to
|
||
control the verbosity when talking via the cURL library.
|
||
|
||
* The prompt script (in contrib/) learned to optionally hide prompt
|
||
when in an ignored directory by setting GIT_PS1_HIDE_IF_PWD_IGNORED
|
||
shell variable.
|
||
|
||
|
||
Performance, Internal Implementation, Development Support etc.
|
||
|
||
* Earlier we made "rev-list --object-edge" more aggressively list the
|
||
objects at the edge commits, in order to reduce number of objects
|
||
fetched into a shallow repository, but the change affected cases
|
||
other than "fetching into a shallow repository" and made it
|
||
unusably slow (e.g. fetching into a normal repository should not
|
||
have to suffer the overhead from extra processing). Limit it to a
|
||
more specific case by introducing --objects-edge-aggressive, a new
|
||
option to rev-list.
|
||
|
||
* Squelched useless compiler warnings on Mac OS X regarding the
|
||
crypto API.
|
||
|
||
* The procedure to generate unicode table has been simplified.
|
||
|
||
* Some filesystems assign filemodes in a strange way, fooling then
|
||
automatic "filemode trustability" check done during a new
|
||
repository creation. The initialization codepath has been hardened
|
||
against this issue.
|
||
|
||
* The codepath in "git remote update --prune" to drop many refs has
|
||
been optimized.
|
||
|
||
* The API into get_merge_bases*() family of functions was easy to
|
||
misuse, which has been corrected to make it harder to do so.
|
||
|
||
* Long overdue departure from the assumption that S_IFMT is shared by
|
||
everybody made in 2005, which was necessary to port to z/OS.
|
||
|
||
* "git push" and "git fetch" did not communicate an overlong refname
|
||
correctly. Now it uses 64kB sideband to accommodate longer ones.
|
||
|
||
* Recent GPG changes the keyring format and drops support for RFC1991
|
||
formatted signatures, breaking our existing tests.
|
||
|
||
* "git-prompt" (in contrib/) used a variable from the global scope,
|
||
possibly contaminating end-user's namespace.
|
||
|
||
|
||
Also contains various documentation updates and code clean-ups.
|
||
|
||
|
||
Fixes since v2.2
|
||
----------------
|
||
|
||
Unless otherwise noted, all the fixes since v2.2 in the maintenance
|
||
track are contained in this release (see the maintenance releases'
|
||
notes for details).
|
||
|
||
* "git http-push" over WebDAV (aka dumb http-push) was broken in
|
||
v2.2.2 when parsing a symbolic ref, resulting in a bogus request
|
||
that gets rejected by recent versions of cURL library.
|
||
(merge f6786c8 jk/http-push-symref-fix later to maint).
|
||
|
||
* The logic in "git bisect bad HEAD" etc. to avoid forcing the test
|
||
of the common ancestor of bad and good commits was broken.
|
||
(merge 07913d5 cc/bisect-rev-parsing later to maint).
|
||
|
||
* "git checkout-index --temp=$target $path" did not work correctly
|
||
for paths outside the current subdirectory in the project.
|
||
(merge 74c4de5 es/checkout-index-temp later to maint).
|
||
|
||
* The report from "git checkout" on a branch that builds on another
|
||
local branch by setting its branch.*.merge to branch name (not a
|
||
full refname) incorrectly said that the upstream is gone.
|
||
(merge 05e7368 jc/checkout-local-track-report later to maint).
|
||
|
||
* With The git-prompt support (in contrib/), using the exit status of
|
||
the last command in the prompt, e.g. PS1='$(__git_ps1) $? ', did
|
||
not work well, because the helper function stomped on the exit
|
||
status.
|
||
(merge 6babe76 tf/prompt-preserve-exit-status later to maint).
|
||
|
||
* Recent update to "git commit" broke amending an existing commit
|
||
with bogus author/committer lines without a valid e-mail address.
|
||
(merge c83a509 jk/commit-date-approxidate later to maint).
|
||
|
||
* The lockfile API used to get confused which file to clean up when
|
||
the process moved the $cwd after creating a lockfile.
|
||
(merge fa137f6 nd/lockfile-absolute later to maint).
|
||
|
||
* Traditionally we tried to avoid interpreting date strings given by
|
||
the user as future dates, e.g. GIT_COMMITTER_DATE=2014-12-10 when
|
||
used early November 2014 was taken as "October 12, 2014" because it
|
||
is likely that a date in the future, December 10, is a mistake.
|
||
This heuristics has been loosened to allow people to express future
|
||
dates (most notably, --until=<date> may want to be far in the
|
||
future) and we no longer tiebreak by future-ness of the date when
|
||
|
||
(1) ISO-like format is used, and
|
||
(2) the string can make sense interpreted as both y-m-d and y-d-m.
|
||
|
||
Git may still have to use the heuristics to tiebreak between dd/mm/yy
|
||
and mm/dd/yy, though.
|
||
(merge d372395 jk/approxidate-avoid-y-d-m-over-future-dates later to maint).
|
||
|
||
* Git did not correctly read an overlong refname from a packed refs
|
||
file.
|
||
(merge ea41783 jk/read-packed-refs-without-path-max later to maint).
|
||
|
||
* "git apply" was described in the documentation to take --ignore-date
|
||
option, which it does not.
|
||
(merge 0cef4e7 rw/apply-does-not-take-ignore-date later to maint).
|
||
|
||
* "git add -i" did not notice when the interactive command input
|
||
stream went away and kept asking the same question.
|
||
(merge a8bec7a jk/add-i-read-error later to maint).
|
||
|
||
* "git send-email" did not handle RFC 2047 encoded headers quite
|
||
right.
|
||
(merge ab47e2a rd/send-email-2047-fix later to maint).
|
||
|
||
* New tag object format validation added in 2.2 showed garbage after
|
||
a tagname it reported in its error message.
|
||
(merge a1e920a js/fsck-tag-validation later to maint).
|
||
|
||
* The code that reads the reflog from the newer to the older entries
|
||
did not handle an entry that crosses a boundary of block it uses to
|
||
read them correctly.
|
||
(merge 69216bf jk/for-each-reflog-ent-reverse later to maint).
|
||
|
||
* "git diff -B -M" after making a new copy B out of an existing file
|
||
A and then editing A extensively ought to report that B was created
|
||
by copying A and A was modified, which is what "git diff -C"
|
||
reports, but it instead said A was renamed to B and A was edited
|
||
heavily in place. This was not just incoherent but also failed to
|
||
apply with "git apply". The report has been corrected to match what
|
||
"git diff -C" produces for this case.
|
||
(merge 6936b58 jc/diff-b-m later to maint).
|
||
|
||
* In files we pre-populate for the user to edit with commented hints,
|
||
a line of hint that is indented with a tab used to show as '#' (or
|
||
any comment char), ' ' (space), and then the hint text that began
|
||
with the tab, which some editors flag as an indentation error (tab
|
||
following space). We now omit the space after the comment char in
|
||
such a case.
|
||
(merge d55aeb7 jc/strbuf-add-lines-avoid-sp-ht-sequence later to maint).
|
||
|
||
* "git ls-tree" does not support path selection based on negative
|
||
pathspecs, but did not error out when negative pathspecs are given.
|
||
(merge f1f6224 nd/ls-tree-pathspec later to maint).
|
||
|
||
* The function sometimes returned a non-freeable memory and some
|
||
other times returned a piece of memory that must be freed, leading
|
||
to inevitable leaks.
|
||
(merge 59362e5 jc/exec-cmd-system-path-leak-fix later to maint).
|
||
|
||
* The code to abbreviate an object name to its short unique prefix
|
||
has been optimized when no abbreviation was requested.
|
||
(merge 61e704e mh/find-uniq-abbrev later to maint).
|
||
|
||
* "git add --ignore-errors ..." did not ignore an error to
|
||
give a file that did not exist.
|
||
(merge 1d31e5a mg/add-ignore-errors later to maint).
|
||
|
||
* "git checkout $treeish $path", when $path in the index and the
|
||
working tree already matched what is in $treeish at the $path,
|
||
still overwrote the $path unnecessarily.
|
||
(merge c5326bd jk/checkout-from-tree later to maint).
|
||
|
||
* "git config --get-color" did not parse its command line arguments
|
||
carefully.
|
||
(merge cb35722 jk/colors-fix later to maint).
|
||
|
||
* open() emulated on Windows platforms did not give EISDIR upon
|
||
an attempt to open a directory for writing.
|
||
(merge ba6fad0 js/windows-open-eisdir-error later to maint).
|
||
|
||
* A few code paths used abs() when they should have used labs() on
|
||
long integers.
|
||
(merge 83915ba rs/maint-config-use-labs later to maint).
|
||
(merge 31a8aa1 rs/receive-pack-use-labs later to maint).
|
||
|
||
* "gitweb" used to depend on a behaviour recent CGI.pm deprecated.
|
||
(merge 13dbf46 jk/gitweb-with-newer-cgi-multi-param later to maint).
|
||
|
||
* "git init" (hence "git clone") initialized the per-repository
|
||
configuration file .git/config with x-bit by mistake.
|
||
(merge 1f32ecf mh/config-flip-xbit-back-after-checking later to maint).
|
||
|
||
* Recent update in Git 2.2 started creating objects/info/packs and
|
||
info/refs files with permission bits tighter than user's umask.
|
||
(merge d91175b jk/prune-packed-server-info later to maint).
|
||
|
||
* Git 2.0 was supposed to make the "simple" mode for the default of
|
||
"git push", but it didn't.
|
||
(merge 00a6fa0 jk/push-simple later to maint).
|
||
|
||
* "Everyday" document had a broken link.
|
||
(merge 366c8d4 po/everyday-doc later to maint).
|
||
|
||
* A few test fixes.
|
||
(merge 880ef58 jk/no-perl-tests later to maint).
|
||
|
||
* The build procedure did not bother fixing perl and python scripts
|
||
when NO_PERL and NO_PYTHON build-time configuration changed.
|
||
(merge ca2051d jk/rebuild-perl-scripts-with-no-perl-seting-change later to maint).
|
||
|
||
* The usage string of "git log" command was marked incorrectly for
|
||
l10n.
|
||
(merge e66dc0c km/log-usage-string-i18n later to maint).
|
||
|
||
* "git for-each-ref" mishandled --format="%(upstream:track)" when a
|
||
branch is marked to have forked from a non-existing branch.
|
||
(merge b6160d9 rc/for-each-ref-tracking later to maint).
|