summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/RelNotes/2.9.4.txt83
-rw-r--r--Documentation/SubmittingPatches11
-rw-r--r--Documentation/gitk.txt2
-rw-r--r--Documentation/gitrevisions.txt6
-rw-r--r--Documentation/pretty-formats.txt2
-rw-r--r--Documentation/rev-list-options.txt4
-rw-r--r--Documentation/revisions.txt125
-rw-r--r--builtin/symbolic-ref.c2
-rw-r--r--contrib/diff-highlight/Makefile5
-rwxr-xr-xcontrib/diff-highlight/diff-highlight19
-rw-r--r--contrib/diff-highlight/t/.gitignore2
-rw-r--r--contrib/diff-highlight/t/Makefile22
-rwxr-xr-xcontrib/diff-highlight/t/t9400-diff-highlight.sh296
-rw-r--r--po/TEAMS5
-rw-r--r--po/pt_PT.po739
-rw-r--r--po/zh_CN.po104
-rw-r--r--submodule.c1
-rwxr-xr-xt/t1401-symbolic-ref.sh21
-rwxr-xr-xt/t5526-fetch-submodules.sh35
-rw-r--r--t/test-lib.sh4
20 files changed, 973 insertions, 515 deletions
diff --git a/Documentation/RelNotes/2.9.4.txt b/Documentation/RelNotes/2.9.4.txt
new file mode 100644
index 0000000000..01e864278b
--- /dev/null
+++ b/Documentation/RelNotes/2.9.4.txt
@@ -0,0 +1,83 @@
+Git v2.9.4 Release Notes
+========================
+
+Fixes since v2.9.3
+------------------
+
+ * 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.
+
+ * "git merge" with renormalization did not work well with
+ merge-recursive, due to "safer crlf" conversion kicking in when it
+ shouldn't.
+
+ * The reflog output format is documented better, and a new format
+ --date=unix to report the seconds-since-epoch (without timezone)
+ has been added.
+
+ * "git push --force-with-lease" already had enough logic to allow
+ ensuring that such a push results in creation of a ref (i.e. the
+ receiving end did not have another push from sideways that would be
+ discarded by our force-pushing), but didn't expose this possibility
+ to the users. It does so now.
+
+ * "import-tars" fast-import script (in contrib/) used to ignore a
+ hardlink target and replaced it with an empty file, which has been
+ corrected to record the same blob as the other file the hardlink is
+ shared with.
+
+ * "git mv dir non-existing-dir/" did not work in some environments
+ the same way as existing mainstream platforms. The code now moves
+ "dir" to "non-existing-dir", without relying on rename("A", "B/")
+ that strips the trailing slash of '/'.
+
+ * The "t/" hierarchy is prone to get an unusual pathname; "make test"
+ has been taught to make sure they do not contain paths that cannot
+ be checked out on Windows (and the mechanism can be reusable to
+ catch pathnames that are not portable to other platforms as need
+ arises).
+
+ * When "git merge-recursive" works on history with many criss-cross
+ merges in "verbose" mode, the names the command assigns to the
+ virtual merge bases could have overwritten each other by unintended
+ reuse of the same piece of memory.
+
+ * "git checkout --detach <branch>" used to give the same advice
+ message as that is issued when "git checkout <tag>" (or anything
+ that is not a branch name) is given, but asking with "--detach" is
+ an explicit enough sign that the user knows what is going on. The
+ advice message has been squelched in this case.
+
+ * "git difftool" by default ignores the error exit from the backend
+ commands it spawns, because often they signal that they found
+ differences by exiting with a non-zero status code just like "diff"
+ does; the exit status codes 126 and above however are special in
+ that they are used to signal that the command is not executable,
+ does not exist, or killed by a signal. "git difftool" has been
+ taught to notice these exit status codes.
+
+ * On Windows, help.browser configuration variable used to be ignored,
+ which has been corrected.
+
+ * The "git -c var[=val] cmd" facility to append a configuration
+ variable definition at the end of the search order was described in
+ git(1) manual page, but not in git-config(1), which was more likely
+ place for people to look for when they ask "can I make a one-shot
+ override, and if so how?"
+
+ * The tempfile (hence its user lockfile) API lets the caller to open
+ a file descriptor to a temporary file, write into it and then
+ finalize it by first closing the filehandle and then either
+ removing or renaming the temporary file. When the process spawns a
+ subprocess after obtaining the file descriptor, and if the
+ subprocess has not exited when the attempt to remove or rename is
+ made, the last step fails on Windows, because the subprocess has
+ the file descriptor still open. Open tempfile with O_CLOEXEC flag
+ to avoid this (on Windows, this is mapped to O_NOINHERIT).
+
+Also contains minor documentation updates and code clean-ups.
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 500230c054..08352deaae 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -122,9 +122,14 @@ without external resources. Instead of giving a URL to a mailing list
archive, summarize the relevant points of the discussion.
If you want to reference a previous commit in the history of a stable
-branch use the format "abbreviated sha1 (subject, date)". So for example
-like this: "Commit f86a374 (pack-bitmap.c: fix a memleak, 2015-03-30)
-noticed [...]".
+branch, use the format "abbreviated sha1 (subject, date)",
+with the subject enclosed in a pair of double-quotes, like this:
+
+ Commit f86a374 ("pack-bitmap.c: fix a memleak", 2015-03-30)
+ noticed that ...
+
+The "Copy commit summary" command of gitk can be used to obtain this
+format.
(3) Generate your patch using Git tools out of your commits.
diff --git a/Documentation/gitk.txt b/Documentation/gitk.txt
index a68d860fa3..e382dd96df 100644
--- a/Documentation/gitk.txt
+++ b/Documentation/gitk.txt
@@ -70,7 +70,7 @@ linkgit:git-rev-list[1] for a complete list.
--left-right::
- Mark which side of a symmetric diff a commit is reachable
+ Mark which side of a symmetric difference a commit is reachable
from. Commits from the left side are prefixed with a `<`
symbol and those from the right with a `>` symbol.
diff --git a/Documentation/gitrevisions.txt b/Documentation/gitrevisions.txt
index e903eb7860..27dec5b91d 100644
--- a/Documentation/gitrevisions.txt
+++ b/Documentation/gitrevisions.txt
@@ -15,9 +15,9 @@ DESCRIPTION
Many Git commands take revision parameters as arguments. Depending on
the command, they denote a specific commit or, for commands which
-walk the revision graph (such as linkgit:git-log[1]), all commits which can
-be reached from that commit. In the latter case one can also specify a
-range of revisions explicitly.
+walk the revision graph (such as linkgit:git-log[1]), all commits which are
+reachable from that commit. For commands that walk the revision graph one can
+also specify a range of revisions explicitly.
In addition, some Git commands (such as linkgit:git-show[1]) also take
revision parameters which denote other objects than commits, e.g. blobs
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index b95d67ec01..a942d57f73 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -172,7 +172,7 @@ endif::git-rev-list[]
respecting the `auto` settings of the former if we are going to a
terminal). `auto` alone (i.e. `%C(auto)`) will turn on auto coloring
on the next placeholders until the color is switched again.
-- '%m': left, right or boundary mark
+- '%m': left (`<`), right (`>`) or boundary (`-`) mark
- '%n': newline
- '%%': a raw '%'
- '%x00': print a byte from a hex code
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index a779c9dfec..7e462d3841 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -225,7 +225,7 @@ excluded from the output.
--left-only::
--right-only::
- List only commits on the respective side of a symmetric range,
+ List only commits on the respective side of a symmetric difference,
i.e. only those which would be marked `<` resp. `>` by
`--left-right`.
+
@@ -796,7 +796,7 @@ ifdef::git-rev-list[]
endif::git-rev-list[]
--left-right::
- Mark which side of a symmetric diff a commit is reachable from.
+ Mark which side of a symmetric difference a commit is reachable from.
Commits from the left side are prefixed with `<` and those from
the right with `>`. If combined with `--boundary`, those
commits are prefixed with `-`.
diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
index abae363983..4bed5b1ab7 100644
--- a/Documentation/revisions.txt
+++ b/Documentation/revisions.txt
@@ -237,48 +237,74 @@ SPECIFYING RANGES
-----------------
History traversing commands such as `git log` operate on a set
-of commits, not just a single commit. To these commands,
-specifying a single revision with the notation described in the
-previous section means the set of commits reachable from that
-commit, following the commit ancestry chain.
-
-To exclude commits reachable from a commit, a prefix '{caret}'
-notation is used. E.g. '{caret}r1 r2' means commits reachable
-from 'r2' but exclude the ones reachable from 'r1'.
-
-This set operation appears so often that there is a shorthand
-for it. When you have two commits 'r1' and 'r2' (named according
-to the syntax explained in SPECIFYING REVISIONS above), you can ask
-for commits that are reachable from r2 excluding those that are reachable
-from r1 by '{caret}r1 r2' and it can be written as 'r1..r2'.
-
-A similar notation 'r1\...r2' is called symmetric difference
-of 'r1' and 'r2' and is defined as
-'r1 r2 --not $(git merge-base --all r1 r2)'.
-It is the set of commits that are reachable from either one of
-'r1' or 'r2' but not from both.
-
-In these two shorthands, you can omit one end and let it default to HEAD.
+of commits, not just a single commit.
+
+For these commands,
+specifying a single revision, using the notation described in the
+previous section, means the set of commits `reachable` from the given
+commit.
+
+A commit's reachable set is the commit itself and the commits in
+its ancestry chain.
+
+
+Commit Exclusions
+~~~~~~~~~~~~~~~~~
+
+'{caret}<rev>' (caret) Notation::
+ To exclude commits reachable from a commit, a prefix '{caret}'
+ notation is used. E.g. '{caret}r1 r2' means commits reachable
+ from 'r2' but exclude the ones reachable from 'r1' (i.e. 'r1' and
+ its ancestors).
+
+Dotted Range Notations
+~~~~~~~~~~~~~~~~~~~~~~
+
+The '..' (two-dot) Range Notation::
+ The '{caret}r1 r2' set operation appears so often that there is a shorthand
+ for it. When you have two commits 'r1' and 'r2' (named according
+ to the syntax explained in SPECIFYING REVISIONS above), you can ask
+ for commits that are reachable from r2 excluding those that are reachable
+ from r1 by '{caret}r1 r2' and it can be written as 'r1..r2'.
+
+The '...' (three dot) Symmetric Difference Notation::
+ A similar notation 'r1\...r2' is called symmetric difference
+ of 'r1' and 'r2' and is defined as
+ 'r1 r2 --not $(git merge-base --all r1 r2)'.
+ It is the set of commits that are reachable from either one of
+ 'r1' (left side) or 'r2' (right side) but not from both.
+
+In these two shorthand notations, you can omit one end and let it default to HEAD.
For example, 'origin..' is a shorthand for 'origin..HEAD' and asks "What
did I do since I forked from the origin branch?" Similarly, '..origin'
is a shorthand for 'HEAD..origin' and asks "What did the origin do since
I forked from them?" Note that '..' would mean 'HEAD..HEAD' which is an
empty range that is both reachable and unreachable from HEAD.
-Two other shorthands for naming a set that is formed by a commit
-and its parent commits exist. The 'r1{caret}@' notation means all
-parents of 'r1'. 'r1{caret}!' includes commit 'r1' but excludes
-all of its parents.
+Other <rev>{caret} Parent Shorthand Notations
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Two other shorthands exist, particularly useful for merge commits,
+for naming a set that is formed by a commit and its parent commits.
+
+The 'r1{caret}@' notation means all parents of 'r1'.
+
+The 'r1{caret}!' notation includes commit 'r1' but excludes all of its parents.
+By itself, this notation denotes the single commit 'r1'.
+
+While '<rev>{caret}<n>' was about specifying a single commit parent, these
+two notations consider all its parents. For example you can say
+'HEAD{caret}2{caret}@', however you cannot say 'HEAD{caret}@{caret}2'.
-To summarize:
+Revision Range Summary
+----------------------
'<rev>'::
- Include commits that are reachable from (i.e. ancestors of)
- <rev>.
+ Include commits that are reachable from <rev> (i.e. <rev> and its
+ ancestors).
'{caret}<rev>'::
- Exclude commits that are reachable from (i.e. ancestors of)
- <rev>.
+ Exclude commits that are reachable from <rev> (i.e. <rev> and its
+ ancestors).
'<rev1>..<rev2>'::
Include commits that are reachable from <rev2> but exclude
@@ -300,16 +326,27 @@ To summarize:
as giving commit '<rev>' and then all its parents prefixed with
'{caret}' to exclude them (and their ancestors).
-Here are a handful of examples:
-
- D G H D
- D F G H I J D F
- ^G D H D
- ^D B E I J F B
- B..C C
- B...C G H D E B C
- ^D B C E I J F B C
- C I J F C
- C^@ I J F
- C^! C
- F^! D G H D F
+Here are a handful of examples using the Loeliger illustration above,
+with each step in the notation's expansion and selection carefully
+spelt out:
+
+ Args Expanded arguments Selected commits
+ D G H D
+ D F G H I J D F
+ ^G D H D
+ ^D B E I J F B
+ ^D B C E I J F B C
+ C I J F C
+ B..C = ^B C C
+ B...C = B ^F C G H D E B C
+ C^@ = C^1
+ = F I J F
+ B^@ = B^1 B^2 B^3
+ = D E F D G H E F I J
+ C^! = C ^C^@
+ = C ^C^1
+ = C ^F C
+ B^! = B ^B^@
+ = B ^B^1 ^B^2 ^B^3
+ = B ^D ^E ^F B
+ F^! D = F ^I ^J D G H D F
diff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c
index 9c29a64e43..96eed94468 100644
--- a/builtin/symbolic-ref.c
+++ b/builtin/symbolic-ref.c
@@ -56,6 +56,8 @@ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
ret = check_symref(argv[0], 1, 0, 0);
if (ret)
die("Cannot delete %s, not a symbolic ref", argv[0]);
+ if (!strcmp(argv[0], "HEAD"))
+ die("deleting '%s' is not allowed", argv[0]);
return delete_ref(argv[0], NULL, REF_NODEREF);
}
diff --git a/contrib/diff-highlight/Makefile b/contrib/diff-highlight/Makefile
new file mode 100644
index 0000000000..9018724524
--- /dev/null
+++ b/contrib/diff-highlight/Makefile
@@ -0,0 +1,5 @@
+# nothing to build
+all:
+
+test:
+ $(MAKE) -C t
diff --git a/contrib/diff-highlight/diff-highlight b/contrib/diff-highlight/diff-highlight
index ffefc31a98..81bd8040e3 100755
--- a/contrib/diff-highlight/diff-highlight
+++ b/contrib/diff-highlight/diff-highlight
@@ -21,6 +21,10 @@ my $RESET = "\x1b[m";
my $COLOR = qr/\x1b\[[0-9;]*m/;
my $BORING = qr/$COLOR|\s/;
+# The patch portion of git log -p --graph should only ever have preceding | and
+# not / or \ as merge history only shows up on the commit line.
+my $GRAPH = qr/$COLOR?\|$COLOR?\s+/;
+
my @removed;
my @added;
my $in_hunk;
@@ -32,12 +36,12 @@ $SIG{PIPE} = 'DEFAULT';
while (<>) {
if (!$in_hunk) {
print;
- $in_hunk = /^$COLOR*\@/;
+ $in_hunk = /^$GRAPH*$COLOR*\@\@ /;
}
- elsif (/^$COLOR*-/) {
+ elsif (/^$GRAPH*$COLOR*-/) {
push @removed, $_;
}
- elsif (/^$COLOR*\+/) {
+ elsif (/^$GRAPH*$COLOR*\+/) {
push @added, $_;
}
else {
@@ -46,7 +50,7 @@ while (<>) {
@added = ();
print;
- $in_hunk = /^$COLOR*[\@ ]/;
+ $in_hunk = /^$GRAPH*$COLOR*[\@ ]/;
}
# Most of the time there is enough output to keep things streaming,
@@ -163,6 +167,9 @@ sub highlight_pair {
}
}
+# we split either by $COLOR or by character. This has the side effect of
+# leaving in graph cruft. It works because the graph cruft does not contain "-"
+# or "+"
sub split_line {
local $_ = shift;
return utf8::decode($_) ?
@@ -211,8 +218,8 @@ sub is_pair_interesting {
my $suffix_a = join('', @$a[($sa+1)..$#$a]);
my $suffix_b = join('', @$b[($sb+1)..$#$b]);
- return $prefix_a !~ /^$COLOR*-$BORING*$/ ||
- $prefix_b !~ /^$COLOR*\+$BORING*$/ ||
+ return $prefix_a !~ /^$GRAPH*$COLOR*-$BORING*$/ ||
+ $prefix_b !~ /^$GRAPH*$COLOR*\+$BORING*$/ ||
$suffix_a !~ /^$BORING*$/ ||
$suffix_b !~ /^$BORING*$/;
}
diff --git a/contrib/diff-highlight/t/.gitignore b/contrib/diff-highlight/t/.gitignore
new file mode 100644
index 0000000000..7dcbb232cd
--- /dev/null
+++ b/contrib/diff-highlight/t/.gitignore
@@ -0,0 +1,2 @@
+/trash directory*
+/test-results
diff --git a/contrib/diff-highlight/t/Makefile b/contrib/diff-highlight/t/Makefile
new file mode 100644
index 0000000000..5ff5275496
--- /dev/null
+++ b/contrib/diff-highlight/t/Makefile
@@ -0,0 +1,22 @@
+-include ../../../config.mak.autogen
+-include ../../../config.mak
+
+# copied from ../../t/Makefile
+SHELL_PATH ?= $(SHELL)
+SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
+T = $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)
+
+all: test
+test: $(T)
+
+.PHONY: help clean all test $(T)
+
+help:
+ @echo 'Run "$(MAKE) test" to launch test scripts'
+ @echo 'Run "$(MAKE) clean" to remove trash folders'
+
+$(T):
+ @echo "*** $@ ***"; '$(SHELL_PATH_SQ)' $@ $(GIT_TEST_OPTS)
+
+clean:
+ $(RM) -r 'trash directory'.*
diff --git a/contrib/diff-highlight/t/t9400-diff-highlight.sh b/contrib/diff-highlight/t/t9400-diff-highlight.sh
new file mode 100755
index 0000000000..3b43dbed74
--- /dev/null
+++ b/contrib/diff-highlight/t/t9400-diff-highlight.sh
@@ -0,0 +1,296 @@
+#!/bin/sh
+
+test_description='Test diff-highlight'
+
+CURR_DIR=$(pwd)
+TEST_OUTPUT_DIRECTORY=$(pwd)
+TEST_DIRECTORY="$CURR_DIR"/../../../t
+DIFF_HIGHLIGHT="$CURR_DIR"/../diff-highlight
+
+CW="$(printf "\033[7m")" # white
+CR="$(printf "\033[27m")" # reset
+
+. "$TEST_DIRECTORY"/test-lib.sh
+
+if ! test_have_prereq PERL
+then
+ skip_all='skipping diff-highlight tests; perl not available'
+ test_done
+fi
+
+# dh_test is a test helper function which takes 3 file names as parameters. The
+# first 2 files are used to generate diff and commit output, which is then
+# piped through diff-highlight. The 3rd file should contain the expected output
+# of diff-highlight (minus the diff/commit header, ie. everything after and
+# including the first @@ line).
+dh_test () {
+ a="$1" b="$2" &&
+
+ cat >patch.exp &&
+
+ {
+ cat "$a" >file &&
+ git add file &&
+ git commit -m "Add a file" &&
+
+ cat "$b" >file &&
+ git diff file >diff.raw &&
+ git commit -a -m "Update a file" &&
+ git show >commit.raw
+ } >/dev/null &&
+
+ "$DIFF_HIGHLIGHT" <diff.raw | test_strip_patch_header >diff.act &&
+ "$DIFF_HIGHLIGHT" <commit.raw | test_strip_patch_header >commit.act &&
+ test_cmp patch.exp diff.act &&
+ test_cmp patch.exp commit.act
+}
+
+test_strip_patch_header () {
+ sed -n '/^@@/,$p' $*
+}
+
+# dh_test_setup_history generates a contrived graph such that we have at least
+# 1 nesting (E) and 2 nestings (F).
+#
+# A branch
+# /
+# D---E---F master
+#
+# git log --all --graph
+# * commit
+# | A
+# | * commit
+# | | F
+# | * commit
+# |/
+# | E
+# * commit
+# D
+#
+dh_test_setup_history () {
+ echo "file1" >file1 &&
+ echo "file2" >file2 &&
+ echo "file3" >file3 &&
+
+ cat file1 >file &&
+ git add file &&
+ git commit -m "D" &&
+
+ git checkout -b branch &&
+ cat file2 >file &&
+ git commit -a -m "A" &&
+
+ git checkout master &&
+ cat file2 >file &&
+ git commit -a -m "E" &&
+
+ cat file3 >file &&
+ git commit -a -m "F"
+}
+
+left_trim () {
+ "$PERL_PATH" -pe 's/^\s+//'
+}
+
+trim_graph () {
+ # graphs start with * or |
+ # followed by a space or / or \
+ "$PERL_PATH" -pe 's@^((\*|\|)( |/|\\))+@@'
+}
+
+test_expect_success 'diff-highlight highlights the beginning of a line' '
+ cat >a <<-\EOF &&
+ aaa
+ bbb
+ ccc
+ EOF
+
+ cat >b <<-\EOF &&
+ aaa
+ 0bb
+ ccc
+ EOF
+
+ dh_test a b <<-EOF
+ @@ -1,3 +1,3 @@
+ aaa
+ -${CW}b${CR}bb
+ +${CW}0${CR}bb
+ ccc
+ EOF
+'
+
+test_expect_success 'diff-highlight highlights the end of a line' '
+ cat >a <<-\EOF &&
+ aaa
+ bbb
+ ccc
+ EOF
+
+ cat >b <<-\EOF &&
+ aaa
+ bb0
+ ccc
+ EOF
+
+ dh_test a b <<-EOF
+ @@ -1,3 +1,3 @@
+ aaa
+ -bb${CW}b${CR}
+ +bb${CW}0${CR}
+ ccc
+ EOF
+'
+
+test_expect_success 'diff-highlight highlights the middle of a line' '
+ cat >a <<-\EOF &&
+ aaa
+ bbb
+ ccc
+ EOF
+
+ cat >b <<-\EOF &&
+ aaa
+ b0b
+ ccc
+ EOF
+
+ dh_test a b <<-EOF
+ @@ -1,3 +1,3 @@
+ aaa
+ -b${CW}b${CR}b
+ +b${CW}0${CR}b
+ ccc
+ EOF
+'
+
+test_expect_success 'diff-highlight does not highlight whole line' '
+ cat >a <<-\EOF &&
+ aaa
+ bbb
+ ccc
+ EOF
+
+ cat >b <<-\EOF &&
+ aaa
+ 000
+ ccc
+ EOF
+
+ dh_test a b <<-EOF
+ @@ -1,3 +1,3 @@
+ aaa
+ -bbb
+ +000
+ ccc
+ EOF
+'
+
+test_expect_failure 'diff-highlight highlights mismatched hunk size' '
+ cat >a <<-\EOF &&
+ aaa
+ bbb
+ EOF
+
+ cat >b <<-\EOF &&
+ aaa
+ b0b
+ ccc
+ EOF
+
+ dh_test a b <<-EOF
+ @@ -1,3 +1,3 @@
+ aaa
+ -b${CW}b${CR}b
+ +b${CW}0${CR}b
+ +ccc
+ EOF
+'
+
+# These two code points share the same leading byte in UTF-8 representation;
+# a naive byte-wise diff would highlight only the second byte.
+#
+# - U+00f3 ("o" with acute)
+o_accent=$(printf '\303\263')
+# - U+00f8 ("o" with stroke)
+o_stroke=$(printf '\303\270')
+
+test_expect_success 'diff-highlight treats multibyte utf-8 as a unit' '
+ echo "unic${o_accent}de" >a &&
+ echo "unic${o_stroke}de" >b &&
+ dh_test a b <<-EOF
+ @@ -1 +1 @@
+ -unic${CW}${o_accent}${CR}de
+ +unic${CW}${o_stroke}${CR}de
+ EOF
+'
+
+# Unlike the UTF-8 above, these are combining code points which are meant
+# to modify the character preceding them:
+#
+# - U+0301 (combining acute accent)
+combine_accent=$(printf '\314\201')
+# - U+0302 (combining circumflex)
+combine_circum=$(printf '\314\202')
+
+test_expect_failure 'diff-highlight treats combining code points as a unit' '
+ echo "unico${combine_accent}de" >a &&
+ echo "unico${combine_circum}de" >b &&
+ dh_test a b <<-EOF
+ @@ -1 +1 @@
+ -unic${CW}o${combine_accent}${CR}de
+ +unic${CW}o${combine_circum}${CR}de
+ EOF
+'
+
+test_expect_success 'diff-highlight works with the --graph option' '
+ dh_test_setup_history &&
+
+ # topo-order so that the order of the commits is the same as with --graph
+ # trim graph elements so we can do a diff
+ # trim leading space because our trim_graph is not perfect
+ git log --branches -p --topo-order |
+ "$DIFF_HIGHLIGHT" | left_trim >graph.exp &&
+ git log --branches -p --graph |
+ "$DIFF_HIGHLIGHT" | trim_graph | left_trim >graph.act &&
+ test_cmp graph.exp graph.act
+'
+
+# Most combined diffs won't meet diff-highlight's line-number filter. So we
+# create one here where one side drops a line and the other modifies it. That
+# should result in a diff like:
+#
+# - modified content
+# ++resolved content
+#
+# which naively looks like one side added "+resolved".
+test_expect_success 'diff-highlight ignores combined diffs' '
+ echo "content" >file &&
+ git add file &&
+ git commit -m base &&
+
+ >file &&
+ git commit -am master &&
+
+ git checkout -b other HEAD^ &&
+ echo "modified content" >file &&
+ git commit -am other &&
+
+ test_must_fail git merge master &&
+ echo "resolved content" >file &&
+ git commit -am resolved &&
+
+ cat >expect <<-\EOF &&
+ --- a/file
+ +++ b/file
+ @@@ -1,1 -1,0 +1,1 @@@
+ - modified content
+ ++resolved content
+ EOF
+
+ git show -c | "$DIFF_HIGHLIGHT" >actual.raw &&
+ sed -n "/^---/,\$p" <actual.raw >actual &&
+ test_cmp expect actual
+'
+
+test_done
diff --git a/po/TEAMS b/po/TEAMS
index 56274ad4f3..d3e63bc480 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -37,8 +37,9 @@ Repository: https://github.com/changwoo/git-l10n-ko/
Leader: Changwoo Ryu <cwryu@debian.org>
Language: pt_PT (Portuguese - Portugal)
-Repository: https://github.com/marcomsousa/git-l10n-pt_PT/
-Leader: Marco Sousa <marcomsousa AT gmail.com>
+Repository: https://github.com/vascool/git-po-pt/
+Leader: Vasco Almeida <vascomalmeida@sapo.pt>
+Members: Marco Sousa <marcomsousa AT gmail.com>
Language: ru (Russian)
Repository: https://github.com/DJm00n/git-po-ru/
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 13610a0aa9..c8658dfd25 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2016-08-15 22:43+0800\n"
-"PO-Revision-Date: 2016-08-24 14:07+0000\n"
+"POT-Creation-Date: 2016-08-27 23:21+0800\n"
+"PO-Revision-Date: 2016-09-03 12:00+0000\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese\n"
"Language: pt\n"
@@ -27,7 +27,8 @@ msgstr "dica: %.*s\n"
#: advice.c:83
msgid "Cherry-picking is not possible because you have unmerged files."
-msgstr "Não é possível efetuar cherry-pick porque tem ficheiros não integrados."
+msgstr ""
+"Não é possível efetuar cherry-pick porque tem ficheiros não integrados."
#: advice.c:85
msgid "Committing is not possible because you have unmerged files."
@@ -614,145 +615,98 @@ msgstr "linha de configuração %d incorreta na linha de comandos %s"
msgid "bad config line %d in %s"
msgstr "linha de configuração %d incorreta em %s"
-#: config.c:660
-#, c-format
-msgid "bad numeric config value '%s' for '%s': out of range"
-msgstr "valor numérico '%s' da configuração '%s' incorreto: fora de intervalo"
+#: config.c:655
+msgid "out of range"
+msgstr "fora de intervalo"
+
+#: config.c:655
+msgid "invalid unit"
+msgstr "unidade inválida"
#: config.c:661
#, c-format
-msgid "bad numeric config value '%s' for '%s': invalid unit"
-msgstr "valor numérico '%s' da configuração '%s' incorreto: unidade inválida"
+msgid "bad numeric config value '%s' for '%s': %s"
+msgstr "valor numérico '%s' da configuração '%s' incorreto: %s"
-#: config.c:667
+#: config.c:666
#, c-format
-msgid "bad numeric config value '%s' for '%s' in blob %s: out of range"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto no blob %s: fora de "
-"intervalo"
+msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
+msgstr "valor numérico '%s' da configuração '%s' incorreto no blob %s: %s"
-#: config.c:668
+#: config.c:669
#, c-format
-msgid "bad numeric config value '%s' for '%s' in blob %s: invalid unit"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto no blob %s: unidade "
-"inválida"
+msgid "bad numeric config value '%s' for '%s' in file %s: %s"
+msgstr "valor numérico '%s' da configuração '%s' incorreto no ficheiro %s: %s"
#: config.c:672
#, c-format
-msgid "bad numeric config value '%s' for '%s' in file %s: out of range"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto no ficheiro %s: fora de "
-"intervalo"
-
-#: config.c:673
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in file %s: invalid unit"
+msgid "bad numeric config value '%s' for '%s' in standard input: %s"
msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto no ficheiro %s: unidade "
-"inválida"
+"valor numérico '%s' da configuração '%s' incorreto na entrada padrão: %s"
-#: config.c:677
+#: config.c:675
#, c-format
-msgid "bad numeric config value '%s' for '%s' in standard input: out of range"
+msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto na entrada padrão: fora "
-"de intervalo"
+"valor numérico '%s' da configuração '%s' incorreto no submódulo-blob %s: %s"
#: config.c:678
#, c-format
-msgid "bad numeric config value '%s' for '%s' in standard input: invalid unit"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto na entrada padrão: "
-"unidade inválida"
-
-#: config.c:682
-#, c-format
-msgid ""
-"bad numeric config value '%s' for '%s' in submodule-blob %s: out of range"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto no submódulo-blob %s: "
-"fora de intervalo"
-
-#: config.c:683
-#, c-format
-msgid ""
-"bad numeric config value '%s' for '%s' in submodule-blob %s: invalid unit"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto no submódulo-blob %s: "
-"unidade inválida"
-
-#: config.c:687
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in command line %s: out of range"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto na linha de comandos %s: "
-"fora de intervalo"
-
-#: config.c:688
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in command line %s: invalid unit"
+msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
msgstr ""
"valor numérico '%s' da configuração '%s' incorreto na linha de comandos %s: "
-"unidade inválida"
-
-#: config.c:692
-#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: out of range"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto em %s: fora de intervalo"
+"%s"
-#: config.c:693
+#: config.c:681
#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: invalid unit"
-msgstr ""
-"valor numérico '%s' da configuração '%s' incorreto em %s: unidade inválida"
+msgid "bad numeric config value '%s' for '%s' in %s: %s"
+msgstr "valor numérico '%s' da configuração '%s' incorreto em %s: %s"
-#: config.c:780
+#: config.c:768
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "falha ao expandir diretório de utilizador em: '%s'"
-#: config.c:861 config.c:872
+#: config.c:849 config.c:860
#, c-format
msgid "bad zlib compression level %d"
msgstr "nível de compressão zlib %d incorreto"
-#: config.c:990
+#: config.c:978
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "modo inválido para criação de objeto: %s"
-#: config.c:1324
+#: config.c:1312
msgid "unable to parse command-line config"
msgstr "não é possível analisar configuração de linha de comandos"
-#: config.c:1374
+#: config.c:1362
msgid "unknown error occurred while reading the configuration files"
msgstr ""
"ocorreu um erro desconhecido durante a leitura dos ficheiros de configuração"
-#: config.c:1728
+#: config.c:1716
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "não é possível analisar '%s' da configuração de linha de comandos"
-#: config.c:1730
+#: config.c:1718
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "variável de configuração '%s' incorreta no ficheiro '%s' na linha %d"
-#: config.c:1789
+#: config.c:1777
#, c-format
msgid "%s has multiple values"
msgstr "%s tem múltiplos valores"
-#: config.c:2323
+#: config.c:2311
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "não foi possível definir '%s' como '%s'"
-#: config.c:2325
+#: config.c:2313
#, c-format
msgid "could not unset '%s'"
msgstr "não foi possível reiniciar '%s'"
@@ -1030,73 +984,73 @@ msgstr "falha ao ler a cache"
msgid "unable to write new index file"
msgstr "não foi possível escrever novo ficheiro de índice"
-#: merge-recursive.c:212
+#: merge-recursive.c:209
msgid "(bad commit)\n"
msgstr "(commit incorreto)\n"
-#: merge-recursive.c:234
+#: merge-recursive.c:231
#, c-format
msgid "addinfo_cache failed for path '%s'"
msgstr "addinfo_cache falhou no caminho '%s'"
-#: merge-recursive.c:304
+#: merge-recursive.c:301
msgid "error building trees"
msgstr "erro ao construir árvores"
-#: merge-recursive.c:723
+#: merge-recursive.c:720
#, c-format
msgid "failed to create path '%s'%s"
msgstr "falha ao criar o caminho '%s'%s"
-#: merge-recursive.c:734
+#: merge-recursive.c:731
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "A remover %s para criar espaço para o subdiretório\n"
-#: merge-recursive.c:748 merge-recursive.c:767
+#: merge-recursive.c:745 merge-recursive.c:764
msgid ": perhaps a D/F conflict?"
msgstr ": talvez um conflito D/F?"
-#: merge-recursive.c:757
+#: merge-recursive.c:754
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr "perda de ficheiro não controlado em '%s' recusada"
-#: merge-recursive.c:799
+#: merge-recursive.c:796
#, c-format
msgid "cannot read object %s '%s'"
msgstr "não é possível ler o objeto %s: '%s'"
-#: merge-recursive.c:801
+#: merge-recursive.c:798
#, c-format
msgid "blob expected for %s '%s'"
msgstr "blob para %s '%s' esperado"
-#: merge-recursive.c:825
+#: merge-recursive.c:822
#, c-format
msgid "failed to open '%s': %s"
msgstr "falha ao abrir '%s': %s"
-#: merge-recursive.c:836
+#: merge-recursive.c:833
#, c-format
msgid "failed to symlink '%s': %s"
msgstr "falha ao criar a ligação simbólica '%s': %s"
-#: merge-recursive.c:841
+#: merge-recursive.c:838
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr "não sei o que fazer com %06o %s '%s'"
-#: merge-recursive.c:981
+#: merge-recursive.c:978
msgid "Failed to execute internal merge"
msgstr "Falha ao executar integração interna"
-#: merge-recursive.c:985
+#: merge-recursive.c:982
#, c-format
msgid "Unable to add %s to database"
msgstr "Não é possível adicionar %s à base de dados"
-#: merge-recursive.c:1084 merge-recursive.c:1098
+#: merge-recursive.c:1081 merge-recursive.c:1095
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -1105,7 +1059,7 @@ msgstr ""
"CONFLITO (%s/eliminar): %s eliminado em %s e %s em %s. Versão de %s de %s "
"deixada na árvore."
-#: merge-recursive.c:1090 merge-recursive.c:1103
+#: merge-recursive.c:1087 merge-recursive.c:1100
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -1114,160 +1068,160 @@ msgstr ""
"CONFLITO (%s/eliminar): %s eliminado em %s e %s em %s. Versão de %s de %s "
"deixada na árvore em %s."
-#: merge-recursive.c:1146
+#: merge-recursive.c:1143
msgid "rename"
msgstr "mudar nome"
-#: merge-recursive.c:1146
+#: merge-recursive.c:1143
msgid "renamed"
msgstr "nome mudado"
-#: merge-recursive.c:1203
+#: merge-recursive.c:1200
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "%s é um diretório em %s adicionando %s no seu lugar"
-#: merge-recursive.c:1228
+#: merge-recursive.c:1225
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
"\"->\"%s\" in \"%s\"%s"
msgstr ""
-"CONFLITO (mudar nome/mudar nome): Mudar o nome \"%s\"->\"%s\" no ramo \"%s\" mudar "
-"o nome \"%s\"->\"%s\" em \"%s\"%s"
+"CONFLITO (mudar nome/mudar nome): Mudar o nome \"%s\"->\"%s\" no ramo \"%s\" "
+"mudar o nome \"%s\"->\"%s\" em \"%s\"%s"
-#: merge-recursive.c:1233
+#: merge-recursive.c:1230
msgid " (left unresolved)"
msgstr " (por resolver)"
-#: merge-recursive.c:1295
+#: merge-recursive.c:1292
#, c-format
msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
msgstr ""
-"CONFLITO (mudar nome/mudar nome): Mudar de nome %s->%s em %s. Mudar o nome %"
-"s->%s em %s"
+"CONFLITO (mudar nome/mudar nome): Mudar de nome %s->%s em %s. Mudar o nome "
+"%s->%s em %s"
-#: merge-recursive.c:1328
+#: merge-recursive.c:1325
#, c-format
msgid "Renaming %s to %s and %s to %s instead"
msgstr "A mudar o nome de %s para %s e de %s para %s, em alternativa"
-#: merge-recursive.c:1534
+#: merge-recursive.c:1531
#, c-format
msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
msgstr ""
"CONFLITO (mudar nome/adicionar): Mudar o nome %s->%s em %s. %s adicionado em "
"%s"
-#: merge-recursive.c:1549
+#: merge-recursive.c:1546
#, c-format
msgid "Adding merged %s"
msgstr "A adicionar %s integrado"
-#: merge-recursive.c:1556 merge-recursive.c:1769
+#: merge-recursive.c:1553 merge-recursive.c:1766
#, c-format
msgid "Adding as %s instead"
msgstr "A adicionar como %s, em alternativa."
-#: merge-recursive.c:1613
+#: merge-recursive.c:1610
#, c-format
msgid "cannot read object %s"
msgstr "não foi possível ler o objeto %s"
-#: merge-recursive.c:1616
+#: merge-recursive.c:1613
#, c-format
msgid "object %s is not a blob"
msgstr "o objeto %s não é um blob"
-#: merge-recursive.c:1669
+#: merge-recursive.c:1666
msgid "modify"
msgstr "modificar"
-#: merge-recursive.c:1669
+#: merge-recursive.c:1666
msgid "modified"
msgstr "modificado"
-#: merge-recursive.c:1679
+#: merge-recursive.c:1676
msgid "content"
msgstr "conteúdo"
-#: merge-recursive.c:1686
+#: merge-recursive.c:1683
msgid "add/add"
msgstr "adicionar/adicionar"
-#: merge-recursive.c:1721
+#: merge-recursive.c:1718
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "%s ignorado (integrado é igual ao existente)"
-#: merge-recursive.c:1735
+#: merge-recursive.c:1732
#, c-format
msgid "Auto-merging %s"
msgstr "A integrar automaticamente %s"
-#: merge-recursive.c:1739 git-submodule.sh:919
+#: merge-recursive.c:1736 git-submodule.sh:919
msgid "submodule"
msgstr "submódulo"
-#: merge-recursive.c:1740
+#: merge-recursive.c:1737
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "CONFLITO (%s): conflito de integração em %s"
-#: merge-recursive.c:1834
+#: merge-recursive.c:1831
#, c-format
msgid "Removing %s"
msgstr "A remover %s"
-#: merge-recursive.c:1860
+#: merge-recursive.c:1857
msgid "file/directory"
msgstr "ficheiro/diretório"
-#: merge-recursive.c:1866
+#: merge-recursive.c:1863
msgid "directory/file"
msgstr "diretório/ficheiro"
-#: merge-recursive.c:1871
+#: merge-recursive.c:1868
#, c-format
msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
msgstr ""
"CONFLITO (%s): Há um diretório designado %s em %s. A adicionar %s como %s"
-#: merge-recursive.c:1880
+#: merge-recursive.c:1877
#, c-format
msgid "Adding %s"
msgstr "A adicionar %s"
-#: merge-recursive.c:1917
+#: merge-recursive.c:1914
msgid "Already up-to-date!"
msgstr "Já está atualizado!"
-#: merge-recursive.c:1926
+#: merge-recursive.c:1923
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "falha ao integrar as árvores %s e %s"
-#: merge-recursive.c:2009
+#: merge-recursive.c:2006
msgid "Merging:"
msgstr "A integrar:"
-#: merge-recursive.c:2022
+#: merge-recursive.c:2019
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "%u antecessor comum encontrado:"
msgstr[1] "%u antecessores comuns encontrados:"
-#: merge-recursive.c:2061
+#: merge-recursive.c:2058
msgid "merge returned no commit"
msgstr "a integração não retornou nenhum commit"
-#: merge-recursive.c:2124
+#: merge-recursive.c:2121
#, c-format
msgid "Could not parse object '%s'"
msgstr "Não foi possível analisar o objeto '%s'"
-#: merge-recursive.c:2138 builtin/merge.c:641 builtin/merge.c:788
+#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788
msgid "Unable to write index."
msgstr "Não é possível escrever no índice."
@@ -1314,7 +1268,7 @@ msgstr "utilização: %s"
msgid " or: %s"
msgstr " ou: %s"
-#: parse-options.c:598
+#: parse-options.c:597
#, c-format
msgid " %s"
msgstr " %s"
@@ -1328,7 +1282,7 @@ msgstr "-NUM"
msgid "malformed object name '%s'"
msgstr "nome do objeto malformado '%s'"
-#: path.c:796
+#: path.c:798
#, c-format
msgid "Could not make %s writable by group"
msgstr "Não foi possível dar permissão de escrita ao grupo a %s"
@@ -1878,7 +1832,7 @@ msgid "git %s: failed to refresh the index"
msgstr "git %s: falha ao atualizar o índice"
#: sequencer.c:705
-msgid "Cannot revert during a another revert."
+msgid "Cannot revert during another revert."
msgstr "Não é possível reverter durante outra reversão."
#: sequencer.c:706
@@ -2309,8 +2263,8 @@ msgid ""
"Your local changes to the following files would be overwritten by %s:\n"
"%%sPlease commit your changes or stash them before you %s."
msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas por %"
-"s:\n"
+"As suas alterações locais nos seguintes ficheiros seriam substituídas por "
+"%s:\n"
"%%sSubmeta as suas alterações ou esconda-as antes de efetuar %s."
#: unpack-trees.c:76
@@ -3120,7 +3074,7 @@ msgstr "ser verboso"
msgid "interactive picking"
msgstr "seleção interativa"
-#: builtin/add.c:257 builtin/checkout.c:1156 builtin/reset.c:286
+#: builtin/add.c:257 builtin/checkout.c:1157 builtin/reset.c:286
msgid "select hunks interactively"
msgstr "selecionar blocos interativamente"
@@ -4680,7 +4634,8 @@ msgstr "não faz sentido criar 'HEAD' manualmente"
#: builtin/branch.c:846
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
-msgstr "as opções -a e -r de 'git branch' não fazem sentido com um nome de ramo"
+msgstr ""
+"as opções -a e -r de 'git branch' não fazem sentido com um nome de ramo"
#: builtin/branch.c:849
#, c-format
@@ -4801,7 +4756,7 @@ msgstr "ler os nomes dos ficheiros da entrada padrão"
msgid "terminate input and output records by a NUL character"
msgstr "terminar registos da entrada e da saída com um carácter NUL"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1137 builtin/gc.c:325
+#: builtin/check-ignore.c:18 builtin/checkout.c:1138 builtin/gc.c:325
msgid "suppress progress reporting"
msgstr "suprimir informação de progresso"
@@ -4976,45 +4931,45 @@ msgstr "primeiro deve resolver o índice atual"
msgid "Can not do reflog for '%s': %s\n"
msgstr "Não é possível efetuar reflog de '%s': %s\n"
-#: builtin/checkout.c:663
+#: builtin/checkout.c:664
msgid "HEAD is now at"
msgstr "HEAD está agora em"
-#: builtin/checkout.c:667 builtin/clone.c:661
+#: builtin/checkout.c:668 builtin/clone.c:661
msgid "unable to update HEAD"
msgstr "não foi possível atualizar HEAD"
-#: builtin/checkout.c:671
+#: builtin/checkout.c:672
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Repor ramo '%s'\n"
-#: builtin/checkout.c:674
+#: builtin/checkout.c:675
#, c-format
msgid "Already on '%s'\n"
msgstr "Já em '%s'\n"
-#: builtin/checkout.c:678
+#: builtin/checkout.c:679
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Mudou para e repôs o ramo '%s'\n"
-#: builtin/checkout.c:680 builtin/checkout.c:1069
+#: builtin/checkout.c:681 builtin/checkout.c:1070
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Mudou para o novo ramo '%s'\n"
-#: builtin/checkout.c:682
+#: builtin/checkout.c:683
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Mudou para o ramo '%s'\n"
-#: builtin/checkout.c:733
+#: builtin/checkout.c:734
#, c-format
msgid " ... and %d more.\n"
msgstr " ... e mais %d.\n"
-#: builtin/checkout.c:739
+#: builtin/checkout.c:740
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -5035,7 +4990,7 @@ msgstr[1] ""
"\n"
"%s\n"
-#: builtin/checkout.c:758
+#: builtin/checkout.c:759
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -5062,151 +5017,151 @@ msgstr[1] ""
" git branch <nome-do-novo-ramo> %s\n"
"\n"
-#: builtin/checkout.c:794
+#: builtin/checkout.c:795
msgid "internal error in revision walk"
msgstr "erro interno durante o curso de revisões"
-#: builtin/checkout.c:798
+#: builtin/checkout.c:799
msgid "Previous HEAD position was"
msgstr "A posição anterior de HEAD era"
-#: builtin/checkout.c:825 builtin/checkout.c:1064
+#: builtin/checkout.c:826 builtin/checkout.c:1065
msgid "You are on a branch yet to be born"
msgstr "Está num ramo ainda não criado"
-#: builtin/checkout.c:970
+#: builtin/checkout.c:971
#, c-format
msgid "only one reference expected, %d given."
msgstr "esperava-se apenas uma referência, %d fornecidas."
-#: builtin/checkout.c:1010 builtin/worktree.c:214
+#: builtin/checkout.c:1011 builtin/worktree.c:214
#, c-format
msgid "invalid reference: %s"
msgstr "referência inválida: %s"
-#: builtin/checkout.c:1039
+#: builtin/checkout.c:1040
#, c-format
msgid "reference is not a tree: %s"
msgstr "a referência não é uma árvore: %s"
-#: builtin/checkout.c:1078
+#: builtin/checkout.c:1079
msgid "paths cannot be used with switching branches"
msgstr "não podem ser usados caminhos ao mudar de ramo"
-#: builtin/checkout.c:1081 builtin/checkout.c:1085
+#: builtin/checkout.c:1082 builtin/checkout.c:1086
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "'%s' não pode ser usado ao mudar de ramo"
-#: builtin/checkout.c:1089 builtin/checkout.c:1092 builtin/checkout.c:1097
-#: builtin/checkout.c:1100
+#: builtin/checkout.c:1090 builtin/checkout.c:1093 builtin/checkout.c:1098
+#: builtin/checkout.c:1101
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "'%s' não pode ser usado com '%s'"
-#: builtin/checkout.c:1105
+#: builtin/checkout.c:1106
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "Não é possível mudar de ramo para '%s', visto que não é um commit"
-#: builtin/checkout.c:1138 builtin/checkout.c:1140 builtin/clone.c:88
+#: builtin/checkout.c:1139 builtin/checkout.c:1141 builtin/clone.c:88
#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:324
#: builtin/worktree.c:326
msgid "branch"
msgstr "ramo"
-#: builtin/checkout.c:1139
+#: builtin/checkout.c:1140
msgid "create and checkout a new branch"
msgstr "criar e extrair um novo ramo"
-#: builtin/checkout.c:1141
+#: builtin/checkout.c:1142
msgid "create/reset and checkout a branch"
msgstr "criar/repor e extrair um ramo"
-#: builtin/checkout.c:1142
+#: builtin/checkout.c:1143
msgid "create reflog for new branch"
msgstr "criar reflog do novo ramo"
-#: builtin/checkout.c:1143 builtin/worktree.c:328
+#: builtin/checkout.c:1144 builtin/worktree.c:328
msgid "detach HEAD at named commit"
msgstr "destacar HEAD no commit indicado"
-#: builtin/checkout.c:1144
+#: builtin/checkout.c:1145
msgid "set upstream info for new branch"
msgstr "definir a informação do ramo a montante do novo ramo"
-#: builtin/checkout.c:1146
+#: builtin/checkout.c:1147
msgid "new-branch"
msgstr "novo-ramo"
-#: builtin/checkout.c:1146
+#: builtin/checkout.c:1147
msgid "new unparented branch"
msgstr "novo ramo sem pai"
-#: builtin/checkout.c:1147
+#: builtin/checkout.c:1148
msgid "checkout our version for unmerged files"
msgstr "extrair a nossa versão dos ficheiros não integrados"
-#: builtin/checkout.c:1149
+#: builtin/checkout.c:1150
msgid "checkout their version for unmerged files"
msgstr "extrair a versão deles dos ficheiros não integrados"
-#: builtin/checkout.c:1151
+#: builtin/checkout.c:1152
msgid "force checkout (throw away local modifications)"
msgstr "forçar extração (descartar modificações locais)"
-#: builtin/checkout.c:1152
+#: builtin/checkout.c:1153
msgid "perform a 3-way merge with the new branch"
msgstr "realizar uma integração com 3 pontos com o novo ramo"
-#: builtin/checkout.c:1153 builtin/merge.c:231
+#: builtin/checkout.c:1154 builtin/merge.c:231
msgid "update ignored files (default)"
msgstr "atualizar ficheiros ignorados (predefinição)"
-#: builtin/checkout.c:1154 builtin/log.c:1459 parse-options.h:250
+#: builtin/checkout.c:1155 builtin/log.c:1459 parse-options.h:250
msgid "style"
msgstr "estilo"
-#: builtin/checkout.c:1155
+#: builtin/checkout.c:1156
msgid "conflict style (merge or diff3)"
msgstr "estilo de conflito (merge ou diff3)"
-#: builtin/checkout.c:1158
+#: builtin/checkout.c:1159
msgid "do not limit pathspecs to sparse entries only"
msgstr "não restringir especificadores de caminho a entradas esparsas"
-#: builtin/checkout.c:1160
+#: builtin/checkout.c:1161
msgid "second guess 'git checkout <no-such-branch>'"
msgstr "tentar adivinhar 'git checkout <ramo-inexistente>'"
-#: builtin/checkout.c:1162
+#: builtin/checkout.c:1163
msgid "do not check if another worktree is holding the given ref"
msgstr ""
"não verificar se outra árvore de trabalho contém a referência fornecida"
-#: builtin/checkout.c:1163 builtin/clone.c:60 builtin/fetch.c:117
+#: builtin/checkout.c:1164 builtin/clone.c:60 builtin/fetch.c:117
#: builtin/merge.c:228 builtin/pull.c:116 builtin/push.c:536
#: builtin/send-pack.c:168
msgid "force progress reporting"
msgstr "forçar informação de progresso"
-#: builtin/checkout.c:1194
+#: builtin/checkout.c:1195
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "-b, -B e --orphan são mutuamente exclusivos"
-#: builtin/checkout.c:1211
+#: builtin/checkout.c:1212
msgid "--track needs a branch name"
msgstr "--track requer um nome dum ramo"
-#: builtin/checkout.c:1216
+#: builtin/checkout.c:1217
msgid "Missing branch name; try -b"
msgstr "Falta um nome dum ramo; tente -b"
-#: builtin/checkout.c:1252
+#: builtin/checkout.c:1253
msgid "invalid path specification"
msgstr "especificação de caminho inválida"
-#: builtin/checkout.c:1259
+#: builtin/checkout.c:1260
#, c-format
msgid ""
"Cannot update paths and switch to branch '%s' at the same time.\n"
@@ -5216,12 +5171,12 @@ msgstr ""
"tempo.\n"
"Pretendia extrair '%s' o qual não pode ser resolvido como commit?"
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1265
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach não aceita um caminho como argumento '%s'"
-#: builtin/checkout.c:1268
+#: builtin/checkout.c:1269
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -5626,7 +5581,7 @@ msgid "cannot unlink temporary alternates file"
msgstr ""
"não é possível invocar unlink sobre o ficheiro sobressalente temporário"
-#: builtin/clone.c:863 builtin/receive-pack.c:1857
+#: builtin/clone.c:863 builtin/receive-pack.c:1855
msgid "Too many arguments."
msgstr "Demasiados argumentos."
@@ -6788,7 +6743,8 @@ msgstr "número de submódulos obtidos em paralelo"
#: builtin/fetch.c:108 builtin/pull.c:187
msgid "prune remote-tracking branches no longer on remote"
-msgstr "eliminar os ramos de monitorização remotos que já não existem no remoto"
+msgstr ""
+"eliminar os ramos de monitorização remotos que já não existem no remoto"
#: builtin/fetch.c:109 builtin/pull.c:190
msgid "on-demand"
@@ -7586,49 +7542,49 @@ msgstr "nenhum visualizador de manual atendeu o pedido"
msgid "no info viewer handled the request"
msgstr "nenhum visualizador de info atendeu o pedido"
-#: builtin/help.c:408
+#: builtin/help.c:401
msgid "Defining attributes per path"
msgstr "Definir atributos por caminho"
-#: builtin/help.c:409
+#: builtin/help.c:402
msgid "Everyday Git With 20 Commands Or So"
msgstr "Diário Git com mais ou menos 20 Comandos"
-#: builtin/help.c:410
+#: builtin/help.c:403
msgid "A Git glossary"
msgstr "Um Glossário do Git"
-#: builtin/help.c:411
+#: builtin/help.c:404
msgid "Specifies intentionally untracked files to ignore"
msgstr ""
"Especificar ficheiros não controlados para serem intencionalmente ignorados"
-#: builtin/help.c:412
+#: builtin/help.c:405
msgid "Defining submodule properties"
msgstr "Definir propriedades de submódulos"
-#: builtin/help.c:413
+#: builtin/help.c:406
msgid "Specifying revisions and ranges for Git"
msgstr "Especificar revisões e intervalos do Git"
-#: builtin/help.c:414
+#: builtin/help.c:407
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Uma introdução ao Git (versão 1.5.1 ou mais recente)"
-#: builtin/help.c:415
+#: builtin/help.c:408
msgid "An overview of recommended workflows with Git"
msgstr "Uma descrição geral dos fluxos de trabalho recomendados para o Git"
-#: builtin/help.c:427
+#: builtin/help.c:420
msgid "The common Git guides are:\n"
msgstr "Os guias comuns do Git:\n"
-#: builtin/help.c:448 builtin/help.c:465
+#: builtin/help.c:441 builtin/help.c:458
#, c-format
msgid "usage: %s%s"
msgstr "utilização: %s%s"
-#: builtin/help.c:481
+#: builtin/help.c:474
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "'git %s' é um alias de '%s'"
@@ -9066,7 +9022,8 @@ msgstr "O diretório %s está no índice porém nenhum submódulo?"
#: builtin/mv.c:72 builtin/rm.c:317
msgid "Please stage your changes to .gitmodules or stash them to proceed"
-msgstr "Prepare as suas alterações em .gitmodules ou esconda-as para prosseguir"
+msgstr ""
+"Prepare as suas alterações em .gitmodules ou esconda-as para prosseguir"
#: builtin/mv.c:90
#, c-format
@@ -9503,7 +9460,8 @@ msgid ""
"Automatic notes merge failed. Fix conflicts in %s and commit the result with "
"'git notes merge --commit', or abort the merge with 'git notes merge --"
"abort'.\n"
-msgstr "A integração automática de notas falhou. Corrija os conflitos em %s e "
+msgstr ""
+"A integração automática de notas falhou. Corrija os conflitos em %s e "
"submeta o resultado com 'git notes merge --commit' ou aborte a integração "
"com 'git notes merge --abort'.\n"
@@ -10326,11 +10284,11 @@ msgstr "depurar unpack-trees"
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <git-dir>"
-#: builtin/receive-pack.c:1845
+#: builtin/receive-pack.c:1843
msgid "quiet"
msgstr "silencioso"
-#: builtin/receive-pack.c:1859
+#: builtin/receive-pack.c:1857
msgid "You must specify a directory."
msgstr "Deve especificar um diretório."
@@ -11400,7 +11358,8 @@ msgstr "imprimir estado do programa auxiliar remoto"
#: builtin/shortlog.c:13
msgid "git shortlog [<options>] [<revision-range>] [[--] [<path>...]]"
-msgstr "git shortlog [<opções>] [<intervalo-de-revisões>] [[--] [<caminho>...]]"
+msgstr ""
+"git shortlog [<opções>] [<intervalo-de-revisões>] [[--] [<caminho>...]]"
#: builtin/shortlog.c:242
msgid "sort output according to the number of commits per author"
@@ -12222,8 +12181,7 @@ msgstr "eliminar a referência"
#: builtin/update-ref.c:365
msgid "update <refname> not the one it points to"
msgstr ""
-"atualizar a referência <nome-da-referência>, não a referência que esta "
-"aponta"
+"atualizar a referência <nome-da-referência>, não a referência que esta aponta"
#: builtin/update-ref.c:366
msgid "stdin has NUL-terminated arguments"
@@ -12597,7 +12555,8 @@ msgstr "HEAD incorreta - é necessário uma HEAD"
#, sh-format
msgid ""
"Checking out '$start_head' failed. Try 'git bisect reset <valid-branch>'."
-msgstr "Falha ao extrair '$start_head'. Tente 'git bisect reset <ramo-válido>'."
+msgstr ""
+"Falha ao extrair '$start_head'. Tente 'git bisect reset <ramo-válido>'."
#: git-bisect.sh:177
msgid "won't bisect on cg-seek'ed tree"
@@ -12813,8 +12772,8 @@ msgid ""
msgstr ""
"Depois de resolver este problema, execute \"git rebase --continue\".\n"
"Se prefere ignorar este patch, execute \"git rebase --skip\".\n"
-"Para extrair o ramo original e interromper o rebase, execute \"git rebase "
-"--abort\"."
+"Para extrair o ramo original e interromper o rebase, execute \"git rebase --"
+"abort\"."
#: git-rebase.sh:156 git-rebase.sh:395
#, sh-format
@@ -13477,167 +13436,43 @@ msgstr "Erro ao refazer integração $sha1"
msgid "Could not pick $sha1"
msgstr "Não foi possível apanhar $sha1"
-#: git-rebase--interactive.sh:408 git-rebase--interactive.sh:474
-msgid "This is the 1st commit message:"
-msgstr "Esta é a 1ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:409
-msgid "This is the 2nd commit message:"
-msgstr "Esta é a 2ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:410
-msgid "This is the 3rd commit message:"
-msgstr "Esta é a 3ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:411
-msgid "This is the 4th commit message:"
-msgstr "Esta é a 4ª mensagem de commit:"
+#: git-rebase--interactive.sh:407
+#, sh-format
+msgid "This is the commit message #${n}:"
+msgstr "Esta é a mensagem de commit nº${n}:"
#: git-rebase--interactive.sh:412
-msgid "This is the 5th commit message:"
-msgstr "Esta é a 5ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:413
-msgid "This is the 6th commit message:"
-msgstr "Esta é a 6ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:414
-msgid "This is the 7th commit message:"
-msgstr "Esta é a 7ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:415
-msgid "This is the 8th commit message:"
-msgstr "Esta é a 8ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:416
-msgid "This is the 9th commit message:"
-msgstr "Esta é a 9ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:417
-msgid "This is the 10th commit message:"
-msgstr "Esta é a 10ª mensagem de commit:"
-
-#. TRANSLATORS: if the language you are translating into
-#. doesn't allow you to compose a sentence in this fashion,
-#. consider translating as if this and the following few strings
-#. were "This is the commit message ${n}:"
-#: git-rebase--interactive.sh:422
#, sh-format
-msgid "This is the ${n}th commit message:"
-msgstr "Esta é a ${n}ª mensagem de commit:"
+msgid "The commit message #${n} will be skipped:"
+msgstr "A mensagem de commit nº${n} será ignorada:"
#: git-rebase--interactive.sh:423
#, sh-format
-msgid "This is the ${n}st commit message:"
-msgstr "Está é a ${n}ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:424
-#, sh-format
-msgid "This is the ${n}nd commit message:"
-msgstr "Esta é a ${n}ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:425
-#, sh-format
-msgid "This is the ${n}rd commit message:"
-msgstr "Esta é a ${n}ª mensagem de commit:"
-
-#: git-rebase--interactive.sh:426
-#, sh-format
-msgid "This is the commit message ${n}:"
-msgstr "Esta é a mensagem de commit ${n}:"
-
-#: git-rebase--interactive.sh:432
-msgid "The 1st commit message will be skipped:"
-msgstr "A 1ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:433
-msgid "The 2nd commit message will be skipped:"
-msgstr "A 2ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:434
-msgid "The 3rd commit message will be skipped:"
-msgstr "A 3ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:435
-msgid "The 4th commit message will be skipped:"
-msgstr "A 4ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:436
-msgid "The 5th commit message will be skipped:"
-msgstr "A 5ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:437
-msgid "The 6th commit message will be skipped:"
-msgstr "A 6ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:438
-msgid "The 7th commit message will be skipped:"
-msgstr "A 7ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:439
-msgid "The 8th commit message will be skipped:"
-msgstr "A 8ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:440
-msgid "The 9th commit message will be skipped:"
-msgstr "A 9ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:441
-msgid "The 10th commit message will be skipped:"
-msgstr "A 10ª mensagem de commit será ignorada:"
-
-#. TRANSLATORS: if the language you are translating into
-#. doesn't allow you to compose a sentence in this fashion,
-#. consider translating as if this and the following few strings
-#. were "The commit message ${n} will be skipped:"
-#: git-rebase--interactive.sh:446
-#, sh-format
-msgid "The ${n}th commit message will be skipped:"
-msgstr "A ${n}ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:447
-#, sh-format
-msgid "The ${n}st commit message will be skipped:"
-msgstr "A ${n}ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:448
-#, sh-format
-msgid "The ${n}nd commit message will be skipped:"
-msgstr "A ${n}ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:449
-#, sh-format
-msgid "The ${n}rd commit message will be skipped:"
-msgstr "A ${n}ª mensagem de commit será ignorada:"
-
-#: git-rebase--interactive.sh:450
-#, sh-format
-msgid "The commit message ${n} will be skipped:"
-msgstr "A mensagem de commit ${n} será ignorada:"
-
-#: git-rebase--interactive.sh:462
-#, sh-format
msgid "This is a combination of $count commit."
msgid_plural "This is a combination of $count commits."
msgstr[0] "Isto é a combinação de $count commit."
msgstr[1] "Isto é a combinação de $count commits."
-#: git-rebase--interactive.sh:470
+#: git-rebase--interactive.sh:431
#, sh-format
msgid "Cannot write $fixup_msg"
msgstr "Não é possível escrever $fixup_msg"
-#: git-rebase--interactive.sh:473
+#: git-rebase--interactive.sh:434
msgid "This is a combination of 2 commits."
msgstr "Isto é a combinação de 2 commits."
-#: git-rebase--interactive.sh:514 git-rebase--interactive.sh:557
-#: git-rebase--interactive.sh:560
+#: git-rebase--interactive.sh:435
+msgid "This is the 1st commit message:"
+msgstr "Esta é a 1ª mensagem de commit:"
+
+#: git-rebase--interactive.sh:475 git-rebase--interactive.sh:518
+#: git-rebase--interactive.sh:521
#, sh-format
msgid "Could not apply $sha1... $rest"
msgstr "Não foi possível aplicar $sha1... $rest"
-#: git-rebase--interactive.sh:588
+#: git-rebase--interactive.sh:549
#, sh-format
msgid ""
"Could not amend commit after successfully picking $sha1... $rest\n"
@@ -13654,31 +13489,31 @@ msgstr ""
"poder\n"
"reformular a mensagem do commit."
-#: git-rebase--interactive.sh:603
+#: git-rebase--interactive.sh:564
#, sh-format
msgid "Stopped at $sha1_abbrev... $rest"
msgstr "Parou em $sha1_abbrev... $rest"
-#: git-rebase--interactive.sh:618
+#: git-rebase--interactive.sh:579
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
msgstr "Não é possível efetuar '$squash_style' sem um commit anterior"
-#: git-rebase--interactive.sh:660
+#: git-rebase--interactive.sh:621
#, sh-format
msgid "Executing: $rest"
msgstr "A executar: $rest"
-#: git-rebase--interactive.sh:668
+#: git-rebase--interactive.sh:629
#, sh-format
msgid "Execution failed: $rest"
msgstr "Falha ao executar: $rest"
-#: git-rebase--interactive.sh:670
+#: git-rebase--interactive.sh:631
msgid "and made changes to the index and/or the working tree"
msgstr "e fez alterações ao índice e/ou à árvore de trabalho"
-#: git-rebase--interactive.sh:672
+#: git-rebase--interactive.sh:633
msgid ""
"You can fix the problem, and then run\n"
"\n"
@@ -13689,7 +13524,7 @@ msgstr ""
"\tgit rebase --continue"
#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--interactive.sh:685
+#: git-rebase--interactive.sh:646
#, sh-format
msgid ""
"Execution succeeded: $rest\n"
@@ -13704,25 +13539,25 @@ msgstr ""
"\n"
"\tgit rebase --continue"
-#: git-rebase--interactive.sh:696
+#: git-rebase--interactive.sh:657
#, sh-format
msgid "Unknown command: $command $sha1 $rest"
msgstr "Comando desconhecido: $command $sha1 $rest"
-#: git-rebase--interactive.sh:697
+#: git-rebase--interactive.sh:658
msgid "Please fix this using 'git rebase --edit-todo'."
msgstr "Corrija-o usando 'git rebase --edit-todo'."
-#: git-rebase--interactive.sh:732
+#: git-rebase--interactive.sh:693
#, sh-format
msgid "Successfully rebased and updated $head_name."
msgstr "$head_name rebaseado e atualizado com sucesso."
-#: git-rebase--interactive.sh:779
+#: git-rebase--interactive.sh:740
msgid "Could not skip unnecessary pick commands"
msgstr "Não foi possível saltar comandos pick desnecessários"
-#: git-rebase--interactive.sh:937
+#: git-rebase--interactive.sh:898
#, sh-format
msgid ""
"Warning: the SHA-1 is missing or isn't a commit in the following line:\n"
@@ -13731,7 +13566,7 @@ msgstr ""
"Aviso: falta o SHA-1 ou a seguinte linha não tem um commit:\n"
" - $line"
-#: git-rebase--interactive.sh:970
+#: git-rebase--interactive.sh:931
#, sh-format
msgid ""
"Warning: the command isn't recognized in the following line:\n"
@@ -13740,11 +13575,11 @@ msgstr ""
"Aviso: o comando não é reconhecido na seguinte linha:\n"
" - $line"
-#: git-rebase--interactive.sh:1009
+#: git-rebase--interactive.sh:970
msgid "could not detach HEAD"
msgstr "não foi possível destacar HEAD"
-#: git-rebase--interactive.sh:1047
+#: git-rebase--interactive.sh:1008
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
"Dropped commits (newer to older):"
@@ -13752,7 +13587,7 @@ msgstr ""
"Aviso: alguns commits podem ter sido descartados acidentalmente.\n"
"Commits descartados (mais novo para o mais velho):"
-#: git-rebase--interactive.sh:1055
+#: git-rebase--interactive.sh:1016
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
"\n"
@@ -13760,12 +13595,13 @@ msgid ""
"warnings.\n"
"The possible behaviours are: ignore, warn, error."
msgstr ""
-"Para evitar esta mensagem, use \"drop\" para remover um commit explicitamente.\n"
+"Para evitar esta mensagem, use \"drop\" para remover um commit "
+"explicitamente.\n"
"\n"
"Use 'git config rebase.missingCommitsCheck' para mudar o nível de avisos.\n"
"O comportamentos possíveis são: ignore, warn, error."
-#: git-rebase--interactive.sh:1066
+#: git-rebase--interactive.sh:1027
#, sh-format
msgid ""
"Unrecognized setting $check_level for option rebase.missingCommitsCheck. "
@@ -13774,19 +13610,19 @@ msgstr ""
"Definição $check_level desconhecida da opção rebase.missingCommitsCheck. "
"Ignorado."
-#: git-rebase--interactive.sh:1083
+#: git-rebase--interactive.sh:1044
msgid "You can fix this with 'git rebase --edit-todo'."
msgstr "Pode corrí-lo com 'git rebase --edit-todo'."
-#: git-rebase--interactive.sh:1084
+#: git-rebase--interactive.sh:1045
msgid "Or you can abort the rebase with 'git rebase --abort'."
msgstr "Ou pode abortar o rebase com 'git rebase --abort'."
-#: git-rebase--interactive.sh:1108
+#: git-rebase--interactive.sh:1069
msgid "Could not remove CHERRY_PICK_HEAD"
msgstr "Não foi possível remover CHERRY_PICK_HEAD"
-#: git-rebase--interactive.sh:1113
+#: git-rebase--interactive.sh:1074
#, sh-format
msgid ""
"You have staged changes in your working tree.\n"
@@ -13817,11 +13653,11 @@ msgstr ""
"\n"
" git rebase --continue\n"
-#: git-rebase--interactive.sh:1130
+#: git-rebase--interactive.sh:1091
msgid "Error trying to find the author identity to amend commit"
msgstr "Erro ao tentar encontrar a identidade do autor para emendar o commit"
-#: git-rebase--interactive.sh:1135
+#: git-rebase--interactive.sh:1096
msgid ""
"You have uncommitted changes in your working tree. Please commit them\n"
"first and then run 'git rebase --continue' again."
@@ -13829,11 +13665,11 @@ msgstr ""
"Tem alterações por submeter na árvore de trabalho. Submeta-as primeiro\n"
"e execute 'git rebase --continue' de novo."
-#: git-rebase--interactive.sh:1140 git-rebase--interactive.sh:1144
+#: git-rebase--interactive.sh:1101 git-rebase--interactive.sh:1105
msgid "Could not commit staged changes."
msgstr "Não foi possível submeter as alterações preparadas."
-#: git-rebase--interactive.sh:1168
+#: git-rebase--interactive.sh:1129
msgid ""
"\n"
"You are editing the todo file of an ongoing interactive rebase.\n"
@@ -13847,44 +13683,44 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: git-rebase--interactive.sh:1176 git-rebase--interactive.sh:1337
+#: git-rebase--interactive.sh:1137 git-rebase--interactive.sh:1298
msgid "Could not execute editor"
msgstr "Não foi possível executar o editor"
-#: git-rebase--interactive.sh:1184
+#: git-rebase--interactive.sh:1145
msgid "You need to set your committer info first"
msgstr "Primeiro tem de definir a sua informação de committer"
-#: git-rebase--interactive.sh:1192
+#: git-rebase--interactive.sh:1153
#, sh-format
msgid "Could not checkout $switch_to"
msgstr "Não foi possível extrair $switch_to"
-#: git-rebase--interactive.sh:1197
+#: git-rebase--interactive.sh:1158
msgid "No HEAD?"
msgstr "Sem HEAD?"
-#: git-rebase--interactive.sh:1198
+#: git-rebase--interactive.sh:1159
#, sh-format
msgid "Could not create temporary $state_dir"
msgstr "Não foi possível criar $state_dir temporário"
-#: git-rebase--interactive.sh:1200
+#: git-rebase--interactive.sh:1161
msgid "Could not mark as interactive"
msgstr "Não foi possível marcar como interativo"
-#: git-rebase--interactive.sh:1210 git-rebase--interactive.sh:1215
+#: git-rebase--interactive.sh:1171 git-rebase--interactive.sh:1176
msgid "Could not init rewritten commits"
msgstr "Não foi possível inicializar commits reescritos"
-#: git-rebase--interactive.sh:1315
+#: git-rebase--interactive.sh:1276
#, sh-format
msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
msgstr[0] "Rebase $shortrevisions sobre $shortonto ($todocount comando)"
msgstr[1] "Rebase $shortrevisions sobre $shortonto ($todocount comandos)"
-#: git-rebase--interactive.sh:1320
+#: git-rebase--interactive.sh:1281
msgid ""
"\n"
"However, if you remove everything, the rebase will be aborted.\n"
@@ -13894,7 +13730,7 @@ msgstr ""
"No entanto, se remover tudo, o rebase será abortado.\n"
"\n"
-#: git-rebase--interactive.sh:1327
+#: git-rebase--interactive.sh:1288
msgid "Note that empty commits are commented out"
msgstr "Note que commits vazios são comentados"
@@ -13946,6 +13782,123 @@ msgstr ""
msgid "Unable to determine absolute path of git directory"
msgstr "Não é possível determinar o caminho absoluto do diretório git"
+#~ msgid "bad numeric config value '%s' for '%s': invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto: unidade inválida"
+
+#~ msgid "bad numeric config value '%s' for '%s' in blob %s: invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto no blob %s: unidade "
+#~ "inválida"
+
+#~ msgid "bad numeric config value '%s' for '%s' in file %s: invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto no ficheiro %s: "
+#~ "unidade inválida"
+
+#~ msgid ""
+#~ "bad numeric config value '%s' for '%s' in standard input: invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto na entrada padrão: "
+#~ "unidade inválida"
+
+#~ msgid ""
+#~ "bad numeric config value '%s' for '%s' in submodule-blob %s: invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto no submódulo-blob %s: "
+#~ "unidade inválida"
+
+#~ msgid ""
+#~ "bad numeric config value '%s' for '%s' in command line %s: invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto na linha de comandos "
+#~ "%s: unidade inválida"
+
+#~ msgid "bad numeric config value '%s' for '%s' in %s: invalid unit"
+#~ msgstr ""
+#~ "valor numérico '%s' da configuração '%s' incorreto em %s: unidade inválida"
+
+#~ msgid "This is the 2nd commit message:"
+#~ msgstr "Esta é a 2ª mensagem de commit:"
+
+#~ msgid "This is the 3rd commit message:"
+#~ msgstr "Esta é a 3ª mensagem de commit:"
+
+#~ msgid "This is the 4th commit message:"
+#~ msgstr "Esta é a 4ª mensagem de commit:"
+
+#~ msgid "This is the 5th commit message:"
+#~ msgstr "Esta é a 5ª mensagem de commit:"
+
+#~ msgid "This is the 6th commit message:"
+#~ msgstr "Esta é a 6ª mensagem de commit:"
+
+#~ msgid "This is the 7th commit message:"
+#~ msgstr "Esta é a 7ª mensagem de commit:"
+
+#~ msgid "This is the 8th commit message:"
+#~ msgstr "Esta é a 8ª mensagem de commit:"
+
+#~ msgid "This is the 9th commit message:"
+#~ msgstr "Esta é a 9ª mensagem de commit:"
+
+#~ msgid "This is the 10th commit message:"
+#~ msgstr "Esta é a 10ª mensagem de commit:"
+
+#~ msgid "This is the ${n}th commit message:"
+#~ msgstr "Esta é a ${n}ª mensagem de commit:"
+
+#~ msgid "This is the ${n}st commit message:"
+#~ msgstr "Está é a ${n}ª mensagem de commit:"
+
+#~ msgid "This is the ${n}nd commit message:"
+#~ msgstr "Esta é a ${n}ª mensagem de commit:"
+
+#~ msgid "This is the ${n}rd commit message:"
+#~ msgstr "Esta é a ${n}ª mensagem de commit:"
+
+#~ msgid "The 1st commit message will be skipped:"
+#~ msgstr "A 1ª mensagem de commit será ignorada:"
+
+#~ msgid "The 2nd commit message will be skipped:"
+#~ msgstr "A 2ª mensagem de commit será ignorada:"
+
+#~ msgid "The 3rd commit message will be skipped:"
+#~ msgstr "A 3ª mensagem de commit será ignorada:"
+
+#~ msgid "The 4th commit message will be skipped:"
+#~ msgstr "A 4ª mensagem de commit será ignorada:"
+
+#~ msgid "The 5th commit message will be skipped:"
+#~ msgstr "A 5ª mensagem de commit será ignorada:"
+
+#~ msgid "The 6th commit message will be skipped:"
+#~ msgstr "A 6ª mensagem de commit será ignorada:"
+
+#~ msgid "The 7th commit message will be skipped:"
+#~ msgstr "A 7ª mensagem de commit será ignorada:"
+
+#~ msgid "The 8th commit message will be skipped:"
+#~ msgstr "A 8ª mensagem de commit será ignorada:"
+
+#~ msgid "The 9th commit message will be skipped:"
+#~ msgstr "A 9ª mensagem de commit será ignorada:"
+
+#~ msgid "The 10th commit message will be skipped:"
+#~ msgstr "A 10ª mensagem de commit será ignorada:"
+
+#~ msgid "The ${n}th commit message will be skipped:"
+#~ msgstr "A ${n}ª mensagem de commit será ignorada:"
+
+#~ msgid "The ${n}st commit message will be skipped:"
+#~ msgstr "A ${n}ª mensagem de commit será ignorada:"
+
+#~ msgid "The ${n}nd commit message will be skipped:"
+#~ msgstr "A ${n}ª mensagem de commit será ignorada:"
+
+#~ msgid "The ${n}rd commit message will be skipped:"
+#~ msgstr "A ${n}ª mensagem de commit será ignorada:"
+
#~ msgid "could not run gpg."
#~ msgstr "não foi possível executar gpg."
@@ -14034,7 +13987,8 @@ msgstr "Não é possível determinar o caminho absoluto do diretório git"
#~ "use the '--force' option. If the local git directory is not the correct "
#~ "repo"
#~ msgstr ""
-#~ "use a opção '--force'. Se o diretório git local não é o repositório correto"
+#~ "use a opção '--force'. Se o diretório git local não é o repositório "
+#~ "correto"
#~ msgid ""
#~ "or you are unsure what this means choose another name with the '--name' "
@@ -14140,7 +14094,8 @@ msgstr "Não é possível determinar o caminho absoluto do diretório git"
#~ "Quando push.default está definido como 'matching', o Git publica\n"
#~ "os ramos locais nos ramos remotos que já existam com o mesmo nome.\n"
#~ "\n"
-#~ "Desde a versão 2.0, o Git assume o comportamento mais conservativo 'simple',\n"
+#~ "Desde a versão 2.0, o Git assume o comportamento mais conservativo "
+#~ "'simple',\n"
#~ "publicando só o ramo atual no ramo remoto correspondente, que é usado\n"
#~ "para atualizar o ramo atual com 'git pull'.\n"
#~ "Consulte 'git help config' e procure por 'push.default' para mais "
diff --git a/po/zh_CN.po b/po/zh_CN.po
index ac7f5b4cb1..dc312227e0 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -136,7 +136,7 @@ msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
"POT-Creation-Date: 2016-08-27 23:21+0800\n"
-"PO-Revision-Date: 2016-08-31 00:11+0800\n"
+"PO-Revision-Date: 2016-09-05 23:36+0800\n"
"Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n"
"Language-Team: GitHub <https://github.com/jiangxin/git/>\n"
"Language: zh_CN\n"
@@ -319,7 +319,7 @@ msgstr "远程 git-upload-archive 命令的路径"
#: archive.c:461
msgid "Unexpected option --remote"
-msgstr "意外的选项 --remote"
+msgstr "未知参数 --remote"
#: archive.c:463
msgid "Option --exec can only be used together with --remote"
@@ -419,7 +419,7 @@ msgstr ""
#: bisect.c:798
#, c-format
msgid "Bisecting: a merge base must be tested\n"
-msgstr "二分查找中:合并基线必须要测试\n"
+msgstr "二分查找中:合并基线必须是经过测试的\n"
#: bisect.c:849
#, c-format
@@ -467,8 +467,8 @@ msgstr[1] "(大概 %d 步)"
#, c-format
msgid "Bisecting: %d revision left to test after this %s\n"
msgid_plural "Bisecting: %d revisions left to test after this %s\n"
-msgstr[0] "二分查找中:在 %2$s 之后还剩下 %1$d 个版本\n"
-msgstr[1] "二分查找中:在 %2$s 之后还剩下 %1$d 个版本\n"
+msgstr[0] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
+msgstr[1] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
#: branch.c:53
#, c-format
@@ -720,7 +720,7 @@ msgstr "标准输入中错误的配置行 %d"
#: config.c:528
#, c-format
msgid "bad config line %d in submodule-blob %s"
-msgstr "子模组数据 %2$s 中错误的配置行 %1$d"
+msgstr "子模组数据对象 %2$s 中错误的配置行 %1$d"
#: config.c:532
#, c-format
@@ -743,37 +743,37 @@ msgstr "无效的单位"
#: config.c:661
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
-msgstr "配置变量 '%2$s' 的数字取值 '%1$s' 设置错误: %3$s"
+msgstr "配置变量 '%2$s' 的数字取值 '%1$s' 设置错误:%3$s"
#: config.c:666
#, c-format
msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
-msgstr "数据对象 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s': %4$s"
+msgstr "数据对象 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
#: config.c:669
#, c-format
msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr "文件 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s': %4$s"
+msgstr "文件 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
#: config.c:672
#, c-format
msgid "bad numeric config value '%s' for '%s' in standard input: %s"
-msgstr "标准输入中配置变量 '%2$s' 错误的取值 '%1$s': %3$s"
+msgstr "标准输入中配置变量 '%2$s' 错误的取值 '%1$s':%3$s"
#: config.c:675
#, c-format
msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
-msgstr "子模组数据 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s': %4$s"
+msgstr "子模组数据 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
#: config.c:678
#, c-format
msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
-msgstr "命令行 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s': %4$s"
+msgstr "命令行 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
#: config.c:681
#, c-format
msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "在 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s': %4$s"
+msgstr "在 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
#: config.c:768
#, c-format
@@ -949,7 +949,7 @@ msgstr "外部 diff 退出,停止在 %s"
#: diff.c:3415
msgid "--follow requires exactly one pathspec"
-msgstr "--follow 参数后只跟一个 pathspec"
+msgstr "--follow 明确要求只跟一个路径规格"
#: diff.c:3578
#, c-format
@@ -1033,7 +1033,7 @@ msgid ""
"WARNING: You called a Git command named '%s', which does not exist.\n"
"Continuing under the assumption that you meant '%s'"
msgstr ""
-"警告:您运行一个不存在的 Git 命令 '%s'。继续执行假定您要要运行的\n"
+"警告:您运行一个不存在的 Git 命令 '%s'。继续执行假定您要运行的\n"
"是 '%s'"
#: help.c:393
@@ -2059,7 +2059,7 @@ msgid ""
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'"
msgstr ""
-"有歧义的参数 '%s':工作区中未知的版本或路径。\n"
+"有歧义的参数 '%s':未知的版本或路径不存在于工作区中。\n"
"使用 '--' 来分隔版本和路径,例如:\n"
"'git <command> [<revision>...] -- [<file>...]'"
@@ -2070,7 +2070,7 @@ msgid ""
"Use '--' to separate paths from revisions, like this:\n"
"'git <command> [<revision>...] -- [<file>...]'"
msgstr ""
-"有歧义的参数 '%s':两者均为版本和文件\n"
+"有歧义的参数 '%s':可同时是版本和文件\n"
"使用 '--' 来分隔版本和路径,例如:\n"
"'git <command> [<revision>...] -- [<file>...]'"
@@ -2107,7 +2107,7 @@ msgid ""
"Not a git repository (or any parent up to mount point %s)\n"
"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
msgstr ""
-"不是一个 git 仓库(或者任何向上递归到挂载点 %s)\n"
+"不是一个 git 仓库(或者向上递归至挂载点 %s 的任何祖先目录)\n"
"停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。"
#: setup.c:927
@@ -2121,7 +2121,7 @@ msgid ""
"Problem with core.sharedRepository filemode value (0%.3o).\n"
"The owner of files must always have read and write permissions."
msgstr ""
-"参数 core.sharedRepository 的文件权限值有错(0%.3o)。\n"
+"参数 core.sharedRepository 的文件权限值有错(0%.3o)。\n"
"文件属主必须始终拥有读写权限。"
#: sha1_file.c:1046
@@ -2260,7 +2260,7 @@ msgstr "传输:无效的深度选项 '%s'"
msgid ""
"The following submodule paths contain changes that can\n"
"not be found on any remote:\n"
-msgstr "如下的子模组路径的修改在任何远程源中都找不到:\n"
+msgstr "下列子模组路径所包含的修改在任何远程源中都找不到:\n"
#: transport.c:775
#, c-format
@@ -2286,7 +2286,7 @@ msgstr ""
"\n"
"\tgit push\n"
"\n"
-"来推送到远程源。\n"
+"以推送至远程。\n"
"\n"
#: transport.c:783
@@ -6815,7 +6815,7 @@ msgstr "[已拒绝]"
#: builtin/fetch.c:610
msgid "can't fetch in current branch"
-msgstr "不能获取到当前分支"
+msgstr "当前分支下不能执行获取操作"
#: builtin/fetch.c:619
msgid "[tag update]"
@@ -7922,12 +7922,12 @@ msgstr "重新初始化已存在的 Git 仓库于 %s%s\n"
#: builtin/init-db.c:407
#, c-format
msgid "Initialized empty shared Git repository in %s%s\n"
-msgstr "初始化空的共享 Git 仓库于 %s%s\n"
+msgstr "已初始化空的共享 Git 仓库于 %s%s\n"
#: builtin/init-db.c:408
#, c-format
msgid "Initialized empty Git repository in %s%s\n"
-msgstr "初始化空的 Git 仓库于 %s%s\n"
+msgstr "已初始化空的 Git 仓库于 %s%s\n"
#: builtin/init-db.c:455
msgid ""
@@ -8718,7 +8718,7 @@ msgstr "对于 %s 没有来自 %s 的远程跟踪分支"
#: builtin/merge.c:960
#, c-format
msgid "Bad value '%s' in environment '%s'"
-msgstr "环境 '%2$s' 坏的取值 '%1$s'"
+msgstr "环境 '%2$s' 中存在坏的取值 '%1$s'"
#: builtin/merge.c:1034
#, c-format
@@ -9378,7 +9378,7 @@ msgstr "不能混用 --commit、--abort 或 -s/--strategy"
#: builtin/notes.c:797
msgid "Must specify a notes ref to merge"
-msgstr "您必须指定一个注解引用来合并"
+msgstr "必须指定一个注解引用来合并"
#: builtin/notes.c:821
#, c-format
@@ -10091,7 +10091,7 @@ msgstr "server-specific"
#: builtin/push.c:546
msgid "option to transmit"
-msgstr "传输的选项"
+msgstr "传输选项"
#: builtin/push.c:560
msgid "--delete is incompatible with --all, --mirror and --tags"
@@ -11566,7 +11566,7 @@ msgstr "并发任务"
#: builtin/submodule--helper.c:840
msgid "whether the initial clone should follow the shallow recommendation"
-msgstr "是否初始克隆应该遵守推荐的浅克隆选项"
+msgstr "初始克隆是否应该遵守推荐的浅克隆选项"
#: builtin/submodule--helper.c:841
msgid "don't print cloning progress"
@@ -12422,17 +12422,17 @@ msgstr "坏的 bisect_write 参数:$state"
#: git-bisect.sh:262
#, sh-format
msgid "Bad rev input: $arg"
-msgstr "输入坏的版本:$arg"
+msgstr "坏的输入版本:$arg"
#: git-bisect.sh:281
#, sh-format
msgid "Bad rev input: $bisected_head"
-msgstr "输入坏的版本:$bisected_head"
+msgstr "坏的输入版本:$bisected_head"
#: git-bisect.sh:290
#, sh-format
msgid "Bad rev input: $rev"
-msgstr "输入坏的版本:$rev"
+msgstr "坏的输入版本:$rev"
#: git-bisect.sh:299
#, sh-format
@@ -12579,7 +12579,7 @@ msgstr "错误:您对下列文件的本地修改将被合并操作覆盖"
#: git-merge-octopus.sh:61
msgid "Automated merge did not work."
-msgstr "自动合并不工作"
+msgstr "自动合并未生效。"
#: git-merge-octopus.sh:62
msgid "Should not be doing an Octopus."
@@ -12607,7 +12607,7 @@ msgstr "尝试和 $pretty_name 的简单合并"
#: git-merge-octopus.sh:102
msgid "Simple merge did not work, trying automatic merge."
-msgstr "简单合并不行,尝试自动合并。"
+msgstr "简单合并未生效,尝试自动合并。"
#: git-rebase.sh:56
msgid ""
@@ -12881,7 +12881,7 @@ msgstr "索引的进度没有被恢复。"
#: git-stash.sh:551
msgid "The stash is kept in case you need it again."
-msgstr "进度保存以免您再需要。"
+msgstr "暂存被保留以备您再次需要。"
#: git-stash.sh:560
#, sh-format
@@ -13003,7 +13003,7 @@ msgid ""
"(use 'rm -rf' if you really want to remove it including all of its history)"
msgstr ""
"子模组工作区 '$displaypath' 包含一个 .git 目录\n"
-"(使用 'rm -rf' 命令如果您真的想删除它及其全部历史)"
+"(如果您真的想删除它及其全部历史,使用 'rm -rf' 命令)"
#: git-submodule.sh:447
#, sh-format
@@ -13047,7 +13047,7 @@ msgstr "无法在子模组路径 '$sm_path' 中获取"
msgid ""
"Unable to find current ${remote_name}/${branch} revision in submodule path "
"'$sm_path'"
-msgstr "无法在子模组路径 '$sm_path' 中找到当前 ${remote_name}/${branch} 版本"
+msgstr "无法在子模组路径 '$sm_path' 中找到当前版本 ${remote_name}/${branch}"
#: git-submodule.sh:645
#, sh-format
@@ -13181,7 +13181,7 @@ msgstr ""
" x, exec = 使用 shell 运行命令(此行剩余部分)\n"
" d, drop = 删除提交\n"
"\n"
-"这些行可以重新排序,从上至下地执行。\n"
+"这些行可以被重新排序;它们会被从上至下地执行。\n"
"\n"
#: git-rebase--interactive.sh:162
@@ -13194,7 +13194,7 @@ msgstr "\n不要删除任意一行。使用 'drop' 显式地删除一个提交
msgid ""
"\n"
"If you remove a line here THAT COMMIT WILL BE LOST.\n"
-msgstr "\n如果您在这里删除一行,这个提交将会丢失。\n"
+msgstr "\n如果您在这里删除一行,对应的提交将会丢失。\n"
#: git-rebase--interactive.sh:202
#, sh-format
@@ -13211,7 +13211,7 @@ msgstr ""
"\n"
"\tgit commit --amend $gpg_sign_opt_quoted\n"
"\n"
-"一旦您对变更满意,执行\n"
+"当您对变更感到满意,执行\n"
"\n"
"\tgit rebase --continue"
@@ -13262,12 +13262,12 @@ msgstr "不能拣选 $sha1"
#: git-rebase--interactive.sh:407
#, sh-format
msgid "This is the commit message #${n}:"
-msgstr "这是提交信息 #${n}:"
+msgstr "这是提交说明 #${n}:"
#: git-rebase--interactive.sh:412
#, sh-format
msgid "The commit message #${n} will be skipped:"
-msgstr "提交信息 #${n} 将被跳过:"
+msgstr "提交说明 #${n} 将被跳过:"
#: git-rebase--interactive.sh:423
#, sh-format
@@ -13316,7 +13316,7 @@ msgstr "停止在 $sha1_abbrev... $rest"
#: git-rebase--interactive.sh:579
#, sh-format
msgid "Cannot '$squash_style' without a previous commit"
-msgstr "不能在没有前一个提交的情况下 '$squash_style'"
+msgstr "没有父提交的情况下不能 '$squash_style'"
#: git-rebase--interactive.sh:621
#, sh-format
@@ -13370,7 +13370,7 @@ msgstr "要修改请使用命令 'git rebase --edit-todo'。"
#: git-rebase--interactive.sh:693
#, sh-format
msgid "Successfully rebased and updated $head_name."
-msgstr "成功变基并更新 $head_name."
+msgstr "成功变基并更新 $head_name。"
#: git-rebase--interactive.sh:740
msgid "Could not skip unnecessary pick commands"
@@ -13412,17 +13412,17 @@ msgid ""
"warnings.\n"
"The possible behaviours are: ignore, warn, error."
msgstr ""
-"为避免这条信息,使用 drop 指令显式地删除一个提交。\n"
+"为避免这条信息,使用 \"drop\" 指令显式地删除一个提交。\n"
"\n"
-"使用 'git config rebase.missingCommitsCheck' 来修改这个级别的警告。\n"
-"可以使用:ignore、warn、error。"
+"使用 'git config rebase.missingCommitsCheck' 来修改警告级别。\n"
+"可选值有:ignore、warn、error。"
#: git-rebase--interactive.sh:1027
#, sh-format
msgid ""
"Unrecognized setting $check_level for option rebase.missingCommitsCheck. "
"Ignoring."
-msgstr "选项 rebase.missingCommitsCheck 中无法识别的设置 $check_level。忽略。"
+msgstr "选项 rebase.missingCommitsCheck 的值 $check_level 无法被识别。已忽略。"
#: git-rebase--interactive.sh:1044
msgid "You can fix this with 'git rebase --edit-todo'."
@@ -13461,19 +13461,19 @@ msgstr ""
"\n"
" git commit $gpg_sign_opt_quoted\n"
"\n"
-"两种情况下,一旦执行完毕,继续执行:\n"
+"无论哪种情况,当您完成提交,继续执行:\n"
"\n"
" git rebase --continue\n"
#: git-rebase--interactive.sh:1091
msgid "Error trying to find the author identity to amend commit"
-msgstr "当在修补提交中查找作者信息时遇到错误"
+msgstr "在修补提交中查找作者信息时遇到错误"
#: git-rebase--interactive.sh:1096
msgid ""
"You have uncommitted changes in your working tree. Please commit them\n"
"first and then run 'git rebase --continue' again."
-msgstr "您的工作区中有未提交的变更。请先提交然后再运行 'git rebase --continue'。"
+msgstr "您的工作区中有未提交的变更。请先提交然后再次运行 'git rebase --continue'。"
#: git-rebase--interactive.sh:1101 git-rebase--interactive.sh:1105
msgid "Could not commit staged changes."
@@ -13488,7 +13488,7 @@ msgid ""
"\n"
msgstr ""
"\n"
-"您正在修改运行中的交互式变基的 todo 文件。编辑结束后继续变基,\n"
+"您正在修改运行中的交互式变基的 todo 文件。若要在编辑结束后继续变基,\n"
"请执行:\n"
" git rebase --continue\n"
"\n"
@@ -13549,7 +13549,7 @@ msgstr "用法:$dashless $USAGE"
#: git-sh-setup.sh:190
#, sh-format
msgid "Cannot chdir to $cdup, the toplevel of the working tree"
-msgstr "不能更换目录到 $cdup,工作区的顶级目录"
+msgstr "不能切换目录到 $cdup,工作区的顶级目录"
#: git-sh-setup.sh:199 git-sh-setup.sh:206
#, sh-format
diff --git a/submodule.c b/submodule.c
index 1b5cdfb7e7..e8258f061a 100644
--- a/submodule.c
+++ b/submodule.c
@@ -1160,4 +1160,5 @@ void prepare_submodule_repo_env(struct argv_array *out)
if (strcmp(*var, CONFIG_DATA_ENVIRONMENT))
argv_array_push(out, *var);
}
+ argv_array_push(out, "GIT_DIR=.git");
}
diff --git a/t/t1401-symbolic-ref.sh b/t/t1401-symbolic-ref.sh
index ca3fa406c3..eec3e90f9c 100755
--- a/t/t1401-symbolic-ref.sh
+++ b/t/t1401-symbolic-ref.sh
@@ -33,18 +33,25 @@ test_expect_success 'symbolic-ref refuses bare sha1' '
'
reset_to_sane
-test_expect_success 'symbolic-ref deletes HEAD' '
- git symbolic-ref -d HEAD &&
+test_expect_success 'HEAD cannot be removed' '
+ test_must_fail git symbolic-ref -d HEAD
+'
+
+reset_to_sane
+
+test_expect_success 'symbolic-ref can be deleted' '
+ git symbolic-ref NOTHEAD refs/heads/foo &&
+ git symbolic-ref -d NOTHEAD &&
test_path_is_file .git/refs/heads/foo &&
- test_path_is_missing .git/HEAD
+ test_path_is_missing .git/NOTHEAD
'
reset_to_sane
-test_expect_success 'symbolic-ref deletes dangling HEAD' '
- git symbolic-ref HEAD refs/heads/missing &&
- git symbolic-ref -d HEAD &&
+test_expect_success 'symbolic-ref can delete dangling symref' '
+ git symbolic-ref NOTHEAD refs/heads/missing &&
+ git symbolic-ref -d NOTHEAD &&
test_path_is_missing .git/refs/heads/missing &&
- test_path_is_missing .git/HEAD
+ test_path_is_missing .git/NOTHEAD
'
reset_to_sane
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index 954d0e43f5..f3b0a8d30a 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -485,4 +485,39 @@ test_expect_success 'fetching submodules respects parallel settings' '
)
'
+test_expect_success 'fetching submodule into a broken repository' '
+ # Prepare src and src/sub nested in it
+ git init src &&
+ (
+ cd src &&
+ git init sub &&
+ git -C sub commit --allow-empty -m "initial in sub" &&
+ git submodule add -- ./sub sub &&
+ git commit -m "initial in top"
+ ) &&
+
+ # Clone the old-fashoned way
+ git clone src dst &&
+ git -C dst clone ../src/sub sub &&
+
+ # Make sure that old-fashoned layout is still supported
+ git -C dst status &&
+
+ # "diff" would find no change
+ git -C dst diff --exit-code &&
+
+ # Recursive-fetch works fine
+ git -C dst fetch --recurse-submodules &&
+
+ # Break the receiving submodule
+ rm -f dst/sub/.git/HEAD &&
+
+ # NOTE: without the fix the following tests will recurse forever!
+ # They should terminate with an error.
+
+ test_must_fail git -C dst status &&
+ test_must_fail git -C dst diff &&
+ test_must_fail git -C dst fetch --recurse-submodules
+'
+
test_done
diff --git a/t/test-lib.sh b/t/test-lib.sh
index d731d66e36..eada492d88 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -687,9 +687,9 @@ test_done () {
test_results_dir="$TEST_OUTPUT_DIRECTORY/test-results"
mkdir -p "$test_results_dir"
base=${0##*/}
- test_results_path="$test_results_dir/${base%.sh}-$$.counts"
+ test_results_path="$test_results_dir/${base%.sh}.counts"
- cat >>"$test_results_path" <<-EOF
+ cat >"$test_results_path" <<-EOF
total $test_count
success $test_success
fixed $test_fixed