diff --git a/RelNotes/1.8.5.2.txt b/RelNotes/1.8.5.2.txt new file mode 100644 index 000000000..3ac4984f1 --- /dev/null +++ b/RelNotes/1.8.5.2.txt @@ -0,0 +1,20 @@ +Git v1.8.5.2 Release Notes +========================== + +Fixes since v1.8.5.1 +-------------------- + + * "git diff -- ':(icase)makefile'" was unnecessarily rejected at the + command line parser. + + * "git cat-file --batch-check=ok" did not check the existence of + the named object. + + * "git am --abort" sometimes complained about not being able to write + a tree with an 0{40} object in it. + + * Two processes creating loose objects at the same time could have + failed unnecessarily when the name of their new objects started + with the same byte value, due to a race condition. + +Also contains typofixes, documentation updates and trivial code clean-ups. diff --git a/RelNotes/1.9.txt b/RelNotes/1.9.txt index 7120c220e..a966ab488 100644 --- a/RelNotes/1.9.txt +++ b/RelNotes/1.9.txt @@ -84,6 +84,10 @@ Foreign interfaces, subsystems and ports. UI, Workflows & Features + * "gitweb" learned to treat ref hierarchies other than refs/heads as + if they are additional branch namespaces (e.g. refs/changes/ in + Gerrit). + * "git for-each-ref --format=..." learned a few formatting directives; e.g. "%(color:red)%(HEAD)%(color:reset) %(refname:short) %(subject)". @@ -105,6 +109,12 @@ UI, Workflows & Features Performance, Internal Implementation, etc. + * The deprecated parse-options macro OPT_BOOLEAN has been removed; + use OPT_BOOL or OPT_COUNTUP in new code. + + * A few duplicate implementations of prefix/suffix string comparison + functions have been unified to starts_with() and ends_with(). + * The new PERLLIB_EXTRA makefile variable can be used to specify additional directories Perl modules (e.g. the ones necessary to run git-svn) are installed on the platform when building. @@ -131,6 +141,33 @@ Unless otherwise noted, all the fixes since v1.8.5 in the maintenance track are contained in this release (see the maintenance releases' notes for details). + * "git mv A B/", when B does not exist as a directory, should error + out, but it didn't. + (merge c57f628 mm/mv-file-to-no-such-dir-with-slash later to maint). + + * A workaround to an old bug in glibc prior to glibc 2.17 has been + retired; this would remove a side effect of the workaround that + corrupts system error messages in non-C locales. + + * SSL-related options were not passed correctly to underlying socket + layer in "git send-email". + (merge 5508f3e tr/send-email-ssl later to maint). + + * "git commit -v" appends the patch to the log message before + editing, and then removes the patch when the editor returned + control. However, the patch was not stripped correctly when the + first modified path was a submodule. + (merge 1a72cfd jl/commit-v-strip-marker later to maint). + + * "git fetch --depth=0" was a no-op, and was silently ignored. + Diagnose it as an error. + (merge 5594bca nd/transport-positive-depth-only later to maint). + + * Remote repository URL expressed in scp-style host:path notation are + parsed more carefully (e.g. "foo/bar:baz" is local, "[::1]:/~user" asks + to connect to user's home directory on host at address ::1. + (merge a2036d7 tb/clone-ssh-with-colon-for-port later to maint). + * "git diff -- ':(icase)makefile'" was unnecessarily rejected at the command line parser. (merge 887c6c1 nd/magic-pathspec later to maint). diff --git a/git-fetch.html b/git-fetch.html index bdec1e878..144d1dea6 100644 --- a/git-fetch.html +++ b/git-fetch.html @@ -773,6 +773,8 @@

DESCRIPTION

or from several repositories at once if <group> is given and there is a remotes.<group> entry in the configuration file. (See git-config(1)).

+

When no remote is specified, by default the origin remote will be used, +unless there’s an upstream branch configured for the current branch.

@@ -1424,7 +1426,7 @@

GIT


diff --git a/git-fetch.txt b/git-fetch.txt index 10657134a..5809aa4eb 100644 --- a/git-fetch.txt +++ b/git-fetch.txt @@ -37,6 +37,9 @@ or from several repositories at once if is given and there is a remotes. entry in the configuration file. (See linkgit:git-config[1]). +When no remote is specified, by default the `origin` remote will be used, +unless there's an upstream branch configured for the current branch. + OPTIONS ------- include::fetch-options.txt[] diff --git a/git-merge.html b/git-merge.html index 819a58537..c20b5429b 100644 --- a/git-merge.html +++ b/git-merge.html @@ -1539,6 +1539,13 @@

MERGE STRATEGIES

+

With the strategies that use 3-way merge (including the default, recursive), +if a change is made on both branches, but later reverted on one of the +branches, that change will be present in the merged result; some people find +this behavior confusing. It occurs because only the heads and the merge base +are considered when performing a merge, not the individual commits. The merge +algorithm therefore considers the reverted change as no change at all, and +substitutes the changed version instead.

diff --git a/git-pull.html b/git-pull.html index d0e108476..f534adeef 100644 --- a/git-pull.html +++ b/git-pull.html @@ -1762,6 +1762,13 @@

MERGE STRATEGIES

+

With the strategies that use 3-way merge (including the default, recursive), +if a change is made on both branches, but later reverted on one of the +branches, that change will be present in the merged result; some people find +this behavior confusing. It occurs because only the heads and the merge base +are considered when performing a merge, not the individual commits. The merge +algorithm therefore considers the reverted change as no change at all, and +substitutes the changed version instead.

diff --git a/git-rebase.html b/git-rebase.html index fcc57851a..5a5f62709 100644 --- a/git-rebase.html +++ b/git-rebase.html @@ -1527,6 +1527,13 @@

MERGE STRATEGIES

+

With the strategies that use 3-way merge (including the default, recursive), +if a change is made on both branches, but later reverted on one of the +branches, that change will be present in the merged result; some people find +this behavior confusing. It occurs because only the heads and the merge base +are considered when performing a merge, not the individual commits. The merge +algorithm therefore considers the reverted change as no change at all, and +substitutes the changed version instead.

diff --git a/git.txt b/git.txt index 4448ce270..cc0e5e2bf 100644 --- a/git.txt +++ b/git.txt @@ -43,9 +43,10 @@ unreleased) version of Git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.8.5.1/git.html[documentation for release 1.8.5.1] +* link:v1.8.5.2/git.html[documentation for release 1.8.5.2] * release notes for + link:RelNotes/1.8.5.2.txt[1.8.5.2], link:RelNotes/1.8.5.1.txt[1.8.5.1], link:RelNotes/1.8.5.txt[1.8.5]. diff --git a/gitignore.html b/gitignore.html index 13ce60d60..99473b6ca 100644 --- a/gitignore.html +++ b/gitignore.html @@ -850,8 +850,10 @@

PATTERN FORMAT

An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become - included again. If a negated pattern matches, this will - override lower precedence patterns sources. + included again. It is not possible to re-include a file if a parent + directory of that file is excluded. Git doesn’t list excluded + directories for performance reasons, so any patterns on contained + files have no effect, no matter where they are defined. Put a backslash ("\") in front of the first "!" for patterns that begin with a literal "!", for example, "\!important!.txt".

@@ -979,6 +981,18 @@

EXAMPLES

The second .gitignore prevents Git from ignoring arch/foo/kernel/vmlinux.lds.S.

+

Example to exclude everything except a specific directory foo/bar +(note the /* - without the slash, the wildcard would also exclude +everything within foo/bar):

+
+
+
    $ cat .gitignore
+    # exclude everything except directory foo/bar
+    /*
+    !/foo
+    /foo/*
+    !/foo/bar
+
@@ -1000,7 +1014,7 @@

GIT


diff --git a/gitignore.txt b/gitignore.txt index f97196051..205e80ef8 100644 --- a/gitignore.txt +++ b/gitignore.txt @@ -79,8 +79,10 @@ PATTERN FORMAT - An optional prefix "`!`" which negates the pattern; any matching file excluded by a previous pattern will become - included again. If a negated pattern matches, this will - override lower precedence patterns sources. + included again. It is not possible to re-include a file if a parent + directory of that file is excluded. Git doesn't list excluded + directories for performance reasons, so any patterns on contained + files have no effect, no matter where they are defined. Put a backslash ("`\`") in front of the first "`!`" for patterns that begin with a literal "`!`", for example, "`\!important!.txt`". @@ -182,6 +184,19 @@ Another example: The second .gitignore prevents Git from ignoring `arch/foo/kernel/vmlinux.lds.S`. +Example to exclude everything except a specific directory `foo/bar` +(note the `/*` - without the slash, the wildcard would also exclude +everything within `foo/bar`): + +-------------------------------------------------------------- + $ cat .gitignore + # exclude everything except directory foo/bar + /* + !/foo + /foo/* + !/foo/bar +-------------------------------------------------------------- + SEE ALSO -------- linkgit:git-rm[1], diff --git a/gitweb.conf.html b/gitweb.conf.html index 764c5f4dd..78fea0e97 100644 --- a/gitweb.conf.html +++ b/gitweb.conf.html @@ -1823,6 +1823,45 @@

Features in %feature

time zones in the form of "+/-HHMM", such as "+0200".

Project specific override is not supported.

+
+extra-branch-refs +
+
+

+ List of additional directories under "refs" which are going to + be used as branch refs. For example if you have a gerrit setup + where all branches under refs/heads/ are official, + push-after-review ones and branches under refs/sandbox/, + refs/wip and refs/other are user ones where permissions are + much wider, then you might want to set this variable as + follows: +

+
+
+
$feature{'extra-branch-refs'}{'default'} =
+        ['sandbox', 'wip', 'other'];
+
+

This feature can be configured on per-repository basis after setting +$feature{extra-branch-refs}{override} to true, via repository’s +gitweb.extraBranchRefs configuration variable, which contains a +space separated list of refs. An example:

+
+
+
[gitweb]
+        extraBranchRefs = sandbox wip other
+
+

The gitweb.extraBranchRefs is actually a multi-valued configuration +variable, so following example is also correct and the result is the +same as of the snippet above:

+
+
+
[gitweb]
+        extraBranchRefs = sandbox
+        extraBranchRefs = wip other
+
+

It is an error to specify a ref that does not pass "git check-ref-format" +scrutiny. Duplicated values are filtered.

+
@@ -1955,7 +1994,7 @@

GIT


diff --git a/gitweb.conf.txt b/gitweb.conf.txt index e2113d93c..db4154f9d 100644 --- a/gitweb.conf.txt +++ b/gitweb.conf.txt @@ -849,6 +849,43 @@ time zones in the form of "+/-HHMM", such as "+0200". + Project specific override is not supported. +extra-branch-refs:: + List of additional directories under "refs" which are going to + be used as branch refs. For example if you have a gerrit setup + where all branches under refs/heads/ are official, + push-after-review ones and branches under refs/sandbox/, + refs/wip and refs/other are user ones where permissions are + much wider, then you might want to set this variable as + follows: ++ +-------------------------------------------------------------------------------- +$feature{'extra-branch-refs'}{'default'} = + ['sandbox', 'wip', 'other']; +-------------------------------------------------------------------------------- ++ +This feature can be configured on per-repository basis after setting +$feature{'extra-branch-refs'}{'override'} to true, via repository's +`gitweb.extraBranchRefs` configuration variable, which contains a +space separated list of refs. An example: ++ +-------------------------------------------------------------------------------- +[gitweb] + extraBranchRefs = sandbox wip other +-------------------------------------------------------------------------------- ++ +The gitweb.extraBranchRefs is actually a multi-valued configuration +variable, so following example is also correct and the result is the +same as of the snippet above: ++ +-------------------------------------------------------------------------------- +[gitweb] + extraBranchRefs = sandbox + extraBranchRefs = wip other +-------------------------------------------------------------------------------- ++ +It is an error to specify a ref that does not pass "git check-ref-format" +scrutiny. Duplicated values are filtered. + EXAMPLES -------- diff --git a/merge-strategies.txt b/merge-strategies.txt index 49a9a7d53..fb6e593e7 100644 --- a/merge-strategies.txt +++ b/merge-strategies.txt @@ -113,3 +113,11 @@ subtree:: match the tree structure of A, instead of reading the trees at the same level. This adjustment is also done to the common ancestor tree. + +With the strategies that use 3-way merge (including the default, 'recursive'), +if a change is made on both branches, but later reverted on one of the +branches, that change will be present in the merged result; some people find +this behavior confusing. It occurs because only the heads and the merge base +are considered when performing a merge, not the individual commits. The merge +algorithm therefore considers the reverted change as no change at all, and +substitutes the changed version instead.