From: DongHun Kwak Date: Wed, 3 Mar 2021 06:15:55 +0000 (+0900) Subject: Imported Upstream version 2.10.1 X-Git-Tag: upstream/2.10.1^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5fcb68584ed20e8097c8c0c7495351741675f40f;p=platform%2Fupstream%2Fgit.git Imported Upstream version 2.10.1 --- diff --git a/.travis.yml b/.travis.yml index 477c3d2..37a1e1f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -78,7 +78,7 @@ before_install: FORMULA=$1 SHA=$(brew fetch --force $FORMULA 2>&1 | grep ^SHA256: | cut -d ' ' -f 2) sed -E -i.bak "s/sha256 \"[0-9a-f]{64}\"/sha256 \"$SHA\"/g" \ - /usr/local/Library/Taps/homebrew/homebrew-binary/$FORMULA.rb + "$(brew --repository homebrew/homebrew-binary)/$FORMULA.rb" } brew update --quiet brew tap homebrew/binary --quiet diff --git a/Documentation/RelNotes/2.10.1.txt b/Documentation/RelNotes/2.10.1.txt new file mode 100644 index 0000000..70462f7 --- /dev/null +++ b/Documentation/RelNotes/2.10.1.txt @@ -0,0 +1,131 @@ +Git v2.10.1 Release Notes +========================= + +Fixes since v2.10 +----------------- + + * Clarify various ways to specify the "revision ranges" in the + documentation. + + * "diff-highlight" script (in contrib/) learned to work better with + "git log -p --graph" output. + + * The test framework left the number of tests and success/failure + count in the t/test-results directory, keyed by the name of the + test script plus the process ID. The latter however turned out not + to serve any useful purpose. The process ID part of the filename + has been removed. + + * Having a submodule whose ".git" repository is somehow corrupt + caused a few commands that recurse into submodules loop forever. + + * "git symbolic-ref -d HEAD" happily removes the symbolic ref, but + the resulting repository becomes an invalid one. Teach the command + to forbid removal of HEAD. + + * A test spawned a short-lived background process, which sometimes + prevented the test directory from getting removed at the end of the + script on some platforms. + + * Update a few tests that used to use GIT_CURL_VERBOSE to use the + newer GIT_TRACE_CURL. + + * Update Japanese translation for "git-gui". + + * "git fetch http::/site/path" did not die correctly and segfaulted + instead. + + * "git commit-tree" stopped reading commit.gpgsign configuration + variable that was meant for Porcelain "git commit" in Git 2.9; we + forgot to update "git gui" to look at the configuration to match + this change. + + * "git log --cherry-pick" used to include merge commits as candidates + to be matched up with other commits, resulting a lot of wasted time. + The patch-id generation logic has been updated to ignore merges to + avoid the wastage. + + * The http transport (with curl-multi option, which is the default + these days) failed to remove curl-easy handle from a curlm session, + which led to unnecessary API failures. + + * "git diff -W" output needs to extend the context backward to + include the header line of the current function and also forward to + include the body of the entire current function up to the header + line of the next one. This process may have to merge to adjacent + hunks, but the code forgot to do so in some cases. + + * Performance tests done via "t/perf" did not use the same set of + build configuration if the user relied on autoconf generated + configuration. + + * "git format-patch --base=..." feature that was recently added + showed the base commit information after "-- " e-mail signature + line, which turned out to be inconvenient. The base information + has been moved above the signature line. + + * Even when "git pull --rebase=preserve" (and the underlying "git + rebase --preserve") can complete without creating any new commit + (i.e. fast-forwards), it still insisted on having a usable ident + information (read: user.email is set correctly), which was less + than nice. As the underlying commands used inside "git rebase" + would fail with a more meaningful error message and advice text + when the bogus ident matters, this extra check was removed. + + * "git gc --aggressive" used to limit the delta-chain length to 250, + which is way too deep for gaining additional space savings and is + detrimental for runtime performance. The limit has been reduced to + 50. + + * Documentation for individual configuration variables to control use + of color (like `color.grep`) said that their default value is + 'false', instead of saying their default is taken from `color.ui`. + When we updated the default value for color.ui from 'false' to + 'auto' quite a while ago, all of them broke. This has been + corrected. + + * A shell script example in check-ref-format documentation has been + fixed. + + * "git checkout " does not follow the usual disambiguation + rules when the can be both a rev and a path, to allow + checking out a branch 'foo' in a project that happens to have a + file 'foo' in the working tree without having to disambiguate. + This was poorly documented and the check was incorrect when the + command was run from a subdirectory. + + * Some codepaths in "git diff" used regexec(3) on a buffer that was + mmap(2)ed, which may not have a terminating NUL, leading to a read + beyond the end of the mapped region. This was fixed by introducing + a regexec_buf() helper that takes a pair with REG_STARTEND + extension. + + * The procedure to build Git on Mac OS X for Travis CI hardcoded the + internal directory structure we assumed HomeBrew uses, which was a + no-no. The procedure has been updated to ask HomeBrew things we + need to know to fix this. + + * When "git rebase -i" is given a broken instruction, it told the + user to fix it with "--edit-todo", but didn't say what the step + after that was (i.e. "--continue"). + + * "git add --chmod=+x" added recently lacked documentation, which has + been corrected. + + * "git add --chmod=+x " added recently only toggled the + executable bit for paths that are either new or modified. This has + been corrected to flip the executable bit for all paths that match + the given pathspec. + + * "git pack-objects --include-tag" was taught that when we know that + we are sending an object C, we want a tag B that directly points at + C but also a tag A that points at the tag B. We used to miss the + intermediate tag B in some cases. + + * Documentation around tools to import from CVS was fairly outdated. + + * In the codepath that comes up with the hostname to be used in an + e-mail when the user didn't tell us, we looked at ai_canonname + field in struct addrinfo without making sure it is not NULL first. + +Also contains minor documentation updates and code clean-ups. diff --git a/Documentation/RelNotes/2.9.4.txt b/Documentation/RelNotes/2.9.4.txt new file mode 100644 index 0000000..01e8642 --- /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 " used to give the same advice + message as that is issued when "git checkout " (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 500230c..08352de 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/config.txt b/Documentation/config.txt index 0bcb679..a077c64 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -953,7 +953,8 @@ color.branch:: A boolean to enable/disable color in the output of linkgit:git-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used - only when the output is to a terminal. Defaults to false. + only when the output is to a terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.branch.:: Use customized color for branch coloration. `` is one of @@ -968,7 +969,8 @@ color.diff:: linkgit:git-log[1], and linkgit:git-show[1] will use color for all patches. If it is set to `true` or `auto`, those commands will only use color when output is to the terminal. - Defaults to false. + If unset, then the value of `color.ui` is used (`auto` by + default). + This does not affect linkgit:git-format-patch[1] or the 'git-diff-{asterisk}' plumbing commands. Can be overridden on the @@ -991,7 +993,8 @@ color.decorate.:: color.grep:: When set to `always`, always highlight matches. When `false` (or `never`), never. When set to `true` or `auto`, use color only - when the output is written to the terminal. Defaults to `false`. + when the output is written to the terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.grep.:: Use customized color for grep colorization. `` specifies which @@ -1024,7 +1027,8 @@ color.interactive:: and displays (such as those used by "git-add --interactive" and "git-clean --interactive"). When false (or `never`), never. When set to `true` or `auto`, use colors only when the output is - to the terminal. Defaults to false. + to the terminal. If unset, then the value of `color.ui` is + used (`auto` by default). color.interactive.:: Use customized color for 'git add --interactive' and 'git clean @@ -1040,13 +1044,15 @@ color.showBranch:: A boolean to enable/disable color in the output of linkgit:git-show-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used - only when the output is to a terminal. Defaults to false. + only when the output is to a terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.status:: A boolean to enable/disable color in the output of linkgit:git-status[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used - only when the output is to a terminal. Defaults to false. + only when the output is to a terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.status.:: Use customized color for status colorization. `` is @@ -1366,7 +1372,7 @@ fsck.skipList:: gc.aggressiveDepth:: The depth parameter used in the delta compression algorithm used by 'git gc --aggressive'. This defaults - to 250. + to 50. gc.aggressiveWindow:: The window size parameter used in the delta compression diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 6a96a66..7ed63dc 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -11,7 +11,7 @@ SYNOPSIS 'git add' [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] - [--] [...] + [--chmod=(+|-)x] [--] [...] DESCRIPTION ----------- @@ -165,6 +165,11 @@ for "git add --no-all ...", i.e. ignored removed files. be ignored, no matter if they are already present in the work tree or not. +--chmod=(+|-)x:: + Override the executable bit of the added files. The executable + bit is only changed in the index, the files on disk are left + unchanged. + \--:: This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt index 91a3622..8611a99 100644 --- a/Documentation/git-check-ref-format.txt +++ b/Documentation/git-check-ref-format.txt @@ -118,8 +118,8 @@ $ git check-ref-format --branch @{-1} * Determine the reference name to use for a new branch: + ------------ -$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch") || -die "we do not like '$newbranch' as a branch name." +$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")|| +{ echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; } ------------ GIT diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt index 7a2201b..8e2c066 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -419,6 +419,18 @@ $ git reflog -2 HEAD # or $ git log -g -2 HEAD ------------ +ARGUMENT DISAMBIGUATION +----------------------- + +When there is only one argument given and it is not `--` (e.g. "git +checkout abc"), and when the argument is both a valid `` +(e.g. a branch "abc" exists) and a valid `` (e.g. a file +or a directory whose name is "abc" exists), Git would usually ask +you to disambiguate. Because checking out a branch is so common an +operation, however, "git checkout abc" takes "abc" as a `` +in such a situation. Use `git checkout -- ` if you want +to checkout these paths out of the index. + EXAMPLES -------- diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt index 41207a2..de1ebed 100644 --- a/Documentation/git-cvsimport.txt +++ b/Documentation/git-cvsimport.txt @@ -22,7 +22,7 @@ DESCRIPTION deprecated; it does not work with cvsps version 3 and later. If you are performing a one-shot import of a CVS repository consider using http://cvs2svn.tigris.org/cvs2git.html[cvs2git] or -https://github.com/BartMassey/parsecvs[parsecvs]. +http://www.catb.org/esr/cvs-fast-export/[cvs-fast-export]. Imports a CVS repository into Git. It will either create a new repository, or incrementally import into an existing one. diff --git a/Documentation/git.txt b/Documentation/git.txt index 7913fc2..b8bec71 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -43,9 +43,10 @@ unreleased) version of Git, that is available from the 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v2.10.0/git.html[documentation for release 2.10] +* link:v2.10.1/git.html[documentation for release 2.10.1] * release notes for + link:RelNotes/2.10.1.txt[2.10.1], link:RelNotes/2.10.0.txt[2.10]. * link:v2.9.3/git.html[documentation for release 2.9.3] diff --git a/Documentation/gitcvs-migration.txt b/Documentation/gitcvs-migration.txt index b06e852..4c6143c 100644 --- a/Documentation/gitcvs-migration.txt +++ b/Documentation/gitcvs-migration.txt @@ -116,8 +116,12 @@ they create are writable and searchable by other group members. Importing a CVS archive ----------------------- +NOTE: These instructions use the `git-cvsimport` script which ships with +git, but other importers may provide better results. See the note in +linkgit:git-cvsimport[1] for other options. + First, install version 2.1 or higher of cvsps from -http://www.cobite.com/cvsps/[http://www.cobite.com/cvsps/] and make +https://github.com/andreyvit/cvsps[https://github.com/andreyvit/cvsps] and make sure it is in your path. Then cd to a checked out CVS working directory of the project you are interested in and run linkgit:git-cvsimport[1]: diff --git a/Documentation/gitk.txt b/Documentation/gitk.txt index a68d860..e382dd9 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 e903eb7..27dec5b 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 b95d67e..a942d57 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 a779c9d..7e462d3 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 abae363..4bed5b1 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}' (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 {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 '{caret}' 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 +---------------------- '':: - Include commits that are reachable from (i.e. ancestors of) - . + Include commits that are reachable from (i.e. and its + ancestors). '{caret}':: - Exclude commits that are reachable from (i.e. ancestors of) - . + Exclude commits that are reachable from (i.e. and its + ancestors). '..':: Include commits that are reachable from but exclude @@ -300,16 +326,27 @@ To summarize: as giving commit '' 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/GIT-VERSION-GEN b/GIT-VERSION-GEN index 6754ab0..7d5c477 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.10.0 +DEF_VER=v2.10.1 LF=' ' diff --git a/Makefile b/Makefile index d96ecb7..7a36af8 100644 --- a/Makefile +++ b/Makefile @@ -296,7 +296,13 @@ all:: # Define USE_NED_ALLOCATOR if you want to replace the platforms default # memory allocators with the nedmalloc allocator written by Niall Douglas. # -# Define NO_REGEX if you have no or inferior regex support in your C library. +# Define OVERRIDE_STRDUP to override the libc version of strdup(3). +# This is necessary when using a custom allocator in order to avoid +# crashes due to allocation and free working on different 'heaps'. +# It's defined automatically if USE_NED_ALLOCATOR is set. +# +# Define NO_REGEX if your C library lacks regex support with REG_STARTEND +# feature. # # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the # user. @@ -1456,8 +1462,14 @@ ifdef NATIVE_CRLF endif ifdef USE_NED_ALLOCATOR - COMPAT_CFLAGS += -Icompat/nedmalloc - COMPAT_OBJS += compat/nedmalloc/nedmalloc.o + COMPAT_CFLAGS += -Icompat/nedmalloc + COMPAT_OBJS += compat/nedmalloc/nedmalloc.o + OVERRIDE_STRDUP = YesPlease +endif + +ifdef OVERRIDE_STRDUP + COMPAT_CFLAGS += -DOVERRIDE_STRDUP + COMPAT_OBJS += compat/strdup.o endif ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT @@ -2029,7 +2041,7 @@ endif ifdef USE_NED_ALLOCATOR compat/nedmalloc/nedmalloc.sp compat/nedmalloc/nedmalloc.o: EXTRA_CPPFLAGS = \ - -DNDEBUG -DOVERRIDE_STRDUP -DREPLACE_SYSTEM_ALLOCATOR + -DNDEBUG -DREPLACE_SYSTEM_ALLOCATOR compat/nedmalloc/nedmalloc.sp: SPARSE_FLAGS += -Wno-non-pointer-null endif diff --git a/RelNotes b/RelNotes index 62615ff..bf857e5 120000 --- a/RelNotes +++ b/RelNotes @@ -1 +1 @@ -Documentation/RelNotes/2.10.0.txt \ No newline at end of file +Documentation/RelNotes/2.10.1.txt \ No newline at end of file diff --git a/builtin/add.c b/builtin/add.c index b1dddb4..e8fb80b 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -26,10 +26,25 @@ static int patch_interactive, add_interactive, edit_interactive; static int take_worktree_changes; struct update_callback_data { - int flags, force_mode; + int flags; int add_errors; }; +static void chmod_pathspec(struct pathspec *pathspec, int force_mode) +{ + int i; + + for (i = 0; i < active_nr; i++) { + struct cache_entry *ce = active_cache[i]; + + if (pathspec && !ce_path_match(ce, pathspec, NULL)) + continue; + + if (chmod_cache_entry(ce, force_mode) < 0) + fprintf(stderr, "cannot chmod '%s'", ce->name); + } +} + static int fix_unmerged_status(struct diff_filepair *p, struct update_callback_data *data) { @@ -65,8 +80,7 @@ static void update_callback(struct diff_queue_struct *q, die(_("unexpected diff status %c"), p->status); case DIFF_STATUS_MODIFIED: case DIFF_STATUS_TYPE_CHANGED: - if (add_file_to_index(&the_index, path, - data->flags, data->force_mode)) { + if (add_file_to_index(&the_index, path, data->flags)) { if (!(data->flags & ADD_CACHE_IGNORE_ERRORS)) die(_("updating files failed")); data->add_errors++; @@ -84,15 +98,14 @@ static void update_callback(struct diff_queue_struct *q, } } -int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, - int flags, int force_mode) +int add_files_to_cache(const char *prefix, + const struct pathspec *pathspec, int flags) { struct update_callback_data data; struct rev_info rev; memset(&data, 0, sizeof(data)); data.flags = flags; - data.force_mode = force_mode; init_revisions(&rev, prefix); setup_revisions(0, NULL, &rev, NULL); @@ -281,7 +294,7 @@ static int add_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } -static int add_files(struct dir_struct *dir, int flags, int force_mode) +static int add_files(struct dir_struct *dir, int flags) { int i, exit_status = 0; @@ -294,8 +307,7 @@ static int add_files(struct dir_struct *dir, int flags, int force_mode) } for (i = 0; i < dir->nr; i++) - if (add_file_to_index(&the_index, dir->entries[i]->name, - flags, force_mode)) { + if (add_file_to_index(&the_index, dir->entries[i]->name, flags)) { if (!ignore_add_errors) die(_("adding files failed")); exit_status = 1; @@ -308,7 +320,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) int exit_status = 0; struct pathspec pathspec; struct dir_struct dir; - int flags, force_mode; + int flags; int add_new_files; int require_pathspec; char *seen = NULL; @@ -342,13 +354,8 @@ int cmd_add(int argc, const char **argv, const char *prefix) if (!show_only && ignore_missing) die(_("Option --ignore-missing can only be used together with --dry-run")); - if (!chmod_arg) - force_mode = 0; - else if (!strcmp(chmod_arg, "-x")) - force_mode = 0666; - else if (!strcmp(chmod_arg, "+x")) - force_mode = 0777; - else + if (chmod_arg && ((chmod_arg[0] != '-' && chmod_arg[0] != '+') || + chmod_arg[1] != 'x' || chmod_arg[2])) die(_("--chmod param '%s' must be either -x or +x"), chmod_arg); add_new_files = !take_worktree_changes && !refresh_only; @@ -441,11 +448,13 @@ int cmd_add(int argc, const char **argv, const char *prefix) plug_bulk_checkin(); - exit_status |= add_files_to_cache(prefix, &pathspec, flags, force_mode); + exit_status |= add_files_to_cache(prefix, &pathspec, flags); if (add_new_files) - exit_status |= add_files(&dir, flags, force_mode); + exit_status |= add_files(&dir, flags); + if (chmod_arg && pathspec.nr) + chmod_pathspec(&pathspec, chmod_arg[0]); unplug_bulk_checkin(); finish: diff --git a/builtin/am.c b/builtin/am.c index 739b34d..9e2ae5c 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -2222,7 +2222,7 @@ int cmd_am(int argc, const char **argv, const char *prefix) int in_progress; const char * const usage[] = { - N_("git am [] [(|)...]"), + N_("git am [] [( | )...]"), N_("git am [] (--continue | --skip | --abort)"), NULL }; diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 2dfe626..560f6c2 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -440,7 +440,7 @@ static int batch_objects(struct batch_options *opt) } static const char * const cat_file_usage[] = { - N_("git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p||--textconv) "), + N_("git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -p | | --textconv) "), N_("git cat-file (--batch | --batch-check) [--follow-symlinks]"), NULL }; diff --git a/builtin/checkout.c b/builtin/checkout.c index 8672d07..32cf317 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -154,8 +154,8 @@ static int check_stages(unsigned stages, const struct cache_entry *ce, int pos) return 0; } -static int checkout_stage(int stage, struct cache_entry *ce, int pos, - struct checkout *state) +static int checkout_stage(int stage, const struct cache_entry *ce, int pos, + const struct checkout *state) { while (pos < active_nr && !strcmp(active_cache[pos]->name, ce->name)) { @@ -169,7 +169,7 @@ static int checkout_stage(int stage, struct cache_entry *ce, int pos, return error(_("path '%s' does not have their version"), ce->name); } -static int checkout_merged(int pos, struct checkout *state) +static int checkout_merged(int pos, const struct checkout *state) { struct cache_entry *ce = active_cache[pos]; const char *path = ce->name; @@ -548,7 +548,7 @@ static int merge_working_tree(const struct checkout_opts *opts, * entries in the index. */ - add_files_to_cache(NULL, NULL, 0, 0); + add_files_to_cache(NULL, NULL, 0); /* * NEEDSWORK: carrying over local changes * when branches have different end-of-line @@ -985,7 +985,7 @@ static int parse_branchname_arg(int argc, const char **argv, int recover_with_dwim = dwim_new_local_branch_ok; if (!has_dash_dash && - (check_filename(NULL, arg) || !no_wildcard(arg))) + (check_filename(opts->prefix, arg) || !no_wildcard(arg))) recover_with_dwim = 0; /* * Accept "git checkout foo" and "git checkout foo --" @@ -1038,7 +1038,7 @@ static int parse_branchname_arg(int argc, const char **argv, if (!*source_tree) /* case (1): want a tree */ die(_("reference is not a tree: %s"), arg); - if (!has_dash_dash) {/* case (3).(d) -> (1) */ + if (!has_dash_dash) { /* case (3).(d) -> (1) */ /* * Do not complain the most common case * git checkout branch @@ -1046,7 +1046,7 @@ static int parse_branchname_arg(int argc, const char **argv, * it would be extremely annoying. */ if (argc) - verify_non_filename(NULL, arg); + verify_non_filename(opts->prefix, arg); } else { argcount++; argv++; diff --git a/builtin/commit.c b/builtin/commit.c index 77e3dc8..7a1ade0 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -387,7 +387,7 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix */ if (all || (also && pathspec.nr)) { hold_locked_index(&index_lock, 1); - add_files_to_cache(also ? prefix : NULL, &pathspec, 0, 0); + add_files_to_cache(also ? prefix : NULL, &pathspec, 0); refresh_cache_or_die(refresh_flags); update_main_cache_tree(WRITE_TREE_SILENT); if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK)) diff --git a/builtin/gc.c b/builtin/gc.c index 332bcf7..069950d 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -28,7 +28,7 @@ static const char * const builtin_gc_usage[] = { static int pack_refs = 1; static int prune_reflogs = 1; -static int aggressive_depth = 250; +static int aggressive_depth = 50; static int aggressive_window = 250; static int gc_auto_threshold = 6700; static int gc_auto_pack_limit = 50; diff --git a/builtin/log.c b/builtin/log.c index 92dc34d..cd9c4a4 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1042,7 +1042,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout, diff_flush(&opts); fprintf(rev->diffopt.file, "\n"); - print_signature(rev->diffopt.file); } static const char *clean_message_id(const char *msg_id) @@ -1361,7 +1360,7 @@ static void print_bases(struct base_tree_info *bases, FILE *file) return; /* Show the base commit */ - fprintf(file, "base-commit: %s\n", oid_to_hex(&bases->base_commit)); + fprintf(file, "\nbase-commit: %s\n", oid_to_hex(&bases->base_commit)); /* Show the prerequisite patches */ for (i = bases->nr_patch_id - 1; i >= 0; i--) @@ -1720,6 +1719,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) make_cover_letter(&rev, use_stdout, origin, nr, list, branch_name, quiet); print_bases(&bases, rev.diffopt.file); + print_signature(rev.diffopt.file); total++; start_number--; } @@ -1779,13 +1779,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) if (!use_stdout) rev.shown_one = 0; if (shown) { + print_bases(&bases, rev.diffopt.file); if (rev.mime_boundary) fprintf(rev.diffopt.file, "\n--%s%s--\n\n\n", mime_boundary_leader, rev.mime_boundary); else print_signature(rev.diffopt.file); - print_bases(&bases, rev.diffopt.file); } if (!use_stdout) fclose(rev.diffopt.file); diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 4a63398..0954375 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2123,6 +2123,35 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size, #define ll_find_deltas(l, s, w, d, p) find_deltas(l, &s, w, d, p) #endif +static void add_tag_chain(const struct object_id *oid) +{ + struct tag *tag; + + /* + * We catch duplicates already in add_object_entry(), but we'd + * prefer to do this extra check to avoid having to parse the + * tag at all if we already know that it's being packed (e.g., if + * it was included via bitmaps, we would not have parsed it + * previously). + */ + if (packlist_find(&to_pack, oid->hash, NULL)) + return; + + tag = lookup_tag(oid->hash); + while (1) { + if (!tag || parse_tag(tag) || !tag->tagged) + die("unable to pack objects reachable from tag %s", + oid_to_hex(oid)); + + add_object_entry(tag->object.oid.hash, OBJ_TAG, NULL, 0); + + if (tag->tagged->type != OBJ_TAG) + return; + + tag = (struct tag *)tag->tagged; + } +} + static int add_ref_tag(const char *path, const struct object_id *oid, int flag, void *cb_data) { struct object_id peeled; @@ -2130,7 +2159,7 @@ static int add_ref_tag(const char *path, const struct object_id *oid, int flag, if (starts_with(path, "refs/tags/") && /* is a tag? */ !peel_ref(path, peeled.hash) && /* peelable? */ packlist_find(&to_pack, peeled.hash, NULL)) /* object packed? */ - add_object_entry(oid->hash, OBJ_TAG, NULL, 0); + add_tag_chain(oid); return 0; } diff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c index 9c29a64..96eed94 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/builtin/update-index.c b/builtin/update-index.c index ba04b19..9e9e040 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -419,30 +419,18 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1, return 0; } -static void chmod_path(int flip, const char *path) +static void chmod_path(char flip, const char *path) { int pos; struct cache_entry *ce; - unsigned int mode; pos = cache_name_pos(path, strlen(path)); if (pos < 0) goto fail; ce = active_cache[pos]; - mode = ce->ce_mode; - if (!S_ISREG(mode)) - goto fail; - switch (flip) { - case '+': - ce->ce_mode |= 0111; break; - case '-': - ce->ce_mode &= ~0111; break; - default: + if (chmod_cache_entry(ce, flip) < 0) goto fail; - } - cache_tree_invalidate_path(&the_index, path); - ce->ce_flags |= CE_UPDATE_IN_BASE; - active_cache_changed |= CE_ENTRY_CHANGED; + report("chmod %cx '%s'", flip, path); return; fail: diff --git a/cache.h b/cache.h index b780a91..4cba08e 100644 --- a/cache.h +++ b/cache.h @@ -367,8 +367,9 @@ extern void free_name_hash(struct index_state *istate); #define rename_cache_entry_at(pos, new_name) rename_index_entry_at(&the_index, (pos), (new_name)) #define remove_cache_entry_at(pos) remove_index_entry_at(&the_index, (pos)) #define remove_file_from_cache(path) remove_file_from_index(&the_index, (path)) -#define add_to_cache(path, st, flags) add_to_index(&the_index, (path), (st), (flags), 0) -#define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags), 0) +#define add_to_cache(path, st, flags) add_to_index(&the_index, (path), (st), (flags)) +#define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags)) +#define chmod_cache_entry(ce, flip) chmod_index_entry(&the_index, (ce), (flip)) #define refresh_cache(flags) refresh_index(&the_index, (flags), NULL, NULL, NULL) #define ce_match_stat(ce, st, options) ie_match_stat(&the_index, (ce), (st), (options)) #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options)) @@ -581,9 +582,10 @@ extern int remove_file_from_index(struct index_state *, const char *path); #define ADD_CACHE_IGNORE_ERRORS 4 #define ADD_CACHE_IGNORE_REMOVAL 8 #define ADD_CACHE_INTENT 16 -extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags, int force_mode); -extern int add_file_to_index(struct index_state *, const char *path, int flags, int force_mode); +extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags); +extern int add_file_to_index(struct index_state *, const char *path, int flags); extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, unsigned int refresh_options); +extern int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip); extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b); extern void set_object_name_for_intent_to_add_entry(struct cache_entry *ce); extern int index_name_is_other(const struct index_state *, const char *, int); @@ -1139,6 +1141,16 @@ static inline unsigned int hexval(unsigned char c) return hexval_table[c]; } +/* + * Convert two consecutive hexadecimal digits into a char. Return a + * negative value on error. Don't run over the end of short strings. + */ +static inline int hex2chr(const char *s) +{ + int val = hexval(s[0]); + return (val < 0) ? val : (val << 4) | hexval(s[1]); +} + /* Convert to/from hex/sha1 representation */ #define MINIMUM_ABBREV minimum_abbrev #define DEFAULT_ABBREV default_abbrev @@ -1818,7 +1830,7 @@ void packet_trace_identity(const char *prog); * return 0 if success, 1 - if addition of a file failed and * ADD_FILES_IGNORE_ERRORS was specified in flags */ -int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags, int force_mode); +int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags); /* diff.c */ extern int diff_auto_refresh_index; diff --git a/color.c b/color.c index 81c2676..1b95e6b 100644 --- a/color.c +++ b/color.c @@ -215,7 +215,7 @@ int color_parse_mem(const char *value, int value_len, char *dst) /* [fg [bg]] [attr]... */ while (len > 0) { const char *word = ptr; - struct color c; + struct color c = { COLOR_UNSPECIFIED }; int val, wordlen = 0; while (len > 0 && !isspace(word[wordlen])) { diff --git a/compat/nedmalloc/nedmalloc.c b/compat/nedmalloc/nedmalloc.c index 2d4ef59..1cc31c3 100644 --- a/compat/nedmalloc/nedmalloc.c +++ b/compat/nedmalloc/nedmalloc.c @@ -948,22 +948,6 @@ void **nedpindependent_comalloc(nedpool *p, size_t elems, size_t *sizes, void ** return ret; } -#ifdef OVERRIDE_STRDUP -/* - * This implementation is purely there to override the libc version, to - * avoid a crash due to allocation and free on different 'heaps'. - */ -char *strdup(const char *s1) -{ - size_t len = strlen(s1) + 1; - char *s2 = malloc(len); - - if (s2) - memcpy(s2, s1, len); - return s2; -} -#endif - #if defined(__cplusplus) } #endif diff --git a/compat/strdup.c b/compat/strdup.c new file mode 100644 index 0000000..f3fb978 --- /dev/null +++ b/compat/strdup.c @@ -0,0 +1,11 @@ +#include "../git-compat-util.h" + +char *gitstrdup(const char *s1) +{ + size_t len = strlen(s1) + 1; + char *s2 = malloc(len); + + if (s2) + memcpy(s2, s1, len); + return s2; +} diff --git a/contrib/diff-highlight/Makefile b/contrib/diff-highlight/Makefile new file mode 100644 index 0000000..9018724 --- /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 ffefc31..81bd804 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 0000000..7dcbb23 --- /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 0000000..5ff5275 --- /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 0000000..3b43dbe --- /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.act && + "$DIFF_HIGHLIGHT" 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 && + test_cmp expect actual +' + +test_done diff --git a/diff.c b/diff.c index 534c12e..7a43093 100644 --- a/diff.c +++ b/diff.c @@ -354,7 +354,6 @@ struct emit_callback { const char **label_path; struct diff_words_data *diff_words; struct diff_options *opt; - int *found_changesp; struct strbuf *header; }; @@ -722,7 +721,6 @@ static void emit_rewrite_diff(const char *name_a, memset(&ecbdata, 0, sizeof(ecbdata)); ecbdata.color_diff = want_color(o->use_color); - ecbdata.found_changesp = &o->found_changes; ecbdata.ws_rule = whitespace_rule(name_b); ecbdata.opt = o; if (ecbdata.ws_rule & WS_BLANK_AT_EOF) { @@ -951,7 +949,8 @@ static int find_word_boundaries(mmfile_t *buffer, regex_t *word_regex, { if (word_regex && *begin < buffer->size) { regmatch_t match[1]; - if (!regexec(word_regex, buffer->ptr + *begin, 1, match, 0)) { + if (!regexec_buf(word_regex, buffer->ptr + *begin, + buffer->size - *begin, 1, match, 0)) { char *p = memchr(buffer->ptr + *begin + match[0].rm_so, '\n', match[0].rm_eo - match[0].rm_so); *end = p ? p - buffer->ptr : match[0].rm_eo + *begin; @@ -1216,12 +1215,13 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) struct diff_options *o = ecbdata->opt; const char *line_prefix = diff_line_prefix(o); + o->found_changes = 1; + if (ecbdata->header) { - fprintf(ecbdata->opt->file, "%s", ecbdata->header->buf); + fprintf(o->file, "%s", ecbdata->header->buf); strbuf_reset(ecbdata->header); ecbdata->header = NULL; } - *(ecbdata->found_changesp) = 1; if (ecbdata->label_path[0]) { const char *name_a_tab, *name_b_tab; @@ -1229,9 +1229,9 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) name_a_tab = strchr(ecbdata->label_path[0], ' ') ? "\t" : ""; name_b_tab = strchr(ecbdata->label_path[1], ' ') ? "\t" : ""; - fprintf(ecbdata->opt->file, "%s%s--- %s%s%s\n", + fprintf(o->file, "%s%s--- %s%s%s\n", line_prefix, meta, ecbdata->label_path[0], reset, name_a_tab); - fprintf(ecbdata->opt->file, "%s%s+++ %s%s%s\n", + fprintf(o->file, "%s%s+++ %s%s%s\n", line_prefix, meta, ecbdata->label_path[1], reset, name_b_tab); ecbdata->label_path[0] = ecbdata->label_path[1] = NULL; } @@ -1249,15 +1249,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) find_lno(line, ecbdata); emit_hunk_header(ecbdata, line, len); if (line[len-1] != '\n') - putc('\n', ecbdata->opt->file); - return; - } - - if (len < 1) { - emit_line(ecbdata->opt, reset, reset, line, len); - if (ecbdata->diff_words - && ecbdata->diff_words->type == DIFF_WORDS_PORCELAIN) - fputs("~\n", ecbdata->opt->file); + putc('\n', o->file); return; } @@ -1282,8 +1274,8 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) } diff_words_flush(ecbdata); if (ecbdata->diff_words->type == DIFF_WORDS_PORCELAIN) { - emit_line(ecbdata->opt, context, reset, line, len); - fputs("~\n", ecbdata->opt->file); + emit_line(o, context, reset, line, len); + fputs("~\n", o->file); } else { /* * Skip the prefix character, if any. With @@ -1294,7 +1286,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) line++; len--; } - emit_line(ecbdata->opt, context, reset, line, len); + emit_line(o, context, reset, line, len); } return; } @@ -1316,8 +1308,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len) default: /* incomplete line at the end */ ecbdata->lno_in_preimage++; - emit_line(ecbdata->opt, - diff_get_color(ecbdata->color_diff, DIFF_CONTEXT), + emit_line(o, diff_get_color(ecbdata->color_diff, DIFF_CONTEXT), reset, line, len); break; } @@ -2438,7 +2429,6 @@ static void builtin_diff(const char *name_a, memset(&ecbdata, 0, sizeof(ecbdata)); ecbdata.label_path = lbl; ecbdata.color_diff = want_color(o->use_color); - ecbdata.found_changesp = &o->found_changes; ecbdata.ws_rule = whitespace_rule(name_b); if (ecbdata.ws_rule & WS_BLANK_AT_EOF) check_blank_at_eof(&mf1, &mf2, &ecbdata); diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index 55067ca..9795ca1 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -23,7 +23,6 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len) { struct diffgrep_cb *data = priv; regmatch_t regmatch; - int hold; if (line[0] != '+' && line[0] != '-') return; @@ -33,11 +32,8 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len) * caller early. */ return; - /* Yuck -- line ought to be "const char *"! */ - hold = line[len]; - line[len] = '\0'; - data->hit = !regexec(data->regexp, line + 1, 1, ®match, 0); - line[len] = hold; + data->hit = !regexec_buf(data->regexp, line + 1, len - 1, 1, + ®match, 0); } static int diff_grep(mmfile_t *one, mmfile_t *two, @@ -50,9 +46,11 @@ static int diff_grep(mmfile_t *one, mmfile_t *two, xdemitconf_t xecfg; if (!one) - return !regexec(regexp, two->ptr, 1, ®match, 0); + return !regexec_buf(regexp, two->ptr, two->size, + 1, ®match, 0); if (!two) - return !regexec(regexp, one->ptr, 1, ®match, 0); + return !regexec_buf(regexp, one->ptr, one->size, + 1, ®match, 0); /* * We have both sides; need to run textual diff and see if @@ -83,8 +81,8 @@ static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws) regmatch_t regmatch; int flags = 0; - assert(data[sz] == '\0'); - while (*data && !regexec(regexp, data, 1, ®match, flags)) { + while (*data && + !regexec_buf(regexp, data, sz, 1, ®match, flags)) { flags |= REG_NOTBOL; data += regmatch.rm_eo; if (*data && regmatch.rm_so == regmatch.rm_eo) diff --git a/git-compat-util.h b/git-compat-util.h index db89ba7..2c94998 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -436,6 +436,7 @@ static inline int const_error(void) return -1; } #define error(...) (error(__VA_ARGS__), const_error()) +#define error_errno(...) (error_errno(__VA_ARGS__), const_error()) #endif extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params)); @@ -663,6 +664,14 @@ void *gitmemmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen); #endif +#ifdef OVERRIDE_STRDUP +#ifdef strdup +#undef strdup +#endif +#define strdup gitstrdup +char *gitstrdup(const char *s); +#endif + #ifdef NO_GETPAGESIZE #define getpagesize() sysconf(_SC_PAGESIZE) #endif @@ -965,6 +974,19 @@ void git_qsort(void *base, size_t nmemb, size_t size, #define qsort git_qsort #endif +#ifndef REG_STARTEND +#error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd" +#endif + +static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size, + size_t nmatch, regmatch_t pmatch[], int eflags) +{ + assert(nmatch > 0 && pmatch); + pmatch[0].rm_so = 0; + pmatch[0].rm_eo = size; + return regexec(preg, buf, nmatch, pmatch, eflags | REG_STARTEND); +} + #ifndef DIR_HAS_BSD_GROUP_SEMANTICS # define FORCE_DIR_SET_GID S_ISGID #else diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl index 864b687..01d2cc2 100644 --- a/git-gui/lib/commit.tcl +++ b/git-gui/lib/commit.tcl @@ -369,6 +369,9 @@ A rescan will be automatically started now. # -- Create the commit. # set cmd [list commit-tree $tree_id] + if {[is_config_true commit.gpgsign]} { + lappend cmd -S + } foreach p [concat $PARENT $MERGE_HEAD] { lappend cmd -p $p } diff --git a/git-gui/po/ja.po b/git-gui/po/ja.po index 9aff249..208651c 100644 --- a/git-gui/po/ja.po +++ b/git-gui/po/ja.po @@ -1,47 +1,50 @@ # Translation of git-gui to Japanese # Copyright (C) 2007 Shawn Pearce # This file is distributed under the same license as the git-gui package. +# # しらいし ななこ , 2007. +# Satoshi Yasushima , 2016. # msgid "" msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-26 15:47-0800\n" -"PO-Revision-Date: 2010-02-02 19:03+0900\n" -"Last-Translator: しらいし ななこ \n" +"POT-Creation-Date: 2016-05-27 17:52+0900\n" +"PO-Revision-Date: 2016-06-22 12:50+0900\n" +"Last-Translator: Satoshi Yasushima \n" "Language-Team: Japanese\n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: git-gui.sh:41 git-gui.sh:793 git-gui.sh:807 git-gui.sh:820 git-gui.sh:903 -#: git-gui.sh:922 -msgid "git-gui: fatal error" -msgstr "git-gui: 致命的なエラー" - -#: git-gui.sh:743 +#: git-gui.sh:861 #, tcl-format msgid "Invalid font specified in %s:" msgstr "%s に無効なフォントが指定されています:" -#: git-gui.sh:779 +#: git-gui.sh:915 msgid "Main Font" msgstr "主フォント" -#: git-gui.sh:780 +#: git-gui.sh:916 msgid "Diff/Console Font" msgstr "diff/コンソール・フォント" -#: git-gui.sh:794 +#: git-gui.sh:931 git-gui.sh:945 git-gui.sh:958 git-gui.sh:1048 git-gui.sh:1067 +#: git-gui.sh:3125 +msgid "git-gui: fatal error" +msgstr "git-gui: 致命的なエラー" + +#: git-gui.sh:932 msgid "Cannot find git in PATH." msgstr "PATH 中に git が見つかりません" -#: git-gui.sh:821 +#: git-gui.sh:959 msgid "Cannot parse Git version string:" msgstr "Git バージョン名が理解できません:" -#: git-gui.sh:839 +#: git-gui.sh:984 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -60,475 +63,502 @@ msgstr "" "\n" "'%s' はバージョン 1.5.0 と思って良いですか?\n" -#: git-gui.sh:1128 +#: git-gui.sh:1281 msgid "Git directory not found:" msgstr "Git ディレクトリが見つかりません:" -#: git-gui.sh:1146 +#: git-gui.sh:1315 msgid "Cannot move to top of working directory:" msgstr "作業ディレクトリの最上位に移動できません" -#: git-gui.sh:1154 +#: git-gui.sh:1323 msgid "Cannot use bare repository:" msgstr "裸のリポジトリは使えません:" -#: git-gui.sh:1162 +#: git-gui.sh:1331 msgid "No working directory" msgstr "作業ディレクトリがありません" -#: git-gui.sh:1334 lib/checkout_op.tcl:306 +#: git-gui.sh:1503 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "ファイル状態を更新しています…" -#: git-gui.sh:1390 +#: git-gui.sh:1563 msgid "Scanning for modified files ..." msgstr "変更されたファイルをスキャンしています…" -#: git-gui.sh:1454 +#: git-gui.sh:1639 msgid "Calling prepare-commit-msg hook..." msgstr "prepare-commit-msg フックを実行中・・・" -#: git-gui.sh:1471 +#: git-gui.sh:1656 msgid "Commit declined by prepare-commit-msg hook." msgstr "prepare-commit-msg フックがコミットを拒否しました" -#: git-gui.sh:1629 lib/browser.tcl:246 +#: git-gui.sh:1814 lib/browser.tcl:252 msgid "Ready." msgstr "準備完了" -#: git-gui.sh:1787 +#: git-gui.sh:1978 #, tcl-format -msgid "Displaying only %s of %s files." -msgstr "全体で%s個の内の%sファイルだけ表示しています" +msgid "" +"Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." +msgstr "" +"表示可能な限界 (gui.maxfilesdisplayed = %s) に達しため、全体で%s個のファイル" +"を表示できません" -#: git-gui.sh:1913 +#: git-gui.sh:2101 msgid "Unmodified" msgstr "変更無し" -#: git-gui.sh:1915 +#: git-gui.sh:2103 msgid "Modified, not staged" msgstr "変更あり、コミット未予定" -#: git-gui.sh:1916 git-gui.sh:1924 +#: git-gui.sh:2104 git-gui.sh:2116 msgid "Staged for commit" msgstr "コミット予定済" -#: git-gui.sh:1917 git-gui.sh:1925 +#: git-gui.sh:2105 git-gui.sh:2117 msgid "Portions staged for commit" msgstr "部分的にコミット予定済" -#: git-gui.sh:1918 git-gui.sh:1926 +#: git-gui.sh:2106 git-gui.sh:2118 msgid "Staged for commit, missing" msgstr "コミット予定済、ファイル無し" -#: git-gui.sh:1920 +#: git-gui.sh:2108 msgid "File type changed, not staged" msgstr "ファイル型変更、コミット未予定" -#: git-gui.sh:1921 +#: git-gui.sh:2109 git-gui.sh:2110 +msgid "File type changed, old type staged for commit" +msgstr "ファイル型変更、旧型コミット予定済" + +#: git-gui.sh:2111 msgid "File type changed, staged" msgstr "ファイル型変更、コミット予定済" -#: git-gui.sh:1923 +#: git-gui.sh:2112 +msgid "File type change staged, modification not staged" +msgstr "ファイル型変更コミット予定済、変更コミット未予定" + +#: git-gui.sh:2113 +msgid "File type change staged, file missing" +msgstr "ファイル型変更コミット予定済、ファイル無し" + +#: git-gui.sh:2115 msgid "Untracked, not staged" msgstr "管理外、コミット未予定" -#: git-gui.sh:1928 +#: git-gui.sh:2120 msgid "Missing" msgstr "ファイル無し" -#: git-gui.sh:1929 +#: git-gui.sh:2121 msgid "Staged for removal" msgstr "削除予定済" -#: git-gui.sh:1930 +#: git-gui.sh:2122 msgid "Staged for removal, still present" msgstr "削除予定済、ファイル未削除" -#: git-gui.sh:1932 git-gui.sh:1933 git-gui.sh:1934 git-gui.sh:1935 -#: git-gui.sh:1936 git-gui.sh:1937 +#: git-gui.sh:2124 git-gui.sh:2125 git-gui.sh:2126 git-gui.sh:2127 +#: git-gui.sh:2128 git-gui.sh:2129 msgid "Requires merge resolution" msgstr "要マージ解決" -#: git-gui.sh:1972 +#: git-gui.sh:2164 msgid "Starting gitk... please wait..." msgstr "gitk を起動中…お待ち下さい…" -#: git-gui.sh:1984 +#: git-gui.sh:2176 msgid "Couldn't find gitk in PATH" msgstr "PATH 中に gitk が見つかりません" -#: git-gui.sh:2043 +#: git-gui.sh:2235 msgid "Couldn't find git gui in PATH" msgstr "PATH 中に git gui が見つかりません" -#: git-gui.sh:2455 lib/choose_repository.tcl:36 +#: git-gui.sh:2654 lib/choose_repository.tcl:41 msgid "Repository" msgstr "リポジトリ" -#: git-gui.sh:2456 +#: git-gui.sh:2655 msgid "Edit" msgstr "編集" -#: git-gui.sh:2458 lib/choose_rev.tcl:561 +#: git-gui.sh:2657 lib/choose_rev.tcl:567 msgid "Branch" msgstr "ブランチ" -#: git-gui.sh:2461 lib/choose_rev.tcl:548 +#: git-gui.sh:2660 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "コミット" -#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168 +#: git-gui.sh:2663 lib/merge.tcl:123 lib/merge.tcl:152 lib/merge.tcl:170 msgid "Merge" msgstr "マージ" -#: git-gui.sh:2465 lib/choose_rev.tcl:557 +#: git-gui.sh:2664 lib/choose_rev.tcl:563 msgid "Remote" msgstr "リモート" -#: git-gui.sh:2468 +#: git-gui.sh:2667 msgid "Tools" msgstr "ツール" -#: git-gui.sh:2477 +#: git-gui.sh:2676 msgid "Explore Working Copy" msgstr "ワーキングコピーをブラウズ" -#: git-gui.sh:2483 +#: git-gui.sh:2682 +msgid "Git Bash" +msgstr "" + +#: git-gui.sh:2692 msgid "Browse Current Branch's Files" msgstr "現在のブランチのファイルを見る" -#: git-gui.sh:2487 +#: git-gui.sh:2696 msgid "Browse Branch Files..." msgstr "ブランチのファイルを見る…" -#: git-gui.sh:2492 +#: git-gui.sh:2701 msgid "Visualize Current Branch's History" msgstr "現在のブランチの履歴を見る" -#: git-gui.sh:2496 +#: git-gui.sh:2705 msgid "Visualize All Branch History" msgstr "全てのブランチの履歴を見る" -#: git-gui.sh:2503 +#: git-gui.sh:2712 #, tcl-format msgid "Browse %s's Files" msgstr "ブランチ %s のファイルを見る" -#: git-gui.sh:2505 +#: git-gui.sh:2714 #, tcl-format msgid "Visualize %s's History" msgstr "ブランチ %s の履歴を見る" -#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67 +#: git-gui.sh:2719 lib/database.tcl:40 lib/database.tcl:66 msgid "Database Statistics" msgstr "データベース統計" -#: git-gui.sh:2513 lib/database.tcl:34 +#: git-gui.sh:2722 lib/database.tcl:33 msgid "Compress Database" msgstr "データベース圧縮" -#: git-gui.sh:2516 +#: git-gui.sh:2725 msgid "Verify Database" msgstr "データベース検証" -#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8 +#: git-gui.sh:2732 git-gui.sh:2736 git-gui.sh:2740 lib/shortcut.tcl:8 #: lib/shortcut.tcl:40 lib/shortcut.tcl:72 msgid "Create Desktop Icon" msgstr "デスクトップ・アイコンを作る" -#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191 +#: git-gui.sh:2748 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 msgid "Quit" msgstr "終了" -#: git-gui.sh:2547 +#: git-gui.sh:2756 msgid "Undo" msgstr "元に戻す" -#: git-gui.sh:2550 +#: git-gui.sh:2759 msgid "Redo" msgstr "やり直し" -#: git-gui.sh:2554 git-gui.sh:3109 +#: git-gui.sh:2763 git-gui.sh:3368 msgid "Cut" msgstr "切り取り" -#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259 +#: git-gui.sh:2766 git-gui.sh:3371 git-gui.sh:3445 git-gui.sh:3530 #: lib/console.tcl:69 msgid "Copy" msgstr "コピー" -#: git-gui.sh:2560 git-gui.sh:3115 +#: git-gui.sh:2769 git-gui.sh:3374 msgid "Paste" msgstr "貼り付け" -#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26 -#: lib/remote_branch_delete.tcl:38 +#: git-gui.sh:2772 git-gui.sh:3377 lib/remote_branch_delete.tcl:39 +#: lib/branch_delete.tcl:28 msgid "Delete" msgstr "削除" -#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71 +#: git-gui.sh:2776 git-gui.sh:3381 git-gui.sh:3534 lib/console.tcl:71 msgid "Select All" msgstr "全て選択" -#: git-gui.sh:2576 +#: git-gui.sh:2785 msgid "Create..." msgstr "作成…" -#: git-gui.sh:2582 +#: git-gui.sh:2791 msgid "Checkout..." msgstr "チェックアウト" -#: git-gui.sh:2588 +#: git-gui.sh:2797 msgid "Rename..." msgstr "名前変更…" -#: git-gui.sh:2593 +#: git-gui.sh:2802 msgid "Delete..." msgstr "削除…" -#: git-gui.sh:2598 +#: git-gui.sh:2807 msgid "Reset..." msgstr "リセット…" -#: git-gui.sh:2608 +#: git-gui.sh:2817 msgid "Done" msgstr "完了" -#: git-gui.sh:2610 +#: git-gui.sh:2819 msgid "Commit@@verb" msgstr "コミット" -#: git-gui.sh:2619 git-gui.sh:3050 +#: git-gui.sh:2828 git-gui.sh:3309 msgid "New Commit" msgstr "新規コミット" -#: git-gui.sh:2627 git-gui.sh:3057 +#: git-gui.sh:2836 git-gui.sh:3316 msgid "Amend Last Commit" msgstr "最新コミットを訂正" -#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99 +#: git-gui.sh:2846 git-gui.sh:3270 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "再スキャン" -#: git-gui.sh:2643 +#: git-gui.sh:2852 msgid "Stage To Commit" msgstr "コミット予定する" -#: git-gui.sh:2649 +#: git-gui.sh:2858 msgid "Stage Changed Files To Commit" msgstr "変更されたファイルをコミット予定" -#: git-gui.sh:2655 +#: git-gui.sh:2864 msgid "Unstage From Commit" msgstr "コミットから降ろす" -#: git-gui.sh:2661 lib/index.tcl:412 +#: git-gui.sh:2870 lib/index.tcl:442 msgid "Revert Changes" msgstr "変更を元に戻す" -#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341 +#: git-gui.sh:2878 git-gui.sh:3581 git-gui.sh:3612 msgid "Show Less Context" msgstr "文脈を少なく" -#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345 +#: git-gui.sh:2882 git-gui.sh:3585 git-gui.sh:3616 msgid "Show More Context" msgstr "文脈を多く" -#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133 +#: git-gui.sh:2889 git-gui.sh:3283 git-gui.sh:3392 msgid "Sign Off" msgstr "署名" -#: git-gui.sh:2696 +#: git-gui.sh:2905 msgid "Local Merge..." msgstr "ローカル・マージ…" -#: git-gui.sh:2701 +#: git-gui.sh:2910 msgid "Abort Merge..." msgstr "マージ中止…" -#: git-gui.sh:2713 git-gui.sh:2741 +#: git-gui.sh:2922 git-gui.sh:2950 msgid "Add..." msgstr "追加" -#: git-gui.sh:2717 +#: git-gui.sh:2926 msgid "Push..." msgstr "プッシュ…" -#: git-gui.sh:2721 +#: git-gui.sh:2930 msgid "Delete Branch..." msgstr "ブランチ削除..." -#: git-gui.sh:2731 git-gui.sh:3292 +#: git-gui.sh:2940 git-gui.sh:3563 msgid "Options..." msgstr "オプション…" -#: git-gui.sh:2742 +#: git-gui.sh:2951 msgid "Remove..." msgstr "削除..." -#: git-gui.sh:2751 lib/choose_repository.tcl:50 +#: git-gui.sh:2960 lib/choose_repository.tcl:55 msgid "Help" msgstr "ヘルプ" -#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14 -#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53 +#: git-gui.sh:2964 git-gui.sh:2968 lib/about.tcl:14 +#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58 #, tcl-format msgid "About %s" msgstr "%s について" -#: git-gui.sh:2783 +#: git-gui.sh:2992 msgid "Online Documentation" msgstr "オンライン・ドキュメント" -#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56 +#: git-gui.sh:2995 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 msgid "Show SSH Key" msgstr "SSH キーを表示" -#: git-gui.sh:2893 +#: git-gui.sh:3014 git-gui.sh:3146 +msgid "Usage" +msgstr "使い方" + +#: git-gui.sh:3095 lib/blame.tcl:573 +msgid "Error" +msgstr "エラー" + +#: git-gui.sh:3126 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" msgstr "" "致命的: パス %s が stat できません。そのようなファイルやディレクトリはありま" "せん" -#: git-gui.sh:2926 +#: git-gui.sh:3159 msgid "Current Branch:" msgstr "現在のブランチ" -#: git-gui.sh:2947 +#: git-gui.sh:3185 msgid "Staged Changes (Will Commit)" msgstr "ステージングされた(コミット予定済の)変更" -#: git-gui.sh:2967 +#: git-gui.sh:3205 msgid "Unstaged Changes" msgstr "コミット予定に入っていない変更" -#: git-gui.sh:3017 +#: git-gui.sh:3276 msgid "Stage Changed" msgstr "変更をコミット予定に入れる" -#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193 +#: git-gui.sh:3295 lib/transport.tcl:137 lib/transport.tcl:229 msgid "Push" msgstr "プッシュ" -#: git-gui.sh:3071 +#: git-gui.sh:3330 msgid "Initial Commit Message:" msgstr "最初のコミットメッセージ:" -#: git-gui.sh:3072 +#: git-gui.sh:3331 msgid "Amended Commit Message:" msgstr "訂正したコミットメッセージ:" -#: git-gui.sh:3073 +#: git-gui.sh:3332 msgid "Amended Initial Commit Message:" msgstr "訂正した最初のコミットメッセージ:" -#: git-gui.sh:3074 +#: git-gui.sh:3333 msgid "Amended Merge Commit Message:" msgstr "訂正したマージコミットメッセージ:" -#: git-gui.sh:3075 +#: git-gui.sh:3334 msgid "Merge Commit Message:" msgstr "マージコミットメッセージ:" -#: git-gui.sh:3076 +#: git-gui.sh:3335 msgid "Commit Message:" msgstr "コミットメッセージ:" -#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73 +#: git-gui.sh:3384 git-gui.sh:3538 lib/console.tcl:73 msgid "Copy All" msgstr "全てコピー" -#: git-gui.sh:3149 lib/blame.tcl:104 +#: git-gui.sh:3408 lib/blame.tcl:105 msgid "File:" msgstr "ファイル:" -#: git-gui.sh:3255 +#: git-gui.sh:3526 msgid "Refresh" msgstr "再読み込み" -#: git-gui.sh:3276 +#: git-gui.sh:3547 msgid "Decrease Font Size" msgstr "フォントを小さく" -#: git-gui.sh:3280 +#: git-gui.sh:3551 msgid "Increase Font Size" msgstr "フォントを大きく" -#: git-gui.sh:3288 lib/blame.tcl:281 +#: git-gui.sh:3559 lib/blame.tcl:294 msgid "Encoding" msgstr "エンコーディング" -#: git-gui.sh:3299 +#: git-gui.sh:3570 msgid "Apply/Reverse Hunk" msgstr "パッチを適用/取り消す" -#: git-gui.sh:3304 +#: git-gui.sh:3575 msgid "Apply/Reverse Line" msgstr "パッチ行を適用/取り消す" -#: git-gui.sh:3323 +#: git-gui.sh:3594 msgid "Run Merge Tool" msgstr "マージツールを起動" -#: git-gui.sh:3328 +#: git-gui.sh:3599 msgid "Use Remote Version" msgstr "リモートの方を採用" -#: git-gui.sh:3332 +#: git-gui.sh:3603 msgid "Use Local Version" msgstr "ローカルの方を採用" -#: git-gui.sh:3336 +#: git-gui.sh:3607 msgid "Revert To Base" msgstr "ベース版を採用" -#: git-gui.sh:3354 +#: git-gui.sh:3625 msgid "Visualize These Changes In The Submodule" msgstr "サブモジュール内のこれらの変更を見る" -#: git-gui.sh:3358 +#: git-gui.sh:3629 msgid "Visualize Current Branch History In The Submodule" msgstr "サブモジュール内で現在のブランチの履歴を見る" -#: git-gui.sh:3362 +#: git-gui.sh:3633 msgid "Visualize All Branch History In The Submodule" msgstr "サブモジュール内で全てのブランチの履歴を見る" -#: git-gui.sh:3367 +#: git-gui.sh:3638 msgid "Start git gui In The Submodule" msgstr "サブモジュール内でgit guiを起動する" -#: git-gui.sh:3389 +#: git-gui.sh:3673 msgid "Unstage Hunk From Commit" msgstr "パッチをコミット予定から外す" -#: git-gui.sh:3391 +#: git-gui.sh:3675 msgid "Unstage Lines From Commit" msgstr "コミット予定から行を外す" -#: git-gui.sh:3393 +#: git-gui.sh:3677 msgid "Unstage Line From Commit" msgstr "コミット予定から行を外す" -#: git-gui.sh:3396 +#: git-gui.sh:3680 msgid "Stage Hunk For Commit" msgstr "パッチをコミット予定に加える" -#: git-gui.sh:3398 +#: git-gui.sh:3682 msgid "Stage Lines For Commit" msgstr "パッチ行をコミット予定に加える" -#: git-gui.sh:3400 +#: git-gui.sh:3684 msgid "Stage Line For Commit" msgstr "パッチ行をコミット予定に加える" -#: git-gui.sh:3424 +#: git-gui.sh:3709 msgid "Initializing..." msgstr "初期化しています…" -#: git-gui.sh:3541 +#: git-gui.sh:3852 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -543,7 +573,7 @@ msgstr "" "以下の環境変数は %s が起動する Git サブプロセスによって無視されるでしょう:\n" "\n" -#: git-gui.sh:3570 +#: git-gui.sh:3881 msgid "" "\n" "This is due to a known issue with the\n" @@ -553,7 +583,7 @@ msgstr "" "これは Cygwin で配布されている Tcl バイナリに\n" "関しての既知の問題によります" -#: git-gui.sh:3575 +#: git-gui.sh:3886 #, tcl-format msgid "" "\n" @@ -568,249 +598,294 @@ msgstr "" "個人的な ~/.gitconfig ファイル内で user.name と user.email の値を設定\n" "するのが、%s の良い代用となります\n" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "Git のグラフィカルUI git-gui" +#: lib/merge.tcl:13 +msgid "" +"Cannot merge while amending.\n" +"\n" +"You must finish amending this commit before starting any type of merge.\n" +msgstr "" +"訂正中にはマージできません。\n" +"\n" +"訂正処理を完了するまでは新たにマージを開始できません。\n" -#: lib/blame.tcl:72 -msgid "File Viewer" -msgstr "ファイルピューワ" +#: lib/merge.tcl:27 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before a merge can be performed.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"最後にスキャンした状態はリポジトリの状態と合致しません。\n" +"\n" +"最後にスキャンして以後、別の Git プログラムがリポジトリを変更しています。マー" +"ジを開始する前に、再スキャンが必要です。\n" +"\n" +"自動的に再スキャンを開始します。\n" -#: lib/blame.tcl:78 -msgid "Commit:" -msgstr "コミット:" +#: lib/merge.tcl:45 +#, tcl-format +msgid "" +"You are in the middle of a conflicted merge.\n" +"\n" +"File %s has merge conflicts.\n" +"\n" +"You must resolve them, stage the file, and commit to complete the current " +"merge. Only then can you begin another merge.\n" +msgstr "" +"衝突のあったマージの途中です。\n" +"\n" +"ファイル %s にはマージ中の衝突が残っています。\n" +"\n" +"このファイルの衝突を解決し、コミット予定に加えて、コミットすることでマージを" +"完了します。そうやって始めて、新たなマージを開始できるようになります。\n" -#: lib/blame.tcl:271 -msgid "Copy Commit" -msgstr "コミットをコピー" +#: lib/merge.tcl:55 +#, tcl-format +msgid "" +"You are in the middle of a change.\n" +"\n" +"File %s is modified.\n" +"\n" +"You should complete the current commit before starting a merge. Doing so " +"will help you abort a failed merge, should the need arise.\n" +msgstr "" +"変更の途中です。\n" +"\n" +"ファイル %s は変更中です。\n" +"\n" +"現在のコミットを完了してからマージを開始して下さい。そうする方がマージに失敗" +"したときの回復が楽です。\n" -#: lib/blame.tcl:275 -msgid "Find Text..." -msgstr "テキストを検索" +#: lib/merge.tcl:108 +#, tcl-format +msgid "%s of %s" +msgstr "%s の %s ブランチ" -#: lib/blame.tcl:284 -msgid "Do Full Copy Detection" -msgstr "コピー検知" +#: lib/merge.tcl:122 +#, tcl-format +msgid "Merging %s and %s..." +msgstr "%s と %s をマージ中・・・" -#: lib/blame.tcl:288 -msgid "Show History Context" -msgstr "文脈を見せる" +#: lib/merge.tcl:133 +msgid "Merge completed successfully." +msgstr "マージが完了しました" -#: lib/blame.tcl:291 -msgid "Blame Parent Commit" -msgstr "親コミットを註釈" +#: lib/merge.tcl:135 +msgid "Merge failed. Conflict resolution is required." +msgstr "マージが失敗しました。衝突の解決が必要です。" -#: lib/blame.tcl:450 +#: lib/merge.tcl:160 #, tcl-format -msgid "Reading %s..." -msgstr "%s を読んでいます…" +msgid "Merge Into %s" +msgstr "%s にマージ" -#: lib/blame.tcl:557 -msgid "Loading copy/move tracking annotations..." -msgstr "コピー・移動追跡データを読んでいます…" +#: lib/merge.tcl:166 lib/checkout_op.tcl:567 lib/tools_dlg.tcl:336 +msgid "Visualize" +msgstr "可視化" -#: lib/blame.tcl:577 -msgid "lines annotated" -msgstr "行を注釈しました" +#: lib/merge.tcl:174 lib/remote_branch_delete.tcl:43 lib/branch_delete.tcl:34 +#: lib/checkout_op.tcl:579 lib/branch_rename.tcl:32 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/option.tcl:127 +#: lib/transport.tcl:141 lib/choose_font.tcl:45 lib/branch_checkout.tcl:30 +#: lib/browser.tcl:292 lib/remote_add.tcl:34 lib/branch_create.tcl:37 +msgid "Cancel" +msgstr "中止" -#: lib/blame.tcl:769 -msgid "Loading original location annotations..." -msgstr "元位置行の注釈データを読んでいます…" +#: lib/merge.tcl:179 +msgid "Revision To Merge" +msgstr "マージするリビジョン" -#: lib/blame.tcl:772 -msgid "Annotation complete." -msgstr "注釈完了しました" +#: lib/merge.tcl:214 +msgid "" +"Cannot abort while amending.\n" +"\n" +"You must finish amending this commit.\n" +msgstr "" +"訂正中には中止できません。\n" +"\n" +"まず今のコミット訂正を完了させて下さい。\n" -#: lib/blame.tcl:802 -msgid "Busy" -msgstr "実行中" +#: lib/merge.tcl:224 +msgid "" +"Abort merge?\n" +"\n" +"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with aborting the current merge?" +msgstr "" +"マージを中断しますか?\n" +"\n" +"現在のマージを中断すると、コミットしていない全ての変更が失われます。\n" +"\n" +"マージを中断してよろしいですか?" -#: lib/blame.tcl:803 -msgid "Annotation process is already running." -msgstr "すでに blame プロセスを実行中です。" +#: lib/merge.tcl:230 +msgid "" +"Reset changes?\n" +"\n" +"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with resetting the current changes?" +msgstr "" +"変更点をリセットしますか?\n" +"\n" +"変更点をリセットすると、コミットしていない全ての変更が失われます。\n" +"\n" +"リセットしてよろしいですか?" -#: lib/blame.tcl:842 -msgid "Running thorough copy detection..." -msgstr "コピー検知を実行中…" +#: lib/merge.tcl:241 +msgid "Aborting" +msgstr "中断しています" -#: lib/blame.tcl:910 -msgid "Loading annotation..." -msgstr "注釈を読み込んでいます…" +#: lib/merge.tcl:241 +msgid "files reset" +msgstr "リセットしたファイル" -#: lib/blame.tcl:963 -msgid "Author:" -msgstr "作者:" +#: lib/merge.tcl:269 +msgid "Abort failed." +msgstr "中断に失敗しました。" -#: lib/blame.tcl:967 -msgid "Committer:" -msgstr "コミット者:" +#: lib/merge.tcl:271 +msgid "Abort completed. Ready." +msgstr "中断完了。" -#: lib/blame.tcl:972 -msgid "Original File:" -msgstr "元ファイル" +#: lib/error.tcl:20 lib/error.tcl:116 +msgid "error" +msgstr "エラー" -#: lib/blame.tcl:1020 -msgid "Cannot find HEAD commit:" -msgstr "HEAD コミットが見つかりません" +#: lib/error.tcl:36 +msgid "warning" +msgstr "警告" -#: lib/blame.tcl:1075 -msgid "Cannot find parent commit:" -msgstr "親コミットが見つかりません:" +#: lib/error.tcl:96 +msgid "You must correct the above errors before committing." +msgstr "コミットする前に、以上のエラーを修正して下さい" -#: lib/blame.tcl:1090 -msgid "Unable to display parent" -msgstr "親を表示できません" +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Git から出た無効な日付: %s" -#: lib/blame.tcl:1091 lib/diff.tcl:320 -msgid "Error loading diff:" -msgstr "diff を読む際のエラーです:" +#: lib/encoding.tcl:443 +msgid "Default" +msgstr "デフォールト" -#: lib/blame.tcl:1231 -msgid "Originally By:" -msgstr "原作者:" +#: lib/encoding.tcl:448 +#, tcl-format +msgid "System (%s)" +msgstr "システム (%s)" -#: lib/blame.tcl:1237 -msgid "In File:" -msgstr "ファイル:" +#: lib/encoding.tcl:459 lib/encoding.tcl:465 +msgid "Other" +msgstr "その他" -#: lib/blame.tcl:1242 -msgid "Copied Or Moved Here By:" -msgstr "複写・移動者:" +#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "リモートブランチ削除" -#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19 -msgid "Checkout Branch" -msgstr "ブランチをチェックアウト" +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "元のリポジトリ" -#: lib/branch_checkout.tcl:23 -msgid "Checkout" -msgstr "チェックアウト" +#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165 +msgid "Remote:" +msgstr "リモート:" -#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35 -#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282 -#: lib/checkout_op.tcl:579 lib/choose_font.tcl:43 lib/merge.tcl:172 -#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42 -#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352 -#: lib/transport.tcl:108 -msgid "Cancel" -msgstr "中止" +#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187 +msgid "Arbitrary Location:" +msgstr "任意の位置:" -#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328 -msgid "Revision" -msgstr "リビジョン" +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "ブランチ" -#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280 -msgid "Options" -msgstr "オプション" +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "条件付で削除" -#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "トラッキング・ブランチをフェッチ" +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "マージ先:" -#: lib/branch_checkout.tcl:44 -msgid "Detach From Local Branch" -msgstr "ローカル・ブランチから削除" +#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 +msgid "Always (Do not perform merge checks)" +msgstr "無条件(マージ検査をしない)" -#: lib/branch_create.tcl:22 -msgid "Create Branch" -msgstr "ブランチを作成" - -#: lib/branch_create.tcl:27 -msgid "Create New Branch" -msgstr "ブランチを新規作成" - -#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381 -msgid "Create" -msgstr "作成" - -#: lib/branch_create.tcl:40 -msgid "Branch Name" -msgstr "ブランチ名" - -#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50 -msgid "Name:" -msgstr "名前:" - -#: lib/branch_create.tcl:58 -msgid "Match Tracking Branch Name" -msgstr "トラッキング・ブランチ名を合わせる" - -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "初期リビジョン" - -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "既存のブランチを更新:" - -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "いいえ" +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "'マージ先' にはブランチが必要です。" -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "早送りのみ" +#: lib/remote_branch_delete.tcl:185 +#, tcl-format +msgid "" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" +msgstr "" +"以下のブランチは %s に完全にマージされていません:\n" +"\n" +" - %s" -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 -msgid "Reset" -msgstr "リセット" +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "" +"必要なコミットが不足しているために、マージ検査が失敗しました。まず %s から" +"フェッチして下さい。" -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "作成してすぐチェックアウト" +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "削除するブランチを選択して下さい。" -#: lib/branch_create.tcl:131 -msgid "Please select a tracking branch." -msgstr "トラッキング・ブランチを選択して下さい。" +#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "" +"削除したブランチを回復するのは困難です。\n" +"\n" +"選択したブランチを削除して良いですか?" -#: lib/branch_create.tcl:140 +#: lib/remote_branch_delete.tcl:227 #, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "トラッキング・ブランチ %s は遠隔リポジトリのブランチではありません。" +msgid "Deleting branches from %s" +msgstr "%s からブランチを削除しています。" -#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86 -msgid "Please supply a branch name." -msgstr "ブランチ名を指定して下さい。" +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "リポジトリが選択されていません。" -#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 +#: lib/remote_branch_delete.tcl:305 #, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "'%s' はブランチ名に使えません。" +msgid "Scanning %s..." +msgstr "%s をスキャンしています…" -#: lib/branch_delete.tcl:15 +#: lib/branch_delete.tcl:16 msgid "Delete Branch" msgstr "ブランチ削除" -#: lib/branch_delete.tcl:20 +#: lib/branch_delete.tcl:21 msgid "Delete Local Branch" msgstr "ローカル・ブランチを削除" -#: lib/branch_delete.tcl:37 +#: lib/branch_delete.tcl:39 msgid "Local Branches" msgstr "ローカル・ブランチ" -#: lib/branch_delete.tcl:52 +#: lib/branch_delete.tcl:51 msgid "Delete Only If Merged Into" msgstr "マージ済みの時のみ削除" -#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119 -msgid "Always (Do not perform merge checks)" -msgstr "無条件(マージ検査をしない)" - #: lib/branch_delete.tcl:103 #, tcl-format msgid "The following branches are not completely merged into %s:" msgstr "以下のブランチは %s に完全にマージされていません:" -#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217 -msgid "" -"Recovering deleted branches is difficult.\n" -"\n" -"Delete the selected branches?" -msgstr "" -"削除したブランチを回復するのは困難です。\n" -"\n" -"選択したブランチを削除して良いですか?" - #: lib/branch_delete.tcl:141 #, tcl-format msgid "" @@ -820,62 +895,63 @@ msgstr "" "以下のブランチを削除できません:\n" "%s" -#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22 -msgid "Rename Branch" -msgstr "ブランチの名前変更" +#: lib/choose_rev.tcl:52 +msgid "This Detached Checkout" +msgstr "分離されたチェックアウト" -#: lib/branch_rename.tcl:26 -msgid "Rename" -msgstr "名前変更" +#: lib/choose_rev.tcl:60 +msgid "Revision Expression:" +msgstr "リビジョン式:" -#: lib/branch_rename.tcl:36 -msgid "Branch:" -msgstr "ブランチ:" +#: lib/choose_rev.tcl:72 +msgid "Local Branch" +msgstr "ローカル・ブランチ" -#: lib/branch_rename.tcl:39 -msgid "New Name:" -msgstr "新しい名前:" +#: lib/choose_rev.tcl:77 +msgid "Tracking Branch" +msgstr "トラッキング・ブランチ" -#: lib/branch_rename.tcl:75 -msgid "Please select a branch to rename." -msgstr "名前を変更するブランチを選んで下さい。" +#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 +msgid "Tag" +msgstr "タグ" -#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202 +#: lib/choose_rev.tcl:321 #, tcl-format -msgid "Branch '%s' already exists." -msgstr "'%s'というブランチは既に存在します。" +msgid "Invalid revision: %s" +msgstr "無効なリビジョン: %s" -#: lib/branch_rename.tcl:117 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "'%s'の名前変更に失敗しました。" +#: lib/choose_rev.tcl:342 +msgid "No revision selected." +msgstr "リビジョンが未選択です。" -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "起動中…" +#: lib/choose_rev.tcl:350 +msgid "Revision expression is empty." +msgstr "リビジョン式が空です。" -#: lib/browser.tcl:26 -msgid "File Browser" -msgstr "ファイル・ブラウザ" +#: lib/choose_rev.tcl:537 +msgid "Updated" +msgstr "更新しました" -#: lib/browser.tcl:126 lib/browser.tcl:143 -#, tcl-format -msgid "Loading %s..." -msgstr "%s をロード中…" +#: lib/choose_rev.tcl:565 +msgid "URL" +msgstr "URL" -#: lib/browser.tcl:187 -msgid "[Up To Parent]" -msgstr "[上位フォルダへ]" +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "実行中…お待ち下さい…" -#: lib/browser.tcl:267 lib/browser.tcl:273 -msgid "Browse Branch Files" -msgstr "現在のブランチのファイルを見る" +#: lib/console.tcl:81 lib/checkout_op.tcl:146 lib/database.tcl:30 +#: lib/sshkey.tcl:55 +msgid "Close" +msgstr "閉じる" -#: lib/browser.tcl:278 lib/choose_repository.tcl:398 -#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497 -#: lib/choose_repository.tcl:1028 -msgid "Browse" -msgstr "ブラウズ" +#: lib/console.tcl:186 +msgid "Success" +msgstr "成功" + +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "エラー: コマンドが失敗しました" #: lib/checkout_op.tcl:85 #, tcl-format @@ -887,11 +963,6 @@ msgstr "%s から %s をフェッチしています" msgid "fatal: Cannot resolve %s" msgstr "致命的エラー: %s を解決できません" -#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31 -#: lib/sshkey.tcl:53 -msgid "Close" -msgstr "閉じる" - #: lib/checkout_op.tcl:175 #, tcl-format msgid "Branch '%s' does not exist." @@ -902,6 +973,11 @@ msgstr "ブランチ'%s'は存在しません。" msgid "Failed to configure simplified git-pull for '%s'." msgstr "'%s' に簡易 git-pull を設定できませんでした" +#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102 +#, tcl-format +msgid "Branch '%s' already exists." +msgstr "'%s'というブランチは既に存在します。" + #: lib/checkout_op.tcl:229 #, tcl-format msgid "" @@ -999,9 +1075,9 @@ msgstr "失なわれたコミットを回復するのは簡単ではありませ msgid "Reset '%s'?" msgstr "'%s' をリセットしますか?" -#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343 -msgid "Visualize" -msgstr "可視化" +#: lib/checkout_op.tcl:571 lib/branch_create.tcl:85 +msgid "Reset" +msgstr "リセット" #: lib/checkout_op.tcl:635 #, tcl-format @@ -1019,1537 +1095,1590 @@ msgstr "" "ましたが、 Git の内部データを更新できませんでした。\n" "起こるはずのないエラーです。あきらめて %s を終了します。" -#: lib/choose_font.tcl:39 -msgid "Select" -msgstr "選択" +#: lib/blame.tcl:73 +msgid "File Viewer" +msgstr "ファイルピューワ" -#: lib/choose_font.tcl:53 -msgid "Font Family" -msgstr "フォント・ファミリー" +#: lib/blame.tcl:79 +msgid "Commit:" +msgstr "コミット:" -#: lib/choose_font.tcl:74 -msgid "Font Size" -msgstr "フォントの大きさ" +#: lib/blame.tcl:280 +msgid "Copy Commit" +msgstr "コミットをコピー" -#: lib/choose_font.tcl:91 -msgid "Font Example" -msgstr "フォント・サンプル" +#: lib/blame.tcl:284 +msgid "Find Text..." +msgstr "テキストを検索" -#: lib/choose_font.tcl:103 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "" -"これはサンプル文です。\n" -"このフォントが気に入ればお使いになれます。" +#: lib/blame.tcl:288 +msgid "Goto Line..." +msgstr "指定行に移動…" -#: lib/choose_repository.tcl:28 -msgid "Git Gui" -msgstr "Git GUI" +#: lib/blame.tcl:297 +msgid "Do Full Copy Detection" +msgstr "コピー検知" -#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386 -msgid "Create New Repository" -msgstr "新しいリポジトリを作る" +#: lib/blame.tcl:301 +msgid "Show History Context" +msgstr "文脈を見せる" -#: lib/choose_repository.tcl:93 -msgid "New..." -msgstr "新規…" +#: lib/blame.tcl:304 +msgid "Blame Parent Commit" +msgstr "親コミットを注釈" -#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471 -msgid "Clone Existing Repository" -msgstr "既存リポジトリを複製する" +#: lib/blame.tcl:466 +#, tcl-format +msgid "Reading %s..." +msgstr "%s を読んでいます…" -#: lib/choose_repository.tcl:106 -msgid "Clone..." -msgstr "複製…" +#: lib/blame.tcl:594 +msgid "Loading copy/move tracking annotations..." +msgstr "コピー・移動追跡データを読んでいます…" -#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016 -msgid "Open Existing Repository" -msgstr "既存リポジトリを開く" +#: lib/blame.tcl:614 +msgid "lines annotated" +msgstr "行を注釈しました" -#: lib/choose_repository.tcl:119 -msgid "Open..." -msgstr "開く…" +#: lib/blame.tcl:806 +msgid "Loading original location annotations..." +msgstr "元位置行の注釈データを読んでいます…" -#: lib/choose_repository.tcl:132 -msgid "Recent Repositories" -msgstr "最近使ったリポジトリ" +#: lib/blame.tcl:809 +msgid "Annotation complete." +msgstr "注釈完了しました" -#: lib/choose_repository.tcl:138 -msgid "Open Recent Repository:" -msgstr "最近使ったリポジトリを開く" +#: lib/blame.tcl:839 +msgid "Busy" +msgstr "実行中" -#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313 -#: lib/choose_repository.tcl:320 -#, tcl-format -msgid "Failed to create repository %s:" -msgstr "リポジトリ %s を作製できません:" +#: lib/blame.tcl:840 +msgid "Annotation process is already running." +msgstr "すでに blame プロセスを実行中です。" -#: lib/choose_repository.tcl:391 -msgid "Directory:" -msgstr "ディレクトリ:" +#: lib/blame.tcl:879 +msgid "Running thorough copy detection..." +msgstr "コピー検知を実行中…" -#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550 -#: lib/choose_repository.tcl:1052 -msgid "Git Repository" -msgstr "GIT リポジトリ" +#: lib/blame.tcl:947 +msgid "Loading annotation..." +msgstr "注釈を読み込んでいます…" -#: lib/choose_repository.tcl:448 -#, tcl-format -msgid "Directory %s already exists." -msgstr "ディレクトリ '%s' は既に存在します。" +#: lib/blame.tcl:1000 +msgid "Author:" +msgstr "作者:" -#: lib/choose_repository.tcl:452 -#, tcl-format -msgid "File %s already exists." -msgstr "ファイル '%s' は既に存在します。" +#: lib/blame.tcl:1004 +msgid "Committer:" +msgstr "コミット者:" -#: lib/choose_repository.tcl:466 -msgid "Clone" -msgstr "複製" +#: lib/blame.tcl:1009 +msgid "Original File:" +msgstr "元ファイル" -#: lib/choose_repository.tcl:479 -msgid "Source Location:" -msgstr "ソースの位置" +#: lib/blame.tcl:1057 +msgid "Cannot find HEAD commit:" +msgstr "HEAD コミットが見つかりません" -#: lib/choose_repository.tcl:490 -msgid "Target Directory:" -msgstr "先ディレクトリ:" +#: lib/blame.tcl:1112 +msgid "Cannot find parent commit:" +msgstr "親コミットが見つかりません:" + +#: lib/blame.tcl:1127 +msgid "Unable to display parent" +msgstr "親を表示できません" + +#: lib/blame.tcl:1128 lib/diff.tcl:356 +msgid "Error loading diff:" +msgstr "diff を読む際のエラーです:" + +#: lib/blame.tcl:1269 +msgid "Originally By:" +msgstr "原作者:" + +#: lib/blame.tcl:1275 +msgid "In File:" +msgstr "ファイル:" + +#: lib/blame.tcl:1280 +msgid "Copied Or Moved Here By:" +msgstr "複写・移動者:" + +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "Git のグラフィカルUI git-gui" + +#: lib/choose_repository.tcl:33 +msgid "Git Gui" +msgstr "Git GUI" + +#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 +msgid "Create New Repository" +msgstr "新しいリポジトリを作る" + +#: lib/choose_repository.tcl:98 +msgid "New..." +msgstr "新規…" + +#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 +msgid "Clone Existing Repository" +msgstr "既存リポジトリを複製する" + +#: lib/choose_repository.tcl:116 +msgid "Clone..." +msgstr "複製…" + +#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 +msgid "Open Existing Repository" +msgstr "既存リポジトリを開く" + +#: lib/choose_repository.tcl:129 +msgid "Open..." +msgstr "開く…" + +#: lib/choose_repository.tcl:142 +msgid "Recent Repositories" +msgstr "最近使ったリポジトリ" + +#: lib/choose_repository.tcl:148 +msgid "Open Recent Repository:" +msgstr "最近使ったリポジトリを開く" + +#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 +#: lib/choose_repository.tcl:330 +#, tcl-format +msgid "Failed to create repository %s:" +msgstr "リポジトリ %s を作製できません:" + +#: lib/choose_repository.tcl:407 lib/branch_create.tcl:33 +msgid "Create" +msgstr "作成" + +#: lib/choose_repository.tcl:417 +msgid "Directory:" +msgstr "ディレクトリ:" + +#: lib/choose_repository.tcl:422 lib/choose_repository.tcl:509 +#: lib/choose_repository.tcl:518 lib/choose_repository.tcl:1074 +#: lib/browser.tcl:288 +msgid "Browse" +msgstr "ブラウズ" + +#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 +#: lib/choose_repository.tcl:1098 +msgid "Git Repository" +msgstr "GIT リポジトリ" -#: lib/choose_repository.tcl:502 +#: lib/choose_repository.tcl:472 +#, tcl-format +msgid "Directory %s already exists." +msgstr "ディレクトリ '%s' は既に存在します。" + +#: lib/choose_repository.tcl:476 +#, tcl-format +msgid "File %s already exists." +msgstr "ファイル '%s' は既に存在します。" + +#: lib/choose_repository.tcl:491 +msgid "Clone" +msgstr "複製" + +#: lib/choose_repository.tcl:504 +msgid "Source Location:" +msgstr "ソースの位置" + +#: lib/choose_repository.tcl:513 +msgid "Target Directory:" +msgstr "先ディレクトリ:" + +#: lib/choose_repository.tcl:523 msgid "Clone Type:" msgstr "複製方式:" -#: lib/choose_repository.tcl:508 +#: lib/choose_repository.tcl:528 msgid "Standard (Fast, Semi-Redundant, Hardlinks)" msgstr "標準(高速・中冗長度・ハードリンク)" -#: lib/choose_repository.tcl:514 +#: lib/choose_repository.tcl:533 msgid "Full Copy (Slower, Redundant Backup)" msgstr "全複写(低速・冗長バックアップ)" -#: lib/choose_repository.tcl:520 +#: lib/choose_repository.tcl:538 msgid "Shared (Fastest, Not Recommended, No Backup)" msgstr "共有(最高速・非推奨・バックアップ無し)" -#: lib/choose_repository.tcl:556 lib/choose_repository.tcl:603 -#: lib/choose_repository.tcl:749 lib/choose_repository.tcl:819 -#: lib/choose_repository.tcl:1058 lib/choose_repository.tcl:1066 +#: lib/choose_repository.tcl:545 +msgid "Recursively clone submodules too" +msgstr "サブモジュールも再帰的に複製する" + +#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 +#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 +#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 #, tcl-format msgid "Not a Git repository: %s" msgstr "Git リポジトリではありません: %s" -#: lib/choose_repository.tcl:592 +#: lib/choose_repository.tcl:615 msgid "Standard only available for local repository." msgstr "標準方式は同一計算機上のリポジトリにのみ使えます。" -#: lib/choose_repository.tcl:596 +#: lib/choose_repository.tcl:619 msgid "Shared only available for local repository." msgstr "共有方式は同一計算機上のリポジトリにのみ使えます。" -#: lib/choose_repository.tcl:617 +#: lib/choose_repository.tcl:640 #, tcl-format msgid "Location %s already exists." msgstr "'%s' は既に存在します。" -#: lib/choose_repository.tcl:628 +#: lib/choose_repository.tcl:651 msgid "Failed to configure origin" msgstr "origin を設定できませんでした" -#: lib/choose_repository.tcl:640 +#: lib/choose_repository.tcl:663 msgid "Counting objects" msgstr "オブジェクトを数えています" -#: lib/choose_repository.tcl:641 +#: lib/choose_repository.tcl:664 msgid "buckets" msgstr "バケツ" -#: lib/choose_repository.tcl:665 +#: lib/choose_repository.tcl:688 #, tcl-format msgid "Unable to copy objects/info/alternates: %s" msgstr "objects/info/alternates を複写できません: %s" -#: lib/choose_repository.tcl:701 +#: lib/choose_repository.tcl:724 #, tcl-format msgid "Nothing to clone from %s." msgstr "%s から複製する内容はありません" -#: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917 -#: lib/choose_repository.tcl:929 +#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 +#: lib/choose_repository.tcl:952 msgid "The 'master' branch has not been initialized." msgstr "'master' ブランチが初期化されていません" -#: lib/choose_repository.tcl:716 +#: lib/choose_repository.tcl:739 msgid "Hardlinks are unavailable. Falling back to copying." msgstr "ハードリンクが作れないので、コピーします" -#: lib/choose_repository.tcl:728 +#: lib/choose_repository.tcl:751 #, tcl-format msgid "Cloning from %s" msgstr "%s から複製しています" -#: lib/choose_repository.tcl:759 +#: lib/choose_repository.tcl:782 msgid "Copying objects" msgstr "オブジェクトを複写しています" -#: lib/choose_repository.tcl:760 +#: lib/choose_repository.tcl:783 msgid "KiB" msgstr "KiB" -#: lib/choose_repository.tcl:784 +#: lib/choose_repository.tcl:807 #, tcl-format msgid "Unable to copy object: %s" msgstr "オブジェクトを複写できません: %s" -#: lib/choose_repository.tcl:794 +#: lib/choose_repository.tcl:817 msgid "Linking objects" msgstr "オブジェクトを連結しています" -#: lib/choose_repository.tcl:795 +#: lib/choose_repository.tcl:818 msgid "objects" msgstr "オブジェクト" -#: lib/choose_repository.tcl:803 +#: lib/choose_repository.tcl:826 #, tcl-format msgid "Unable to hardlink object: %s" msgstr "オブジェクトをハードリンクできません: %s" -#: lib/choose_repository.tcl:858 +#: lib/choose_repository.tcl:881 msgid "Cannot fetch branches and objects. See console output for details." msgstr "ブランチやオブジェクトを取得できません。コンソール出力を見て下さい" -#: lib/choose_repository.tcl:869 +#: lib/choose_repository.tcl:892 msgid "Cannot fetch tags. See console output for details." msgstr "タグを取得できません。コンソール出力を見て下さい" -#: lib/choose_repository.tcl:893 +#: lib/choose_repository.tcl:916 msgid "Cannot determine HEAD. See console output for details." msgstr "HEAD を確定できません。コンソール出力を見て下さい" -#: lib/choose_repository.tcl:902 +#: lib/choose_repository.tcl:925 #, tcl-format msgid "Unable to cleanup %s" msgstr "%s を掃除できません" -#: lib/choose_repository.tcl:908 +#: lib/choose_repository.tcl:931 msgid "Clone failed." msgstr "複写に失敗しました。" -#: lib/choose_repository.tcl:915 +#: lib/choose_repository.tcl:938 msgid "No default branch obtained." msgstr "デフォールト・ブランチが取得されませんでした" -#: lib/choose_repository.tcl:926 +#: lib/choose_repository.tcl:949 #, tcl-format msgid "Cannot resolve %s as a commit." msgstr "%s をコミットとして解釈できません" -#: lib/choose_repository.tcl:938 +#: lib/choose_repository.tcl:961 msgid "Creating working directory" msgstr "作業ディレクトリを作成しています" -#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130 -#: lib/index.tcl:198 +#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 +#: lib/index.tcl:207 msgid "files" msgstr "ファイル" -#: lib/choose_repository.tcl:968 +#: lib/choose_repository.tcl:981 +msgid "Cannot clone submodules." +msgstr "サブモジュールが複製できません。" + +#: lib/choose_repository.tcl:990 +msgid "Cloning submodules" +msgstr "サブモジュールを複製しています" + +#: lib/choose_repository.tcl:1015 msgid "Initial file checkout failed." msgstr "初期チェックアウトに失敗しました" -#: lib/choose_repository.tcl:1011 +#: lib/choose_repository.tcl:1059 msgid "Open" msgstr "開く" -#: lib/choose_repository.tcl:1021 +#: lib/choose_repository.tcl:1069 msgid "Repository:" msgstr "リポジトリ:" -#: lib/choose_repository.tcl:1072 +#: lib/choose_repository.tcl:1118 #, tcl-format msgid "Failed to open repository %s:" msgstr "リポジトリ %s を開けません:" -#: lib/choose_rev.tcl:53 -msgid "This Detached Checkout" -msgstr "分離されたチェックアウト" +#: lib/branch_rename.tcl:15 lib/branch_rename.tcl:23 +msgid "Rename Branch" +msgstr "ブランチの名前変更" -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "リビジョン式:" +#: lib/branch_rename.tcl:28 +msgid "Rename" +msgstr "名前変更" -#: lib/choose_rev.tcl:74 -msgid "Local Branch" -msgstr "ローカル・ブランチ" +#: lib/branch_rename.tcl:38 +msgid "Branch:" +msgstr "ブランチ:" -#: lib/choose_rev.tcl:79 -msgid "Tracking Branch" -msgstr "トラッキング・ブランチ" +#: lib/branch_rename.tcl:46 +msgid "New Name:" +msgstr "新しい名前:" -#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 -msgid "Tag" -msgstr "タグ" +#: lib/branch_rename.tcl:81 +msgid "Please select a branch to rename." +msgstr "名前を変更するブランチを選んで下さい。" -#: lib/choose_rev.tcl:317 -#, tcl-format -msgid "Invalid revision: %s" -msgstr "無効なリビジョン: %s" +#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 +msgid "Please supply a branch name." +msgstr "ブランチ名を指定して下さい。" -#: lib/choose_rev.tcl:338 -msgid "No revision selected." -msgstr "リビジョンが未選択です。" +#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 +#, tcl-format +msgid "'%s' is not an acceptable branch name." +msgstr "'%s' はブランチ名に使えません。" -#: lib/choose_rev.tcl:346 -msgid "Revision expression is empty." -msgstr "リビジョン式が空です。" +#: lib/branch_rename.tcl:123 +#, tcl-format +msgid "Failed to rename '%s'." +msgstr "'%s'の名前変更に失敗しました。" -#: lib/choose_rev.tcl:531 -msgid "Updated" -msgstr "更新しました" +#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 +msgid "Cannot write shortcut:" +msgstr "ショートカットが書けません:" -#: lib/choose_rev.tcl:559 -msgid "URL" -msgstr "URL" +#: lib/shortcut.tcl:137 +msgid "Cannot write icon:" +msgstr "アイコンが書けません:" -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" -"訂正するコミットがそもそもありません。\n" -"\n" -"これから作るのは最初のコミットです。その前にはまだ訂正するようなコミットはあ" -"りません。\n" +#: lib/search.tcl:48 +msgid "Find:" +msgstr "検索:" -#: lib/commit.tcl:18 -msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" -msgstr "" -"マージ中にコミットの訂正はできません。\n" -"\n" -"現在はまだマージの途中です。先にこのマージを中止しないと、前のコミットの訂正" -"はできません\n" +#: lib/search.tcl:50 +msgid "Next" +msgstr "次" -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "訂正するコミットのデータを読めません:" +#: lib/search.tcl:51 +msgid "Prev" +msgstr "前" -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "ユーザの正体を確認できません:" +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "正規表現" -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "GIT_COMMITTER_IDENT が無効です:" +#: lib/search.tcl:54 +msgid "Case" +msgstr "大文字小文字を区別" -#: lib/commit.tcl:129 +#: lib/status_bar.tcl:87 #, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "警告: Tcl はエンコーディング '%s' をサポートしていません" - -#: lib/commit.tcl:149 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"最後にスキャンした状態はリポジトリの状態と合致しません。\n" -"\n" -"最後にスキャンして以後、別の Git プログラムがリポジトリを変更しています。新し" -"くコミットする前に、再スキャンが必要です。\n" -"\n" -"自動的に再スキャンを開始します。\n" +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%1$s ... %4$*i %6$s 中の %2$*i (%7$3i%%)" -#: lib/commit.tcl:172 -#, tcl-format -msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" -msgstr "" -"マージしていないファイルはコミットできません。\n" -"\n" -"ファイル %s にはマージ衝突が残っています。まず解決してコミット予定に加える必" -"要があります。\n" +#: lib/tools_dlg.tcl:22 +msgid "Add Tool" +msgstr "ツールの追加" -#: lib/commit.tcl:180 -#, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "" -"不明なファイル状態 %s です。\n" -"\n" -"ファイル %s は本プログラムではコミットできません。\n" +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "新規ツールコマンドの追加" -#: lib/commit.tcl:188 -msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" -msgstr "" -"コミットする変更がありません。\n" -"\n" -"最低一つの変更をコミット予定に加えてからコミットして下さい。\n" +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "全体に追加" -#: lib/commit.tcl:203 -msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" -"\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" -msgstr "" -"コミット・メッセージを入力して下さい。\n" -"\n" -"正しいコミット・メッセージは:\n" -"\n" -"- 第1行: 何をしたか、を1行で要約。\n" -"- 第2行: 空白\n" -"- 残りの行: なぜ、この変更が良い変更か、の説明。\n" +#: lib/tools_dlg.tcl:37 lib/remote_add.tcl:30 +msgid "Add" +msgstr "追加" -#: lib/commit.tcl:234 -msgid "Calling pre-commit hook..." -msgstr "コミット前フックを実行中・・・" +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "ツールの詳細" -#: lib/commit.tcl:249 -msgid "Commit declined by pre-commit hook." -msgstr "コミット前フックがコミットを拒否しました" +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "'/' でサブメニューを区切ります:" -#: lib/commit.tcl:272 -msgid "Calling commit-msg hook..." -msgstr "コミット・メッセージ・フックを実行中・・・" +#: lib/tools_dlg.tcl:51 lib/remote_add.tcl:41 lib/branch_create.tcl:44 +msgid "Name:" +msgstr "名前:" -#: lib/commit.tcl:287 -msgid "Commit declined by commit-msg hook." -msgstr "コミット・メッセージ・フックがコミットを拒否しました" +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "コマンド:" -#: lib/commit.tcl:300 -msgid "Committing changes..." -msgstr "変更点をコミット中・・・" +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "起動する前にダイアログを表示" -#: lib/commit.tcl:316 -msgid "write-tree failed:" -msgstr "write-tree が失敗しました:" +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "ユーザにコミットを一つ選ばせる ($REVISION にセットします)" -#: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382 -msgid "Commit failed." -msgstr "コミットに失敗しました。" +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" +msgstr "ユーザに他の引数を追加させる ($ARGS にセットします)" -#: lib/commit.tcl:334 +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "コマンドからの出力ウィンドウを見せない" + +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "パッチが選ばれているときだけ動かす($FILENAME が空でない)" + +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "ツール名を指定して下さい。" + +#: lib/tools_dlg.tcl:126 #, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "コミット %s は壊れています" +msgid "Tool '%s' already exists." +msgstr "ツール '%s' は既に存在します。" -#: lib/commit.tcl:339 +#: lib/tools_dlg.tcl:148 +#, tcl-format msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" +"Could not add tool:\n" +"%s" msgstr "" -"コミットする変更がありません。\n" -"\n" -"マージでなく、また、一つも変更点がありません。\n" -"\n" -"自動的に再スキャンを開始します。\n" +"ツールを追加できません:\n" +"%s" -#: lib/commit.tcl:346 -msgid "No changes to commit." -msgstr "コミットする変更がありません。" +#: lib/tools_dlg.tcl:187 +msgid "Remove Tool" +msgstr "ツールの削除" -#: lib/commit.tcl:360 -msgid "commit-tree failed:" -msgstr "commit-tree が失敗しました:" +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "ツールコマンドの削除" -#: lib/commit.tcl:381 -msgid "update-ref failed:" -msgstr "update-ref が失敗しました:" +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "削除" -#: lib/commit.tcl:469 -#, tcl-format -msgid "Created commit %s: %s" -msgstr "コミット %s を作成しました: %s" +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(青色はローカルレポジトリのツールです)" -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "実行中…お待ち下さい…" +#: lib/tools_dlg.tcl:292 +#, tcl-format +msgid "Run Command: %s" +msgstr "コマンドを起動: %s" -#: lib/console.tcl:186 -msgid "Success" -msgstr "成功" +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "引数" -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "エラー: コマンドが失敗しました" +#: lib/tools_dlg.tcl:321 lib/branch_checkout.tcl:35 lib/browser.tcl:297 +msgid "Revision" +msgstr "リビジョン" -#: lib/database.tcl:43 -msgid "Number of loose objects" -msgstr "ばらばらなオブジェクトの数" +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "OK" -#: lib/database.tcl:44 -msgid "Disk space used by loose objects" -msgstr "ばらばらなオブジェクトの使用するディスク量" +#: lib/tools.tcl:75 +#, tcl-format +msgid "Running %s requires a selected file." +msgstr "ファイルを選択してから %s を起動してください。" -#: lib/database.tcl:45 -msgid "Number of packed objects" -msgstr "パックされたオブジェクトの数" +#: lib/tools.tcl:91 +#, tcl-format +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "本当にファイル \"%2$s\"で %1$s を起動しますか?" -#: lib/database.tcl:46 -msgid "Number of packs" -msgstr "パックの数" +#: lib/tools.tcl:95 +#, tcl-format +msgid "Are you sure you want to run %s?" +msgstr "本当に %s を起動しますか?" -#: lib/database.tcl:47 -msgid "Disk space used by packed objects" -msgstr "パックされたオブジェクトの使用するディスク量" +#: lib/tools.tcl:116 +#, tcl-format +msgid "Tool: %s" +msgstr "ツール: %s" -#: lib/database.tcl:48 -msgid "Packed objects waiting for pruning" -msgstr "パックに存在するので捨てて良いオブジェクトの数" +#: lib/tools.tcl:117 +#, tcl-format +msgid "Running: %s" +msgstr "実行中: %s" -#: lib/database.tcl:49 -msgid "Garbage files" -msgstr "ゴミファイル" +#: lib/tools.tcl:155 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "ツールが完了しました: %s" -#: lib/database.tcl:72 -msgid "Compressing the object database" -msgstr "データベース圧縮" +#: lib/tools.tcl:157 +#, tcl-format +msgid "Tool failed: %s" +msgstr "ツールが失敗しました: %s" -#: lib/database.tcl:83 -msgid "Verifying the object database with fsck-objects" -msgstr "fsck-objects でオブジェクト・データベースを検証しています" +#: lib/mergetool.tcl:8 +msgid "Force resolution to the base version?" +msgstr "共通の版を使いますか?" -#: lib/database.tcl:107 -#, tcl-format -msgid "" -"This repository currently has approximately %i loose objects.\n" -"\n" -"To maintain optimal performance it is strongly recommended that you compress " -"the database.\n" -"\n" -"Compress the database now?" -msgstr "" -"このリポジトリにはおおよそ %i 個の個別オブジェクトがあります\n" -"\n" -"最適な性能を保つために、データベースを圧縮することを推奨します\n" -"\n" -"データベースを圧縮しますか?" +#: lib/mergetool.tcl:9 +msgid "Force resolution to this branch?" +msgstr "自分の側の版を使いますか?" -#: lib/date.tcl:25 -#, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Git から出た無効な日付: %s" +#: lib/mergetool.tcl:10 +msgid "Force resolution to the other branch?" +msgstr "相手制の版を使いますか?" -#: lib/diff.tcl:64 +#: lib/mergetool.tcl:14 #, tcl-format msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" +"Note that the diff shows only conflicting changes.\n" "\n" -"The modification date of this file was updated by another application, but " -"the content within the file was not changed.\n" +"%s will be overwritten.\n" "\n" -"A rescan will be automatically started to find other files which may have " -"the same state." +"This operation can be undone only by restarting the merge." msgstr "" -"変更がありません。\n" -"\n" -"%s には変更がありません。\n" +"競合する変更点だけが表示されていることに注意してください。\n" "\n" -"このファイルの変更時刻は他のアプリケーションによって更新されていますがファイ" -"ル内容には変更がありません。\n" +"%s は上書きされます。\n" "\n" -"同様な状態のファイルを探すために、自動的に再スキャンを開始します。" +"やり直すにはマージ全体をやり直してください。" -#: lib/diff.tcl:104 +#: lib/mergetool.tcl:45 #, tcl-format -msgid "Loading diff of %s..." -msgstr "%s の変更点をロード中…" - -#: lib/diff.tcl:125 -msgid "" -"LOCAL: deleted\n" -"REMOTE:\n" +msgid "File %s seems to have unresolved conflicts, still stage?" msgstr "" -"LOCAL: 削除\n" -"Remote:\n" +"ファイル %s には解決していない競合部分がまだあるようですが、いいですか?" -#: lib/diff.tcl:130 -msgid "" -"REMOTE: deleted\n" -"LOCAL:\n" -msgstr "" -"REMOTE: 削除\n" -"LOCAL:\n" +#: lib/mergetool.tcl:60 +#, tcl-format +msgid "Adding resolution for %s" +msgstr "%s への解決をステージします" -#: lib/diff.tcl:137 -msgid "LOCAL:\n" -msgstr "LOCAL:\n" +#: lib/mergetool.tcl:141 +msgid "Cannot resolve deletion or link conflicts using a tool" +msgstr "ツールでは削除やリンク競合は扱えません" -#: lib/diff.tcl:140 -msgid "REMOTE:\n" -msgstr "REMOTE\n" +#: lib/mergetool.tcl:146 +msgid "Conflict file does not exist" +msgstr "競合ファイルは存在しません。" -#: lib/diff.tcl:202 lib/diff.tcl:319 +#: lib/mergetool.tcl:246 #, tcl-format -msgid "Unable to display %s" -msgstr "%s を表示できません" - -#: lib/diff.tcl:203 -msgid "Error loading file:" -msgstr "ファイルを読む際のエラーです:" +msgid "Not a GUI merge tool: '%s'" +msgstr "GUI マージツールではありません: %s" -#: lib/diff.tcl:210 -msgid "Git Repository (subproject)" -msgstr "Git リポジトリ(サブプロジェクト)" +#: lib/mergetool.tcl:275 +#, tcl-format +msgid "Unsupported merge tool '%s'" +msgstr "マージツール '%s' はサポートしていません" -#: lib/diff.tcl:222 -msgid "* Binary file (not showing content)." -msgstr "* バイナリファイル(内容は表示しません)" +#: lib/mergetool.tcl:310 +msgid "Merge tool is already running, terminate it?" +msgstr "マージツールはすでに起動しています。終了しますか?" -#: lib/diff.tcl:227 +#: lib/mergetool.tcl:330 #, tcl-format msgid "" -"* Untracked file is %d bytes.\n" -"* Showing only first %d bytes.\n" +"Error retrieving versions:\n" +"%s" msgstr "" -"* 管理外のファイルの大きさは %d バイトです。\n" -"* 最初の %d バイトだけ表示しています。\n" +"版の取り出し時にエラーが出ました:\n" +"%s" -#: lib/diff.tcl:233 +#: lib/mergetool.tcl:350 #, tcl-format msgid "" +"Could not start the merge tool:\n" "\n" -"* Untracked file clipped here by %s.\n" -"* To see the entire file, use an external editor.\n" +"%s" msgstr "" +"マージツールが起動できません:\n" "\n" -"\n" -"* %s は管理外のファイルをここで切りおとしました。\n" -"* 全体を見るには外部エディタを使ってください。\n" - -#: lib/diff.tcl:482 -msgid "Failed to unstage selected hunk." -msgstr "選択されたパッチをコミット予定から外せません。" +"%s" -#: lib/diff.tcl:489 -msgid "Failed to stage selected hunk." -msgstr "選択されたパッチをコミット予定に加えられません。" +#: lib/mergetool.tcl:354 +msgid "Running merge tool..." +msgstr "マージツールを実行しています..." -#: lib/diff.tcl:568 -msgid "Failed to unstage selected line." -msgstr "選択されたパッチ行をコミット予定から外せません。" +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "マージツールが失敗しました。" -#: lib/diff.tcl:576 -msgid "Failed to stage selected line." -msgstr "選択されたパッチ行をコミット予定に加えられません。" +#: lib/option.tcl:11 +#, tcl-format +msgid "Invalid global encoding '%s'" +msgstr "全体エンコーディングに 無効な %s が指定されています" -#: lib/encoding.tcl:443 -msgid "Default" -msgstr "デフォールト" +#: lib/option.tcl:19 +#, tcl-format +msgid "Invalid repo encoding '%s'" +msgstr "リポジトリエンコーディングに 無効な %s が指定されています" -#: lib/encoding.tcl:448 +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "既定値に戻す" + +#: lib/option.tcl:123 +msgid "Save" +msgstr "保存" + +#: lib/option.tcl:133 #, tcl-format -msgid "System (%s)" -msgstr "システム (%s)" +msgid "%s Repository" +msgstr "%s リポジトリ" -#: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "その他" +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "大域(全てのリポジトリ)" -#: lib/error.tcl:20 lib/error.tcl:114 -msgid "error" -msgstr "エラー" +#: lib/option.tcl:140 +msgid "User Name" +msgstr "ユーザ名" -#: lib/error.tcl:36 -msgid "warning" -msgstr "警告" +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "電子メールアドレス" -#: lib/error.tcl:94 -msgid "You must correct the above errors before committing." -msgstr "コミットする前に、以上のエラーを修正して下さい" +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "マージコミットの要約" -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "インデックスをロックできません" +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "マージの冗長度" -#: lib/index.tcl:15 -msgid "Index Error" -msgstr "索引エラー" +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "マージ後に diffstat を表示" -#: lib/index.tcl:17 -msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." -msgstr "" -"GIT インデックスの更新が失敗しました。git-gui と同期をとるために再スキャンし" -"ます。" +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "マージツールを使用" -#: lib/index.tcl:28 -msgid "Continue" -msgstr "続行" +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "ファイル変更時刻を信頼する" -#: lib/index.tcl:31 -msgid "Unlock Index" -msgstr "インデックスのロック解除" +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "フェッチ中にトラッキングブランチを刈る" -#: lib/index.tcl:289 -#, tcl-format -msgid "Unstaging %s from commit" -msgstr "コミットから '%s' を降ろす" +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "トラッキングブランチを合わせる" -#: lib/index.tcl:328 -msgid "Ready to commit." -msgstr "コミット準備完了" +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "diff と注釈に textconv を使う" -#: lib/index.tcl:341 -#, tcl-format -msgid "Adding %s" -msgstr "コミットに %s を加えています" +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "変更されたファイルのみコピー検知を行なう" -#: lib/index.tcl:398 -#, tcl-format -msgid "Revert changes in file %s?" -msgstr "ファイル %s にした変更を元に戻しますか?" +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "最近使ったリポジトリ一覧の上限" -#: lib/index.tcl:400 -#, tcl-format -msgid "Revert changes in these %i files?" -msgstr "これら %i 個のファイルにした変更を元に戻しますか?" +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "コピーを検知する最少文字数" -#: lib/index.tcl:408 -msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "変更を元に戻すとコミット予定していない変更は全て失われます。" +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "注釈する履歴半径(日数)" -#: lib/index.tcl:411 -msgid "Do Nothing" -msgstr "何もしない" +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "diff の文脈行数" -#: lib/index.tcl:429 -msgid "Reverting selected files" -msgstr "選択されたファイルにした変更を元に戻します" +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "diff の追加引数" -#: lib/index.tcl:433 -#, tcl-format -msgid "Reverting %s" -msgstr "%s にした変更を元に戻します" +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "コミットメッセージのテキスト幅" -#: lib/merge.tcl:13 -msgid "" -"Cannot merge while amending.\n" -"\n" -"You must finish amending this commit before starting any type of merge.\n" -msgstr "" -"訂正中にはマージできません。\n" -"\n" -"訂正処理を完了するまでは新たにマージを開始できません。\n" +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "新しいブランチ名のテンプレート" -#: lib/merge.tcl:27 -msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" -"\n" -"The rescan will be automatically started now.\n" -msgstr "" -"最後にスキャンした状態はリポジトリの状態と合致しません。\n" -"\n" -"最後にスキャンして以後、別の Git プログラムがリポジトリを変更しています。マー" -"ジを開始する前に、再スキャンが必要です。\n" -"\n" -"自動的に再スキャンを開始します。\n" +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "ファイル内容のデフォールトエンコーディング" -#: lib/merge.tcl:45 -#, tcl-format -msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" -"\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" -msgstr "" -"衝突のあったマージの途中です。\n" -"\n" -"ファイル %s にはマージ中の衝突が残っています。\n" -"\n" -"このファイルの衝突を解決し、コミット予定に加えて、コミットすることでマージを" -"完了します。そうやって始めて、新たなマージを開始できるようになります。\n" +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "分離 HEAD のコミット前に警告する" -#: lib/merge.tcl:55 -#, tcl-format -msgid "" -"You are in the middle of a change.\n" -"\n" -"File %s is modified.\n" -"\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" -msgstr "" -"変更の途中です。\n" -"\n" -"ファイル %s は変更中です。\n" -"\n" -"現在のコミットを完了してからマージを開始して下さい。そうする方がマージに失敗" -"したときの回復が楽です。\n" +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "管理外のファイルをコミット予定する" -#: lib/merge.tcl:107 -#, tcl-format -msgid "%s of %s" -msgstr "%s の %s ブランチ" +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "管理外のファイルを表示する" -#: lib/merge.tcl:120 -#, tcl-format -msgid "Merging %s and %s..." -msgstr "%s と %s をマージ中・・・" +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "タブ幅" -#: lib/merge.tcl:131 -msgid "Merge completed successfully." -msgstr "マージが完了しました" +#: lib/option.tcl:210 +msgid "Change" +msgstr "変更" -#: lib/merge.tcl:133 -msgid "Merge failed. Conflict resolution is required." -msgstr "マージが失敗しました。衝突の解決が必要です。" +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "スペルチェック辞書" + +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "フォントを変更" -#: lib/merge.tcl:158 +#: lib/option.tcl:288 #, tcl-format -msgid "Merge Into %s" -msgstr "%s にマージ" +msgid "Choose %s" +msgstr "%s を選択" -#: lib/merge.tcl:177 -msgid "Revision To Merge" -msgstr "マージするリビジョン" +#: lib/option.tcl:294 +msgid "pt." +msgstr "ポイント" -#: lib/merge.tcl:212 -msgid "" -"Cannot abort while amending.\n" -"\n" -"You must finish amending this commit.\n" -msgstr "" -"訂正中には中止できません。\n" -"\n" -"まず今のコミット訂正を完了させて下さい。\n" +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "設定" -#: lib/merge.tcl:222 -msgid "" -"Abort merge?\n" -"\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with aborting the current merge?" -msgstr "" -"マージを中断しますか?\n" -"\n" -"現在のマージを中断すると、コミットしていない全ての変更が失われます。\n" -"\n" -"マージを中断してよろしいですか?" +#: lib/option.tcl:310 lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 +msgid "Options" +msgstr "オプション" -#: lib/merge.tcl:228 -msgid "" -"Reset changes?\n" -"\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" -"\n" -"Continue with resetting the current changes?" -msgstr "" -"変更点をリセットしますか?\n" -"\n" -"変更点をリセットすると、コミットしていない全ての変更が失われます。\n" -"\n" -"リセットしてよろしいですか?" +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "完全にオプションを保存できません:" -#: lib/merge.tcl:239 -msgid "Aborting" -msgstr "中断しています" +#: lib/database.tcl:42 +msgid "Number of loose objects" +msgstr "ばらばらなオブジェクトの数" -#: lib/merge.tcl:239 -msgid "files reset" -msgstr "リセットしたファイル" +#: lib/database.tcl:43 +msgid "Disk space used by loose objects" +msgstr "ばらばらなオブジェクトの使用するディスク量" -#: lib/merge.tcl:267 -msgid "Abort failed." -msgstr "中断に失敗しました。" +#: lib/database.tcl:44 +msgid "Number of packed objects" +msgstr "パックされたオブジェクトの数" -#: lib/merge.tcl:269 -msgid "Abort completed. Ready." -msgstr "中断完了。" +#: lib/database.tcl:45 +msgid "Number of packs" +msgstr "パックの数" -#: lib/mergetool.tcl:8 -msgid "Force resolution to the base version?" -msgstr "共通の版を使いますか?" +#: lib/database.tcl:46 +msgid "Disk space used by packed objects" +msgstr "パックされたオブジェクトの使用するディスク量" -#: lib/mergetool.tcl:9 -msgid "Force resolution to this branch?" -msgstr "自分の側の版を使いますか?" +#: lib/database.tcl:47 +msgid "Packed objects waiting for pruning" +msgstr "パックに存在するので捨てて良いオブジェクトの数" -#: lib/mergetool.tcl:10 -msgid "Force resolution to the other branch?" -msgstr "相手制の版を使いますか?" +#: lib/database.tcl:48 +msgid "Garbage files" +msgstr "ゴミファイル" -#: lib/mergetool.tcl:14 +#: lib/database.tcl:72 +msgid "Compressing the object database" +msgstr "データベース圧縮" + +#: lib/database.tcl:83 +msgid "Verifying the object database with fsck-objects" +msgstr "fsck-objects でオブジェクト・データベースを検証しています" + +#: lib/database.tcl:107 #, tcl-format msgid "" -"Note that the diff shows only conflicting changes.\n" +"This repository currently has approximately %i loose objects.\n" "\n" -"%s will be overwritten.\n" +"To maintain optimal performance it is strongly recommended that you compress " +"the database.\n" "\n" -"This operation can be undone only by restarting the merge." +"Compress the database now?" msgstr "" -"競合する変更点だけが表示されていることに注意してください。\n" +"このリポジトリにはおおよそ %i 個の個別オブジェクトがあります\n" "\n" -"%s は上書きされます。\n" +"最適な性能を保つために、データベースを圧縮することを推奨します\n" "\n" -"やり直すにはマージ全体をやり直してください。" - -#: lib/mergetool.tcl:45 -#, tcl-format -msgid "File %s seems to have unresolved conflicts, still stage?" -msgstr "" -"ファイル %s には解決していない競合部分がまだあるようですが、いいですか?" +"データベースを圧縮しますか?" -#: lib/mergetool.tcl:60 +#: lib/transport.tcl:6 lib/remote_add.tcl:132 #, tcl-format -msgid "Adding resolution for %s" -msgstr "%s への解決をステージします" - -#: lib/mergetool.tcl:141 -msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "ツールでは削除やリンク競合は扱えません" - -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "競合ファイルは存在しません。" +msgid "fetch %s" +msgstr "%s を取得" -#: lib/mergetool.tcl:264 +#: lib/transport.tcl:7 #, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "GUI マージツールではありません: %s" +msgid "Fetching new changes from %s" +msgstr "%s から新しい変更をフェッチしています" -#: lib/mergetool.tcl:268 +#: lib/transport.tcl:18 #, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "マージツール '%s' はサポートしていません" - -#: lib/mergetool.tcl:303 -msgid "Merge tool is already running, terminate it?" -msgstr "マージツールはすでに起動しています。終了しますか?" +msgid "remote prune %s" +msgstr "リモート刈込 %s" -#: lib/mergetool.tcl:323 +#: lib/transport.tcl:19 #, tcl-format -msgid "" -"Error retrieving versions:\n" -"%s" -msgstr "" -"版の取り出し時にエラーが出ました:\n" -"%s" +msgid "Pruning tracking branches deleted from %s" +msgstr "%s から削除されたトラッキング・ブランチを刈っています" -#: lib/mergetool.tcl:343 -#, tcl-format -msgid "" -"Could not start the merge tool:\n" -"\n" -"%s" -msgstr "" -"マージツールが起動できません:\n" -"\n" -"%s" +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "すべてのリモートを取得" -#: lib/mergetool.tcl:347 -msgid "Running merge tool..." -msgstr "マージツールを実行しています..." +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "すべてのリモートから新しい変更をフェッチしています" -#: lib/mergetool.tcl:375 lib/mergetool.tcl:383 -msgid "Merge tool failed." -msgstr "マージツールが失敗しました。" +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "リモート刈込 すべてのリモート" -#: lib/option.tcl:11 -#, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "全体エンコーディングに 無効な %s が指定されています" +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" +msgstr "すべてのリモートから削除されたトラッキング・ブランチを刈っています" -#: lib/option.tcl:19 +#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110 +#: lib/remote_add.tcl:162 #, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "リポジトリエンコーディングに 無効な %s が指定されています" +msgid "push %s" +msgstr "%s をプッシュ" -#: lib/option.tcl:117 -msgid "Restore Defaults" -msgstr "既定値に戻す" +#: lib/transport.tcl:55 +#, tcl-format +msgid "Pushing changes to %s" +msgstr "%s へ変更をプッシュしています" -#: lib/option.tcl:121 -msgid "Save" -msgstr "保存" +#: lib/transport.tcl:93 +#, tcl-format +msgid "Mirroring to %s" +msgstr "%s へミラーしています" -#: lib/option.tcl:131 +#: lib/transport.tcl:111 #, tcl-format -msgid "%s Repository" -msgstr "%s リポジトリ" +msgid "Pushing %s %s to %s" +msgstr "%3$s へ %1$s %2$s をプッシュしています" -#: lib/option.tcl:132 -msgid "Global (All Repositories)" -msgstr "大域(全てのリポジトリ)" +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "ブランチをプッシュ" -#: lib/option.tcl:138 -msgid "User Name" -msgstr "ユーザ名" +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "元のブランチ" -#: lib/option.tcl:139 -msgid "Email Address" -msgstr "電子メールアドレス" +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "送り先リポジトリ" -#: lib/option.tcl:141 -msgid "Summarize Merge Commits" -msgstr "マージコミットの要約" +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "通信オプション" -#: lib/option.tcl:142 -msgid "Merge Verbosity" -msgstr "マージの冗長度" +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" +msgstr "既存ブランチを上書き(変更を破棄する可能性があります)" -#: lib/option.tcl:143 -msgid "Show Diffstat After Merge" -msgstr "マージ後に diffstat を表示" +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "Thin Pack を使う(遅いネットワーク接続)" -#: lib/option.tcl:144 -msgid "Use Merge Tool" -msgstr "マージツールを使用" +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "タグを含める" -#: lib/option.tcl:146 -msgid "Trust File Modification Timestamps" -msgstr "ファイル変更時刻を信頼する" +#: lib/choose_font.tcl:41 +msgid "Select" +msgstr "選択" -#: lib/option.tcl:147 -msgid "Prune Tracking Branches During Fetch" -msgstr "フェッチ中にトラッキングブランチを刈る" +#: lib/choose_font.tcl:55 +msgid "Font Family" +msgstr "フォント・ファミリー" -#: lib/option.tcl:148 -msgid "Match Tracking Branches" -msgstr "トラッキングブランチを合わせる" +#: lib/choose_font.tcl:76 +msgid "Font Size" +msgstr "フォントの大きさ" -#: lib/option.tcl:149 -msgid "Blame Copy Only On Changed Files" -msgstr "変更されたファイルのみコピー検知を行なう" +#: lib/choose_font.tcl:93 +msgid "Font Example" +msgstr "フォント・サンプル" -#: lib/option.tcl:150 -msgid "Minimum Letters To Blame Copy On" -msgstr "コピーを検知する最少文字数" +#: lib/choose_font.tcl:105 +msgid "" +"This is example text.\n" +"If you like this text, it can be your font." +msgstr "" +"これはサンプル文です。\n" +"このフォントが気に入ればお使いになれます。" -#: lib/option.tcl:151 -msgid "Blame History Context Radius (days)" -msgstr "註釈する履歴半径(日数)" +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "プッシュ先" -#: lib/option.tcl:152 -msgid "Number of Diff Context Lines" -msgstr "diff の文脈行数" +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "リモートを削除" -#: lib/option.tcl:153 -msgid "Commit Message Text Width" -msgstr "コミットメッセージのテキスト幅" +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "から刈込む…" -#: lib/option.tcl:154 -msgid "New Branch Name Template" -msgstr "新しいブランチ名のテンプレート" +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "取得元" -#: lib/option.tcl:155 -msgid "Default File Contents Encoding" -msgstr "ファイル内容のデフォールトエンコーディング" +#: lib/diff.tcl:77 +#, tcl-format +msgid "" +"No differences detected.\n" +"\n" +"%s has no changes.\n" +"\n" +"The modification date of this file was updated by another application, but " +"the content within the file was not changed.\n" +"\n" +"A rescan will be automatically started to find other files which may have " +"the same state." +msgstr "" +"変更がありません。\n" +"\n" +"%s には変更がありません。\n" +"\n" +"このファイルの変更時刻は他のアプリケーションによって更新されていますがファイ" +"ル内容には変更がありません。\n" +"\n" +"同様な状態のファイルを探すために、自動的に再スキャンを開始します。" -#: lib/option.tcl:203 -msgid "Change" -msgstr "変更" +#: lib/diff.tcl:117 +#, tcl-format +msgid "Loading diff of %s..." +msgstr "%s の変更点をロード中…" -#: lib/option.tcl:230 -msgid "Spelling Dictionary:" -msgstr "スペルチェック辞書" +#: lib/diff.tcl:140 +msgid "" +"LOCAL: deleted\n" +"REMOTE:\n" +msgstr "" +"LOCAL: 削除\n" +"Remote:\n" -#: lib/option.tcl:254 -msgid "Change Font" -msgstr "フォントを変更" +#: lib/diff.tcl:145 +msgid "" +"REMOTE: deleted\n" +"LOCAL:\n" +msgstr "" +"REMOTE: 削除\n" +"LOCAL:\n" + +#: lib/diff.tcl:152 +msgid "LOCAL:\n" +msgstr "LOCAL:\n" -#: lib/option.tcl:258 +#: lib/diff.tcl:155 +msgid "REMOTE:\n" +msgstr "REMOTE\n" + +#: lib/diff.tcl:217 lib/diff.tcl:355 #, tcl-format -msgid "Choose %s" -msgstr "%s を選択" +msgid "Unable to display %s" +msgstr "%s を表示できません" -#: lib/option.tcl:264 -msgid "pt." -msgstr "ポイント" +#: lib/diff.tcl:218 +msgid "Error loading file:" +msgstr "ファイルを読む際のエラーです:" -#: lib/option.tcl:278 -msgid "Preferences" -msgstr "設定" +#: lib/diff.tcl:225 +msgid "Git Repository (subproject)" +msgstr "Git リポジトリ(サブプロジェクト)" -#: lib/option.tcl:314 -msgid "Failed to completely save options:" -msgstr "完全にオプションを保存できません:" +#: lib/diff.tcl:237 +msgid "* Binary file (not showing content)." +msgstr "* バイナリファイル(内容は表示しません)" -#: lib/remote.tcl:163 -msgid "Remove Remote" -msgstr "リモートを削除" +#: lib/diff.tcl:242 +#, tcl-format +msgid "" +"* Untracked file is %d bytes.\n" +"* Showing only first %d bytes.\n" +msgstr "" +"* 管理外のファイルの大きさは %d バイトです。\n" +"* 最初の %d バイトだけ表示しています。\n" -#: lib/remote.tcl:168 -msgid "Prune from" -msgstr "から刈込む…" +#: lib/diff.tcl:248 +#, tcl-format +msgid "" +"\n" +"* Untracked file clipped here by %s.\n" +"* To see the entire file, use an external editor.\n" +msgstr "" +"\n" +"\n" +"* %s は管理外のファイルをここで切りおとしました。\n" +"* 全体を見るには外部エディタを使ってください。\n" -#: lib/remote.tcl:173 -msgid "Fetch from" -msgstr "取得元" +#: lib/diff.tcl:578 +msgid "Failed to unstage selected hunk." +msgstr "選択されたパッチをコミット予定から外せません。" -#: lib/remote.tcl:215 -msgid "Push to" -msgstr "プッシュ先" +#: lib/diff.tcl:585 +msgid "Failed to stage selected hunk." +msgstr "選択されたパッチをコミット予定に加えられません。" -#: lib/remote_add.tcl:19 -msgid "Add Remote" -msgstr "リモートを追加" +#: lib/diff.tcl:664 +msgid "Failed to unstage selected line." +msgstr "選択されたパッチ行をコミット予定から外せません。" -#: lib/remote_add.tcl:24 -msgid "Add New Remote" -msgstr "リモートを新規に追加" +#: lib/diff.tcl:672 +msgid "Failed to stage selected line." +msgstr "選択されたパッチ行をコミット予定に加えられません。" -#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36 -msgid "Add" -msgstr "追加" +#: lib/branch_checkout.tcl:16 lib/branch_checkout.tcl:21 +msgid "Checkout Branch" +msgstr "ブランチをチェックアウト" -#: lib/remote_add.tcl:37 -msgid "Remote Details" -msgstr "リモートの詳細" +#: lib/branch_checkout.tcl:26 +msgid "Checkout" +msgstr "チェックアウト" -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "場所:" +#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 +msgid "Fetch Tracking Branch" +msgstr "トラッキング・ブランチをフェッチ" -#: lib/remote_add.tcl:62 -msgid "Further Action" -msgstr "その他の動作" +#: lib/branch_checkout.tcl:47 +msgid "Detach From Local Branch" +msgstr "ローカル・ブランチから削除" -#: lib/remote_add.tcl:65 -msgid "Fetch Immediately" -msgstr "即座に取得" +#: lib/index.tcl:6 +msgid "Unable to unlock the index." +msgstr "インデックスをロックできません" -#: lib/remote_add.tcl:71 -msgid "Initialize Remote Repository and Push" -msgstr "リモートレポジトリを初期化してプッシュ" +#: lib/index.tcl:17 +msgid "Index Error" +msgstr "索引エラー" -#: lib/remote_add.tcl:77 -msgid "Do Nothing Else Now" -msgstr "何もしない" +#: lib/index.tcl:19 +msgid "" +"Updating the Git index failed. A rescan will be automatically started to " +"resynchronize git-gui." +msgstr "" +"GIT インデックスの更新が失敗しました。git-gui と同期をとるために再スキャンし" +"ます。" + +#: lib/index.tcl:30 +msgid "Continue" +msgstr "続行" -#: lib/remote_add.tcl:101 -msgid "Please supply a remote name." -msgstr "リモート名を指定して下さい。" +#: lib/index.tcl:33 +msgid "Unlock Index" +msgstr "インデックスのロック解除" -#: lib/remote_add.tcl:114 +#: lib/index.tcl:298 #, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "'%s' はリモート名に使えません。" +msgid "Unstaging %s from commit" +msgstr "コミットから '%s' を降ろす" -#: lib/remote_add.tcl:125 -#, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "場所 '%2$s' のリモート '%1$s'の名前変更に失敗しました。" +#: lib/index.tcl:337 +msgid "Ready to commit." +msgstr "コミット準備完了" -#: lib/remote_add.tcl:133 lib/transport.tcl:6 +#: lib/index.tcl:350 #, tcl-format -msgid "fetch %s" -msgstr "%s を取得" +msgid "Adding %s" +msgstr "コミットに %s を加えています" -#: lib/remote_add.tcl:134 +#: lib/index.tcl:380 #, tcl-format -msgid "Fetching the %s" -msgstr "%s からフェッチしています" +msgid "Stage %d untracked files?" +msgstr "管理外の %d ファイルをコミット予定としますか?" -#: lib/remote_add.tcl:157 +#: lib/index.tcl:428 #, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "リポジトリ '%s' を初期化できません。" +msgid "Revert changes in file %s?" +msgstr "ファイル %s にした変更を元に戻しますか?" -#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63 -#: lib/transport.tcl:81 +#: lib/index.tcl:430 #, tcl-format -msgid "push %s" -msgstr "%s をプッシュ" +msgid "Revert changes in these %i files?" +msgstr "これら %i 個のファイルにした変更を元に戻しますか?" -#: lib/remote_add.tcl:164 -#, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "%2$s にある %1$s をセットアップします" +#: lib/index.tcl:438 +msgid "Any unstaged changes will be permanently lost by the revert." +msgstr "変更を元に戻すとコミット予定していない変更は全て失われます。" -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "遠隔でブランチ削除" +#: lib/index.tcl:441 +msgid "Do Nothing" +msgstr "何もしない" -#: lib/remote_branch_delete.tcl:47 -msgid "From Repository" -msgstr "元のリポジトリ" +#: lib/index.tcl:459 +msgid "Reverting selected files" +msgstr "選択されたファイルにした変更を元に戻します" -#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134 -msgid "Remote:" -msgstr "リモート:" +#: lib/index.tcl:463 +#, tcl-format +msgid "Reverting %s" +msgstr "%s にした変更を元に戻します" -#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149 -msgid "Arbitrary Location:" -msgstr "任意の位置:" +#: lib/sshkey.tcl:31 +msgid "No keys found." +msgstr "キーがありません。" -#: lib/remote_branch_delete.tcl:84 -msgid "Branches" -msgstr "ブランチ" +#: lib/sshkey.tcl:34 +#, tcl-format +msgid "Found a public key in: %s" +msgstr "公開鍵がありました: %s" -#: lib/remote_branch_delete.tcl:109 -msgid "Delete Only If" -msgstr "条件付で削除" +#: lib/sshkey.tcl:40 +msgid "Generate Key" +msgstr "鍵を生成" -#: lib/remote_branch_delete.tcl:111 -msgid "Merged Into:" -msgstr "マージ先:" +#: lib/sshkey.tcl:58 +msgid "Copy To Clipboard" +msgstr "クリップボードにコピー" -#: lib/remote_branch_delete.tcl:152 -msgid "A branch is required for 'Merged Into'." -msgstr "'マージ先' にはブランチが必要です。" +#: lib/sshkey.tcl:72 +msgid "Your OpenSSH Public Key" +msgstr "あなたの OpenSSH 公開鍵" + +#: lib/sshkey.tcl:80 +msgid "Generating..." +msgstr "生成中..." -#: lib/remote_branch_delete.tcl:184 +#: lib/sshkey.tcl:86 #, tcl-format msgid "" -"The following branches are not completely merged into %s:\n" +"Could not start ssh-keygen:\n" "\n" -" - %s" +"%s" msgstr "" -"以下のブランチは %s に完全にマージされていません:\n" +"ssh-keygen を起動できません:\n" "\n" -" - %s" - -#: lib/remote_branch_delete.tcl:189 -#, tcl-format -msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." -msgstr "" -"必要なコミットが不足しているために、マージ検査が失敗しました。まず %s から" -"フェッチして下さい。" - -#: lib/remote_branch_delete.tcl:207 -msgid "Please select one or more branches to delete." -msgstr "削除するブランチを選択して下さい。" +"%s" -#: lib/remote_branch_delete.tcl:226 -#, tcl-format -msgid "Deleting branches from %s" -msgstr "%s からブランチを削除しています。" +#: lib/sshkey.tcl:113 +msgid "Generation failed." +msgstr "生成に失敗しました。" -#: lib/remote_branch_delete.tcl:292 -msgid "No repository selected." -msgstr "リポジトリが選択されていません。" +#: lib/sshkey.tcl:120 +msgid "Generation succeeded, but no keys found." +msgstr "生成には成功しましたが、鍵が見つかりません。" -#: lib/remote_branch_delete.tcl:297 +#: lib/sshkey.tcl:123 #, tcl-format -msgid "Scanning %s..." -msgstr "%s をスキャンしています…" - -#: lib/search.tcl:21 -msgid "Find:" -msgstr "検索:" - -#: lib/search.tcl:23 -msgid "Next" -msgstr "次" +msgid "Your key is in: %s" +msgstr "あなたの鍵は %s にあります" -#: lib/search.tcl:24 -msgid "Prev" -msgstr "前" +#: lib/commit.tcl:9 +msgid "" +"There is nothing to amend.\n" +"\n" +"You are about to create the initial commit. There is no commit before this " +"to amend.\n" +msgstr "" +"訂正するコミットがそもそもありません。\n" +"\n" +"これから作るのは最初のコミットです。その前にはまだ訂正するようなコミットはあ" +"りません。\n" -#: lib/search.tcl:25 -msgid "Case-Sensitive" -msgstr "大文字小文字を区別" +#: lib/commit.tcl:18 +msgid "" +"Cannot amend while merging.\n" +"\n" +"You are currently in the middle of a merge that has not been fully " +"completed. You cannot amend the prior commit unless you first abort the " +"current merge activity.\n" +msgstr "" +"マージ中にコミットの訂正はできません。\n" +"\n" +"現在はまだマージの途中です。先にこのマージを中止しないと、前のコミットの訂正" +"はできません\n" -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "ショートカットが書けません:" +#: lib/commit.tcl:48 +msgid "Error loading commit data for amend:" +msgstr "訂正するコミットのデータを読めません:" -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "アイコンが書けません:" +#: lib/commit.tcl:75 +msgid "Unable to obtain your identity:" +msgstr "ユーザの正体を確認できません:" -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "サポートされていないスペルチェッカーです" +#: lib/commit.tcl:80 +msgid "Invalid GIT_COMMITTER_IDENT:" +msgstr "GIT_COMMITTER_IDENT が無効です:" -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "スペルチェック機能は使えません" +#: lib/commit.tcl:129 +#, tcl-format +msgid "warning: Tcl does not support encoding '%s'." +msgstr "警告: Tcl はエンコーディング '%s' をサポートしていません" -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "スペルチェックの設定が不正です" +#: lib/commit.tcl:149 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before another commit can be created.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"最後にスキャンした状態はリポジトリの状態と合致しません。\n" +"\n" +"最後にスキャンして以後、別の Git プログラムがリポジトリを変更しています。新し" +"くコミットする前に、再スキャンが必要です。\n" +"\n" +"自動的に再スキャンを開始します。\n" -#: lib/spellcheck.tcl:70 +#: lib/commit.tcl:173 #, tcl-format -msgid "Reverting dictionary to %s." -msgstr "辞書を %s に巻き戻します" - -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "スペルチェッカーの起動に失敗しました" +msgid "" +"Unmerged files cannot be committed.\n" +"\n" +"File %s has merge conflicts. You must resolve them and stage the file " +"before committing.\n" +msgstr "" +"マージしていないファイルはコミットできません。\n" +"\n" +"ファイル %s にはマージ衝突が残っています。まず解決してコミット予定に加える必" +"要があります。\n" -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "スペルチェッカーが判別できません" +#: lib/commit.tcl:181 +#, tcl-format +msgid "" +"Unknown file state %s detected.\n" +"\n" +"File %s cannot be committed by this program.\n" +msgstr "" +"不明なファイル状態 %s です。\n" +"\n" +"ファイル %s は本プログラムではコミットできません。\n" -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "提案なし" +#: lib/commit.tcl:189 +msgid "" +"No changes to commit.\n" +"\n" +"You must stage at least 1 file before you can commit.\n" +msgstr "" +"コミットする変更がありません。\n" +"\n" +"最低一つの変更をコミット予定に加えてからコミットして下さい。\n" -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "スペルチェッカーが予想外の EOF を返しました" +#: lib/commit.tcl:204 +msgid "" +"Please supply a commit message.\n" +"\n" +"A good commit message has the following format:\n" +"\n" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" +msgstr "" +"コミット・メッセージを入力して下さい。\n" +"\n" +"正しいコミット・メッセージは:\n" +"\n" +"- 第1行: 何をしたか、を1行で要約。\n" +"- 第2行: 空白\n" +"- 残りの行: なぜ、この変更が良い変更か、の説明。\n" -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "スペルチェック失敗" +#: lib/commit.tcl:235 +msgid "Calling pre-commit hook..." +msgstr "コミット前フックを実行中・・・" -#: lib/sshkey.tcl:31 -msgid "No keys found." -msgstr "キーがありません。" +#: lib/commit.tcl:250 +msgid "Commit declined by pre-commit hook." +msgstr "コミット前フックがコミットを拒否しました" -#: lib/sshkey.tcl:34 -#, tcl-format -msgid "Found a public key in: %s" -msgstr "公開鍵がありました: %s" +#: lib/commit.tcl:269 +msgid "" +"You are about to commit on a detached head. This is a potentially dangerous " +"thing to do because if you switch to another branch you will lose your " +"changes and it can be difficult to retrieve them later from the reflog. You " +"should probably cancel this commit and create a new branch to continue.\n" +" \n" +" Do you really want to proceed with your Commit?" +msgstr "" +"分離 HEAD での変更をコミットしようとしています。" +"これは潜在的に危険な行為で、理由は別のブランチへの切り替えで" +"変更が消失し、reflog からの事後復旧も困難となるためです。" +"おそらくこのコミットはキャンセルし新しく作成したブランチで" +"行うべきです。\n" +"\n" +" 本当にコミットを続行しますか?" -#: lib/sshkey.tcl:40 -msgid "Generate Key" -msgstr "鍵を生成" +#: lib/commit.tcl:290 +msgid "Calling commit-msg hook..." +msgstr "コミット・メッセージ・フックを実行中・・・" -#: lib/sshkey.tcl:56 -msgid "Copy To Clipboard" -msgstr "クリップボードにコピー" +#: lib/commit.tcl:305 +msgid "Commit declined by commit-msg hook." +msgstr "コミット・メッセージ・フックがコミットを拒否しました" -#: lib/sshkey.tcl:70 -msgid "Your OpenSSH Public Key" -msgstr "あなたの OpenSSH 公開鍵" +#: lib/commit.tcl:318 +msgid "Committing changes..." +msgstr "変更点をコミット中・・・" -#: lib/sshkey.tcl:78 -msgid "Generating..." -msgstr "生成中..." +#: lib/commit.tcl:334 +msgid "write-tree failed:" +msgstr "write-tree が失敗しました:" + +#: lib/commit.tcl:335 lib/commit.tcl:379 lib/commit.tcl:400 +msgid "Commit failed." +msgstr "コミットに失敗しました。" -#: lib/sshkey.tcl:84 +#: lib/commit.tcl:352 #, tcl-format +msgid "Commit %s appears to be corrupt" +msgstr "コミット %s は壊れています" + +#: lib/commit.tcl:357 msgid "" -"Could not start ssh-keygen:\n" +"No changes to commit.\n" "\n" -"%s" +"No files were modified by this commit and it was not a merge commit.\n" +"\n" +"A rescan will be automatically started now.\n" msgstr "" -"ssh-keygen を起動できません:\n" +"コミットする変更がありません。\n" "\n" -"%s" - -#: lib/sshkey.tcl:111 -msgid "Generation failed." -msgstr "生成に失敗しました。" +"マージでなく、また、一つも変更点がありません。\n" +"\n" +"自動的に再スキャンを開始します。\n" -#: lib/sshkey.tcl:118 -msgid "Generation succeeded, but no keys found." -msgstr "生成には成功しましたが、鍵が見つかりません。" +#: lib/commit.tcl:364 +msgid "No changes to commit." +msgstr "コミットする変更がありません。" -#: lib/sshkey.tcl:121 -#, tcl-format -msgid "Your key is in: %s" -msgstr "あなたの鍵は %s にあります" +#: lib/commit.tcl:378 +msgid "commit-tree failed:" +msgstr "commit-tree が失敗しました:" -#: lib/status_bar.tcl:83 -#, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%1$s ... %4$*i %6$s 中の %2$*i (%7$3i%%)" +#: lib/commit.tcl:399 +msgid "update-ref failed:" +msgstr "update-ref が失敗しました:" -#: lib/tools.tcl:75 +#: lib/commit.tcl:492 #, tcl-format -msgid "Running %s requires a selected file." -msgstr "ファイルを選択してから %s を起動してください。" +msgid "Created commit %s: %s" +msgstr "コミット %s を作成しました: %s" -#: lib/tools.tcl:90 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "本当に %s を起動しますか?" +#: lib/browser.tcl:17 +msgid "Starting..." +msgstr "起動中…" -#: lib/tools.tcl:110 -#, tcl-format -msgid "Tool: %s" -msgstr "ツール: %s" +#: lib/browser.tcl:27 +msgid "File Browser" +msgstr "ファイル・ブラウザ" -#: lib/tools.tcl:111 +#: lib/browser.tcl:132 lib/browser.tcl:149 #, tcl-format -msgid "Running: %s" -msgstr "実行中: %s" +msgid "Loading %s..." +msgstr "%s をロード中…" -#: lib/tools.tcl:149 -#, tcl-format -msgid "Tool completed successfully: %s" -msgstr "ツールが完了しました: %s" +#: lib/browser.tcl:193 +msgid "[Up To Parent]" +msgstr "[上位フォルダへ]" -#: lib/tools.tcl:151 -#, tcl-format -msgid "Tool failed: %s" -msgstr "ツールが失敗しました: %s" +#: lib/browser.tcl:275 lib/browser.tcl:282 +msgid "Browse Branch Files" +msgstr "現在のブランチのファイルを見る" -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "ツールの追加" +#: lib/remote_add.tcl:20 +msgid "Add Remote" +msgstr "リモートを追加" -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "新規ツールコマンドの追加" +#: lib/remote_add.tcl:25 +msgid "Add New Remote" +msgstr "リモートを新規に追加" -#: lib/tools_dlg.tcl:33 -msgid "Add globally" -msgstr "全体に追加" +#: lib/remote_add.tcl:39 +msgid "Remote Details" +msgstr "リモートの詳細" -#: lib/tools_dlg.tcl:45 -msgid "Tool Details" -msgstr "ツールの詳細" +#: lib/remote_add.tcl:50 +msgid "Location:" +msgstr "場所:" -#: lib/tools_dlg.tcl:48 -msgid "Use '/' separators to create a submenu tree:" -msgstr "'/' でサブメニューを区切ります:" +#: lib/remote_add.tcl:60 +msgid "Further Action" +msgstr "その他の動作" -#: lib/tools_dlg.tcl:61 -msgid "Command:" -msgstr "コマンド:" +#: lib/remote_add.tcl:63 +msgid "Fetch Immediately" +msgstr "即座に取得" -#: lib/tools_dlg.tcl:74 -msgid "Show a dialog before running" -msgstr "起動する前にダイアログを表示" +#: lib/remote_add.tcl:69 +msgid "Initialize Remote Repository and Push" +msgstr "リモートレポジトリを初期化してプッシュ" -#: lib/tools_dlg.tcl:80 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "ユーザにコミットを一つ選ばせる ($REVISION にセットします)" +#: lib/remote_add.tcl:75 +msgid "Do Nothing Else Now" +msgstr "何もしない" -#: lib/tools_dlg.tcl:85 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "ユーザに他の引数を追加させる ($ARGS にセットします)" +#: lib/remote_add.tcl:100 +msgid "Please supply a remote name." +msgstr "リモート名を指定して下さい。" -#: lib/tools_dlg.tcl:92 -msgid "Don't show the command output window" -msgstr "コマンドからの出力ウィンドウを見せない" +#: lib/remote_add.tcl:113 +#, tcl-format +msgid "'%s' is not an acceptable remote name." +msgstr "'%s' はリモート名に使えません。" -#: lib/tools_dlg.tcl:97 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "パッチが選ばれているときだけ動かす($FILENAME が空でない)" +#: lib/remote_add.tcl:124 +#, tcl-format +msgid "Failed to add remote '%s' of location '%s'." +msgstr "場所 '%2$s' のリモート '%1$s'の名前変更に失敗しました。" -#: lib/tools_dlg.tcl:121 -msgid "Please supply a name for the tool." -msgstr "ツール名を指定して下さい。" +#: lib/remote_add.tcl:133 +#, tcl-format +msgid "Fetching the %s" +msgstr "%s からフェッチしています" -#: lib/tools_dlg.tcl:129 +#: lib/remote_add.tcl:156 #, tcl-format -msgid "Tool '%s' already exists." -msgstr "ツール '%s' は既に存在します。" +msgid "Do not know how to initialize repository at location '%s'." +msgstr "リポジトリ '%s' を初期化できません。" -#: lib/tools_dlg.tcl:151 +#: lib/remote_add.tcl:163 #, tcl-format -msgid "" -"Could not add tool:\n" -"%s" -msgstr "" -"ツールを追加できません:\n" -"%s" +msgid "Setting up the %s (at %s)" +msgstr "%2$s にある %1$s をセットアップします" -#: lib/tools_dlg.tcl:190 -msgid "Remove Tool" -msgstr "ツールの削除" +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "行番号" -#: lib/tools_dlg.tcl:196 -msgid "Remove Tool Commands" -msgstr "ツールコマンドの削除" +#: lib/line.tcl:23 +msgid "Go" +msgstr "移動" -#: lib/tools_dlg.tcl:200 -msgid "Remove" -msgstr "削除" +#: lib/branch_create.tcl:23 +msgid "Create Branch" +msgstr "ブランチを作成" -#: lib/tools_dlg.tcl:236 -msgid "(Blue denotes repository-local tools)" -msgstr "(青色はローカルレポジトリのツールです)" +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "ブランチを新規作成" -#: lib/tools_dlg.tcl:297 -#, tcl-format -msgid "Run Command: %s" -msgstr "コマンドを起動: %s" +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "ブランチ名" -#: lib/tools_dlg.tcl:311 -msgid "Arguments" -msgstr "引数" +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "トラッキング・ブランチ名を合わせる" -#: lib/tools_dlg.tcl:348 -msgid "OK" -msgstr "OK" +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "初期リビジョン" -#: lib/transport.tcl:7 -#, tcl-format -msgid "Fetching new changes from %s" -msgstr "%s から新しい変更をフェッチしています" +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "既存のブランチを更新:" -#: lib/transport.tcl:18 -#, tcl-format -msgid "remote prune %s" -msgstr "遠隔刈込 %s" +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "いいえ" -#: lib/transport.tcl:19 -#, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "%s から削除されたトラッキング・ブランチを刈っています" +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "早送りのみ" -#: lib/transport.tcl:26 -#, tcl-format -msgid "Pushing changes to %s" -msgstr "%s へ変更をプッシュしています" +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "作成してすぐチェックアウト" -#: lib/transport.tcl:64 -#, tcl-format -msgid "Mirroring to %s" -msgstr "%s へミラーしています" +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "トラッキング・ブランチを選択して下さい。" -#: lib/transport.tcl:82 +#: lib/branch_create.tcl:141 #, tcl-format -msgid "Pushing %s %s to %s" -msgstr "%3$s へ %1$s %2$s をプッシュしています" +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "" +"トラッキング・ブランチ %s はリモートリポジトリのブランチではありません。" -#: lib/transport.tcl:100 -msgid "Push Branches" -msgstr "ブランチをプッシュ" +#: lib/spellcheck.tcl:57 +msgid "Unsupported spell checker" +msgstr "サポートされていないスペルチェッカーです" -#: lib/transport.tcl:114 -msgid "Source Branches" -msgstr "元のブランチ" +#: lib/spellcheck.tcl:65 +msgid "Spell checking is unavailable" +msgstr "スペルチェック機能は使えません" -#: lib/transport.tcl:131 -msgid "Destination Repository" -msgstr "送り先リポジトリ" +#: lib/spellcheck.tcl:68 +msgid "Invalid spell checking configuration" +msgstr "スペルチェックの設定が不正です" -#: lib/transport.tcl:169 -msgid "Transfer Options" -msgstr "通信オプション" +#: lib/spellcheck.tcl:70 +#, tcl-format +msgid "Reverting dictionary to %s." +msgstr "辞書を %s に巻き戻します" -#: lib/transport.tcl:171 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "既存ブランチを上書き(変更を破棄する可能性があります)" +#: lib/spellcheck.tcl:73 +msgid "Spell checker silently failed on startup" +msgstr "スペルチェッカーの起動に失敗しました" -#: lib/transport.tcl:175 -msgid "Use thin pack (for slow network connections)" -msgstr "Thin Pack を使う(遅いネットワーク接続)" +#: lib/spellcheck.tcl:80 +msgid "Unrecognized spell checker" +msgstr "スペルチェッカーが判別できません" -#: lib/transport.tcl:179 -msgid "Include tags" -msgstr "タグを含める" +#: lib/spellcheck.tcl:186 +msgid "No Suggestions" +msgstr "提案なし" + +#: lib/spellcheck.tcl:388 +msgid "Unexpected EOF from spell checker" +msgstr "スペルチェッカーが予想外の EOF を返しました" + +#: lib/spellcheck.tcl:392 +msgid "Spell Checker Failed" +msgstr "スペルチェック失敗" diff --git a/git-merge-octopus.sh b/git-merge-octopus.sh index 308eafd..bcf0d92 100755 --- a/git-merge-octopus.sh +++ b/git-merge-octopus.sh @@ -30,7 +30,7 @@ do esac done -# Reject if this is not an Octopus -- resolve should be used instead. +# Reject if this is not an octopus -- resolve should be used instead. case "$remotes" in ?*' '?*) ;; @@ -59,7 +59,7 @@ do # conflicts. Last round failed and we still had # a head to merge. gettextln "Automated merge did not work." - gettextln "Should not be doing an Octopus." + gettextln "Should not be doing an octopus." exit 2 esac diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 7e558b0..ca994c5 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -1041,7 +1041,7 @@ The possible behaviours are: ignore, warn, error.")" # placed before the commit of the next action checkout_onto - warn "$(gettext "You can fix this with 'git rebase --edit-todo'.")" + warn "$(gettext "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.")" die "$(gettext "Or you can abort the rebase with 'git rebase --abort'.")" fi } @@ -1082,7 +1082,7 @@ If they are meant to go into a new commit, run: git commit \$gpg_sign_opt_quoted -In both case, once you're done, continue with: +In both cases, once you're done, continue with: git rebase --continue ")" @@ -1141,9 +1141,6 @@ To continue rebase after editing, run: ;; esac -git var GIT_COMMITTER_IDENT >/dev/null || - die "$(gettext "You need to set your committer info first")" - comment_for_reflog start if test ! -z "$switch_to" diff --git a/grep.c b/grep.c index d7d00b8..1194d35 100644 --- a/grep.c +++ b/grep.c @@ -898,17 +898,6 @@ static int fixmatch(struct grep_pat *p, char *line, char *eol, } } -static int regmatch(const regex_t *preg, char *line, char *eol, - regmatch_t *match, int eflags) -{ -#ifdef REG_STARTEND - match->rm_so = 0; - match->rm_eo = eol - line; - eflags |= REG_STARTEND; -#endif - return regexec(preg, line, 1, match, eflags); -} - static int patmatch(struct grep_pat *p, char *line, char *eol, regmatch_t *match, int eflags) { @@ -919,7 +908,8 @@ static int patmatch(struct grep_pat *p, char *line, char *eol, else if (p->pcre_regexp) hit = !pcrematch(p, line, eol, match, eflags); else - hit = !regmatch(&p->regexp, line, eol, match, eflags); + hit = !regexec_buf(&p->regexp, line, eol - line, 1, match, + eflags); return hit; } diff --git a/hex.c b/hex.c index 9619b67..ab2610e 100644 --- a/hex.c +++ b/hex.c @@ -39,16 +39,8 @@ int get_sha1_hex(const char *hex, unsigned char *sha1) { int i; for (i = 0; i < GIT_SHA1_RAWSZ; i++) { - unsigned int val; - /* - * hex[1]=='\0' is caught when val is checked below, - * but if hex[0] is NUL we have to avoid reading - * past the end of the string: - */ - if (!hex[0]) - return -1; - val = (hexval(hex[0]) << 4) | hexval(hex[1]); - if (val & ~0xff) + int val = hex2chr(hex); + if (val < 0) return -1; *sha1++ = val; hex += 2; diff --git a/http.c b/http.c index cd40b01..82ed542 100644 --- a/http.c +++ b/http.c @@ -201,6 +201,13 @@ static void finish_active_slot(struct active_request_slot *slot) slot->callback_func(slot->callback_data); } +static void xmulti_remove_handle(struct active_request_slot *slot) +{ +#ifdef USE_CURL_MULTI + curl_multi_remove_handle(curlm, slot->curl); +#endif +} + #ifdef USE_CURL_MULTI static void process_curl_messages(void) { @@ -216,7 +223,7 @@ static void process_curl_messages(void) slot->curl != curl_message->easy_handle) slot = slot->next; if (slot != NULL) { - curl_multi_remove_handle(curlm, slot->curl); + xmulti_remove_handle(slot); slot->curl_result = curl_result; finish_active_slot(slot); } else { @@ -723,7 +730,7 @@ static CURL *get_curl_handle(void) * precedence here, as in CURL. */ if (!curl_http_proxy) { - if (!strcmp(http_auth.protocol, "https")) { + if (http_auth.protocol && !strcmp(http_auth.protocol, "https")) { var_override(&curl_http_proxy, getenv("HTTPS_PROXY")); var_override(&curl_http_proxy, getenv("https_proxy")); } else { @@ -881,9 +888,7 @@ void http_cleanup(void) while (slot != NULL) { struct active_request_slot *next = slot->next; if (slot->curl != NULL) { -#ifdef USE_CURL_MULTI - curl_multi_remove_handle(curlm, slot->curl); -#endif + xmulti_remove_handle(slot); curl_easy_cleanup(slot->curl); } free(slot); @@ -1022,6 +1027,8 @@ int start_active_slot(struct active_request_slot *slot) if (curlm_result != CURLM_OK && curlm_result != CURLM_CALL_MULTI_PERFORM) { + warning("curl_multi_add_handle failed: %s", + curl_multi_strerror(curlm_result)); active_requests--; slot->in_use = 0; return 0; @@ -1161,13 +1168,13 @@ void run_active_slot(struct active_request_slot *slot) static void release_active_slot(struct active_request_slot *slot) { closedown_active_slot(slot); - if (slot->curl && curl_session_count > min_curl_sessions) { -#ifdef USE_CURL_MULTI - curl_multi_remove_handle(curlm, slot->curl); -#endif - curl_easy_cleanup(slot->curl); - slot->curl = NULL; - curl_session_count--; + if (slot->curl) { + xmulti_remove_handle(slot); + if (curl_session_count > min_curl_sessions) { + curl_easy_cleanup(slot->curl); + slot->curl = NULL; + curl_session_count--; + } } #ifdef USE_CURL_MULTI fill_active_slots(); diff --git a/ident.c b/ident.c index e20a772..d17b5bd 100644 --- a/ident.c +++ b/ident.c @@ -101,7 +101,7 @@ static int canonical_name(const char *host, struct strbuf *out) memset (&hints, '\0', sizeof (hints)); hints.ai_flags = AI_CANONNAME; if (!getaddrinfo(host, NULL, &hints, &ai)) { - if (ai && strchr(ai->ai_canonname, '.')) { + if (ai && ai->ai_canonname && strchr(ai->ai_canonname, '.')) { strbuf_addstr(out, ai->ai_canonname); status = 0; } diff --git a/patch-ids.c b/patch-ids.c index 082412a..ce285c2 100644 --- a/patch-ids.c +++ b/patch-ids.c @@ -4,9 +4,18 @@ #include "sha1-lookup.h" #include "patch-ids.h" +static int patch_id_defined(struct commit *commit) +{ + /* must be 0 or 1 parents */ + return !commit->parents || !commit->parents->next; +} + int commit_patch_id(struct commit *commit, struct diff_options *options, unsigned char *sha1, int diff_header_only) { + if (!patch_id_defined(commit)) + return -1; + if (commit->parents) diff_tree_sha1(commit->parents->item->object.oid.hash, commit->object.oid.hash, "", options); @@ -45,6 +54,7 @@ int init_patch_ids(struct patch_ids *ids) { memset(ids, 0, sizeof(*ids)); diff_setup(&ids->diffopts); + ids->diffopts.detect_rename = 0; DIFF_OPT_SET(&ids->diffopts, RECURSIVE); diff_setup_done(&ids->diffopts); hashmap_init(&ids->patches, (hashmap_cmp_fn)patch_id_cmp, 256); @@ -76,6 +86,9 @@ struct patch_id *has_commit_patch_id(struct commit *commit, { struct patch_id patch; + if (!patch_id_defined(commit)) + return NULL; + memset(&patch, 0, sizeof(patch)); if (init_patch_id_entry(&patch, commit, ids)) return NULL; @@ -88,6 +101,9 @@ struct patch_id *add_commit_patch_id(struct commit *commit, { struct patch_id *key = xcalloc(1, sizeof(*key)); + if (!patch_id_defined(commit)) + return NULL; + if (init_patch_id_entry(key, commit, ids)) { free(key); return NULL; diff --git a/pathspec.h b/pathspec.h index 4a80f6f..59809e4 100644 --- a/pathspec.h +++ b/pathspec.h @@ -96,7 +96,5 @@ static inline int ps_strcmp(const struct pathspec_item *item, extern char *find_pathspecs_matching_against_index(const struct pathspec *pathspec); extern void add_pathspec_matches_against_index(const struct pathspec *pathspec, char *seen); -extern const char *check_path_for_gitlink(const char *path); -extern void die_if_path_beyond_symlink(const char *path, const char *prefix); #endif /* PATHSPEC_H */ diff --git a/pkt-line.c b/pkt-line.c index 62fdb37..30489c6 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -172,27 +172,8 @@ static int get_packet_data(int fd, char **src_buf, size_t *src_size, static int packet_length(const char *linelen) { - int n; - int len = 0; - - for (n = 0; n < 4; n++) { - unsigned char c = linelen[n]; - len <<= 4; - if (c >= '0' && c <= '9') { - len += c - '0'; - continue; - } - if (c >= 'a' && c <= 'f') { - len += c - 'a' + 10; - continue; - } - if (c >= 'A' && c <= 'F') { - len += c - 'A' + 10; - continue; - } - return -1; - } - return len; + int val = hex2chr(linelen); + return (val < 0) ? val : (val << 8) | hex2chr(linelen + 2); } int packet_read(int fd, char **src_buf, size_t *src_len, diff --git a/po/TEAMS b/po/TEAMS index 56274ad..d3e63bc 100644 --- a/po/TEAMS +++ b/po/TEAMS @@ -37,8 +37,9 @@ Repository: https://github.com/changwoo/git-l10n-ko/ Leader: Changwoo Ryu Language: pt_PT (Portuguese - Portugal) -Repository: https://github.com/marcomsousa/git-l10n-pt_PT/ -Leader: Marco Sousa +Repository: https://github.com/vascool/git-po-pt/ +Leader: Vasco Almeida +Members: Marco Sousa Language: ru (Russian) Repository: https://github.com/DJm00n/git-po-ru/ diff --git a/po/pt_PT.po b/po/pt_PT.po index 13610a0..c8658df 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 \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 \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 %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 '" msgstr "tentar adivinhar 'git checkout '" -#: 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 " msgstr "git receive-pack " -#: 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 [] [] [[--] [...]]" -msgstr "git shortlog [] [] [[--] [...]]" +msgstr "" +"git shortlog [] [] [[--] [...]]" #: 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 not the one it points to" msgstr "" -"atualizar a referência , não a referência que esta " -"aponta" +"atualizar a 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 '." -msgstr "Falha ao extrair '$start_head'. Tente 'git bisect reset '." +msgstr "" +"Falha ao extrair '$start_head'. Tente 'git bisect reset '." #: 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 ac7f5b4..dc31222 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 \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 \n" "Language-Team: GitHub \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 [...] -- [...]'" msgstr "" -"有歧义的参数 '%s':工作区中未知的版本或路径。\n" +"有歧义的参数 '%s':未知的版本或路径不存在于工作区中。\n" "使用 '--' 来分隔版本和路径,例如:\n" "'git [...] -- [...]'" @@ -2070,7 +2070,7 @@ msgid "" "Use '--' to separate paths from revisions, like this:\n" "'git [...] -- [...]'" msgstr "" -"有歧义的参数 '%s':两者均为版本和文件\n" +"有歧义的参数 '%s':可同时是版本和文件\n" "使用 '--' 来分隔版本和路径,例如:\n" "'git [...] -- [...]'" @@ -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/pretty.c b/pretty.c index 9609afb..9788bd8 100644 --- a/pretty.c +++ b/pretty.c @@ -1065,7 +1065,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */ const struct commit *commit = c->commit; const char *msg = c->message; struct commit_list *p; - int h1, h2; + int ch; /* these are independent of the commit */ switch (placeholder[0]) { @@ -1089,14 +1089,11 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */ return 1; case 'x': /* %x00 == NUL, %x0a == LF, etc. */ - if (0 <= (h1 = hexval_table[0xff & placeholder[1]]) && - h1 <= 16 && - 0 <= (h2 = hexval_table[0xff & placeholder[2]]) && - h2 <= 16) { - strbuf_addch(sb, (h1<<4)|h2); - return 3; - } else + ch = hex2chr(placeholder + 1); + if (ch < 0) return 0; + strbuf_addch(sb, ch); + return 3; case 'w': if (placeholder[1] == '(') { unsigned long width = 0, indent1 = 0, indent2 = 0; diff --git a/read-cache.c b/read-cache.c index 491e52d..248432a 100644 --- a/read-cache.c +++ b/read-cache.c @@ -627,7 +627,7 @@ void set_object_name_for_intent_to_add_entry(struct cache_entry *ce) hashcpy(ce->sha1, sha1); } -int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags, int force_mode) +int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags) { int size, namelen, was_same; mode_t st_mode = st->st_mode; @@ -656,11 +656,10 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, else ce->ce_flags |= CE_INTENT_TO_ADD; - if (S_ISREG(st_mode) && force_mode) - ce->ce_mode = create_ce_mode(force_mode); - else if (trust_executable_bit && has_symlinks) + + if (trust_executable_bit && has_symlinks) { ce->ce_mode = create_ce_mode(st_mode); - else { + } else { /* If there is an existing entry, pick the mode bits and type * from it, otherwise assume unexecutable regular file. */ @@ -719,13 +718,12 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, return 0; } -int add_file_to_index(struct index_state *istate, const char *path, - int flags, int force_mode) +int add_file_to_index(struct index_state *istate, const char *path, int flags) { struct stat st; if (lstat(path, &st)) die_errno("unable to stat '%s'", path); - return add_to_index(istate, path, &st, flags, force_mode); + return add_to_index(istate, path, &st, flags); } struct cache_entry *make_cache_entry(unsigned int mode, @@ -756,6 +754,35 @@ struct cache_entry *make_cache_entry(unsigned int mode, return ret; } +/* + * Chmod an index entry with either +x or -x. + * + * Returns -1 if the chmod for the particular cache entry failed (if it's + * not a regular file), -2 if an invalid flip argument is passed in, 0 + * otherwise. + */ +int chmod_index_entry(struct index_state *istate, struct cache_entry *ce, + char flip) +{ + if (!S_ISREG(ce->ce_mode)) + return -1; + switch (flip) { + case '+': + ce->ce_mode |= 0111; + break; + case '-': + ce->ce_mode &= ~0111; + break; + default: + return -2; + } + cache_tree_invalidate_path(istate, ce->name); + ce->ce_flags |= CE_UPDATE_IN_BASE; + istate->cache_changed |= CE_ENTRY_CHANGED; + + return 0; +} + int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) { int len = ce_namelen(a); diff --git a/ref-filter.c b/ref-filter.c index bc551a7..9adbb8a 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1576,24 +1576,6 @@ void ref_array_sort(struct ref_sorting *sorting, struct ref_array *array) qsort(array->items, array->nr, sizeof(struct ref_array_item *), compare_refs); } -static int hex1(char ch) -{ - if ('0' <= ch && ch <= '9') - return ch - '0'; - else if ('a' <= ch && ch <= 'f') - return ch - 'a' + 10; - else if ('A' <= ch && ch <= 'F') - return ch - 'A' + 10; - return -1; -} -static int hex2(const char *cp) -{ - if (cp[0] && cp[1]) - return (hex1(cp[0]) << 4) | hex1(cp[1]); - else - return -1; -} - static void append_literal(const char *cp, const char *ep, struct ref_formatting_state *state) { struct strbuf *s = &state->stack->output; @@ -1603,7 +1585,7 @@ static void append_literal(const char *cp, const char *ep, struct ref_formatting if (cp[1] == '%') cp++; else { - int ch = hex2(cp + 1); + int ch = hex2chr(cp + 1); if (0 <= ch) { strbuf_addch(s, ch); cp += 3; diff --git a/strbuf.c b/strbuf.c index f3bd571..b839be4 100644 --- a/strbuf.c +++ b/strbuf.c @@ -187,7 +187,7 @@ void strbuf_insert(struct strbuf *sb, size_t pos, const void *data, size_t len) void strbuf_remove(struct strbuf *sb, size_t pos, size_t len) { - strbuf_splice(sb, pos, len, NULL, 0); + strbuf_splice(sb, pos, len, "", 0); } void strbuf_add(struct strbuf *sb, const void *data, size_t len) diff --git a/submodule.c b/submodule.c index 1b5cdfb..e8258f0 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/perf/run b/t/perf/run index cfd7012..e8adeda 100755 --- a/t/perf/run +++ b/t/perf/run @@ -30,7 +30,13 @@ unpack_git_rev () { } build_git_rev () { rev=$1 - cp ../../config.mak build/$rev/config.mak + for config in config.mak config.mak.autogen config.status + do + if test -e "../../$config" + then + cp "../../$config" "build/$rev/" + fi + done (cd build/$rev && make $GIT_PERF_MAKE_OPTS) || die "failed to build revision '$mydir'" } diff --git a/t/t1401-symbolic-ref.sh b/t/t1401-symbolic-ref.sh index ca3fa40..eec3e90 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/t2010-checkout-ambiguous.sh b/t/t2010-checkout-ambiguous.sh index e76e84a..2e47fe0 100755 --- a/t/t2010-checkout-ambiguous.sh +++ b/t/t2010-checkout-ambiguous.sh @@ -41,6 +41,15 @@ test_expect_success 'check ambiguity' ' test_must_fail git checkout world all ' +test_expect_success 'check ambiguity in subdir' ' + mkdir sub && + # not ambiguous because sub/world does not exist + git -C sub checkout world ../all && + echo hello >sub/world && + # ambiguous because sub/world does exist + test_must_fail git -C sub checkout world ../all +' + test_expect_success 'disambiguate checking out from a tree-ish' ' echo bye > world && git checkout world -- world && diff --git a/t/t2024-checkout-dwim.sh b/t/t2024-checkout-dwim.sh index 468a000..3e5ac81 100755 --- a/t/t2024-checkout-dwim.sh +++ b/t/t2024-checkout-dwim.sh @@ -174,6 +174,18 @@ test_expect_success 'checkout of branch with a file having the same name fails' test_branch master ' +test_expect_success 'checkout of branch with a file in subdir having the same name fails' ' + git checkout -B master && + test_might_fail git branch -D spam && + + >spam && + mkdir sub && + mv spam sub/spam && + test_must_fail git -C sub checkout spam && + test_must_fail git rev-parse --verify refs/heads/spam && + test_branch master +' + test_expect_success 'checkout -- succeeds, even if a file with the same name exists' ' git checkout -B master && test_might_fail git branch -D spam && diff --git a/t/t2107-update-index-basic.sh b/t/t2107-update-index-basic.sh index dfe02f4..32ac6e0 100755 --- a/t/t2107-update-index-basic.sh +++ b/t/t2107-update-index-basic.sh @@ -80,4 +80,17 @@ test_expect_success '.lock files cleaned up' ' ) ' +test_expect_success '--chmod=+x and chmod=-x in the same argument list' ' + >A && + >B && + git add A B && + git update-index --chmod=+x A --chmod=-x B && + cat >expect <<-\EOF && + 100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 A + 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 B + EOF + git ls-files --stage A B >actual && + test_cmp expect actual +' + test_done diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 597e94e..e38e296 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -1195,7 +1195,7 @@ To avoid this message, use "drop" to explicitly remove a commit. Use 'git config rebase.missingCommitsCheck' to change the level of warnings. The possible behaviours are: ignore, warn, error. -You can fix this with 'git rebase --edit-todo'. +You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'. Or you can abort the rebase with 'git rebase --abort'. EOF @@ -1219,7 +1219,7 @@ cat >expect <expect <foo3 && + git add foo3 && + git add --chmod=+x foo3 && + test_mode_in_index 100755 foo3 && + echo foo >xfoo3 && + chmod 755 xfoo3 && + git add xfoo3 && + git add --chmod=-x xfoo3 && + test_mode_in_index 100644 xfoo3 +' + +test_expect_success POSIXPERM 'git add --chmod=[+-]x does not change the working tree' ' + echo foo >foo4 && + git add foo4 && + git add --chmod=+x foo4 && + ! test -x foo4 +' + +test_expect_success 'no file status change if no pathspec is given' ' + >foo5 && + >foo6 && + git add foo5 foo6 && + git add --chmod=+x && + test_mode_in_index 100644 foo5 && + test_mode_in_index 100644 foo6 +' + +test_expect_success 'no file status change if no pathspec is given in subdir' ' + mkdir -p sub && + ( + cd sub && + >sub-foo1 && + >sub-foo2 && + git add . && + git add --chmod=+x && + test_mode_in_index 100644 sub-foo1 && + test_mode_in_index 100644 sub-foo2 + ) +' + +test_expect_success 'all statuses changed in folder if . is given' ' + git add --chmod=+x . && + test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 && + git add --chmod=-x . && + test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0 +' + test_done diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index b0579dd..8d90a6e 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -754,9 +754,22 @@ test_expect_success 'format-patch --ignore-if-in-upstream HEAD' ' git format-patch --ignore-if-in-upstream HEAD ' +git_version="$(git --version | sed "s/.* //")" + +signature() { + printf "%s\n%s\n\n" "-- " "${1:-$git_version}" +} + +test_expect_success 'format-patch default signature' ' + git format-patch --stdout -1 | tail -n 3 >output && + signature >expect && + test_cmp expect output +' + test_expect_success 'format-patch --signature' ' - git format-patch --stdout --signature="my sig" -1 >output && - grep "my sig" output + git format-patch --stdout --signature="my sig" -1 | tail -n 3 >output && + signature "my sig" >expect && + test_cmp expect output ' test_expect_success 'format-patch with format.signature config' ' @@ -1502,12 +1515,12 @@ test_expect_success 'format-patch -o overrides format.outputDirectory' ' test_expect_success 'format-patch --base' ' git checkout side && - git format-patch --stdout --base=HEAD~3 -1 >patch && - grep "^base-commit:" patch >actual && - grep "^prerequisite-patch-id:" patch >>actual && - echo "base-commit: $(git rev-parse HEAD~3)" >expected && + git format-patch --stdout --base=HEAD~3 -1 | tail -n 7 >actual && + echo >expected && + echo "base-commit: $(git rev-parse HEAD~3)" >>expected && echo "prerequisite-patch-id: $(git show --patch HEAD~2 | git patch-id --stable | awk "{print \$1}")" >>expected && echo "prerequisite-patch-id: $(git show --patch HEAD~1 | git patch-id --stable | awk "{print \$1}")" >>expected && + signature >> expected && test_cmp expected actual ' @@ -1605,6 +1618,14 @@ test_expect_success 'format-patch --base overrides format.useAutoBase' ' test_cmp expected actual ' +test_expect_success 'format-patch --base with --attach' ' + git format-patch --attach=mimemime --stdout --base=HEAD~ -1 >patch && + sed -n -e "/^base-commit:/s/.*/1/p" -e "/^---*mimemime--$/s/.*/2/p" \ + patch >actual && + test_write_lines 1 2 >expect && + test_cmp expect actual +' + test_expect_success 'format-patch --pretty=mboxrd' ' sp=" " && cat >msg <<-INPUT_END && diff --git a/t/t4051-diff-function-context.sh b/t/t4051-diff-function-context.sh index b79b877..6154acb 100755 --- a/t/t4051-diff-function-context.sh +++ b/t/t4051-diff-function-context.sh @@ -67,6 +67,15 @@ test_expect_success 'setup' ' commit_and_tag long_common_tail file.c && git checkout initial && + cat "$dir/hello.c" "$dir/dummy.c" >file.c && + commit_and_tag hello_dummy file.c && + + # overlap function context of 1st change and -u context of 2nd change + grep -v "delete me from hello" <"$dir/hello.c" >file.c && + sed 2p <"$dir/dummy.c" >>file.c && + commit_and_tag changed_hello_dummy file.c && + + git checkout initial && grep -v "delete me from hello" file.c.new && mv file.c.new file.c && cat "$dir/appended1.c" >>file.c && @@ -179,4 +188,20 @@ test_expect_success ' context does not include other functions' ' test $(grep -c "^[ +-].*Begin" changed_hello_appended.diff) -le 2 ' +check_diff changed_hello_dummy 'changed two consecutive functions' + +test_expect_success ' context includes begin' ' + grep "^ .*Begin of hello" changed_hello_dummy.diff && + grep "^ .*Begin of dummy" changed_hello_dummy.diff +' + +test_expect_success ' context includes end' ' + grep "^ .*End of hello" changed_hello_dummy.diff && + grep "^ .*End of dummy" changed_hello_dummy.diff +' + +test_expect_success ' overlapping hunks are merged' ' + test $(grep -c "^@@" changed_hello_dummy.diff) -eq 1 +' + test_done diff --git a/t/t4062-diff-pickaxe.sh b/t/t4062-diff-pickaxe.sh new file mode 100755 index 0000000..f0bf50b --- /dev/null +++ b/t/t4062-diff-pickaxe.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Copyright (c) 2016 Johannes Schindelin +# + +test_description='Pickaxe options' + +. ./test-lib.sh + +test_expect_success setup ' + test_commit initial && + printf "%04096d" 0 >4096-zeroes.txt && + git add 4096-zeroes.txt && + test_tick && + git commit -m "A 4k file" +' +test_expect_success '-G matches' ' + git diff --name-only -G "^0{4096}$" HEAD^ >out && + test 4096-zeroes.txt = "$(cat out)" +' + +test_done diff --git a/t/t5305-include-tag.sh b/t/t5305-include-tag.sh index f314ad5..a5eca21 100755 --- a/t/t5305-include-tag.sh +++ b/t/t5305-include-tag.sh @@ -25,58 +25,94 @@ test_expect_success setup ' } >obj-list ' -rm -rf clone.git test_expect_success 'pack without --include-tag' ' - packname_1=$(git pack-objects \ + packname=$(git pack-objects \ --window=0 \ - test-1 list.expect && - ( - test_must_fail env GIT_DIR=clone.git git cat-file -e $tag && - git rev-list --objects $commit - ) >list.actual && + test_must_fail git -C clone.git cat-file -e $tag && + git -C clone.git rev-list --objects $commit >list.actual && test_cmp list.expect list.actual ' -rm -rf clone.git test_expect_success 'pack with --include-tag' ' - packname_1=$(git pack-objects \ + packname=$(git pack-objects \ --window=0 \ --include-tag \ - test-2 list.expect && - ( - GIT_DIR=clone.git && - export GIT_DIR && - git rev-list --objects $tag - ) >list.actual && + git -C clone.git rev-list --objects $tag >list.actual && test_cmp list.expect list.actual ' +# A tag of a tag, where the "inner" tag is not otherwise +# reachable, and a full peel points to a commit reachable from HEAD. +test_expect_success 'create hidden inner tag' ' + test_commit commit && + git tag -m inner inner HEAD && + git tag -m outer outer inner && + git tag -d inner +' + +test_expect_success 'pack explicit outer tag' ' + packname=$( + { + echo HEAD && + echo outer + } | + git pack-objects --revs test-hidden-explicit + ) +' + +test_expect_success 'unpack objects' ' + rm -rf clone.git && + git init clone.git && + git -C clone.git unpack-objects err && + GIT_TRACE_CURL=true git push -v -v 2>err && ! grep "Expect: 100-continue" err && grep "POST git-receive-pack ([0-9]* bytes)" err && (cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git && diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh index 3484b6f..7641417 100755 --- a/t/t5550-http-fetch-dumb.sh +++ b/t/t5550-http-fetch-dumb.sh @@ -263,15 +263,15 @@ check_language () { >expect ;; ?*) - echo "Accept-Language: $1" >expect + echo "=> Send header: Accept-Language: $1" >expect ;; esac && - GIT_CURL_VERBOSE=1 \ + GIT_TRACE_CURL=true \ LANGUAGE=$2 \ git ls-remote "$HTTPD_URL/dumb/repo.git" >output 2>&1 && tr -d '\015' actual && + sed -ne '/^=> Send header: Accept-Language:/ p' >actual && test_cmp expect actual } @@ -295,8 +295,16 @@ ja;q=0.95, zh;q=0.94, sv;q=0.93, pt;q=0.92, nb;q=0.91, *;q=0.90" \ ' test_expect_success 'git client does not send an empty Accept-Language' ' - GIT_CURL_VERBOSE=1 LANGUAGE= git ls-remote "$HTTPD_URL/dumb/repo.git" 2>stderr && - ! grep "^Accept-Language:" stderr + GIT_TRACE_CURL=true LANGUAGE= git ls-remote "$HTTPD_URL/dumb/repo.git" 2>stderr && + ! grep "^=> Send header: Accept-Language:" stderr +' + +test_expect_success 'remote-http complains cleanly about malformed urls' ' + # do not actually issue "list" or other commands, as we do not + # want to rely on what curl would actually do with such a broken + # URL. This is just about making sure we do not segfault during + # initialization. + test_must_fail git remote-http http::/example.com/repo.git ' stop_httpd diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh index 2f375eb..1ec5b27 100755 --- a/t/t5551-http-fetch-smart.sh +++ b/t/t5551-http-fetch-smart.sh @@ -43,12 +43,21 @@ cat >exp <err && + GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git clone 2>err && test_cmp file clone/file && tr '\''\015'\'' Q Send header, /d + /^=> Send header:$/d + /^<= Recv header, /d + /^<= Recv header:$/d + s/=> Send header: // + s/= Recv header:// + /^<= Recv data/d + /^=> Send data/d /^$/d /^< $/d @@ -261,9 +270,9 @@ test_expect_success CMDLINE_LIMIT \ ' test_expect_success 'large fetch-pack requests can be split across POSTs' ' - GIT_CURL_VERBOSE=1 git -c http.postbuffer=65536 \ + GIT_TRACE_CURL=true git -c http.postbuffer=65536 \ clone --bare "$HTTPD_URL/smart/repo.git" split.git 2>err && - grep "^> POST" err >posts && + grep "^=> Send header: POST" err >posts && test_line_count = 2 posts ' diff --git a/t/t6026-merge-attr.sh b/t/t6026-merge-attr.sh index dd8f88d..7a6e33e 100755 --- a/t/t6026-merge-attr.sh +++ b/t/t6026-merge-attr.sh @@ -185,7 +185,9 @@ test_expect_success 'custom merge does not lock index' ' git reset --hard anchor && write_script sleep-one-second.sh <<-\EOF && sleep 1 & + echo $! >sleep.pid EOF + test_when_finished "kill \$(cat sleep.pid)" && test_write_lines >.gitattributes \ "* merge=ours" "text merge=sleep-one-second" && diff --git a/t/t7517-per-repo-email.sh b/t/t7517-per-repo-email.sh index 337e6e3..2a22fa7 100755 --- a/t/t7517-per-repo-email.sh +++ b/t/t7517-per-repo-email.sh @@ -36,4 +36,51 @@ test_expect_success 'succeeds cloning if global email is not set' ' git clone . clone ' +test_expect_success 'set up rebase scenarios' ' + # temporarily enable an actual ident for this setup + test_config user.email foo@example.com && + test_commit new && + git branch side-without-commit HEAD^ && + git checkout -b side-with-commit HEAD^ && + test_commit side +' + +test_expect_success 'fast-forward rebase does not care about ident' ' + git checkout -B tmp side-without-commit && + git rebase master +' + +test_expect_success 'non-fast-forward rebase refuses to write commits' ' + test_when_finished "git rebase --abort || true" && + git checkout -B tmp side-with-commit && + test_must_fail git rebase master +' + +test_expect_success 'fast-forward rebase does not care about ident (interactive)' ' + git checkout -B tmp side-without-commit && + git rebase -i master +' + +test_expect_success 'non-fast-forward rebase refuses to write commits (interactive)' ' + test_when_finished "git rebase --abort || true" && + git checkout -B tmp side-with-commit && + test_must_fail git rebase -i master +' + +test_expect_success 'noop interactive rebase does not care about ident' ' + git checkout -B tmp side-with-commit && + git rebase -i HEAD^ +' + +test_expect_success 'fast-forward rebase does not care about ident (preserve)' ' + git checkout -B tmp side-without-commit && + git rebase -p master +' + +test_expect_success 'non-fast-forward rebase refuses to write commits (preserve)' ' + test_when_finished "git rebase --abort || true" && + git checkout -B tmp side-with-commit && + test_must_fail git rebase -p master +' + test_done diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh index 0db4469..97c9b32 100755 --- a/t/t9903-bash-prompt.sh +++ b/t/t9903-bash-prompt.sh @@ -177,7 +177,7 @@ test_expect_success 'prompt - interactive rebase' ' git checkout b1 && test_when_finished "git checkout master" && git rebase -i HEAD^ && - test_when_finished "git rebase --abort" + test_when_finished "git rebase --abort" && __git_ps1 >"$actual" && test_cmp expected "$actual" ' diff --git a/t/test-lib.sh b/t/test-lib.sh index d731d66..ac56512 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -89,6 +89,7 @@ unset VISUAL EMAIL LANGUAGE COLUMNS $("$PERL_PATH" -e ' UNZIP PERF_ CURL_VERBOSE + TRACE_CURL )); my @vars = grep(/^GIT_/ && !/^GIT_($ok)/o, @env); print join("\n", @vars); @@ -687,9 +688,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 diff --git a/transport.c b/transport.c index cf8de6e..94d6dc3 100644 --- a/transport.c +++ b/transport.c @@ -771,7 +771,7 @@ static void die_with_unpushed_submodules(struct string_list *needs_pushing) fprintf(stderr, _("The following submodule paths contain changes that can\n" "not be found on any remote:\n")); for (i = 0; i < needs_pushing->nr; i++) - printf(" %s\n", needs_pushing->items[i].string); + fprintf(stderr, " %s\n", needs_pushing->items[i].string); fprintf(stderr, _("\nPlease try\n\n" " git push --recurse-submodules=on-demand\n\n" "or cd to the path and use\n\n" diff --git a/unpack-trees.c b/unpack-trees.c index 11c37fb..2a963f9 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -123,9 +123,9 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, msgs[ERROR_SPARSE_NOT_UPTODATE_FILE] = _("Cannot update sparse checkout: the following entries are not up-to-date:\n%s"); msgs[ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN] = - _("The following Working tree files would be overwritten by sparse checkout update:\n%s"); + _("The following working tree files would be overwritten by sparse checkout update:\n%s"); msgs[ERROR_WOULD_LOSE_ORPHANED_REMOVED] = - _("The following Working tree files would be removed by sparse checkout update:\n%s"); + _("The following working tree files would be removed by sparse checkout update:\n%s"); opts->show_all_errors = 1; /* rejected paths may not have a static buffer */ @@ -218,8 +218,8 @@ static void unlink_entry(const struct cache_entry *ce) schedule_dir_for_removal(ce->name, ce_namelen(ce)); } -static struct checkout state; -static int check_updates(struct unpack_trees_options *o) +static int check_updates(struct unpack_trees_options *o, + const struct checkout *state) { unsigned cnt = 0, total = 0; struct progress *progress = NULL; @@ -264,7 +264,7 @@ static int check_updates(struct unpack_trees_options *o) display_progress(progress, ++cnt); ce->ce_flags &= ~CE_UPDATE; if (o->update && !o->dry_run) { - errs |= checkout_entry(ce, &state, NULL); + errs |= checkout_entry(ce, state, NULL); } } } @@ -1094,6 +1094,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options int i, ret; static struct cache_entry *dfc; struct exclude_list el; + struct checkout state; if (len > MAX_UNPACK_TREES) die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES); @@ -1239,7 +1240,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options } o->src_index = NULL; - ret = check_updates(o) ? (-2) : 0; + ret = check_updates(o, &state) ? (-2) : 0; if (o->dst_index) { if (!ret) { if (!o->result.cache_tree) diff --git a/url.c b/url.c index 2d89ad1..eaf4f07 100644 --- a/url.c +++ b/url.c @@ -29,25 +29,6 @@ int is_url(const char *url) return (url[0] == ':' && url[1] == '/' && url[2] == '/'); } -static int url_decode_char(const char *q) -{ - int i; - unsigned char val = 0; - for (i = 0; i < 2; i++) { - unsigned char c = *q++; - val <<= 4; - if (c >= '0' && c <= '9') - val += c - '0'; - else if (c >= 'a' && c <= 'f') - val += c - 'a' + 10; - else if (c >= 'A' && c <= 'F') - val += c - 'A' + 10; - else - return -1; - } - return val; -} - static char *url_decode_internal(const char **query, int len, const char *stop_at, struct strbuf *out, int decode_plus) @@ -66,7 +47,7 @@ static char *url_decode_internal(const char **query, int len, } if (c == '%') { - int val = url_decode_char(q + 1); + int val = hex2chr(q + 1); if (0 <= val) { strbuf_addch(out, val); q += 3; diff --git a/usage.c b/usage.c index 1dad03f..0efa3fa 100644 --- a/usage.c +++ b/usage.c @@ -148,6 +148,7 @@ void NORETURN die_errno(const char *fmt, ...) va_end(params); } +#undef error_errno int error_errno(const char *fmt, ...) { char buf[1024]; diff --git a/vcs-svn/fast_export.c b/vcs-svn/fast_export.c index bd0f2c2..97cba39 100644 --- a/vcs-svn/fast_export.c +++ b/vcs-svn/fast_export.c @@ -73,7 +73,7 @@ void fast_export_begin_note(uint32_t revision, const char *author, static int firstnote = 1; size_t loglen = strlen(log); printf("commit %s\n", note_ref); - printf("committer %s <%s@%s> %ld +0000\n", author, author, "local", timestamp); + printf("committer %s <%s@%s> %lu +0000\n", author, author, "local", timestamp); printf("data %"PRIuMAX"\n", (uintmax_t)loglen); fwrite(log, loglen, 1, stdout); if (firstnote) { @@ -107,7 +107,7 @@ void fast_export_begin_commit(uint32_t revision, const char *author, } printf("commit %s\n", local_ref); printf("mark :%"PRIu32"\n", revision); - printf("committer %s <%s@%s> %ld +0000\n", + printf("committer %s <%s@%s> %lu +0000\n", *author ? author : "nobody", *author ? author : "nobody", *uuid ? uuid : "local", timestamp); diff --git a/xdiff-interface.c b/xdiff-interface.c index f34ea76..50702a2 100644 --- a/xdiff-interface.c +++ b/xdiff-interface.c @@ -214,11 +214,10 @@ struct ff_regs { static long ff_regexp(const char *line, long len, char *buffer, long buffer_size, void *priv) { - char *line_buffer; struct ff_regs *regs = priv; regmatch_t pmatch[2]; int i; - int result = -1; + int result; /* Exclude terminating newline (and cr) from matching */ if (len > 0 && line[len-1] == '\n') { @@ -228,18 +227,16 @@ static long ff_regexp(const char *line, long len, len--; } - line_buffer = xstrndup(line, len); /* make NUL terminated */ - for (i = 0; i < regs->nr; i++) { struct ff_reg *reg = regs->array + i; - if (!regexec(®->re, line_buffer, 2, pmatch, 0)) { + if (!regexec_buf(®->re, line, len, 2, pmatch, 0)) { if (reg->negate) - goto fail; + return -1; break; } } if (regs->nr <= i) - goto fail; + return -1; i = pmatch[1].rm_so >= 0 ? 1 : 0; line += pmatch[i].rm_so; result = pmatch[i].rm_eo - pmatch[i].rm_so; @@ -248,8 +245,6 @@ static long ff_regexp(const char *line, long len, while (result > 0 && (isspace(line[result - 1]))) result--; memcpy(buffer, line, result); - fail: - free(line_buffer); return result; } diff --git a/xdiff/xemit.c b/xdiff/xemit.c index 49aa16f..7389ce4 100644 --- a/xdiff/xemit.c +++ b/xdiff/xemit.c @@ -22,15 +22,6 @@ #include "xinclude.h" - - - -static long xdl_get_rec(xdfile_t *xdf, long ri, char const **rec); -static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb); - - - - static long xdl_get_rec(xdfile_t *xdf, long ri, char const **rec) { *rec = xdf->recs[ri]->ptr; @@ -248,7 +239,7 @@ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, if (xche->next) { long l = XDL_MIN(xche->next->i1, xe->xdf1.nrec - 1); - if (l <= e1 || + if (l - xecfg->ctxlen <= e1 || get_func_line(xe, xecfg, NULL, l, e1) < 0) { xche = xche->next; goto post_context_calculation;