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.
423 lines
18 KiB
423 lines
18 KiB
Git v1.8.2 Release Notes |
|
======================== |
|
|
|
Backward compatibility notes |
|
---------------------------- |
|
|
|
In the upcoming major release (tentatively called 1.8.2), we will |
|
change the behavior of the "git push" command. |
|
|
|
When "git push [$there]" does not say what to push, we have used the |
|
traditional "matching" semantics so far (all your branches were sent |
|
to the remote as long as there already are branches of the same name |
|
over there). We will use the "simple" semantics that pushes the |
|
current branch to the branch with the same name, only when the current |
|
branch is set to integrate with that remote branch. There is a user |
|
preference configuration variable "push.default" to change this. |
|
|
|
"git push $there tag v1.2.3" used to allow replacing a tag v1.2.3 |
|
that already exists in the repository $there, if the rewritten tag |
|
you are pushing points at a commit that is a decendant of a commit |
|
that the old tag v1.2.3 points at. This was found to be error prone |
|
and starting with this release, any attempt to update an existing |
|
ref under refs/tags/ hierarchy will fail, without "--force". |
|
|
|
|
|
Updates since v1.8.1 |
|
-------------------- |
|
|
|
UI, Workflows & Features |
|
|
|
* Initial ports to QNX and z/OS UNIX System Services have started. |
|
|
|
* Output from the tests is coloured using "green is okay, yellow is |
|
questionable, red is bad and blue is informative" scheme. |
|
|
|
* Mention of "GIT/Git/git" in the documentation have been updated to |
|
be more uniform and consistent. The name of the system and the |
|
concept it embodies is "Git"; the command the users type is "git". |
|
All-caps "GIT" was merely a way to imitate "Git" typeset in small |
|
caps in our ASCII text only documentation and to be avoided. |
|
|
|
* The completion script (in contrib/completion) used to let the |
|
default completer to suggest pathnames, which gave too many |
|
irrelevant choices (e.g. "git add" would not want to add an |
|
unmodified path). It learnt to use a more git-aware logic to |
|
enumerate only relevant ones. |
|
|
|
* In bare repositories, "git shortlog" and other commands now read |
|
mailmap files from the tip of the history, to help running these |
|
tools in server settings. |
|
|
|
* Color specifiers, e.g. "%C(blue)Hello%C(reset)", used in the |
|
"--format=" option of "git log" and friends can be disabled when |
|
the output is not sent to a terminal by prefixing them with |
|
"auto,", e.g. "%C(auto,blue)Hello%C(auto,reset)". |
|
|
|
* Scripts can ask Git that wildcard patterns in pathspecs they give do |
|
not have any significance, i.e. take them as literal strings. |
|
|
|
* The patterns in .gitignore and .gitattributes files can have **/, |
|
as a pattern that matches 0 or more levels of subdirectory. |
|
E.g. "foo/**/bar" matches "bar" in "foo" itself or in a |
|
subdirectory of "foo". |
|
|
|
* When giving arguments without "--" disambiguation, object names |
|
that come earlier on the command line must not be interpretable as |
|
pathspecs and pathspecs that come later on the command line must |
|
not be interpretable as object names. This disambiguation rule has |
|
been tweaked so that ":/" (no other string before or after) is |
|
always interpreted as a pathspec; "git cmd -- :/" is no longer |
|
needed, you can just say "git cmd :/". |
|
|
|
* Various "hint" lines Git gives when it asks the user to edit |
|
messages in the editor are commented out with '#' by default. The |
|
core.commentchar configuration variable can be used to customize |
|
this '#' to a different character. |
|
|
|
* "git add -u" and "git add -A" without pathspec issues warning to |
|
make users aware that they are only operating on paths inside the |
|
subdirectory they are in. Use ":/" (everything from the top) or |
|
"." (everything from the $cwd) to disambiguate. |
|
|
|
* "git blame" (and "git diff") learned the "--no-follow" option. |
|
|
|
* "git branch" now rejects some nonsense combinations of command line |
|
arguments (e.g. giving more than one branch name to rename) with |
|
more case-specific error messages. |
|
|
|
* "git check-ignore" command to help debugging .gitignore files has |
|
been added. |
|
|
|
* "git cherry-pick" can be used to replay a root commit to an unborn |
|
branch. |
|
|
|
* "git commit" can be told to use --cleanup=whitespace by setting the |
|
configuration variable commit.cleanup to 'whitespace'. |
|
|
|
* "git fetch --mirror" and fetch that uses other forms of refspec |
|
with wildcard used to attempt to update a symbolic ref that match |
|
the wildcard on the receiving end, which made little sense (the |
|
real ref that is pointed at by the symbolic ref would be updated |
|
anyway). Symbolic refs no longer are affected by such a fetch. |
|
|
|
* "git format-patch" now detects more cases in which a whole branch |
|
is being exported, and uses the description for the branch, when |
|
asked to write a cover letter for the series. |
|
|
|
* "git format-patch" learned "-v $count" option, and prepends a |
|
string "v$count-" to the names of its output files, and also |
|
automatically sets the subject prefix to "PATCH v$count". This |
|
allows patches from rerolled series to be stored under different |
|
names and makes it easier to reuse cover letter messsages. |
|
|
|
* "git log" and friends can be told with --use-mailmap option to |
|
rewrite the names and email addresses of people using the mailmap |
|
mechanism. |
|
|
|
* "git mergetool" and "git difftool" learned to list the available |
|
tool backends in a more consistent manner. |
|
|
|
* "git mergetool" is aware of TortoiseGitMerge now and uses it over |
|
TortoiseMerge when available. |
|
|
|
* "git push" now requires "-f" to update a tag, even if it is a |
|
fast-forward, as tags are meant to be fixed points. |
|
|
|
* Error messages from "git push" when it stops to prevent remote refs |
|
from getting overwritten by mistake have been improved to explain |
|
various situations separately. |
|
|
|
* "git push" will stop without doing anything if the new "pre-push" |
|
hook exists and exits with a failure. |
|
|
|
* When "git rebase" fails to generate patches to be applied (e.g. due |
|
to oom), it failed to detect the failure and instead behaved as if |
|
there were nothing to do. A workaround to use a temporary file has |
|
been applied, but we probably would want to revisit this later, as |
|
it hurts the common case of not failing at all. |
|
|
|
* Input and preconditions to "git reset" has been loosened where |
|
appropriate. "git reset $fromtree Makefile" requires $fromtree to |
|
be any tree (it used to require it to be a commit), for example. |
|
"git reset" (without options or parameters) used to error out when |
|
you do not have any commits in your history, but it now gives you |
|
an empty index (to match non-existent commit you are not even on). |
|
|
|
* "git submodule" started learning a new mode to integrate with the |
|
tip of the remote branch (as opposed to integrating with the commit |
|
recorded in the superproject's gitlink). |
|
|
|
|
|
Foreign Interface |
|
|
|
* "git fast-export" has been updated for its use in the context of |
|
the remote helper interface. |
|
|
|
* A new remote helper to interact with bzr has been added to contrib/. |
|
|
|
* "git p4" got various bugfixes around its branch handling. It is |
|
also made usable with Python 2.4/2.5. In addition, its various |
|
portability issues for Cygwin have been addressed. |
|
|
|
* The remote helper to interact with Hg in contrib/ has seen a few |
|
fixes. |
|
|
|
|
|
Performance, Internal Implementation, etc. |
|
|
|
* "git fsck" has been taught to be pickier about entries in tree |
|
objects that should not be there, e.g. ".", ".git", and "..". |
|
|
|
* Matching paths with common forms of pathspecs that contain wildcard |
|
characters has been optimized further. |
|
|
|
* We stopped paying attention to $GIT_CONFIG environment that points |
|
at a single configuration file from any command other than "git config" |
|
quite a while ago, but "git clone" internally set, exported, and |
|
then unexported the variable during its operation unnecessarily. |
|
|
|
* "git reset" internals has been reworked and should be faster in |
|
general. We tried to be careful not to break any behaviour but |
|
there could be corner cases, especially when running the command |
|
from a conflicted state, that we may have missed. |
|
|
|
* The implementation of "imap-send" has been updated to reuse xml |
|
quoting code from http-push codepath, and lost a lot of unused |
|
code. |
|
|
|
* There is a simple-minded checker for the test scripts in t/ |
|
directory to catch most common mistakes (it is not enabled by |
|
default). |
|
|
|
* You can build with USE_WILDMATCH=YesPlease to use a replacement |
|
implementation of pattern matching logic used for pathname-like |
|
things, e.g. refnames and paths in the repository. This new |
|
implementation is not expected change the existing behaviour of Git |
|
in this release, except for "git for-each-ref" where you can now |
|
say "refs/**/master" and match with both refs/heads/master and |
|
refs/remotes/origin/master. We plan to use this new implementation |
|
in wider places (e.g. "git ls-files '**/Makefile' may find Makefile |
|
at the top-level, and "git log '**/t*.sh'" may find commits that |
|
touch a shell script whose name begins with "t" at any level) in |
|
future versions of Git, but we are not there yet. By building with |
|
USE_WILDMATCH, using the resulting Git daily and reporting when you |
|
find breakages, you can help us get closer to that goal. |
|
|
|
* Some reimplementations of Git do not write all the stat info back |
|
to the index due to their implementation limitations (e.g. jgit). |
|
A configuration option can tell Git to ignore changes to most of |
|
the stat fields and only pay attention to mtime and size, which |
|
these implementations can reliably update. This can be used to |
|
avoid excessive revalidation of contents. |
|
|
|
|
|
Also contains minor documentation updates and code clean-ups. |
|
|
|
|
|
Fixes since v1.8.1 |
|
------------------ |
|
|
|
Unless otherwise noted, all the fixes since v1.8.1 in the maintenance |
|
track are contained in this release (see release notes to them for |
|
details). |
|
|
|
* An element on GIT_CEILING_DIRECTORIES list that does not name the |
|
real path to a directory (i.e. a symbolic link) could have caused |
|
the GIT_DIR discovery logic to escape the ceiling. |
|
|
|
* When attempting to read the XDG-style $HOME/.config/git/config and |
|
finding that $HOME/.config/git is a file, we gave a wrong error |
|
message, instead of treating the case as "a custom config file does |
|
not exist there" and moving on. |
|
|
|
* The behaviour visible to the end users was confusing, when they |
|
attempt to kill a process spawned in the editor that was in turn |
|
launched by Git with SIGINT (or SIGQUIT), as Git would catch that |
|
signal and die. We ignore these signals now. |
|
(merge 0398fc34 pf/editor-ignore-sigint later to maint). |
|
|
|
* A child process that was killed by a signal (e.g. SIGINT) was |
|
reported in an inconsistent way depending on how the process was |
|
spawned by us, with or without a shell in between. |
|
|
|
* After failing to create a temporary file using mkstemp(), failing |
|
pathname was not reported correctly on some platforms. |
|
|
|
* We used to stuff "user@" and then append what we read from |
|
/etc/mailname to come up with a default e-mail ident, but a bug |
|
lost the "user@" part. |
|
|
|
* The attribute mechanism didn't allow limiting attributes to be |
|
applied to only a single directory itself with "path/" like the |
|
exclude mechanism does. The initial implementation of this that |
|
was merged to 'maint' and 1.8.1.2 was with a severe performance |
|
degradations and needs to merge a fix-up topic. |
|
|
|
* The smart HTTP clients forgot to verify the content-type that comes |
|
back from the server side to make sure that the request is being |
|
handled properly. |
|
(merge 3443db5 sp/smart-http-content-type-check later to maint). |
|
|
|
* "git am" did not parse datestamp correctly from Hg generated patch, |
|
when it is run in a locale outside C (or en). |
|
|
|
* "git apply" misbehaved when fixing whitespace breakages by removing |
|
excess trailing blank lines. |
|
|
|
* "git apply --summary" has been taught to make sure the similarity |
|
value shown in its output is sensible, even when the input had a |
|
bogus value. |
|
(merge afcb6ac jk/apply-similaritly-parsing later to maint). |
|
|
|
* A tar archive created by "git archive" recorded a directory in a |
|
way that made NetBSD's implementation of "tar" sometimes unhappy. |
|
|
|
* "git archive" did not record uncompressed size in the header when |
|
streaming a zip archive, which confused some implementations of unzip. |
|
|
|
* "git archive" did not parse configuration values in tar.* namespace |
|
correctly. |
|
(merge b3873c3 jk/config-parsing-cleanup later to maint). |
|
|
|
* Attempt to "branch --edit-description" an existing branch, while |
|
being on a detached HEAD, errored out. |
|
|
|
* "git clean" showed what it was going to do, but sometimes end up |
|
finding that it was not allowed to do so, which resulted in a |
|
confusing output (e.g. after saying that it will remove an |
|
untracked directory, it found an embedded git repository there |
|
which it is not allowed to remove). It now performs the actions |
|
and then reports the outcome more faithfully. |
|
(merge f538a91 zk/clean-report-failure later to maint). |
|
|
|
* When "git clone --separate-git-dir=$over_there" is interrupted, it |
|
failed to remove the real location of the $GIT_DIR it created. |
|
This was most visible when interrupting a submodule update. |
|
|
|
* We used to have an arbitrary 32 limit for combined diff input, |
|
resulting in incorrect number of leading colons shown when showing |
|
the "--raw --cc" output. |
|
(merge edbc00e jc/combine-diff-many-parents later to maint). |
|
|
|
* "git fetch --depth" was broken in at least three ways. The |
|
resulting history was deeper than specified by one commit, it was |
|
unclear how to wipe the shallowness of the repository with the |
|
command, and documentation was misleading. |
|
(merge cfb70e1 nd/fetch-depth-is-broken later to maint). |
|
|
|
* "git log --all -p" that walked refs/notes/textconv/ ref can later |
|
try to use the textconv data incorrectly after it gets freed. |
|
(merge be5c9fb jk/read-commit-buffer-data-after-free later to maint). |
|
|
|
* We forgot to close the file descriptor reading from "gpg" output, |
|
killing "git log --show-signature" on a long history. |
|
|
|
* The way "git svn" asked for password using SSH_ASKPASS and |
|
GIT_ASKPASS was not in line with the rest of the system. |
|
|
|
* The --graph code fell into infinite loop when asked to do what the |
|
code did not expect. |
|
|
|
* http transport was wrong to ask for the username when the |
|
authentication is done by certificate identity. |
|
|
|
* "git pack-refs" that ran in parallel to another process that |
|
created new refs had a nasty race. |
|
|
|
* Rebasing the history of superproject with change in the submodule |
|
has been broken since v1.7.12. |
|
|
|
* After "git add -N" and then writing a tree object out of the |
|
index, the cache-tree data structure got corrupted. |
|
|
|
* "git clone" used to allow --bare and --separate-git-dir=$there |
|
options at the same time, which was nonsensical. |
|
(merge 95b63f1 nd/clone-no-separate-git-dir-with-bare later to maint). |
|
|
|
* "git rebase --preserve-merges" lost empty merges in recent versions |
|
of Git. |
|
|
|
* "git merge --no-edit" computed who were involved in the work done |
|
on the side branch, even though that information is to be discarded |
|
without getting seen in the editor. |
|
|
|
* "git merge" started calling prepare-commit-msg hook like "git |
|
commit" does some time ago, but forgot to pay attention to the exit |
|
status of the hook. |
|
|
|
* A failure to push due to non-ff while on an unborn branch |
|
dereferenced a NULL pointer when showing an error message. |
|
|
|
* When users spell "cc:" in lowercase in the fake "header" in the |
|
trailer part, "git send-email" failed to pick up the addresses from |
|
there. As e-mail headers field names are case insensitive, this |
|
script should follow suit and treat "cc:" and "Cc:" the same way. |
|
|
|
* Output from "git status --ignored" showed an unexpected interaction |
|
with "--untracked". |
|
|
|
* "gitweb", when sorting by age to show repositories with new |
|
activities first, used to sort repositories with absolutely |
|
nothing in it early, which was not very useful. |
|
|
|
* "gitweb"'s code to sanitize control characters before passing it to |
|
"highlight" filter lost known-to-be-safe control characters by |
|
mistake. |
|
|
|
* "gitweb" pages served over HTTPS, when configured to show picon or |
|
gravatar, referred to these external resources to be fetched via |
|
HTTP, resulting in mixed contents warning in browsers. |
|
(merge 5748558 ab/gitweb-use-same-scheme later to maint). |
|
|
|
* When a line to be wrapped has a solid run of non space characters |
|
whose length exactly is the wrap width, "git shortlog -w" failed |
|
to add a newline after such a line. |
|
|
|
* Command line completion leaked an unnecessary error message while |
|
looking for possible matches with paths in <tree-ish>. |
|
|
|
* Command line completion for "tcsh" emitted an unwanted space |
|
after completing a single directory name. |
|
|
|
* Command line completion code was inadvertently made incompatible with |
|
older versions of bash by using a newer array notation. |
|
|
|
* Some shells do not behave correctly when IFS is unset; work it |
|
around by explicitly setting it to the default value. |
|
|
|
* Some scripted programs written in Python did not get updated when |
|
PYTHON_PATH changed. |
|
(cherry-pick 96a4647fca54031974cd6ad1 later to maint). |
|
|
|
* When autoconf is used, any build on a different commit always ran |
|
"config.status --recheck" even when unnecessary. |
|
|
|
* A fix was added to the build procedure to work around buggy |
|
versions of ccache broke the auto-generation of dependencies, which |
|
unfortunately is still relevant because some people use ancient |
|
distros. |
|
|
|
* The autoconf subsystem passed --mandir down to generated |
|
config.mak.autogen but forgot to do the same for --htmldir. |
|
(merge fc1c541 ct/autoconf-htmldir later to maint). |
|
|
|
* We have been carrying a translated and long-unmaintained copy of an |
|
old version of the tutorial; removed. |
|
|
|
* t0050 had tests expecting failures from a bug that was fixed some |
|
time ago. |
|
|
|
* t4014, t9502 and t0200 tests had various portability issues that |
|
broke on OpenBSD. |
|
|
|
* t9020 and t3600 tests had various portability issues. |
|
|
|
* t9200 runs "cvs init" on a directory that already exists, but a |
|
platform can configure this fail for the current user (e.g. you |
|
need to be in the cvsadmin group on NetBSD 6.0). |
|
|
|
* t9020 and t9810 had a few non-portable shell script construct. |
|
|
|
* Scripts to test bash completion was inherently flaky as it was |
|
affected by whatever random things the user may have on $PATH.
|
|
|