diff options
122 files changed, 17732 insertions, 1069 deletions
@@ -29,7 +29,13 @@ Joachim Berdal Haga <cjhaga@fys.uio.no> Jon Loeliger <jdl@freescale.com> Jon Seymour <jon@blackcubes.dyndns.org> Jonathan Nieder <jrnieder@uchicago.edu> -Junio C Hamano <junio@twinsun.com> +Junio C Hamano <gitster@pobox.com> <gitster@pobox.com> +Junio C Hamano <gitster@pobox.com> <junio@pobox.com> +Junio C Hamano <gitster@pobox.com> <junio@twinsun.com> +Junio C Hamano <gitster@pobox.com> <junkio@twinsun.com> +Junio C Hamano <gitster@pobox.com> <junio@hera.kernel.org> +Junio C Hamano <gitster@pobox.com> <junio@kernel.org> +Junio C Hamano <gitster@pobox.com> <junkio@cox.net> Karl Hasselström <kha@treskal.com> Kent Engstrom <kent@lysator.liu.se> Lars Doelle <lars.doelle@on-line ! de> diff --git a/Documentation/RelNotes/1.7.10.1.txt b/Documentation/RelNotes/1.7.10.1.txt new file mode 100644 index 0000000000..806a965a1b --- /dev/null +++ b/Documentation/RelNotes/1.7.10.1.txt @@ -0,0 +1,78 @@ +Git v1.7.10.1 Release Notes +=========================== + +Additions since v1.7.10 +----------------------- + +Localization message files for Danish and German have been added. + + +Fixes since v1.7.10 +------------------- + + * "git add -p" is not designed to deal with unmerged paths but did + not exclude them and tried to apply funny patches only to fail. + + * "git blame" started missing quite a few changes from the origin + since we stopped using the diff minimalization by default in v1.7.2 + era. + + * When PATH contains an unreadable directory, alias expansion code + did not kick in, and failed with an error that said "git-subcmd" + was not found. + + * "git clean -d -f" (not "-d -f -f") is supposed to protect nested + working trees of independent git repositories that exist in the + current project working tree from getting removed, but the + protection applied only to such working trees that are at the + top-level of the current project by mistake. + + * "git commit --author=$name" did not tell the name that was being + recorded in the resulting commit to hooks, even though it does do + so when the end user overrode the authorship via the + "GIT_AUTHOR_NAME" environment variable. + + * When "git commit --template F" errors out because the user did not + touch the message, it claimed that it aborts due to "empty + message", which was utterly wrong. + + * The regexp configured with diff.wordregex was incorrectly reused + across files. + + * An age-old corner case bug in combine diff (only triggered with -U0 + and the hunk at the beginning of the file needs to be shown) has + been fixed. + + * Rename detection logic used to match two empty files as renames + during merge-recursive, leading to unnatural mismerges. + + * The parser in "fast-import" did not diagnose ":9" style references + that is not followed by required SP/LF as an error. + + * When "git fetch" encounters repositories with too many references, + the command line of "fetch-pack" that is run by a helper + e.g. remote-curl, may fail to hold all of them. Now such an + internal invocation can feed the references through the standard + input of "fetch-pack". + + * "git fetch" that recurses into submodules on demand did not check + if it needs to go into submodules when non branches (most notably, + tags) are fetched. + + * "log -p --graph" used with "--stat" had a few formatting error. + + * Running "notes merge --commit" failed to perform correctly when run + from any directory inside $GIT_DIR/. When "notes merge" stops with + conflicts, $GIT_DIR/NOTES_MERGE_WORKTREE is the place a user edits + to resolve it. + + * The 'push to upstream' implementation was broken in some corner + cases. "git push $there" without refspec, when the current branch + is set to push to a remote different from $there, used to push to + $there using the upstream information to a remote unreleated to + $there. + + * Giving "--continue" to a conflicted "rebase -i" session skipped a + commit that only results in changes to submodules. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.10.2.txt b/Documentation/RelNotes/1.7.10.2.txt new file mode 100644 index 0000000000..04fe29404c --- /dev/null +++ b/Documentation/RelNotes/1.7.10.2.txt @@ -0,0 +1,46 @@ +Git v1.7.10.2 Release Notes +=========================== + +Fixes since v1.7.10.1 +--------------------- + + * The test scaffolding for git-daemon was flaky. + + * The test scaffolding for fast-import was flaky. + + * The filesystem boundary was not correctly reported when .git directory + discovery stopped at a mount point. + + * HTTP transport that requires authentication did not work correctly when + multiple connections are used simultaneously. + + * In the older days, the header "Conflicts:" in "cherry-pick" and "merge" + was separated by a blank line from the list of paths that follow for + readability, but when "merge" was rewritten in C, we lost it by + mistake. Remove the newline from "cherry-pick" to make them match + again. + + * The command line parser choked "git cherry-pick $name" when $name can + be both revision name and a pathname, even though $name can never be a + path in the context of the command. + + * "git config --rename-section" to rename an existing section into a + bogus one did not check the new name. + + * The "diff --no-index" codepath used limited-length buffers, risking + pathnames getting truncated. Update it to use the strbuf API. + + * The report from "git fetch" said "new branch" even for a non branch + ref. + + * Octopus merge strategy did not reduce heads that are recorded in the + final commit correctly. + + * The i18n of error message "git stash save" was not properly done. + + * When using a Perl script on a system where "perl" found on user's + $PATH could be ancient or otherwise broken, we allow builders to + specify the path to a good copy of Perl with $PERL_PATH. The + gitweb test forgot to use that Perl when running its test. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.10.txt b/Documentation/RelNotes/1.7.10.txt index 540ce38c45..58100bf04e 100644 --- a/Documentation/RelNotes/1.7.10.txt +++ b/Documentation/RelNotes/1.7.10.txt @@ -19,7 +19,7 @@ Compatibility Notes GIT_MERGE_AUTOEDIT=no export GIT_MERGE_AUTOEDIT - to disable this behaviour (if you want your users to explain their + to disable this behavior (if you want your users to explain their merge commits, you do not have to do anything). Alternatively, you can give the "--no-edit" option to individual invocations of the "git merge" command if you know everybody who uses your script has @@ -29,16 +29,37 @@ Compatibility Notes while and were deprecated in mid 2008 (v1.6.0). When you give these options to "git am", it will now warn and ask you not to use them. + * When you do not tell which branches and tags to push to the "git + push" command in any way, the command used "matching refs" rule to + update remote branches and tags with branches and tags with the + same name you locally have. In future versions of Git, this will + change to push out only your current branch according to either the + "upstream" or the "current" rule. Although "upstream" may be more + powerful once the user understands Git better, the semantics + "current" gives is simpler and easier to understand for beginners + and may be a safer and better default option. We haven't decided + yet which one to switch to. + Updates since v1.7.9 -------------------- UI, Workflows & Features + * various "gitk" updates. + - show the path to the top level directory in the window title + - update preference edit dialog + - display file list correctly when directories are given on command line + - make "git-describe" output in the log message into a clickable link + - avoid matching the UNIX timestamp part when searching all fields + - give preference to symbolic font names like sans & monospace + - allow comparing two commits using a mark + - "gitk" honors log.showroot configuration. + * Teams for localizing the messages from the Porcelain layer of commands are starting to form, thanks to Jiang Xin who volunteered - to be the localization coordinator. An initial set of translated - messages for simplified chinese is available. + to be the localization coordinator. Translated messages for + simplified Chinese, Swedish and Portuguese are available. * The configuration mechanism learned an "include" facility; an assignment to the include.path pseudo-variable causes the named @@ -119,6 +140,8 @@ UI, Workflows & Features * Project search in "gitweb" shows the substring that matched in the project name and description highlighted. + * HTTP transport learned to authenticate with a proxy if needed. + * A new script "diffall" is added to contrib/; it drives an external tool to perform a directory diff of two Git revisions in one go, unlike "difftool" that compares one file at a time. @@ -180,26 +203,17 @@ Unless otherwise noted, all the fixes since v1.7.9 in the maintenance releases are contained in this release (see release notes to them for details). - * The "remaining" subcommand to "git rerere" was not documented. - (merge 3e7a1df ph/rerere-doc later to maint). + * Build with NO_PERL_MAKEMAKER was broken and Git::I18N did not work + with versions of Perl older than 5.8.3. + (merge 5eb660e ab/perl-i18n later to maint). * "git tag -s" honored "gpg.program" configuration variable since 1.7.9, but "git tag -v" and "git verify-tag" didn't. (merge a2c2506 az/verify-tag-use-gpg-config later to maint). - * When "git config" diagnoses an error in a configuration file and - shows the line number for the offending line, it miscounted if the - error was at the end of line. - (merge 4b34059 ms/maint-config-error-at-eol-linecount later to maint). - - * "gitweb" used to drop warnings in the log file when "heads" view is - accessed in a repository whose HEAD does not point at a valid - branch. - ---- -exec >/var/tmp/1 -O=v1.7.10-rc0-50-gd973dc0 -echo O=$(git describe) -git log --first-parent --oneline ^maint $O.. -echo -git shortlog --no-merges ^maint $O.. + * "configure" script learned to take "--with-sane-tool-path" from the + command line to record SANE_TOOL_PATH (used to avoid broken platform + tools in /usr/bin) in config.mak.autogen. This may be useful for + people on Solaris who have saner tools outside /usr/xpg[46]/bin. + + * zsh port of bash completion script needed another workaround. diff --git a/Documentation/RelNotes/1.7.7.7.txt b/Documentation/RelNotes/1.7.7.7.txt new file mode 100644 index 0000000000..e79118d063 --- /dev/null +++ b/Documentation/RelNotes/1.7.7.7.txt @@ -0,0 +1,13 @@ +Git v1.7.7.7 Release Notes +========================== + +Fixes since v1.7.7.6 +-------------------- + + * An error message from 'git bundle' had an unmatched single quote pair in it. + + * 'git diff --histogram' option was not described. + + * 'git imap-send' carried an unused dead code. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.8.6.txt b/Documentation/RelNotes/1.7.8.6.txt new file mode 100644 index 0000000000..d9bf2b741a --- /dev/null +++ b/Documentation/RelNotes/1.7.8.6.txt @@ -0,0 +1,22 @@ +Git v1.7.8.6 Release Notes +========================== + +Fixes since v1.7.8.5 +-------------------- + + * An error message from 'git bundle' had an unmatched single quote pair in it. + + * 'git diff --histogram' option was not described. + + * Documentation for 'git rev-list' had minor formatting errors. + + * 'git imap-send' carried an unused dead code. + + * The way 'git fetch' implemented its connectivity check over + received objects was overly pessimistic, and wasted a lot of + cycles. + + * Various minor backports of fixes from the 'master' and the 'maint' + branch. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.9.5.txt b/Documentation/RelNotes/1.7.9.5.txt new file mode 100644 index 0000000000..95cc2bbf2c --- /dev/null +++ b/Documentation/RelNotes/1.7.9.5.txt @@ -0,0 +1,23 @@ +Git v1.7.9.5 Release Notes +========================== + +Fixes since v1.7.9.4 +-------------------- + + * When "git config" diagnoses an error in a configuration file and + shows the line number for the offending line, it miscounted if the + error was at the end of line. + + * "git fast-import" accepted "ls" command with an empty path by + mistake. + + * Various new-ish output decoration modes of "git grep" were not + documented in the manual's synopsis section. + + * The "remaining" subcommand to "git rerere" was not documented. + + * "gitweb" used to drop warnings in the log file when "heads" view is + accessed in a repository whose HEAD does not point at a valid + branch. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.9.6.txt b/Documentation/RelNotes/1.7.9.6.txt new file mode 100644 index 0000000000..74bf8825e2 --- /dev/null +++ b/Documentation/RelNotes/1.7.9.6.txt @@ -0,0 +1,12 @@ +Git v1.7.9.6 Release Notes +========================== + +Fixes since v1.7.9.5 +-------------------- + + * "git merge $tag" to merge an annotated tag always opens the editor + during an interactive edit session. v1.7.10 series introduced an + environment variable GIT_MERGE_AUTOEDIT to help older scripts decline + this behaviour, but the maintenance track should also support it. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.9.7.txt b/Documentation/RelNotes/1.7.9.7.txt new file mode 100644 index 0000000000..59667d0f2a --- /dev/null +++ b/Documentation/RelNotes/1.7.9.7.txt @@ -0,0 +1,13 @@ +Git v1.7.9.7 Release Notes +========================== + +Fixes since v1.7.9.6 +-------------------- + + * An error message from 'git bundle' had an unmatched single quote pair in it. + + * The way 'git fetch' implemented its connectivity check over + received objects was overly pessimistic, and wasted a lot of + cycles. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index 5cc84a1391..68abfcacca 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -132,11 +132,14 @@ OPTIONS -t <file>:: --template=<file>:: - Use the contents of the given file as the initial version - of the commit message. The editor is invoked and you can - make subsequent changes. If a message is specified using - the `-m` or `-F` options, this option has no effect. This - overrides the `commit.template` configuration variable. + When editing the commit message, start the editor with the + contents in the given file. The `commit.template` configuration + variable is often used to give this option implicitly to the + command. This mechanism can be used by projects that want to + guide participants with some hints on what to write in the message + in what order. If the user exits the editor without editing the + message, the commit is aborted. This has no effect when a message + is given by other means, e.g. with the `-m` or `-F` options. -s:: --signoff:: diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt index 19d473c070..fe38f667f9 100644 --- a/Documentation/git-difftool.txt +++ b/Documentation/git-difftool.txt @@ -32,8 +32,9 @@ OPTIONS --tool=<tool>:: Use the diff tool specified by <tool>. Valid diff tools are: - araxis, bc3, diffuse, emerge, ecmerge, gvimdiff, kdiff3, - kompare, meld, opendiff, p4merge, tkdiff, vimdiff and xxdiff. + araxis, bc3, deltawalker, diffuse, emerge, ecmerge, gvimdiff, + kdiff3, kompare, meld, opendiff, p4merge, tkdiff, vimdiff and + xxdiff. + If a diff tool is not specified, 'git difftool' will use the configuration variable `diff.tool`. If the diff --git a/Documentation/git-fetch-pack.txt b/Documentation/git-fetch-pack.txt index ed1bdaacd1..474fa307a0 100644 --- a/Documentation/git-fetch-pack.txt +++ b/Documentation/git-fetch-pack.txt @@ -32,6 +32,16 @@ OPTIONS --all:: Fetch all remote refs. +--stdin:: + Take the list of refs from stdin, one per line. If there + are refs specified on the command line in addition to this + option, then the refs from stdin are processed after those + on the command line. ++ +If '--stateless-rpc' is specified together with this option then +the list of refs must be in packet format (pkt-line). Each ref must +be in a separate packet, and the list must end with a flush packet. + -q:: --quiet:: Pass '-q' flag to 'git unpack-objects'; this makes the diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt index 6a8b1e3a7d..343eadd407 100644 --- a/Documentation/git-grep.txt +++ b/Documentation/git-grep.txt @@ -20,7 +20,9 @@ SYNOPSIS [-c | --count] [--all-match] [-q | --quiet] [--max-depth <depth>] [--color[=<when>] | --no-color] + [--break] [--heading] [-p | --show-function] [-A <post-context>] [-B <pre-context>] [-C <context>] + [-W | --function-context] [-f <file>] [-e] <pattern> [--and|--or|--not|(|)|-e <pattern>...] [ [--exclude-standard] [--cached | --no-index | --untracked] | <tree>...] diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt index b7c7929716..cf3a9fd27e 100644 --- a/Documentation/git-p4.txt +++ b/Documentation/git-p4.txt @@ -183,6 +183,7 @@ subsequent 'sync' operations. + This example imports a new remote "p4/proj2" into an existing git repository: ++ ---- $ git init $ git p4 sync --branch=refs/remotes/p4/proj2 //depot/proj2 @@ -434,6 +435,7 @@ git-p4.branchList:: enabled. Each entry should be a pair of branch names separated by a colon (:). This example declares that both branchA and branchB were created from main: ++ ------------- git config git-p4.branchList main:branchA git config --add git-p4.branchList main:branchB @@ -487,7 +489,7 @@ git-p4.skipUserNameCheck:: user map, 'git p4' exits. This option can be used to force submission regardless. -git-p4.attemptRCSCleanup: +git-p4.attemptRCSCleanup:: If enabled, 'git p4 submit' will attempt to cleanup RCS keywords ($Header$, etc). These would otherwise cause merge conflicts and prevent the submit going ahead. This option should be considered experimental at diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 504945c691..520aaa94fb 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -409,10 +409,13 @@ The interactive mode is meant for this type of workflow: where point 2. consists of several instances of -a. regular use +a) regular use + 1. finish something worthy of a commit 2. commit -b. independent fixup + +b) independent fixup + 1. realize that something does not work 2. fix that 3. commit it diff --git a/Documentation/git-sh-i18n--envsubst.txt b/Documentation/git-sh-i18n--envsubst.txt index 5c3ec327bb..2ffaf9392e 100644 --- a/Documentation/git-sh-i18n--envsubst.txt +++ b/Documentation/git-sh-i18n--envsubst.txt @@ -25,7 +25,7 @@ plumbing scripts and/or are writing new ones. 'git sh-i18n{litdd}envsubst' is Git's stripped-down copy of the GNU `envsubst(1)` program that comes with the GNU gettext package. It's used internally by linkgit:git-sh-i18n[1] to interpolate the variables -passed to the the `eval_gettext` function. +passed to the `eval_gettext` function. No promises are made about the interface, or that this program won't disappear without warning in the next version diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index b72964947a..c243ee552b 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -190,7 +190,7 @@ commit for each submodule. sync:: Synchronizes submodules' remote URL configuration setting to the value specified in .gitmodules. It will only affect those - submodules which already have an url entry in .git/config (that is the + submodules which already have a URL entry in .git/config (that is the case when they are initialized or freshly added). This is useful when submodule URLs change upstream and you need to update your local repositories accordingly. diff --git a/Documentation/git.txt b/Documentation/git.txt index d5b7667c15..8527775988 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -44,27 +44,39 @@ unreleased) version of git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.7.9.4/git.html[documentation for release 1.7.9.4] +* link:v1.7.10.1/git.html[documentation for release 1.7.10.1] * release notes for + link:RelNotes/1.7.10.1.txt[1.7.10.1], + link:RelNotes/1.7.10.txt[1.7.10]. + +* link:v1.7.9.7/git.html[documentation for release 1.7.9.7] + +* release notes for + link:RelNotes/1.7.9.7.txt[1.7.9.7], + link:RelNotes/1.7.9.6.txt[1.7.9.6], + link:RelNotes/1.7.9.5.txt[1.7.9.5], link:RelNotes/1.7.9.4.txt[1.7.9.4], link:RelNotes/1.7.9.3.txt[1.7.9.3], link:RelNotes/1.7.9.2.txt[1.7.9.2], link:RelNotes/1.7.9.1.txt[1.7.9.1], link:RelNotes/1.7.9.txt[1.7.9]. -* link:v1.7.8.4/git.html[documentation for release 1.7.8.4] +* link:v1.7.8.6/git.html[documentation for release 1.7.8.6] * release notes for + link:RelNotes/1.7.8.6.txt[1.7.8.6], + link:RelNotes/1.7.8.5.txt[1.7.8.5], link:RelNotes/1.7.8.4.txt[1.7.8.4], link:RelNotes/1.7.8.3.txt[1.7.8.3], link:RelNotes/1.7.8.2.txt[1.7.8.2], link:RelNotes/1.7.8.1.txt[1.7.8.1], link:RelNotes/1.7.8.txt[1.7.8]. -* link:v1.7.7.6/git.html[documentation for release 1.7.7.6] +* link:v1.7.7.7/git.html[documentation for release 1.7.7.7] * release notes for + link:RelNotes/1.7.7.7.txt[1.7.7.7], link:RelNotes/1.7.7.6.txt[1.7.7.6], link:RelNotes/1.7.7.5.txt[1.7.7.5], link:RelNotes/1.7.7.4.txt[1.7.7.4], @@ -711,6 +723,12 @@ other a pager. See also the `core.pager` option in linkgit:git-config[1]. +'GIT_EDITOR':: + This environment variable overrides `$EDITOR` and `$VISUAL`. + It is used by several git comands when, on interactive mode, + an editor is to be launched. See also linkgit:git-var[1] + and the `core.editor` option in linkgit:git-config[1]. + 'GIT_SSH':: If this environment variable is set then 'git fetch' and 'git push' will use this command instead diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt index 4040941e55..4e1fd52e7d 100644 --- a/Documentation/gitmodules.txt +++ b/Documentation/gitmodules.txt @@ -28,7 +28,7 @@ submodule.<name>.path:: be unique within the .gitmodules file. submodule.<name>.url:: - Defines an url from where the submodule repository can be cloned. + Defines a URL from which the submodule repository can be cloned. This may be either an absolute URL ready to be passed to linkgit:git-clone[1] or (if it begins with ./ or ../) a location relative to the superproject's origin repository. @@ -84,7 +84,7 @@ Consider the following .gitmodules file: This defines two submodules, `libfoo` and `libbar`. These are expected to be checked out in the paths 'include/foo' and 'include/bar', and for both -submodules an url is specified which can be used for cloning the submodules. +submodules a URL is specified which can be used for cloning the submodules. SEE ALSO -------- diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt index 605a085326..168e8bfed6 100644 --- a/Documentation/gitweb.txt +++ b/Documentation/gitweb.txt @@ -14,7 +14,7 @@ gitweb. DESCRIPTION ----------- -Gitweb provides a web interface to git repositories. It's features include: +Gitweb provides a web interface to git repositories. Its features include: * Viewing multiple Git repositories with common root. * Browsing every revision of the repository. @@ -60,7 +60,7 @@ to gitweb. The list of projects is generated by default by scanning the more exact; gitweb is not interested in a working area, and is best suited to showing "bare" repositories). -The name of repository in gitweb is path to it's `$GIT_DIR` (it's object +The name of the repository in gitweb is the path to its `$GIT_DIR` (its object database) relative to `$projectroot`. Therefore the repository $repo can be found at "$projectroot/$repo". diff --git a/Documentation/howto/using-merge-subtree.txt b/Documentation/howto/using-merge-subtree.txt index 2933056120..1ae8d1214e 100644 --- a/Documentation/howto/using-merge-subtree.txt +++ b/Documentation/howto/using-merge-subtree.txt @@ -25,7 +25,7 @@ What you want is the 'subtree' merge strategy, which helps you in such a situation. In this example, let's say you have the repository at `/path/to/B` (but -it can be an URL as well, if you want). You want to merge the 'master' +it can be a URL as well, if you want). You want to merge the 'master' branch of that repository to the `dir-B` subdirectory in your current branch. diff --git a/Documentation/technical/api-string-list.txt b/Documentation/technical/api-string-list.txt index ce24eb96f5..5a0c14fceb 100644 --- a/Documentation/technical/api-string-list.txt +++ b/Documentation/technical/api-string-list.txt @@ -83,7 +83,9 @@ Functions Insert a new element to the string_list. The returned pointer can be handy if you want to write something to the `util` pointer of the - string_list_item containing the just added string. + string_list_item containing the just added string. If the given + string already exists the insertion will be skipped and the + pointer to the existing item returned. + Since this function uses xrealloc() (which die()s if it fails) if the list needs to grow, it is safe not to check the pointer. I.e. you may diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 1c06cec047..692222afb3 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v1.7.10-rc1 +DEF_VER=v1.7.10.1 LF=' ' @@ -12,7 +12,7 @@ if test -f version then VN=$(cat version) || VN="$DEF_VER" elif test -d .git -o -f .git && - VN=$(git describe --match "v[0-9]*" --abbrev=4 HEAD 2>/dev/null) && + VN=$(git describe --match "v[0-9]*" --abbrev=7 HEAD 2>/dev/null) && case "$VN" in *$LF*) (exit 1) ;; v[0-9]*) @@ -1 +1 @@ -Documentation/RelNotes/1.7.10.txt
\ No newline at end of file +Documentation/RelNotes/1.7.10.2.txt
\ No newline at end of file @@ -40,7 +40,7 @@ int git_check_attr(const char *path, int, struct git_attr_check *); /* * Retrieve all attributes that apply to the specified path. *num - * will be set the the number of attributes on the path; **check will + * will be set to the number of attributes on the path; **check will * be set to point at a newly-allocated array of git_attr_check * objects describing the attributes and their values. *check must be * free()ed by the caller. diff --git a/builtin/blame.c b/builtin/blame.c index b35bd6249d..324d476abf 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -2302,6 +2302,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) OPT_BIT('s', NULL, &output_option, "Suppress author name and timestamp (Default: off)", OUTPUT_NO_AUTHOR), OPT_BIT('e', "show-email", &output_option, "Show author email instead of name (Default: off)", OUTPUT_SHOW_EMAIL), OPT_BIT('w', NULL, &xdl_opts, "Ignore whitespace differences", XDF_IGNORE_WHITESPACE), + OPT_BIT(0, "minimal", &xdl_opts, "Spend extra cycles to find better match", XDF_NEED_MINIMAL), OPT_STRING('S', NULL, &revs_file, "file", "Use revisions from <file> instead of calling git-rev-list"), OPT_STRING(0, "contents", &contents_from, "file", "Use <file>'s contents as the final image"), { OPTION_CALLBACK, 'C', NULL, &opt, "score", "Find line copies within and across files", PARSE_OPT_OPTARG, blame_copy_callback }, diff --git a/builtin/commit.c b/builtin/commit.c index 3714582e19..b257ae8774 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -533,9 +533,20 @@ static int is_a_merge(const struct commit *current_head) static const char sign_off_header[] = "Signed-off-by: "; +static void export_one(const char *var, const char *s, const char *e, int hack) +{ + struct strbuf buf = STRBUF_INIT; + if (hack) + strbuf_addch(&buf, hack); + strbuf_addf(&buf, "%.*s", (int)(e - s), s); + setenv(var, buf.buf, 1); + strbuf_release(&buf); +} + static void determine_author_info(struct strbuf *author_ident) { char *name, *email, *date; + struct ident_split author; name = getenv("GIT_AUTHOR_NAME"); email = getenv("GIT_AUTHOR_EMAIL"); @@ -585,6 +596,11 @@ static void determine_author_info(struct strbuf *author_ident) date = force_date; strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_ERROR_ON_NO_NAME)); + if (!split_ident_line(&author, author_ident->buf, author_ident->len)) { + export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0); + export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0); + export_one("GIT_AUTHOR_DATE", author.date_begin, author.tz_end, '@'); + } } static int ends_rfc2822_footer(struct strbuf *sb) @@ -652,6 +668,9 @@ static int prepare_to_commit(const char *index_file, const char *prefix, int ident_shown = 0; int clean_message_contents = (cleanup_mode != CLEANUP_NONE); + /* This checks and barfs if author is badly specified */ + determine_author_info(author_ident); + if (!no_verify && run_hook(index_file, "pre-commit", NULL)) return 0; @@ -771,9 +790,6 @@ static int prepare_to_commit(const char *index_file, const char *prefix, strbuf_release(&sb); - /* This checks and barfs if author is badly specified */ - determine_author_info(author_ident); - /* This checks if committer ident is explicitly given */ strbuf_addstr(&committer_ident, git_committer_info(0)); if (use_editor && include_status) { @@ -905,27 +921,10 @@ static int prepare_to_commit(const char *index_file, const char *prefix, return 1; } -/* - * Find out if the message in the strbuf contains only whitespace and - * Signed-off-by lines. - */ -static int message_is_empty(struct strbuf *sb) +static int rest_is_empty(struct strbuf *sb, int start) { - struct strbuf tmpl = STRBUF_INIT; + int i, eol; const char *nl; - int eol, i, start = 0; - - if (cleanup_mode == CLEANUP_NONE && sb->len) - return 0; - - /* See if the template is just a prefix of the message. */ - if (template_file && strbuf_read_file(&tmpl, template_file, 0) > 0) { - stripspace(&tmpl, cleanup_mode == CLEANUP_ALL); - if (start + tmpl.len <= sb->len && - memcmp(tmpl.buf, sb->buf + start, tmpl.len) == 0) - start += tmpl.len; - } - strbuf_release(&tmpl); /* Check if the rest is just whitespace and Signed-of-by's. */ for (i = start; i < sb->len; i++) { @@ -948,6 +947,40 @@ static int message_is_empty(struct strbuf *sb) return 1; } +/* + * Find out if the message in the strbuf contains only whitespace and + * Signed-off-by lines. + */ +static int message_is_empty(struct strbuf *sb) +{ + if (cleanup_mode == CLEANUP_NONE && sb->len) + return 0; + return rest_is_empty(sb, 0); +} + +/* + * See if the user edited the message in the editor or left what + * was in the template intact + */ +static int template_untouched(struct strbuf *sb) +{ + struct strbuf tmpl = STRBUF_INIT; + char *start; + + if (cleanup_mode == CLEANUP_NONE && sb->len) + return 0; + + if (!template_file || strbuf_read_file(&tmpl, template_file, 0) <= 0) + return 0; + + stripspace(&tmpl, cleanup_mode == CLEANUP_ALL); + start = (char *)skip_prefix(sb->buf, tmpl.buf); + if (!start) + start = sb->buf; + strbuf_release(&tmpl); + return rest_is_empty(sb, start - sb->buf); +} + static const char *find_author_by_nickname(const char *name) { struct rev_info revs; @@ -1055,6 +1088,8 @@ static int parse_and_validate_options(int argc, const char *argv[], die(_("Only one of -c/-C/-F/--fixup can be used.")); if (message.len && f > 0) die((_("Option -m cannot be combined with -c/-C/-F/--fixup."))); + if (f || message.len) + template_file = NULL; if (edit_message) use_message = edit_message; if (amend && !use_message && !fixup_message) @@ -1494,6 +1529,11 @@ int cmd_commit(int argc, const char **argv, const char *prefix) if (cleanup_mode != CLEANUP_NONE) stripspace(&sb, cleanup_mode == CLEANUP_ALL); + if (template_untouched(&sb) && !allow_empty_message) { + rollback_index_files(); + fprintf(stderr, _("Aborting commit; you did not edit the message.\n")); + exit(1); + } if (message_is_empty(&sb) && !allow_empty_message) { rollback_index_files(); fprintf(stderr, _("Aborting commit due to empty commit message.\n")); diff --git a/builtin/config.c b/builtin/config.c index d41a9bfb14..33c8820af6 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -397,8 +397,6 @@ int cmd_config(int argc, const char **argv, const char *prefix) xstrdup(prefix_filename(prefix, strlen(prefix), given_config_file)); - else - given_config_file = given_config_file; } if (respect_includes == -1) diff --git a/builtin/diff.c b/builtin/diff.c index 424c815f9b..9069dc41be 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -327,7 +327,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) add_head_to_pending(&rev); if (!rev.pending.nr) { struct tree *tree; - tree = lookup_tree((const unsigned char*)EMPTY_TREE_SHA1_BIN); + tree = lookup_tree(EMPTY_TREE_SHA1_BIN); add_pending_object(&rev, &tree->object, "HEAD"); } break; diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 7124c4b49c..10db15b184 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -23,7 +23,9 @@ static struct fetch_pack_args args = { }; static const char fetch_pack_usage[] = -"git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [-v] [<host>:]<directory> [<refs>...]"; +"git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] " +"[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] " +"[--no-progress] [-v] [<host>:]<directory> [<refs>...]"; #define COMPLETE (1U << 0) #define COMMON (1U << 1) @@ -942,6 +944,10 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) args.fetch_all = 1; continue; } + if (!strcmp("--stdin", arg)) { + args.stdin_refs = 1; + continue; + } if (!strcmp("-v", arg)) { args.verbose = 1; continue; @@ -973,6 +979,40 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) if (!dest) usage(fetch_pack_usage); + if (args.stdin_refs) { + /* + * Copy refs from cmdline to new growable list, then + * append the refs from the standard input. + */ + int alloc_heads = nr_heads; + int size = nr_heads * sizeof(*heads); + heads = memcpy(xmalloc(size), heads, size); + if (args.stateless_rpc) { + /* in stateless RPC mode we use pkt-line to read + * from stdin, until we get a flush packet + */ + static char line[1000]; + for (;;) { + int n = packet_read_line(0, line, sizeof(line)); + if (!n) + break; + if (line[n-1] == '\n') + n--; + ALLOC_GROW(heads, nr_heads + 1, alloc_heads); + heads[nr_heads++] = xmemdupz(line, n); + } + } + else { + /* read from stdin one ref per line, until EOF */ + struct strbuf line = STRBUF_INIT; + while (strbuf_getline(&line, stdin, '\n') != EOF) { + ALLOC_GROW(heads, nr_heads + 1, alloc_heads); + heads[nr_heads++] = strbuf_detach(&line, NULL); + } + strbuf_release(&line); + } + } + if (args.stateless_rpc) { conn = NULL; fd[0] = 0; diff --git a/builtin/fetch.c b/builtin/fetch.c index 65f5f9b72f..1c8cb62445 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -240,6 +240,7 @@ static int s_update_ref(const char *action, static int update_local_ref(struct ref *ref, const char *remote, + const struct ref *remote_ref, struct strbuf *display) { struct commit *current = NULL, *updated; @@ -293,18 +294,26 @@ static int update_local_ref(struct ref *ref, const char *msg; const char *what; int r; - if (!strncmp(ref->name, "refs/tags/", 10)) { + /* + * Nicely describe the new ref we're fetching. + * Base this on the remote's ref name, as it's + * more likely to follow a standard layout. + */ + const char *name = remote_ref ? remote_ref->name : ""; + if (!prefixcmp(name, "refs/tags/")) { msg = "storing tag"; what = _("[new tag]"); - } - else { + } else if (!prefixcmp(name, "refs/heads/")) { msg = "storing head"; what = _("[new branch]"); - if ((recurse_submodules != RECURSE_SUBMODULES_OFF) && - (recurse_submodules != RECURSE_SUBMODULES_ON)) - check_for_new_submodule_commits(ref->new_sha1); + } else { + msg = "storing ref"; + what = _("[new ref]"); } + if ((recurse_submodules != RECURSE_SUBMODULES_OFF) && + (recurse_submodules != RECURSE_SUBMODULES_ON)) + check_for_new_submodule_commits(ref->new_sha1); r = s_update_ref(msg, ref, 0); strbuf_addf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '*', @@ -466,7 +475,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name, strbuf_reset(¬e); if (ref) { - rc |= update_local_ref(ref, what, ¬e); + rc |= update_local_ref(ref, what, rm, ¬e); free(ref); } else strbuf_addf(¬e, "* %-*s %-*s -> FETCH_HEAD", diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c index c81a7fef26..fc083e3c5c 100644 --- a/builtin/fmt-merge-msg.c +++ b/builtin/fmt-merge-msg.c @@ -53,7 +53,48 @@ static void init_src_data(struct src_data *data) static struct string_list srcs = STRING_LIST_INIT_DUP; static struct string_list origins = STRING_LIST_INIT_DUP; -static int handle_line(char *line) +struct merge_parents { + int alloc, nr; + struct merge_parent { + unsigned char given[20]; + unsigned char commit[20]; + unsigned char used; + } *item; +}; + +/* + * I know, I know, this is inefficient, but you won't be pulling and merging + * hundreds of heads at a time anyway. + */ +static struct merge_parent *find_merge_parent(struct merge_parents *table, + unsigned char *given, + unsigned char *commit) +{ + int i; + for (i = 0; i < table->nr; i++) { + if (given && hashcmp(table->item[i].given, given)) + continue; + if (commit && hashcmp(table->item[i].commit, commit)) + continue; + return &table->item[i]; + } + return NULL; +} + +static void add_merge_parent(struct merge_parents *table, + unsigned char *given, + unsigned char *commit) +{ + if (table->nr && find_merge_parent(table, given, commit)) + return; + ALLOC_GROW(table->item, table->nr + 1, table->alloc); + hashcpy(table->item[table->nr].given, given); + hashcpy(table->item[table->nr].commit, commit); + table->item[table->nr].used = 0; + table->nr++; +} + +static int handle_line(char *line, struct merge_parents *merge_parents) { int i, len = strlen(line); struct origin_data *origin_data; @@ -61,6 +102,7 @@ static int handle_line(char *line) struct src_data *src_data; struct string_list_item *item; int pulling_head = 0; + unsigned char sha1[20]; if (len < 43 || line[40] != '\t') return 1; @@ -71,14 +113,15 @@ static int handle_line(char *line) if (line[41] != '\t') return 2; - line[40] = 0; - origin_data = xcalloc(1, sizeof(struct origin_data)); - i = get_sha1(line, origin_data->sha1); - line[40] = '\t'; - if (i) { - free(origin_data); + i = get_sha1_hex(line, sha1); + if (i) return 3; - } + + if (!find_merge_parent(merge_parents, sha1, NULL)) + return 0; /* subsumed by other parents */ + + origin_data = xcalloc(1, sizeof(struct origin_data)); + hashcpy(origin_data->sha1, sha1); if (line[len - 1] == '\n') line[len - 1] = 0; @@ -366,6 +409,67 @@ static void fmt_merge_msg_sigs(struct strbuf *out) strbuf_release(&tagbuf); } +static void find_merge_parents(struct merge_parents *result, + struct strbuf *in, unsigned char *head) +{ + struct commit_list *parents, *next; + struct commit *head_commit; + int pos = 0, i, j; + + parents = NULL; + while (pos < in->len) { + int len; + char *p = in->buf + pos; + char *newline = strchr(p, '\n'); + unsigned char sha1[20]; + struct commit *parent; + struct object *obj; + + len = newline ? newline - p : strlen(p); + pos += len + !!newline; + + if (len < 43 || + get_sha1_hex(p, sha1) || + p[40] != '\t' || + p[41] != '\t') + continue; /* skip not-for-merge */ + /* + * Do not use get_merge_parent() here; we do not have + * "name" here and we do not want to contaminate its + * util field yet. + */ + obj = parse_object(sha1); + parent = (struct commit *)peel_to_type(NULL, 0, obj, OBJ_COMMIT); + if (!parent) + continue; + commit_list_insert(parent, &parents); + add_merge_parent(result, obj->sha1, parent->object.sha1); + } + head_commit = lookup_commit(head); + if (head_commit) + commit_list_insert(head_commit, &parents); + parents = reduce_heads(parents); + + while (parents) { + for (i = 0; i < result->nr; i++) + if (!hashcmp(result->item[i].commit, + parents->item->object.sha1)) + result->item[i].used = 1; + next = parents->next; + free(parents); + parents = next; + } + + for (i = j = 0; i < result->nr; i++) { + if (result->item[i].used) { + if (i != j) + result->item[j] = result->item[i]; + j++; + } + } + result->nr = j; +} + int fmt_merge_msg(struct strbuf *in, struct strbuf *out, struct fmt_merge_msg_opts *opts) { @@ -373,6 +477,9 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, unsigned char head_sha1[20]; const char *current_branch; void *current_branch_to_free; + struct merge_parents merge_parents; + + memset(&merge_parents, 0, sizeof(merge_parents)); /* get current branch */ current_branch = current_branch_to_free = @@ -382,6 +489,8 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, if (!prefixcmp(current_branch, "refs/heads/")) current_branch += 11; + find_merge_parents(&merge_parents, in, head_sha1); + /* get a line */ while (pos < in->len) { int len; @@ -392,7 +501,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, pos += len + !!newline; i++; p[len] = 0; - if (handle_line(p)) + if (handle_line(p, &merge_parents)) die ("Error in line %d: %.*s", i, len, p); } @@ -423,6 +532,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, strbuf_complete_line(out); free(current_branch_to_free); + free(merge_parents.item); return 0; } diff --git a/builtin/merge.c b/builtin/merge.c index cb8f14910b..470fc57c5d 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -52,7 +52,6 @@ static int fast_forward_only, option_edit = -1; static int allow_trivial = 1, have_message; static int overwrite_ignore = 1; static struct strbuf merge_msg = STRBUF_INIT; -static struct commit_list *remoteheads; static struct strategy **use_strategies; static size_t use_strategies_nr, use_strategies_alloc; static const char **xopts; @@ -318,7 +317,7 @@ static void finish_up_to_date(const char *msg) drop_save(); } -static void squash_message(struct commit *commit) +static void squash_message(struct commit *commit, struct commit_list *remoteheads) { struct rev_info rev; struct strbuf out = STRBUF_INIT; @@ -366,6 +365,7 @@ static void squash_message(struct commit *commit) } static void finish(struct commit *head_commit, + struct commit_list *remoteheads, const unsigned char *new_head, const char *msg) { struct strbuf reflog_message = STRBUF_INIT; @@ -380,7 +380,7 @@ static void finish(struct commit *head_commit, getenv("GIT_REFLOG_ACTION"), msg); } if (squash) { - squash_message(head_commit); + squash_message(head_commit, remoteheads); } else { if (verbosity >= 0 && !merge_msg.len) printf(_("No merge message -- not updating HEAD\n")); @@ -683,6 +683,7 @@ int try_merge_command(const char *strategy, size_t xopts_nr, } static int try_merge_strategy(const char *strategy, struct commit_list *common, + struct commit_list *remoteheads, struct commit *head, const char *head_arg) { int index_fd; @@ -876,14 +877,14 @@ static void read_merge_msg(struct strbuf *msg) die_errno(_("Could not read from '%s'"), filename); } -static void write_merge_state(void); -static void abort_commit(const char *err_msg) +static void write_merge_state(struct commit_list *); +static void abort_commit(struct commit_list *remoteheads, const char *err_msg) { if (err_msg) error("%s", err_msg); fprintf(stderr, _("Not committing merge; use 'git commit' to complete the merge.\n")); - write_merge_state(); + write_merge_state(remoteheads); exit(1); } @@ -894,7 +895,7 @@ N_("Please enter a commit message to explain why this merge is necessary,\n" "Lines starting with '#' will be ignored, and an empty message aborts\n" "the commit.\n"); -static void prepare_to_commit(void) +static void prepare_to_commit(struct commit_list *remoteheads) { struct strbuf msg = STRBUF_INIT; const char *comment = _(merge_editor_comment); @@ -907,18 +908,18 @@ static void prepare_to_commit(void) git_path("MERGE_MSG"), "merge", NULL, NULL); if (0 < option_edit) { if (launch_editor(git_path("MERGE_MSG"), NULL, NULL)) - abort_commit(NULL); + abort_commit(remoteheads, NULL); } read_merge_msg(&msg); stripspace(&msg, 0 < option_edit); if (!msg.len) - abort_commit(_("Empty commit message.")); + abort_commit(remoteheads, _("Empty commit message.")); strbuf_release(&merge_msg); strbuf_addbuf(&merge_msg, &msg); strbuf_release(&msg); } -static int merge_trivial(struct commit *head) +static int merge_trivial(struct commit *head, struct commit_list *remoteheads) { unsigned char result_tree[20], result_commit[20]; struct commit_list *parent = xmalloc(sizeof(*parent)); @@ -929,45 +930,37 @@ static int merge_trivial(struct commit *head) parent->next = xmalloc(sizeof(*parent->next)); parent->next->item = remoteheads->item; parent->next->next = NULL; - prepare_to_commit(); + prepare_to_commit(remoteheads); if (commit_tree(&merge_msg, result_tree, parent, result_commit, NULL, sign_commit)) die(_("failed to write commit object")); - finish(head, result_commit, "In-index merge"); + finish(head, remoteheads, result_commit, "In-index merge"); drop_save(); return 0; } static int finish_automerge(struct commit *head, + int head_subsumed, struct commit_list *common, + struct commit_list *remoteheads, unsigned char *result_tree, const char *wt_strategy) { - struct commit_list *parents = NULL, *j; + struct commit_list *parents = NULL; struct strbuf buf = STRBUF_INIT; unsigned char result_commit[20]; free_commit_list(common); - if (allow_fast_forward) { - parents = remoteheads; + parents = remoteheads; + if (!head_subsumed || !allow_fast_forward) commit_list_insert(head, &parents); - parents = reduce_heads(parents); - } else { - struct commit_list **pptr = &parents; - - pptr = &commit_list_insert(head, - pptr)->next; - for (j = remoteheads; j; j = j->next) - pptr = &commit_list_insert(j->item, pptr)->next; - } strbuf_addch(&merge_msg, '\n'); - prepare_to_commit(); - free_commit_list(remoteheads); + prepare_to_commit(remoteheads); if (commit_tree(&merge_msg, result_tree, parents, result_commit, NULL, sign_commit)) die(_("failed to write commit object")); strbuf_addf(&buf, "Merge made by the '%s' strategy.", wt_strategy); - finish(head, result_commit, buf.buf); + finish(head, remoteheads, result_commit, buf.buf); strbuf_release(&buf); drop_save(); return 0; @@ -1072,7 +1065,7 @@ static int setup_with_upstream(const char ***argv) return i; } -static void write_merge_state(void) +static void write_merge_state(struct commit_list *remoteheads) { const char *filename; int fd; @@ -1137,6 +1130,39 @@ static int default_edit_option(void) st_stdin.st_mode == st_stdout.st_mode); } +static struct commit_list *collect_parents(struct commit *head_commit, + int *head_subsumed, + int argc, const char **argv) +{ + int i; + struct commit_list *remoteheads = NULL, *parents, *next; + struct commit_list **remotes = &remoteheads; + + if (head_commit) + remotes = &commit_list_insert(head_commit, remotes)->next; + for (i = 0; i < argc; i++) { + struct commit *commit = get_merge_parent(argv[i]); + if (!commit) + die(_("%s - not something we can merge"), argv[i]); + remotes = &commit_list_insert(commit, remotes)->next; + } + *remotes = NULL; + + parents = reduce_heads(remoteheads); + + *head_subsumed = 1; /* we will flip this to 0 when we find it */ + for (remoteheads = NULL, remotes = &remoteheads; + parents; + parents = next) { + struct commit *commit = parents->item; + next = parents->next; + if (commit == head_commit) + *head_subsumed = 0; + else + remotes = &commit_list_insert(commit, remotes)->next; + } + return remoteheads; +} int cmd_merge(int argc, const char **argv, const char *prefix) { @@ -1146,11 +1172,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) struct commit *head_commit; struct strbuf buf = STRBUF_INIT; const char *head_arg; - int flag, i, ret = 0; + int flag, i, ret = 0, head_subsumed; int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0; struct commit_list *common = NULL; const char *best_strategy = NULL, *wt_strategy = NULL; - struct commit_list **remotes = &remoteheads; + struct commit_list *remoteheads, *p; void *branch_to_free; if (argc == 2 && !strcmp(argv[1], "-h")) @@ -1255,6 +1281,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) head_arg = argv[1]; argv += 2; argc -= 2; + remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv); } else if (!head_commit) { struct commit *remote_head; /* @@ -1270,7 +1297,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (!allow_fast_forward) die(_("Non-fast-forward commit does not make sense into " "an empty head")); - remote_head = get_merge_parent(argv[0]); + remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv); + remote_head = remoteheads->item; if (!remote_head) die(_("%s - not something we can merge"), argv[0]); read_empty(remote_head->object.sha1, 0); @@ -1288,8 +1316,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix) * the standard merge summary message to be appended * to the given message. */ - for (i = 0; i < argc; i++) - merge_name(argv[i], &merge_names); + remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv); + for (p = remoteheads; p; p = p->next) + merge_name(merge_remote_util(p->item)->name, &merge_names); if (!have_message || shortlog_len) { struct fmt_merge_msg_opts opts; @@ -1308,35 +1337,31 @@ int cmd_merge(int argc, const char **argv, const char *prefix) builtin_merge_options); strbuf_addstr(&buf, "merge"); - for (i = 0; i < argc; i++) - strbuf_addf(&buf, " %s", argv[i]); + for (p = remoteheads; p; p = p->next) + strbuf_addf(&buf, " %s", merge_remote_util(p->item)->name); setenv("GIT_REFLOG_ACTION", buf.buf, 0); strbuf_reset(&buf); - for (i = 0; i < argc; i++) { - struct commit *commit = get_merge_parent(argv[i]); - if (!commit) - die(_("%s - not something we can merge"), argv[i]); - remotes = &commit_list_insert(commit, remotes)->next; + for (p = remoteheads; p; p = p->next) { + struct commit *commit = p->item; strbuf_addf(&buf, "GITHEAD_%s", sha1_to_hex(commit->object.sha1)); - setenv(buf.buf, argv[i], 1); + setenv(buf.buf, merge_remote_util(commit)->name, 1); strbuf_reset(&buf); if (!fast_forward_only && merge_remote_util(commit) && merge_remote_util(commit)->obj && - merge_remote_util(commit)->obj->type == OBJ_TAG) { - if (option_edit < 0) - option_edit = 1; + merge_remote_util(commit)->obj->type == OBJ_TAG) allow_fast_forward = 0; - } } if (option_edit < 0) option_edit = default_edit_option(); if (!use_strategies) { - if (!remoteheads->next) + if (!remoteheads) + ; /* already up-to-date */ + else if (!remoteheads->next) add_strategies(pull_twohead, DEFAULT_TWOHEAD); else add_strategies(pull_octopus, DEFAULT_OCTOPUS); @@ -1349,7 +1374,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix) allow_trivial = 0; } - if (!remoteheads->next) + if (!remoteheads) + ; /* already up-to-date */ + else if (!remoteheads->next) common = get_merge_bases(head_commit, remoteheads->item, 1); else { struct commit_list *list = remoteheads; @@ -1361,10 +1388,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) update_ref("updating ORIG_HEAD", "ORIG_HEAD", head_commit->object.sha1, NULL, 0, DIE_ON_ERR); - if (!common) + if (remoteheads && !common) ; /* No common ancestors found. We need a real merge. */ - else if (!remoteheads->next && !common->next && - common->item == remoteheads->item) { + else if (!remoteheads || + (!remoteheads->next && !common->next && + common->item == remoteheads->item)) { /* * If head can reach all the merge then we are up to date. * but first the most common case of merging one remote. @@ -1402,7 +1430,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) goto done; } - finish(head_commit, commit->object.sha1, msg.buf); + finish(head_commit, remoteheads, commit->object.sha1, msg.buf); drop_save(); goto done; } else if (!remoteheads->next && common->next) @@ -1424,7 +1452,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (!read_tree_trivial(common->item->object.sha1, head_commit->object.sha1, remoteheads->item->object.sha1)) { - ret = merge_trivial(head_commit); + ret = merge_trivial(head_commit, remoteheads); goto done; } printf(_("Nope.\n")); @@ -1495,7 +1523,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) wt_strategy = use_strategies[i]->name; ret = try_merge_strategy(use_strategies[i]->name, - common, head_commit, head_arg); + common, remoteheads, + head_commit, head_arg); if (!option_commit && !ret) { merge_was_ok = 1; /* @@ -1537,8 +1566,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix) * auto resolved the merge cleanly. */ if (automerge_was_ok) { - ret = finish_automerge(head_commit, common, result_tree, - wt_strategy); + ret = finish_automerge(head_commit, head_subsumed, + common, remoteheads, + result_tree, wt_strategy); goto done; } @@ -1563,13 +1593,14 @@ int cmd_merge(int argc, const char **argv, const char *prefix) restore_state(head_commit->object.sha1, stash); printf(_("Using the %s to prepare resolving by hand.\n"), best_strategy); - try_merge_strategy(best_strategy, common, head_commit, head_arg); + try_merge_strategy(best_strategy, common, remoteheads, + head_commit, head_arg); } if (squash) - finish(head_commit, NULL, NULL); + finish(head_commit, remoteheads, NULL, NULL); else - write_merge_state(); + write_merge_state(remoteheads); if (merge_was_ok) fprintf(stderr, _("Automatic merge went well; " diff --git a/builtin/push.c b/builtin/push.c index d315475f16..b6c0fee4c6 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -65,6 +65,16 @@ static void set_refspecs(const char **refs, int nr) } } +static int push_url_of_remote(struct remote *remote, const char ***url_p) +{ + if (remote->pushurl_nr) { + *url_p = remote->pushurl; + return remote->pushurl_nr; + } + *url_p = remote->url; + return remote->url_nr; +} + static void setup_push_upstream(struct remote *remote) { struct strbuf refspec = STRBUF_INIT; @@ -76,7 +86,7 @@ static void setup_push_upstream(struct remote *remote) "\n" " git push %s HEAD:<name-of-remote-branch>\n"), remote->name); - if (!branch->merge_nr || !branch->merge) + if (!branch->merge_nr || !branch->merge || !branch->remote_name) die(_("The current branch %s has no upstream branch.\n" "To push the current branch and set the remote as upstream, use\n" "\n" @@ -87,6 +97,12 @@ static void setup_push_upstream(struct remote *remote) if (branch->merge_nr != 1) die(_("The current branch %s has multiple upstream branches, " "refusing to push."), branch->name); + if (strcmp(branch->remote_name, remote->name)) + die(_("You are pushing to remote '%s', which is not the upstream of\n" + "your current branch '%s', without telling me what to push\n" + "to update which remote branch."), + remote->name, branch->name); + strbuf_addf(&refspec, "%s:%s", branch->name, branch->merge[0]->src); add_refspec(refspec.buf); } @@ -196,13 +212,7 @@ static int do_push(const char *repo, int flags) setup_default_push_refspecs(remote); } errs = 0; - if (remote->pushurl_nr) { - url = remote->pushurl; - url_nr = remote->pushurl_nr; - } else { - url = remote->url; - url_nr = remote->url_nr; - } + url_nr = push_url_of_remote(remote, &url); if (url_nr) { for (i = 0; i < url_nr; i++) { struct transport *transport = diff --git a/builtin/revert.c b/builtin/revert.c index e6840f23dc..92f3fa5f57 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -181,12 +181,15 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) if (opts->subcommand != REPLAY_NONE) { opts->revs = NULL; } else { + struct setup_revision_opt s_r_opt; opts->revs = xmalloc(sizeof(*opts->revs)); init_revisions(opts->revs, NULL); opts->revs->no_walk = 1; if (argc < 2) usage_with_options(usage_str, options); - argc = setup_revisions(argc, argv, opts->revs, NULL); + memset(&s_r_opt, 0, sizeof(s_r_opt)); + s_r_opt.assume_dashdash = 1; + argc = setup_revisions(argc, argv, opts->revs, &s_r_opt); } if (argc > 1) diff --git a/builtin/send-pack.c b/builtin/send-pack.c index 9df341c793..d5d7105ba2 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -410,6 +410,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) const char *receivepack = "git-receive-pack"; int flags; int nonfastforward = 0; + int progress = -1; argv++; for (i = 1; i < argc; i++, argv++) { @@ -452,6 +453,14 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) args.verbose = 1; continue; } + if (!strcmp(arg, "--progress")) { + progress = 1; + continue; + } + if (!strcmp(arg, "--no-progress")) { + progress = 0; + continue; + } if (!strcmp(arg, "--thin")) { args.use_thin_pack = 1; continue; @@ -492,6 +501,10 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) } } + if (progress == -1) + progress = !args.quiet && isatty(2); + args.progress = progress; + if (args.stateless_rpc) { conn = NULL; fd[0] = 0; @@ -289,7 +289,7 @@ int create_bundle(struct bundle_header *header, const char *path, argc = setup_revisions(argc, argv, &revs, NULL); if (argc > 1) - return error("unrecognized argument: %s'", argv[1]); + return error("unrecognized argument: %s", argv[1]); object_array_remove_duplicates(&revs.pending); @@ -708,6 +708,19 @@ static inline void hashclr(unsigned char *hash) #define EMPTY_TREE_SHA1_BIN \ ((const unsigned char *) EMPTY_TREE_SHA1_BIN_LITERAL) +#define EMPTY_BLOB_SHA1_HEX \ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" +#define EMPTY_BLOB_SHA1_BIN_LITERAL \ + "\xe6\x9d\xe2\x9b\xb2\xd1\xd6\x43\x4b\x8b" \ + "\x29\xae\x77\x5a\xd8\xc2\xe4\x8c\x53\x91" +#define EMPTY_BLOB_SHA1_BIN \ + ((const unsigned char *) EMPTY_BLOB_SHA1_BIN_LITERAL) + +static inline int is_empty_blob_sha1(const unsigned char *sha1) +{ + return !hashcmp(sha1, EMPTY_BLOB_SHA1_BIN); +} + int git_mkstemp(char *path, size_t n, const char *template); int git_mkstemps(char *path, size_t n, const char *template, int suffix_len); @@ -928,6 +941,22 @@ extern const char *fmt_name(const char *name, const char *email); extern const char *git_editor(void); extern const char *git_pager(int stdout_is_tty); +struct ident_split { + const char *name_begin; + const char *name_end; + const char *mail_begin; + const char *mail_end; + const char *date_begin; + const char *date_end; + const char *tz_begin; + const char *tz_end; +}; +/* + * Signals an success with 0, but time part of the result may be NULL + * if the input lacks timestamp and zone + */ +extern int split_ident_line(struct ident_split *, const char *, int); + struct checkout { const char *base_dir; int base_dir_len; @@ -1276,4 +1305,6 @@ extern struct startup_info *startup_info; /* builtin/merge.c */ int checkout_fast_forward(const unsigned char *from, const unsigned char *to); +int sane_execvp(const char *file, char *const argv[]); + #endif /* CACHE_H */ diff --git a/combine-diff.c b/combine-diff.c index a2e8dcf855..9786680368 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -423,7 +423,7 @@ static int make_hunks(struct sline *sline, unsigned long cnt, hunk_begin, j); la = (la + context < cnt + 1) ? (la + context) : cnt + 1; - while (j <= --la) { + while (la && j <= --la) { if (sline[la].flag & mark) { contin = 1; break; diff --git a/compat/mingw.c b/compat/mingw.c index a0ac487c0c..afc892d6b1 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1003,7 +1003,7 @@ static void mingw_execve(const char *cmd, char *const *argv, char *const *env) } } -void mingw_execvp(const char *cmd, char *const *argv) +int mingw_execvp(const char *cmd, char *const *argv) { char **path = get_path_split(); char *prog = path_lookup(cmd, path, 0); @@ -1015,11 +1015,13 @@ void mingw_execvp(const char *cmd, char *const *argv) errno = ENOENT; free_path_split(path); + return -1; } -void mingw_execv(const char *cmd, char *const *argv) +int mingw_execv(const char *cmd, char *const *argv) { mingw_execve(cmd, argv, environ); + return -1; } int mingw_kill(pid_t pid, int sig) diff --git a/compat/mingw.h b/compat/mingw.h index 0ff1e04812..ef5b15014e 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -274,9 +274,9 @@ int mingw_utime(const char *file_name, const struct utimbuf *times); pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env, const char *dir, int fhin, int fhout, int fherr); -void mingw_execvp(const char *cmd, char *const *argv); +int mingw_execvp(const char *cmd, char *const *argv); #define execvp mingw_execvp -void mingw_execv(const char *cmd, char *const *argv); +int mingw_execv(const char *cmd, char *const *argv); #define execv mingw_execv static inline unsigned int git_ntohl(unsigned int x) @@ -1552,20 +1552,42 @@ static int section_name_match (const char *buf, const char *name) return 0; } +static int section_name_is_ok(const char *name) +{ + /* Empty section names are bogus. */ + if (!*name) + return 0; + + /* + * Before a dot, we must be alphanumeric or dash. After the first dot, + * anything goes, so we can stop checking. + */ + for (; *name && *name != '.'; name++) + if (*name != '-' && !isalnum(*name)) + return 0; + return 1; +} + /* if new_name == NULL, the section is removed instead */ int git_config_rename_section_in_file(const char *config_filename, const char *old_name, const char *new_name) { int ret = 0, remove = 0; char *filename_buf = NULL; - struct lock_file *lock = xcalloc(sizeof(struct lock_file), 1); + struct lock_file *lock; int out_fd; char buf[1024]; FILE *config_file; + if (new_name && !section_name_is_ok(new_name)) { + ret = error("invalid section name: %s", new_name); + goto out; + } + if (!config_filename) config_filename = filename_buf = git_pathdup("config"); + lock = xcalloc(sizeof(struct lock_file), 1); out_fd = hold_lock_file_for_update(lock, config_filename, 0); if (out_fd < 0) { ret = error("could not lock config file %s", config_filename); diff --git a/configure.ac b/configure.ac index 8bb0f44b48..72f7958824 100644 --- a/configure.ac +++ b/configure.ac @@ -137,6 +137,23 @@ if test -n "$1"; then fi ]) +# Directories holding "saner" versions of common or POSIX binaries. +AC_ARG_WITH([sane-tool-path], + [AS_HELP_STRING( + [--with-sane-tool-path=DIR-1[[:DIR-2...:DIR-n]]], + [Directories to prepend to PATH in build system and generated scripts])], + [if test "$withval" = "no"; then + withval='' + else + AC_MSG_NOTICE([Setting SANE_TOOL_PATH to '$withval']) + fi + GIT_CONF_APPEND_LINE([SANE_TOOL_PATH=$withval])], + [# If the "--with-sane-tool-path" option was not given, don't touch + # SANE_TOOL_PATH here, but let defaults in Makefile take care of it. + # This should minimize spurious differences in the behaviour of the + # Git build system when configure is used w.r.t. when it is not. + :]) + ## Site configuration related to programs (before tests) ## --with-PACKAGE[=ARG] and --without-PACKAGE # diff --git a/connected.c b/connected.c index d7624230d4..1e89c1cd1d 100644 --- a/connected.c +++ b/connected.c @@ -6,18 +6,18 @@ /* * If we feed all the commits we want to verify to this command * - * $ git rev-list --verify-objects --stdin --not --all + * $ git rev-list --objects --stdin --not --all * * and if it does not error out, that means everything reachable from - * these commits locally exists and is connected to some of our - * existing refs. + * these commits locally exists and is connected to our existing refs. + * Note that this does _not_ validate the individual objects. * * Returns 0 if everything is connected, non-zero otherwise. */ int check_everything_connected(sha1_iterate_fn fn, int quiet, void *cb_data) { struct child_process rev_list; - const char *argv[] = {"rev-list", "--verify-objects", + const char *argv[] = {"rev-list", "--objects", "--stdin", "--not", "--all", NULL, NULL}; char commit[41]; unsigned char sha1[20]; diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index fba076dde2..31f714da92 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -94,9 +94,10 @@ __gitdir () __git_ps1_show_upstream () { local key value - local svn_remote=() svn_url_pattern count n + local svn_remote svn_url_pattern count n local upstream=git legacy="" verbose="" + svn_remote=() # get some config options from git-config local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" while read -r key value; do diff --git a/contrib/rerere-train.sh b/contrib/rerere-train.sh index 2cfe1b936b..36b6feebe0 100755 --- a/contrib/rerere-train.sh +++ b/contrib/rerere-train.sh @@ -7,7 +7,7 @@ USAGE="$me rev-list-args" SUBDIRECTORY_OK=Yes OPTIONS_SPEC= -. git-sh-setup +. $(git --exec-path)/git-sh-setup require_work_tree cd_to_toplevel diff --git a/contrib/svn-fe/svn-fe.txt b/contrib/svn-fe/svn-fe.txt index 2dd27ceb0e..1128ab2ce4 100644 --- a/contrib/svn-fe/svn-fe.txt +++ b/contrib/svn-fe/svn-fe.txt @@ -51,7 +51,7 @@ as committer, where 'user' is the value of the `svn:author` property and 'UUID' the repository's identifier. To support incremental imports, 'svn-fe' puts a `git-svn-id` line at -the end of each commit log message if passed an url on the command +the end of each commit log message if passed a URL on the command line. This line has the form `git-svn-id: URL@REVNO UUID`. The resulting repository will generally require further processing diff --git a/diff-no-index.c b/diff-no-index.c index 3a36144687..b44473e3c1 100644 --- a/diff-no-index.c +++ b/diff-no-index.c @@ -52,7 +52,7 @@ static int get_mode(const char *path, int *mode) } static int queue_diff(struct diff_options *o, - const char *name1, const char *name2) + const char *name1, const char *name2) { int mode1 = 0, mode2 = 0; @@ -63,10 +63,11 @@ static int queue_diff(struct diff_options *o, return error("file/directory conflict: %s, %s", name1, name2); if (S_ISDIR(mode1) || S_ISDIR(mode2)) { - char buffer1[PATH_MAX], buffer2[PATH_MAX]; + struct strbuf buffer1 = STRBUF_INIT; + struct strbuf buffer2 = STRBUF_INIT; struct string_list p1 = STRING_LIST_INIT_DUP; struct string_list p2 = STRING_LIST_INIT_DUP; - int len1 = 0, len2 = 0, i1, i2, ret = 0; + int i1, i2, ret = 0; if (name1 && read_directory(name1, &p1)) return -1; @@ -76,19 +77,15 @@ static int queue_diff(struct diff_options *o, } if (name1) { - len1 = strlen(name1); - if (len1 > 0 && name1[len1 - 1] == '/') - len1--; - memcpy(buffer1, name1, len1); - buffer1[len1++] = '/'; + strbuf_addstr(&buffer1, name1); + if (buffer1.len && buffer1.buf[buffer1.len - 1] != '/') + strbuf_addch(&buffer1, '/'); } if (name2) { - len2 = strlen(name2); - if (len2 > 0 && name2[len2 - 1] == '/') - len2--; - memcpy(buffer2, name2, len2); - buffer2[len2++] = '/'; + strbuf_addstr(&buffer2, name2); + if (buffer2.len && buffer2.buf[buffer2.len - 1] != '/') + strbuf_addch(&buffer2, '/'); } for (i1 = i2 = 0; !ret && (i1 < p1.nr || i2 < p2.nr); ) { @@ -100,29 +97,28 @@ static int queue_diff(struct diff_options *o, else if (i2 == p2.nr) comp = -1; else - comp = strcmp(p1.items[i1].string, - p2.items[i2].string); + comp = strcmp(p1.items[i1].string, p2.items[i2].string); if (comp > 0) n1 = NULL; else { - n1 = buffer1; - strncpy(buffer1 + len1, p1.items[i1++].string, - PATH_MAX - len1); + strbuf_addstr(&buffer1, p1.items[i1++].string); + n1 = buffer1.buf; } if (comp < 0) n2 = NULL; else { - n2 = buffer2; - strncpy(buffer2 + len2, p2.items[i2++].string, - PATH_MAX - len2); + strbuf_addstr(&buffer2, p2.items[i2++].string); + n2 = buffer2.buf; } ret = queue_diff(o, n1, n2); } string_list_clear(&p1, 0); string_list_clear(&p2, 0); + strbuf_reset(&buffer1); + strbuf_reset(&buffer2); return ret; } else { @@ -989,10 +989,74 @@ static void diff_words_flush(struct emit_callback *ecbdata) diff_words_show(ecbdata->diff_words); } +static void diff_filespec_load_driver(struct diff_filespec *one) +{ + /* Use already-loaded driver */ + if (one->driver) + return; + + if (S_ISREG(one->mode)) + one->driver = userdiff_find_by_path(one->path); + + /* Fallback to default settings */ + if (!one->driver) + one->driver = userdiff_find_by_name("default"); +} + +static const char *userdiff_word_regex(struct diff_filespec *one) +{ + diff_filespec_load_driver(one); + return one->driver->word_regex; +} + +static void init_diff_words_data(struct emit_callback *ecbdata, + struct diff_options *orig_opts, + struct diff_filespec *one, + struct diff_filespec *two) +{ + int i; + struct diff_options *o = xmalloc(sizeof(struct diff_options)); + memcpy(o, orig_opts, sizeof(struct diff_options)); + + ecbdata->diff_words = + xcalloc(1, sizeof(struct diff_words_data)); + ecbdata->diff_words->type = o->word_diff; + ecbdata->diff_words->opt = o; + if (!o->word_regex) + o->word_regex = userdiff_word_regex(one); + if (!o->word_regex) + o->word_regex = userdiff_word_regex(two); + if (!o->word_regex) + o->word_regex = diff_word_regex_cfg; + if (o->word_regex) { + ecbdata->diff_words->word_regex = (regex_t *) + xmalloc(sizeof(regex_t)); + if (regcomp(ecbdata->diff_words->word_regex, + o->word_regex, + REG_EXTENDED | REG_NEWLINE)) + die ("Invalid regular expression: %s", + o->word_regex); + } + for (i = 0; i < ARRAY_SIZE(diff_words_styles); i++) { + if (o->word_diff == diff_words_styles[i].type) { + ecbdata->diff_words->style = + &diff_words_styles[i]; + break; + } + } + if (want_color(o->use_color)) { + struct diff_words_style *st = ecbdata->diff_words->style; + st->old.color = diff_get_color_opt(o, DIFF_FILE_OLD); + st->new.color = diff_get_color_opt(o, DIFF_FILE_NEW); + st->ctx.color = diff_get_color_opt(o, DIFF_PLAIN); + } +} + static void free_diff_words_data(struct emit_callback *ecbdata) { if (ecbdata->diff_words) { diff_words_flush(ecbdata); + free (ecbdata->diff_words->opt); free (ecbdata->diff_words->minus.text.ptr); free (ecbdata->diff_words->minus.orig); free (ecbdata->diff_words->plus.text.ptr); @@ -1445,7 +1509,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) */ if (options->stat_width == -1) - width = term_columns(); + width = term_columns() - options->output_prefix_length; else width = options->stat_width ? options->stat_width : 80; @@ -1473,8 +1537,12 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) * Adjust adjustable widths not to exceed maximum width */ if (name_width + number_width + 6 + graph_width > width) { - if (graph_width > width * 3/8 - number_width - 6) + if (graph_width > width * 3/8 - number_width - 6) { graph_width = width * 3/8 - number_width - 6; + if (graph_width < 6) + graph_width = 6; + } + if (options->stat_graph_width && graph_width > options->stat_graph_width) graph_width = options->stat_graph_width; @@ -2061,20 +2129,6 @@ static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two, char *pre emit_binary_diff_body(file, two, one, prefix); } -static void diff_filespec_load_driver(struct diff_filespec *one) -{ - /* Use already-loaded driver */ - if (one->driver) - return; - - if (S_ISREG(one->mode)) - one->driver = userdiff_find_by_path(one->path); - - /* Fallback to default settings */ - if (!one->driver) - one->driver = userdiff_find_by_name("default"); -} - int diff_filespec_is_binary(struct diff_filespec *one) { if (one->is_binary == -1) { @@ -2100,12 +2154,6 @@ static const struct userdiff_funcname *diff_funcname_pattern(struct diff_filespe return one->driver->funcname.pattern ? &one->driver->funcname : NULL; } -static const char *userdiff_word_regex(struct diff_filespec *one) -{ - diff_filespec_load_driver(one); - return one->driver->word_regex; -} - void diff_set_mnemonic_prefix(struct diff_options *options, const char *a, const char *b) { if (!options->a_prefix) @@ -2292,42 +2340,8 @@ static void builtin_diff(const char *name_a, xecfg.ctxlen = strtoul(diffopts + 10, NULL, 10); else if (!prefixcmp(diffopts, "-u")) xecfg.ctxlen = strtoul(diffopts + 2, NULL, 10); - if (o->word_diff) { - int i; - - ecbdata.diff_words = - xcalloc(1, sizeof(struct diff_words_data)); - ecbdata.diff_words->type = o->word_diff; - ecbdata.diff_words->opt = o; - if (!o->word_regex) - o->word_regex = userdiff_word_regex(one); - if (!o->word_regex) - o->word_regex = userdiff_word_regex(two); - if (!o->word_regex) - o->word_regex = diff_word_regex_cfg; - if (o->word_regex) { - ecbdata.diff_words->word_regex = (regex_t *) - xmalloc(sizeof(regex_t)); - if (regcomp(ecbdata.diff_words->word_regex, - o->word_regex, - REG_EXTENDED | REG_NEWLINE)) - die ("Invalid regular expression: %s", - o->word_regex); - } - for (i = 0; i < ARRAY_SIZE(diff_words_styles); i++) { - if (o->word_diff == diff_words_styles[i].type) { - ecbdata.diff_words->style = - &diff_words_styles[i]; - break; - } - } - if (want_color(o->use_color)) { - struct diff_words_style *st = ecbdata.diff_words->style; - st->old.color = diff_get_color_opt(o, DIFF_FILE_OLD); - st->new.color = diff_get_color_opt(o, DIFF_FILE_NEW); - st->ctx.color = diff_get_color_opt(o, DIFF_PLAIN); - } - } + if (o->word_diff) + init_diff_words_data(&ecbdata, o, one, two); xdi_diff_outf(&mf1, &mf2, fn_out_consume, &ecbdata, &xpp, &xecfg); if (o->word_diff) @@ -3136,6 +3150,7 @@ void diff_setup(struct diff_options *options) options->rename_limit = -1; options->dirstat_permille = diff_dirstat_permille_default; options->context = 3; + DIFF_OPT_SET(options, RENAME_EMPTY); options->change = diff_change; options->add_remove = diff_addremove; @@ -3506,6 +3521,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) } else if (!strcmp(arg, "--no-renames")) options->detect_rename = 0; + else if (!strcmp(arg, "--rename-empty")) + DIFF_OPT_SET(options, RENAME_EMPTY); + else if (!strcmp(arg, "--no-rename-empty")) + DIFF_OPT_CLR(options, RENAME_EMPTY); else if (!strcmp(arg, "--relative")) DIFF_OPT_SET(options, RELATIVE_NAME); else if (!prefixcmp(arg, "--relative=")) { @@ -4399,6 +4418,12 @@ void diff_flush(struct diff_options *options) if (output_format & DIFF_FORMAT_PATCH) { if (separator) { + if (options->output_prefix) { + struct strbuf *msg = NULL; + msg = options->output_prefix(options, + options->output_prefix_data); + fwrite(msg->buf, msg->len, 1, stdout); + } putc(options->line_termination, options->file); if (options->stat_sep) { /* attach patch instead of inline */ @@ -60,7 +60,7 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data) #define DIFF_OPT_SILENT_ON_REMOVE (1 << 5) #define DIFF_OPT_FIND_COPIES_HARDER (1 << 6) #define DIFF_OPT_FOLLOW_RENAMES (1 << 7) -/* (1 << 8) unused */ +#define DIFF_OPT_RENAME_EMPTY (1 << 8) /* (1 << 9) unused */ #define DIFF_OPT_HAS_CHANGES (1 << 10) #define DIFF_OPT_QUICK (1 << 11) @@ -150,6 +150,7 @@ struct diff_options { diff_format_fn_t format_callback; void *format_callback_data; diff_prefix_fn_t output_prefix; + int output_prefix_length; void *output_prefix_data; }; diff --git a/diffcore-rename.c b/diffcore-rename.c index f639601c76..216a7a4bbc 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -512,9 +512,15 @@ void diffcore_rename(struct diff_options *options) else if (options->single_follow && strcmp(options->single_follow, p->two->path)) continue; /* not interested */ + else if (!DIFF_OPT_TST(options, RENAME_EMPTY) && + is_empty_blob_sha1(p->two->sha1)) + continue; else locate_rename_dst(p->two, 1); } + else if (!DIFF_OPT_TST(options, RENAME_EMPTY) && + is_empty_blob_sha1(p->one->sha1)) + continue; else if (!DIFF_PAIR_UNMERGED(p) && !DIFF_FILE_VALID(p->two)) { /* * If the source is a broken "delete", and @@ -1172,22 +1172,32 @@ int is_empty_dir(const char *path) return ret; } -int remove_dir_recursively(struct strbuf *path, int flag) +static int remove_dir_recurse(struct strbuf *path, int flag, int *kept_up) { DIR *dir; struct dirent *e; - int ret = 0, original_len = path->len, len; + int ret = 0, original_len = path->len, len, kept_down = 0; int only_empty = (flag & REMOVE_DIR_EMPTY_ONLY); + int keep_toplevel = (flag & REMOVE_DIR_KEEP_TOPLEVEL); unsigned char submodule_head[20]; if ((flag & REMOVE_DIR_KEEP_NESTED_GIT) && - !resolve_gitlink_ref(path->buf, "HEAD", submodule_head)) + !resolve_gitlink_ref(path->buf, "HEAD", submodule_head)) { /* Do not descend and nuke a nested git work tree. */ + if (kept_up) + *kept_up = 1; return 0; + } + flag &= ~REMOVE_DIR_KEEP_TOPLEVEL; dir = opendir(path->buf); - if (!dir) - return rmdir(path->buf); + if (!dir) { + /* an empty dir could be removed even if it is unreadble */ + if (!keep_toplevel) + return rmdir(path->buf); + else + return -1; + } if (path->buf[original_len - 1] != '/') strbuf_addch(path, '/'); @@ -1202,7 +1212,7 @@ int remove_dir_recursively(struct strbuf *path, int flag) if (lstat(path->buf, &st)) ; /* fall thru */ else if (S_ISDIR(st.st_mode)) { - if (!remove_dir_recursively(path, only_empty)) + if (!remove_dir_recurse(path, flag, &kept_down)) continue; /* happy */ } else if (!only_empty && !unlink(path->buf)) continue; /* happy, too */ @@ -1214,11 +1224,22 @@ int remove_dir_recursively(struct strbuf *path, int flag) closedir(dir); strbuf_setlen(path, original_len); - if (!ret) + if (!ret && !keep_toplevel && !kept_down) ret = rmdir(path->buf); + else if (kept_up) + /* + * report the uplevel that it is not an error that we + * did not rmdir() our directory. + */ + *kept_up = !ret; return ret; } +int remove_dir_recursively(struct strbuf *path, int flag) +{ + return remove_dir_recurse(path, flag, NULL); +} + void setup_standard_excludes(struct dir_struct *dir) { const char *path; @@ -102,6 +102,7 @@ extern void setup_standard_excludes(struct dir_struct *dir); #define REMOVE_DIR_EMPTY_ONLY 01 #define REMOVE_DIR_KEEP_NESTED_GIT 02 +#define REMOVE_DIR_KEEP_TOPLEVEL 04 extern int remove_dir_recursively(struct strbuf *path, int flag); /* tries to remove the path with empty directories along it, ignores ENOENT */ diff --git a/exec_cmd.c b/exec_cmd.c index 171e841531..125fa6fabf 100644 --- a/exec_cmd.c +++ b/exec_cmd.c @@ -134,7 +134,7 @@ int execv_git_cmd(const char **argv) { trace_argv_printf(nargv, "trace: exec:"); /* execvp() can only ever return if it fails */ - execvp("git", (char **)nargv); + sane_execvp("git", (char **)nargv); trace_printf("trace: exec failed: %s\n", strerror(errno)); diff --git a/fast-import.c b/fast-import.c index c1486cabba..eed97c8fa9 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1641,6 +1641,8 @@ static int tree_content_get( n = slash1 - p; else n = strlen(p); + if (!n) + die("Empty path component found in input"); if (!root->tree) load_tree(root); @@ -2205,6 +2207,59 @@ static uintmax_t change_note_fanout(struct tree_entry *root, return do_change_note_fanout(root, root, hex_sha1, 0, path, 0, fanout); } +/* + * Given a pointer into a string, parse a mark reference: + * + * idnum ::= ':' bigint; + * + * Return the first character after the value in *endptr. + * + * Complain if the following character is not what is expected, + * either a space or end of the string. + */ +static uintmax_t parse_mark_ref(const char *p, char **endptr) +{ + uintmax_t mark; + + assert(*p == ':'); + p++; + mark = strtoumax(p, endptr, 10); + if (*endptr == p) + die("No value after ':' in mark: %s", command_buf.buf); + return mark; +} + +/* + * Parse the mark reference, and complain if this is not the end of + * the string. + */ +static uintmax_t parse_mark_ref_eol(const char *p) +{ + char *end; + uintmax_t mark; + + mark = parse_mark_ref(p, &end); + if (*end != '\0') + die("Garbage after mark: %s", command_buf.buf); + return mark; +} + +/* + * Parse the mark reference, demanding a trailing space. Return a + * pointer to the space. + */ +static uintmax_t parse_mark_ref_space(const char **p) +{ + uintmax_t mark; + char *end; + + mark = parse_mark_ref(*p, &end); + if (*end != ' ') + die("Missing space after mark: %s", command_buf.buf); + *p = end; + return mark; +} + static void file_change_m(struct branch *b) { const char *p = command_buf.buf + 2; @@ -2233,21 +2288,21 @@ static void file_change_m(struct branch *b) } if (*p == ':') { - char *x; - oe = find_mark(strtoumax(p + 1, &x, 10)); + oe = find_mark(parse_mark_ref_space(&p)); hashcpy(sha1, oe->idx.sha1); - p = x; - } else if (!prefixcmp(p, "inline")) { + } else if (!prefixcmp(p, "inline ")) { inline_data = 1; - p += 6; + p += strlen("inline"); /* advance to space */ } else { if (get_sha1_hex(p, sha1)) - die("Invalid SHA1: %s", command_buf.buf); + die("Invalid dataref: %s", command_buf.buf); oe = find_object(sha1); p += 40; + if (*p != ' ') + die("Missing space after SHA1: %s", command_buf.buf); } - if (*p++ != ' ') - die("Missing space after SHA1: %s", command_buf.buf); + assert(*p == ' '); + p++; /* skip space */ strbuf_reset(&uq); if (!unquote_c_style(&uq, p, &endp)) { @@ -2405,21 +2460,21 @@ static void note_change_n(struct branch *b, unsigned char *old_fanout) /* Now parse the notemodify command. */ /* <dataref> or 'inline' */ if (*p == ':') { - char *x; - oe = find_mark(strtoumax(p + 1, &x, 10)); + oe = find_mark(parse_mark_ref_space(&p)); hashcpy(sha1, oe->idx.sha1); - p = x; - } else if (!prefixcmp(p, "inline")) { + } else if (!prefixcmp(p, "inline ")) { inline_data = 1; - p += 6; + p += strlen("inline"); /* advance to space */ } else { if (get_sha1_hex(p, sha1)) - die("Invalid SHA1: %s", command_buf.buf); + die("Invalid dataref: %s", command_buf.buf); oe = find_object(sha1); p += 40; + if (*p != ' ') + die("Missing space after SHA1: %s", command_buf.buf); } - if (*p++ != ' ') - die("Missing space after SHA1: %s", command_buf.buf); + assert(*p == ' '); + p++; /* skip space */ /* <committish> */ s = lookup_branch(p); @@ -2428,7 +2483,7 @@ static void note_change_n(struct branch *b, unsigned char *old_fanout) die("Can't add a note on empty branch."); hashcpy(commit_sha1, s->sha1); } else if (*p == ':') { - uintmax_t commit_mark = strtoumax(p + 1, NULL, 10); + uintmax_t commit_mark = parse_mark_ref_eol(p); struct object_entry *commit_oe = find_mark(commit_mark); if (commit_oe->type != OBJ_COMMIT) die("Mark :%" PRIuMAX " not a commit", commit_mark); @@ -2535,7 +2590,7 @@ static int parse_from(struct branch *b) hashcpy(b->branch_tree.versions[0].sha1, t); hashcpy(b->branch_tree.versions[1].sha1, t); } else if (*from == ':') { - uintmax_t idnum = strtoumax(from + 1, NULL, 10); + uintmax_t idnum = parse_mark_ref_eol(from); struct object_entry *oe = find_mark(idnum); if (oe->type != OBJ_COMMIT) die("Mark :%" PRIuMAX " not a commit", idnum); @@ -2570,7 +2625,7 @@ static struct hash_list *parse_merge(unsigned int *count) if (s) hashcpy(n->sha1, s->sha1); else if (*from == ':') { - uintmax_t idnum = strtoumax(from + 1, NULL, 10); + uintmax_t idnum = parse_mark_ref_eol(from); struct object_entry *oe = find_mark(idnum); if (oe->type != OBJ_COMMIT) die("Mark :%" PRIuMAX " not a commit", idnum); @@ -2733,7 +2788,7 @@ static void parse_new_tag(void) type = OBJ_COMMIT; } else if (*from == ':') { struct object_entry *oe; - from_mark = strtoumax(from + 1, NULL, 10); + from_mark = parse_mark_ref_eol(from); oe = find_mark(from_mark); type = oe->type; hashcpy(sha1, oe->idx.sha1); @@ -2865,18 +2920,13 @@ static void parse_cat_blob(void) /* cat-blob SP <object> LF */ p = command_buf.buf + strlen("cat-blob "); if (*p == ':') { - char *x; - oe = find_mark(strtoumax(p + 1, &x, 10)); - if (x == p + 1) - die("Invalid mark: %s", command_buf.buf); + oe = find_mark(parse_mark_ref_eol(p)); if (!oe) die("Unknown mark: %s", command_buf.buf); - if (*x) - die("Garbage after mark: %s", command_buf.buf); hashcpy(sha1, oe->idx.sha1); } else { if (get_sha1_hex(p, sha1)) - die("Invalid SHA1: %s", command_buf.buf); + die("Invalid dataref: %s", command_buf.buf); if (p[40]) die("Garbage after SHA1: %s", command_buf.buf); oe = find_object(sha1); @@ -2942,17 +2992,13 @@ static struct object_entry *parse_treeish_dataref(const char **p) struct object_entry *e; if (**p == ':') { /* <mark> */ - char *endptr; - e = find_mark(strtoumax(*p + 1, &endptr, 10)); - if (endptr == *p + 1) - die("Invalid mark: %s", command_buf.buf); + e = find_mark(parse_mark_ref_space(p)); if (!e) die("Unknown mark: %s", command_buf.buf); - *p = endptr; hashcpy(sha1, e->idx.sha1); } else { /* <sha1> */ if (get_sha1_hex(*p, sha1)) - die("Invalid SHA1: %s", command_buf.buf); + die("Invalid dataref: %s", command_buf.buf); e = find_object(sha1); *p += 40; } @@ -3028,6 +3074,8 @@ static void parse_ls(struct branch *b) store_tree(&leaf); print_ls(leaf.versions[1].mode, leaf.versions[1].sha1, p); + if (leaf.tree) + release_tree_content_recursive(leaf.tree); if (!b || root != &b->branch_tree) release_tree_entry(root); } diff --git a/fetch-pack.h b/fetch-pack.h index 0608edae3f..7c2069c972 100644 --- a/fetch-pack.h +++ b/fetch-pack.h @@ -10,6 +10,7 @@ struct fetch_pack_args { lock_pack:1, use_thin_pack:1, fetch_all:1, + stdin_refs:1, verbose:1, no_progress:1, include_tag:1, diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 8f0839d205..d948aa88db 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -268,6 +268,7 @@ sub get_empty_tree { # FILE: is file different from index? # INDEX_ADDDEL: is it add/delete between HEAD and index? # FILE_ADDDEL: is it add/delete between index and file? +# UNMERGED: is the path unmerged sub list_modified { my ($only) = @_; @@ -318,16 +319,10 @@ sub list_modified { } } - for (run_cmd_pipe(qw(git diff-files --numstat --summary --), @tracked)) { + for (run_cmd_pipe(qw(git diff-files --numstat --summary --raw --), @tracked)) { if (($add, $del, $file) = /^([-\d]+) ([-\d]+) (.*)/) { $file = unquote_path($file); - if (!exists $data{$file}) { - $data{$file} = +{ - INDEX => 'unchanged', - BINARY => 0, - }; - } my ($change, $bin); if ($add eq '-' && $del eq '-') { $change = 'binary'; @@ -346,6 +341,18 @@ sub list_modified { $file = unquote_path($file); $data{$file}{FILE_ADDDEL} = $adddel; } + elsif (/^:[0-7]+ [0-7]+ [0-9a-f]+ [0-9a-f]+ (.) (.*)$/) { + $file = unquote_path($2); + if (!exists $data{$file}) { + $data{$file} = +{ + INDEX => 'unchanged', + BINARY => 0, + }; + } + if ($1 eq 'U') { + $data{$file}{UNMERGED} = 1; + } + } } for (sort keys %data) { @@ -1190,6 +1197,10 @@ sub apply_patch_for_checkout_commit { sub patch_update_cmd { my @all_mods = list_modified($patch_mode_flavour{FILTER}); + error_msg "ignoring unmerged: $_->{VALUE}\n" + for grep { $_->{UNMERGED} } @all_mods; + @all_mods = grep { !$_->{UNMERGED} } @all_mods; + my @mods = grep { !($_->{BINARY}) } @all_mods; my @them; diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 2b7eb6dda4..2e1325824c 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -672,7 +672,7 @@ rearrange_squash () { case "$action" in continue) # do we have anything to commit? - if git diff-index --cached --quiet --ignore-submodules HEAD -- + if git diff-index --cached --quiet HEAD -- then : Nothing to commit -- skip this else diff --git a/git-relink.perl b/git-relink.perl index e136732cea..f29285c411 100755 --- a/git-relink.perl +++ b/git-relink.perl @@ -1,4 +1,4 @@ -#!/usr/bin/env perl +#!/usr/bin/perl # Copyright 2005, Ryan Anderson <ryan@michonline.com> # Distribution permitted under the GPL v2, as distributed # by the Free Software Foundation. diff --git a/git-remote-testgit.py b/git-remote-testgit.py index 3dc4851cfc..5f3ebd244d 100644 --- a/git-remote-testgit.py +++ b/git-remote-testgit.py @@ -22,6 +22,7 @@ except ImportError: _digest = sha.new import sys import os +import time sys.path.insert(0, os.getenv("GITPYTHONLIB",".")) from git_remote_helpers.util import die, debug, warn @@ -204,6 +205,11 @@ def read_one_line(repo): """Reads and processes one command. """ + sleepy = os.environ.get("GIT_REMOTE_TESTGIT_SLEEPY") + if sleepy: + debug("Sleeping %d sec before readline" % int(sleepy)) + time.sleep(int(sleepy)) + line = sys.stdin.readline() cmdline = line @@ -258,6 +264,7 @@ def main(args): more = True + sys.stdin = os.fdopen(sys.stdin.fileno(), 'r', 0) while (more): more = read_one_line(repo) diff --git a/git-stash.sh b/git-stash.sh index fe4ab28b2e..4e2c7f8331 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -199,8 +199,8 @@ save_stash () { # $ git stash save --blah-blah 2>&1 | head -n 2 # error: unknown option for 'stash save': --blah-blah # To provide a message, use git stash save -- '--blah-blah' - eval_gettextln "$("error: unknown option for 'stash save': \$option - To provide a message, use git stash save -- '\$option'")" + eval_gettextln "error: unknown option for 'stash save': \$option + To provide a message, use git stash save -- '\$option'" usage ;; *) diff --git a/git-submodule.sh b/git-submodule.sh index efc86ad4e0..3d94a14079 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -167,10 +167,11 @@ module_clone() a=${a%/} b=${b%/} - rel=$(echo $b | sed -e 's|[^/]*|..|g') + # Turn each leading "*/" component into "../" + rel=$(echo $b | sed -e 's|[^/][^/]*|..|g') echo "gitdir: $rel/$a" >"$path/.git" - rel=$(echo $a | sed -e 's|[^/]*|..|g') + rel=$(echo $a | sed -e 's|[^/][^/]*|..|g') (clear_local_git_env; cd "$path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b") } diff --git a/git-svn.perl b/git-svn.perl index 4334b95f70..ca038ec842 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -1,4 +1,4 @@ -#!/usr/bin/env perl +#!/usr/bin/perl # Copyright (C) 2006, Eric Wong <normalperson@yhbt.net> # License: GPL v2 or later use 5.008; diff --git a/git.spec.in b/git.spec.in index b93df109c8..d61d537ef0 100644 --- a/git.spec.in +++ b/git.spec.in @@ -101,6 +101,7 @@ Group: Development/Libraries Requires: git = %{version}-%{release} Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) BuildRequires: perl(Error) +BuildRequires: perl(ExtUtils::MakeMaker) %description -n perl-Git Perl interface to Git diff --git a/gitk-git/gitk b/gitk-git/gitk index 64ef3c4013..22270ce46b 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -14,6 +14,35 @@ proc hasworktree {} { [exec git rev-parse --is-inside-git-dir] == "false"}] } +proc reponame {} { + global gitdir + set n [file normalize $gitdir] + if {[string match "*/.git" $n]} { + set n [string range $n 0 end-5] + } + return [file tail $n] +} + +proc gitworktree {} { + variable _gitworktree + if {[info exists _gitworktree]} { + return $_gitworktree + } + # v1.7.0 introduced --show-toplevel to return the canonical work-tree + if {[catch {set _gitworktree [exec git rev-parse --show-toplevel]}]} { + # try to set work tree from environment, core.worktree or use + # cdup to obtain a relative path to the top of the worktree. If + # run from the top, the ./ prefix ensures normalize expands pwd. + if {[catch { set _gitworktree $env(GIT_WORK_TREE) }]} { + catch {set _gitworktree [exec git config --get core.worktree]} + if {$_gitworktree eq ""} { + set _gitworktree [file normalize ./[exec git rev-parse --show-cdup]] + } + } + } + return $_gitworktree +} + # A simple scheduler for compute-intensive stuff. # The aim is to make sure that event handlers for GUI actions can # run at least every 50-100 ms. Unfortunately fileevent handlers are @@ -612,12 +641,16 @@ proc varcinit {view} { proc resetvarcs {view} { global varcid varccommits parents children vseedcount ordertok + global vshortids foreach vid [array names varcid $view,*] { unset varcid($vid) unset children($vid) unset parents($vid) } + foreach vid [array names vshortids $view,*] { + unset vshortids($vid) + } # some commits might have children but haven't been seen yet foreach vid [array names children $view,*] { unset children($vid) @@ -904,7 +937,7 @@ proc fix_reversal {p a v} { proc insertrow {id p v} { global cmitlisted children parents varcid varctok vtokmod global varccommits ordertok commitidx numcommits curview - global targetid targetrow + global targetid targetrow vshortids readcommit $id set vid $v,$id @@ -913,6 +946,7 @@ proc insertrow {id p v} { set parents($vid) [list $p] set a [newvarc $v $id] set varcid($vid) $a + lappend vshortids($v,[string range $id 0 3]) $id if {[string compare [lindex $varctok($v) $a] $vtokmod($v)] < 0} { modify_arc $v $a } @@ -1368,7 +1402,7 @@ proc getcommitlines {fd inst view updating} { global commitidx commitdata vdatemode global parents children curview hlview global idpending ordertok - global varccommits varcid varctok vtokmod vfilelimit + global varccommits varcid varctok vtokmod vfilelimit vshortids set stuff [read $fd 500000] # git log doesn't terminate the last commit with a null... @@ -1468,6 +1502,8 @@ proc getcommitlines {fd inst view updating} { set id [lindex $ids 0] set vid $view,$id + lappend vshortids($view,[string range $id 0 3]) $id + if {!$listed && $updating && ![info exists varcid($vid)] && $vfilelimit($view) ne {}} { # git log doesn't rewrite parents for unlisted commits @@ -1690,11 +1726,26 @@ proc getcommit {id} { # and are present in the current view. # This is fairly slow... proc longid {prefix} { - global varcid curview + global varcid curview vshortids set ids {} - foreach match [array names varcid "$curview,$prefix*"] { - lappend ids [lindex [split $match ","] 1] + if {[string length $prefix] >= 4} { + set vshortid $curview,[string range $prefix 0 3] + if {[info exists vshortids($vshortid)]} { + foreach id $vshortids($vshortid) { + if {[string match "$prefix*" $id]} { + if {[lsearch -exact $ids $id] < 0} { + lappend ids $id + if {[llength $ids] >= 2} break + } + } + } + } + } else { + foreach match [array names varcid "$curview,$prefix*"] { + lappend ids [lindex [split $match ","] 1] + if {[llength $ids] >= 2} break + } } return $ids } @@ -2491,6 +2542,8 @@ proc makewindow {} { {mc "Return to mark" command gotomark} {mc "Find descendant of this and mark" command find_common_desc} {mc "Compare with marked commit" command compare_commits} + {mc "Diff this -> marked commit" command {diffvsmark 0}} + {mc "Diff marked commit -> this" command {diffvsmark 1}} } $rowctxmenu configure -tearoff 0 @@ -2499,6 +2552,8 @@ proc makewindow {} { {mc "Diff this -> selected" command {diffvssel 0}} {mc "Diff selected -> this" command {diffvssel 1}} {mc "Make patch" command mkpatch} + {mc "Diff this -> marked commit" command {diffvsmark 0}} + {mc "Diff marked commit -> this" command {diffvsmark 1}} } $fakerowmenu configure -tearoff 0 @@ -4630,8 +4685,9 @@ proc askfindhighlight {row id} { } set info $commitinfo($id) set isbold 0 - set fldtypes [list [mc Headline] [mc Author] [mc Date] [mc Committer] [mc CDate] [mc Comments]] + set fldtypes [list [mc Headline] [mc Author] "" [mc Committer] "" [mc Comments]] foreach f $info ty $fldtypes { + if {$ty eq ""} continue if {($findloc eq [mc "All fields"] || $findloc eq $ty) && [doesmatch $f]} { if {$ty eq [mc "Author"]} { @@ -6492,7 +6548,7 @@ proc findmore {} { if {![info exists find_dirn]} { return 0 } - set fldtypes [list [mc "Headline"] [mc "Author"] [mc "Date"] [mc "Committer"] [mc "CDate"] [mc "Comments"]] + set fldtypes [list [mc "Headline"] [mc "Author"] "" [mc "Committer"] "" [mc "Comments"]] set l $findcurline set moretodo 0 if {$find_dirn > 0} { @@ -6553,6 +6609,7 @@ proc findmore {} { } set info $commitinfo($id) foreach f $info ty $fldtypes { + if {$ty eq ""} continue if {($findloc eq [mc "All fields"] || $findloc eq $ty) && [doesmatch $f]} { set found 1 @@ -6705,7 +6762,7 @@ proc appendwithlinks {text tags} { set start [$ctext index "end - 1c"] $ctext insert end $text $tags - set links [regexp -indices -all -inline {\m[0-9a-f]{6,40}\M} $text] + set links [regexp -indices -all -inline {(?:\m|-g)[0-9a-f]{6,40}\M} $text] foreach l $links { set s [lindex $l 0] set e [lindex $l 1] @@ -6721,6 +6778,10 @@ proc appendwithlinks {text tags} { proc setlink {id lk} { global curview ctext pendinglinks + if {[string range $id 0 1] eq "-g"} { + set id [string range $id 2 end] + } + set known 0 if {[string length $id] < 40} { set matches [longid $id] @@ -7393,19 +7454,15 @@ proc startdiff {ids} { } } +# If the filename (name) is under any of the passed filter paths +# then return true to include the file in the listing. proc path_filter {filter name} { + set worktree [gitworktree] foreach p $filter { - set l [string length $p] - if {[string index $p end] eq "/"} { - if {[string compare -length $l $p $name] == 0} { - return 1 - } - } else { - if {[string compare -length $l $p $name] == 0 && - ([string length $name] == $l || - [string index $name $l] eq "/")} { - return 1 - } + set fq_p [file normalize $p] + set fq_n [file normalize [file join $worktree $name]] + if {[string match [file normalize $fq_p]* $fq_n]} { + return 1 } } return 0 @@ -7419,7 +7476,7 @@ proc addtocflist {ids} { } proc diffcmd {ids flags} { - global nullid nullid2 + global log_showroot nullid nullid2 set i [lsearch -exact $ids $nullid] set j [lsearch -exact $ids $nullid2] @@ -7453,6 +7510,9 @@ proc diffcmd {ids flags} { lappend cmd HEAD } } else { + if {$log_showroot} { + lappend flags --root + } set cmd [concat | git diff-tree -r $flags $ids] } return $cmd @@ -8442,6 +8502,11 @@ proc rowmenu {x y id} { } else { set state normal } + if {[info exists markedid] && $markedid ne $id} { + set mstate normal + } else { + set mstate disabled + } if {$id ne $nullid && $id ne $nullid2} { set menu $rowctxmenu if {$mainhead ne {}} { @@ -8449,21 +8514,17 @@ proc rowmenu {x y id} { } else { $menu entryconfigure 7 -label [mc "Detached head: can't reset" $mainhead] -state disabled } - if {[info exists markedid] && $markedid ne $id} { - $menu entryconfigure 9 -state normal - $menu entryconfigure 10 -state normal - $menu entryconfigure 11 -state normal - } else { - $menu entryconfigure 9 -state disabled - $menu entryconfigure 10 -state disabled - $menu entryconfigure 11 -state disabled - } + $menu entryconfigure 9 -state $mstate + $menu entryconfigure 10 -state $mstate + $menu entryconfigure 11 -state $mstate } else { set menu $fakerowmenu } $menu entryconfigure [mca "Diff this -> selected"] -state $state $menu entryconfigure [mca "Diff selected -> this"] -state $state $menu entryconfigure [mca "Make patch"] -state $state + $menu entryconfigure [mca "Diff this -> marked commit"] -state $mstate + $menu entryconfigure [mca "Diff marked commit -> this"] -state $mstate tk_popup $menu $x $y } @@ -8667,6 +8728,21 @@ proc diffvssel {dirn} { doseldiff $oldid $newid } +proc diffvsmark {dirn} { + global rowmenuid markedid + + if {![info exists markedid]} return + if {$dirn} { + set oldid $markedid + set newid $rowmenuid + } else { + set oldid $rowmenuid + set newid $markedid + } + addtohistory [list doseldiff $oldid $newid] savectextpos + doseldiff $oldid $newid +} + proc doseldiff {oldid newid} { global ctext global commitinfo @@ -10719,7 +10795,7 @@ proc fontok {} { if {$fontparam(slant) eq "italic"} { lappend fontpref($f) "italic" } - set w $prefstop.$f + set w $prefstop.notebook.fonts.$f $w conf -text $fontparam(family) -font $fontpref($f) fontcan @@ -10773,6 +10849,139 @@ proc chg_fontparam {v sub op} { font config sample -$sub $fontparam($sub) } +# Create a property sheet tab page +proc create_prefs_page {w} { + global NS + set parent [join [lrange [split $w .] 0 end-1] .] + if {[winfo class $parent] eq "TNotebook"} { + ${NS}::frame $w + } else { + ${NS}::labelframe $w + } +} + +proc prefspage_general {notebook} { + global NS maxwidth maxgraphpct showneartags showlocalchanges + global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs + global hideremotes want_ttk have_ttk + + set page [create_prefs_page $notebook.general] + + ${NS}::label $page.ldisp -text [mc "Commit list display options"] + grid $page.ldisp - -sticky w -pady 10 + ${NS}::label $page.spacer -text " " + ${NS}::label $page.maxwidthl -text [mc "Maximum graph width (lines)"] + spinbox $page.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth + grid $page.spacer $page.maxwidthl $page.maxwidth -sticky w + ${NS}::label $page.maxpctl -text [mc "Maximum graph width (% of pane)"] + spinbox $page.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct + grid x $page.maxpctl $page.maxpct -sticky w + ${NS}::checkbutton $page.showlocal -text [mc "Show local changes"] \ + -variable showlocalchanges + grid x $page.showlocal -sticky w + ${NS}::checkbutton $page.autoselect -text [mc "Auto-select SHA1 (length)"] \ + -variable autoselect + spinbox $page.autosellen -from 1 -to 40 -width 4 -textvariable autosellen + grid x $page.autoselect $page.autosellen -sticky w + ${NS}::checkbutton $page.hideremotes -text [mc "Hide remote refs"] \ + -variable hideremotes + grid x $page.hideremotes -sticky w + + ${NS}::label $page.ddisp -text [mc "Diff display options"] + grid $page.ddisp - -sticky w -pady 10 + ${NS}::label $page.tabstopl -text [mc "Tab spacing"] + spinbox $page.tabstop -from 1 -to 20 -width 4 -textvariable tabstop + grid x $page.tabstopl $page.tabstop -sticky w + ${NS}::checkbutton $page.ntag -text [mc "Display nearby tags"] \ + -variable showneartags + grid x $page.ntag -sticky w + ${NS}::checkbutton $page.ldiff -text [mc "Limit diffs to listed paths"] \ + -variable limitdiffs + grid x $page.ldiff -sticky w + ${NS}::checkbutton $page.lattr -text [mc "Support per-file encodings"] \ + -variable perfile_attrs + grid x $page.lattr -sticky w + + ${NS}::entry $page.extdifft -textvariable extdifftool + ${NS}::frame $page.extdifff + ${NS}::label $page.extdifff.l -text [mc "External diff tool" ] + ${NS}::button $page.extdifff.b -text [mc "Choose..."] -command choose_extdiff + pack $page.extdifff.l $page.extdifff.b -side left + pack configure $page.extdifff.l -padx 10 + grid x $page.extdifff $page.extdifft -sticky ew + + ${NS}::label $page.lgen -text [mc "General options"] + grid $page.lgen - -sticky w -pady 10 + ${NS}::checkbutton $page.want_ttk -variable want_ttk \ + -text [mc "Use themed widgets"] + if {$have_ttk} { + ${NS}::label $page.ttk_note -text [mc "(change requires restart)"] + } else { + ${NS}::label $page.ttk_note -text [mc "(currently unavailable)"] + } + grid x $page.want_ttk $page.ttk_note -sticky w + return $page +} + +proc prefspage_colors {notebook} { + global NS uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor + + set page [create_prefs_page $notebook.colors] + + ${NS}::label $page.cdisp -text [mc "Colors: press to choose"] + grid $page.cdisp - -sticky w -pady 10 + label $page.ui -padx 40 -relief sunk -background $uicolor + ${NS}::button $page.uibut -text [mc "Interface"] \ + -command [list choosecolor uicolor {} $page.ui [mc "interface"] setui] + grid x $page.uibut $page.ui -sticky w + label $page.bg -padx 40 -relief sunk -background $bgcolor + ${NS}::button $page.bgbut -text [mc "Background"] \ + -command [list choosecolor bgcolor {} $page.bg [mc "background"] setbg] + grid x $page.bgbut $page.bg -sticky w + label $page.fg -padx 40 -relief sunk -background $fgcolor + ${NS}::button $page.fgbut -text [mc "Foreground"] \ + -command [list choosecolor fgcolor {} $page.fg [mc "foreground"] setfg] + grid x $page.fgbut $page.fg -sticky w + label $page.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0] + ${NS}::button $page.diffoldbut -text [mc "Diff: old lines"] \ + -command [list choosecolor diffcolors 0 $page.diffold [mc "diff old lines"] \ + [list $ctext tag conf d0 -foreground]] + grid x $page.diffoldbut $page.diffold -sticky w + label $page.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1] + ${NS}::button $page.diffnewbut -text [mc "Diff: new lines"] \ + -command [list choosecolor diffcolors 1 $page.diffnew [mc "diff new lines"] \ + [list $ctext tag conf dresult -foreground]] + grid x $page.diffnewbut $page.diffnew -sticky w + label $page.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2] + ${NS}::button $page.hunksepbut -text [mc "Diff: hunk header"] \ + -command [list choosecolor diffcolors 2 $page.hunksep \ + [mc "diff hunk header"] \ + [list $ctext tag conf hunksep -foreground]] + grid x $page.hunksepbut $page.hunksep -sticky w + label $page.markbgsep -padx 40 -relief sunk -background $markbgcolor + ${NS}::button $page.markbgbut -text [mc "Marked line bg"] \ + -command [list choosecolor markbgcolor {} $page.markbgsep \ + [mc "marked line background"] \ + [list $ctext tag conf omark -background]] + grid x $page.markbgbut $page.markbgsep -sticky w + label $page.selbgsep -padx 40 -relief sunk -background $selectbgcolor + ${NS}::button $page.selbgbut -text [mc "Select bg"] \ + -command [list choosecolor selectbgcolor {} $page.selbgsep [mc "background"] setselbg] + grid x $page.selbgbut $page.selbgsep -sticky w + return $page +} + +proc prefspage_fonts {notebook} { + global NS + set page [create_prefs_page $notebook.fonts] + ${NS}::label $page.cfont -text [mc "Fonts: press to choose"] + grid $page.cfont - -sticky w -pady 10 + mkfontdisp mainfont $page [mc "Main font"] + mkfontdisp textfont $page [mc "Diff display font"] + mkfontdisp uifont $page [mc "User interface font"] + return $page +} + proc doprefs {} { global maxwidth maxgraphpct use_ttk NS global oldprefs prefstop showneartags showlocalchanges @@ -10793,106 +11002,38 @@ proc doprefs {} { ttk_toplevel $top wm title $top [mc "Gitk preferences"] make_transient $top . - ${NS}::label $top.ldisp -text [mc "Commit list display options"] - grid $top.ldisp - -sticky w -pady 10 - ${NS}::label $top.spacer -text " " - ${NS}::label $top.maxwidthl -text [mc "Maximum graph width (lines)"] - spinbox $top.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth - grid $top.spacer $top.maxwidthl $top.maxwidth -sticky w - ${NS}::label $top.maxpctl -text [mc "Maximum graph width (% of pane)"] - spinbox $top.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct - grid x $top.maxpctl $top.maxpct -sticky w - ${NS}::checkbutton $top.showlocal -text [mc "Show local changes"] \ - -variable showlocalchanges - grid x $top.showlocal -sticky w - ${NS}::checkbutton $top.autoselect -text [mc "Auto-select SHA1 (length)"] \ - -variable autoselect - spinbox $top.autosellen -from 1 -to 40 -width 4 -textvariable autosellen - grid x $top.autoselect $top.autosellen -sticky w - ${NS}::checkbutton $top.hideremotes -text [mc "Hide remote refs"] \ - -variable hideremotes - grid x $top.hideremotes -sticky w - - ${NS}::label $top.ddisp -text [mc "Diff display options"] - grid $top.ddisp - -sticky w -pady 10 - ${NS}::label $top.tabstopl -text [mc "Tab spacing"] - spinbox $top.tabstop -from 1 -to 20 -width 4 -textvariable tabstop - grid x $top.tabstopl $top.tabstop -sticky w - ${NS}::checkbutton $top.ntag -text [mc "Display nearby tags"] \ - -variable showneartags - grid x $top.ntag -sticky w - ${NS}::checkbutton $top.ldiff -text [mc "Limit diffs to listed paths"] \ - -variable limitdiffs - grid x $top.ldiff -sticky w - ${NS}::checkbutton $top.lattr -text [mc "Support per-file encodings"] \ - -variable perfile_attrs - grid x $top.lattr -sticky w - - ${NS}::entry $top.extdifft -textvariable extdifftool - ${NS}::frame $top.extdifff - ${NS}::label $top.extdifff.l -text [mc "External diff tool" ] - ${NS}::button $top.extdifff.b -text [mc "Choose..."] -command choose_extdiff - pack $top.extdifff.l $top.extdifff.b -side left - pack configure $top.extdifff.l -padx 10 - grid x $top.extdifff $top.extdifft -sticky ew - - ${NS}::label $top.lgen -text [mc "General options"] - grid $top.lgen - -sticky w -pady 10 - ${NS}::checkbutton $top.want_ttk -variable want_ttk \ - -text [mc "Use themed widgets"] - if {$have_ttk} { - ${NS}::label $top.ttk_note -text [mc "(change requires restart)"] + + if {[set use_notebook [expr {$use_ttk && [info command ::ttk::notebook] ne ""}]]} { + set notebook [ttk::notebook $top.notebook] } else { - ${NS}::label $top.ttk_note -text [mc "(currently unavailable)"] - } - grid x $top.want_ttk $top.ttk_note -sticky w - - ${NS}::label $top.cdisp -text [mc "Colors: press to choose"] - grid $top.cdisp - -sticky w -pady 10 - label $top.ui -padx 40 -relief sunk -background $uicolor - ${NS}::button $top.uibut -text [mc "Interface"] \ - -command [list choosecolor uicolor {} $top.ui [mc "interface"] setui] - grid x $top.uibut $top.ui -sticky w - label $top.bg -padx 40 -relief sunk -background $bgcolor - ${NS}::button $top.bgbut -text [mc "Background"] \ - -command [list choosecolor bgcolor {} $top.bg [mc "background"] setbg] - grid x $top.bgbut $top.bg -sticky w - label $top.fg -padx 40 -relief sunk -background $fgcolor - ${NS}::button $top.fgbut -text [mc "Foreground"] \ - -command [list choosecolor fgcolor {} $top.fg [mc "foreground"] setfg] - grid x $top.fgbut $top.fg -sticky w - label $top.diffold -padx 40 -relief sunk -background [lindex $diffcolors 0] - ${NS}::button $top.diffoldbut -text [mc "Diff: old lines"] \ - -command [list choosecolor diffcolors 0 $top.diffold [mc "diff old lines"] \ - [list $ctext tag conf d0 -foreground]] - grid x $top.diffoldbut $top.diffold -sticky w - label $top.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 1] - ${NS}::button $top.diffnewbut -text [mc "Diff: new lines"] \ - -command [list choosecolor diffcolors 1 $top.diffnew [mc "diff new lines"] \ - [list $ctext tag conf dresult -foreground]] - grid x $top.diffnewbut $top.diffnew -sticky w - label $top.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 2] - ${NS}::button $top.hunksepbut -text [mc "Diff: hunk header"] \ - -command [list choosecolor diffcolors 2 $top.hunksep \ - [mc "diff hunk header"] \ - [list $ctext tag conf hunksep -foreground]] - grid x $top.hunksepbut $top.hunksep -sticky w - label $top.markbgsep -padx 40 -relief sunk -background $markbgcolor - ${NS}::button $top.markbgbut -text [mc "Marked line bg"] \ - -command [list choosecolor markbgcolor {} $top.markbgsep \ - [mc "marked line background"] \ - [list $ctext tag conf omark -background]] - grid x $top.markbgbut $top.markbgsep -sticky w - label $top.selbgsep -padx 40 -relief sunk -background $selectbgcolor - ${NS}::button $top.selbgbut -text [mc "Select bg"] \ - -command [list choosecolor selectbgcolor {} $top.selbgsep [mc "background"] setselbg] - grid x $top.selbgbut $top.selbgsep -sticky w - - ${NS}::label $top.cfont -text [mc "Fonts: press to choose"] - grid $top.cfont - -sticky w -pady 10 - mkfontdisp mainfont $top [mc "Main font"] - mkfontdisp textfont $top [mc "Diff display font"] - mkfontdisp uifont $top [mc "User interface font"] + set notebook [${NS}::frame $top.notebook -borderwidth 0 -relief flat] + } + + lappend pages [prefspage_general $notebook] [mc "General"] + lappend pages [prefspage_colors $notebook] [mc "Colors"] + lappend pages [prefspage_fonts $notebook] [mc "Fonts"] + set col 0 + foreach {page title} $pages { + if {$use_notebook} { + $notebook add $page -text $title + } else { + set btn [${NS}::button $notebook.b_[string map {. X} $page] \ + -text $title -command [list raise $page]] + $page configure -text $title + grid $btn -row 0 -column [incr col] -sticky w + grid $page -row 1 -column 0 -sticky news -columnspan 100 + } + } + + if {!$use_notebook} { + grid columnconfigure $notebook 0 -weight 1 + grid rowconfigure $notebook 1 -weight 1 + raise [lindex $pages 0] + } + + grid $notebook -sticky news -padx 2 -pady 2 + grid rowconfigure $top 0 -weight 1 + grid columnconfigure $top 0 -weight 1 ${NS}::frame $top.buts ${NS}::button $top.buts.ok -text [mc "OK"] -command prefsok -default active @@ -10904,7 +11045,7 @@ proc doprefs {} { grid columnconfigure $top.buts 1 -weight 1 -uniform a grid $top.buts - - -pady 10 -sticky ew grid columnconfigure $top 2 -weight 1 - bind $top <Visibility> "focus $top.buts.ok" + bind $top <Visibility> [list focus $top.buts.ok] } proc choose_extdiff {} { @@ -11422,10 +11563,20 @@ catch { } } +set log_showroot true +catch { + set log_showroot [exec git config --bool --get log.showroot] +} + if {[tk windowingsystem] eq "aqua"} { set mainfont {{Lucida Grande} 9} set textfont {Monaco 9} set uifont {{Lucida Grande} 9 bold} +} elseif {![catch {::tk::pkgconfig get fontsystem} xft] && $xft eq "xft"} { + # fontconfig! + set mainfont {sans 9} + set textfont {monospace 9} + set uifont {sans 9 bold} } else { set mainfont {Helvetica 9} set textfont {Courier 9} @@ -11607,6 +11758,8 @@ if {[package vcompare $git_version "1.6.6.2"] >= 0} { set show_notes "--show-notes" } +set appname "gitk" + set runq {} set history {} set historyindex 0 @@ -11676,7 +11829,7 @@ catch { } # wait for the window to become visible tkwait visibility . -wm title . "[file tail $argv0]: [file tail [pwd]]" +wm title . "$appname: [reponame]" update readrefs diff --git a/gitweb/static/js/lib/cookies.js b/gitweb/static/js/lib/cookies.js index 72b51cd1b4..66b9a072a4 100644 --- a/gitweb/static/js/lib/cookies.js +++ b/gitweb/static/js/lib/cookies.js @@ -30,7 +30,7 @@ * If a negative value is specified or a date in the past), * the cookie will be deleted. * If set to null or omitted, the cookie will be a session cookie - * and will not be retained when the the browser exits. + * and will not be retained when the browser exits. * @param {String} [options.path] Restrict access of a cookie to particular directory * (default: path of page that created the cookie). * @param {String} [options.domain] Override what web sites are allowed to access cookie @@ -194,8 +194,10 @@ static struct strbuf *diff_output_prefix_callback(struct diff_options *opt, void struct git_graph *graph = data; static struct strbuf msgbuf = STRBUF_INIT; + assert(opt); assert(graph); + opt->output_prefix_length = graph->width; strbuf_reset(&msgbuf); graph_padding_line(graph, &msgbuf); return &msgbuf; @@ -245,6 +247,7 @@ struct git_graph *graph_init(struct rev_info *opt) */ opt->diffopt.output_prefix = diff_output_prefix_callback; opt->diffopt.output_prefix_data = graph; + opt->diffopt.output_prefix_length = 0; return graph; } @@ -210,14 +210,23 @@ static int http_options(const char *var, const char *value, void *cb) static void init_curl_http_auth(CURL *result) { - if (http_auth.username) { - struct strbuf up = STRBUF_INIT; - credential_fill(&http_auth); + if (!http_auth.username) + return; + + credential_fill(&http_auth); + +#if LIBCURL_VERSION_NUM >= 0x071301 + curl_easy_setopt(result, CURLOPT_USERNAME, http_auth.username); + curl_easy_setopt(result, CURLOPT_PASSWORD, http_auth.password); +#else + { + static struct strbuf up = STRBUF_INIT; + strbuf_reset(&up); strbuf_addf(&up, "%s:%s", http_auth.username, http_auth.password); - curl_easy_setopt(result, CURLOPT_USERPWD, - strbuf_detach(&up, NULL)); + curl_easy_setopt(result, CURLOPT_USERPWD, up.buf); } +#endif } static int has_cert_password(void) @@ -494,6 +503,8 @@ struct active_request_slot *get_active_slot(void) curl_easy_setopt(slot->curl, CURLOPT_POSTFIELDS, NULL); curl_easy_setopt(slot->curl, CURLOPT_UPLOAD, 0); curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1); + if (http_auth.password) + init_curl_http_auth(slot->curl); return slot; } @@ -829,7 +840,7 @@ int http_get_strbuf(const char *url, struct strbuf *result, int options) } /* - * Downloads an url and stores the result in the given file. + * Downloads a URL and stores the result in the given file. * * If a previous interrupted download is detected (i.e. a previous temporary * file is still around) the download is resumed. @@ -127,7 +127,7 @@ extern char *get_remote_object_url(const char *url, const char *hex, #define HTTP_NOAUTH 5 /* - * Requests an url and stores the result in a strbuf. + * Requests a URL and stores the result in a strbuf. * * If the result pointer is NULL, a HTTP HEAD request is made instead of GET. */ @@ -220,6 +220,74 @@ static int copy(char *buf, size_t size, int offset, const char *src) return offset; } +/* + * Reverse of fmt_ident(); given an ident line, split the fields + * to allow the caller to parse it. + * Signal a success by returning 0, but date/tz fields of the result + * can still be NULL if the input line only has the name/email part + * (e.g. reading from a reflog entry). + */ +int split_ident_line(struct ident_split *split, const char *line, int len) +{ + const char *cp; + size_t span; + int status = -1; + + memset(split, 0, sizeof(*split)); + + split->name_begin = line; + for (cp = line; *cp && cp < line + len; cp++) + if (*cp == '<') { + split->mail_begin = cp + 1; + break; + } + if (!split->mail_begin) + return status; + + for (cp = split->mail_begin - 2; line < cp; cp--) + if (!isspace(*cp)) { + split->name_end = cp + 1; + break; + } + if (!split->name_end) + return status; + + for (cp = split->mail_begin; cp < line + len; cp++) + if (*cp == '>') { + split->mail_end = cp; + break; + } + if (!split->mail_end) + return status; + + for (cp = split->mail_end + 1; cp < line + len && isspace(*cp); cp++) + ; + if (line + len <= cp) + goto person_only; + split->date_begin = cp; + span = strspn(cp, "0123456789"); + if (!span) + goto person_only; + split->date_end = split->date_begin + span; + for (cp = split->date_end; cp < line + len && isspace(*cp); cp++) + ; + if (line + len <= cp || (*cp != '+' && *cp != '-')) + goto person_only; + split->tz_begin = cp; + span = strspn(cp + 1, "0123456789"); + if (!span) + goto person_only; + split->tz_end = split->tz_begin + 1 + span; + return 0; + +person_only: + split->date_begin = NULL; + split->date_end = NULL; + split->tz_begin = NULL; + split->tz_end = NULL; + return 0; +} + static const char *env_hint = "\n" "*** Please tell me who you are.\n" diff --git a/log-tree.c b/log-tree.c index cea8756866..34c49e7b33 100644 --- a/log-tree.c +++ b/log-tree.c @@ -711,14 +711,15 @@ int log_tree_diff_flush(struct rev_info *opt) opt->verbose_header && opt->commit_format != CMIT_FMT_ONELINE) { int pch = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH; - if ((pch & opt->diffopt.output_format) == pch) - printf("---"); if (opt->diffopt.output_prefix) { struct strbuf *msg = NULL; msg = opt->diffopt.output_prefix(&opt->diffopt, opt->diffopt.output_prefix_data); fwrite(msg->buf, msg->len, 1, stdout); } + if ((pch & opt->diffopt.output_format) == pch) { + printf("---"); + } putchar('\n'); } } diff --git a/merge-recursive.c b/merge-recursive.c index 6479a60cd1..0fb174359a 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -485,6 +485,7 @@ static struct string_list *get_renames(struct merge_options *o, renames = xcalloc(1, sizeof(struct string_list)); diff_setup(&opts); DIFF_OPT_SET(&opts, RECURSIVE); + DIFF_OPT_CLR(&opts, RENAME_EMPTY); opts.detect_rename = DIFF_DETECT_RENAME; opts.rename_limit = o->merge_rename_limit >= 0 ? o->merge_rename_limit : o->diff_rename_limit >= 0 ? o->diff_rename_limit : @@ -1914,7 +1915,7 @@ int merge_recursive(struct merge_options *o, /* if there is no common ancestor, use an empty tree */ struct tree *tree; - tree = lookup_tree((const unsigned char *)EMPTY_TREE_SHA1_BIN); + tree = lookup_tree(EMPTY_TREE_SHA1_BIN); merged_common_ancestors = make_virtual_commit(tree, "ancestor"); } diff --git a/notes-merge.c b/notes-merge.c index fb0832f97d..74aa77ce4b 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -267,7 +267,8 @@ static void check_notes_merge_worktree(struct notes_merge_options *o) * Must establish NOTES_MERGE_WORKTREE. * Abort if NOTES_MERGE_WORKTREE already exists */ - if (file_exists(git_path(NOTES_MERGE_WORKTREE))) { + if (file_exists(git_path(NOTES_MERGE_WORKTREE)) && + !is_empty_dir(git_path(NOTES_MERGE_WORKTREE))) { if (advice_resolve_conflict) die("You have not concluded your previous " "notes merge (%s exists).\nPlease, use " @@ -687,51 +688,60 @@ int notes_merge_commit(struct notes_merge_options *o, { /* * Iterate through files in .git/NOTES_MERGE_WORKTREE and add all - * found notes to 'partial_tree'. Write the updates notes tree to + * found notes to 'partial_tree'. Write the updated notes tree to * the DB, and commit the resulting tree object while reusing the * commit message and parents from 'partial_commit'. * Finally store the new commit object SHA1 into 'result_sha1'. */ - struct dir_struct dir; - char *path = xstrdup(git_path(NOTES_MERGE_WORKTREE "/")); - int path_len = strlen(path), i; + DIR *dir; + struct dirent *e; + struct strbuf path = STRBUF_INIT; char *msg = strstr(partial_commit->buffer, "\n\n"); struct strbuf sb_msg = STRBUF_INIT; + int baselen; + strbuf_addstr(&path, git_path(NOTES_MERGE_WORKTREE)); if (o->verbosity >= 3) - printf("Committing notes in notes merge worktree at %.*s\n", - path_len - 1, path); + printf("Committing notes in notes merge worktree at %s\n", + path.buf); if (!msg || msg[2] == '\0') die("partial notes commit has empty message"); msg += 2; - memset(&dir, 0, sizeof(dir)); - read_directory(&dir, path, path_len, NULL); - for (i = 0; i < dir.nr; i++) { - struct dir_entry *ent = dir.entries[i]; + dir = opendir(path.buf); + if (!dir) + die_errno("could not open %s", path.buf); + + strbuf_addch(&path, '/'); + baselen = path.len; + while ((e = readdir(dir)) != NULL) { struct stat st; - const char *relpath = ent->name + path_len; unsigned char obj_sha1[20], blob_sha1[20]; - if (ent->len - path_len != 40 || get_sha1_hex(relpath, obj_sha1)) { + if (is_dot_or_dotdot(e->d_name)) + continue; + + if (strlen(e->d_name) != 40 || get_sha1_hex(e->d_name, obj_sha1)) { if (o->verbosity >= 3) - printf("Skipping non-SHA1 entry '%s'\n", - ent->name); + printf("Skipping non-SHA1 entry '%s%s'\n", + path.buf, e->d_name); continue; } + strbuf_addstr(&path, e->d_name); /* write file as blob, and add to partial_tree */ - if (stat(ent->name, &st)) - die_errno("Failed to stat '%s'", ent->name); - if (index_path(blob_sha1, ent->name, &st, HASH_WRITE_OBJECT)) - die("Failed to write blob object from '%s'", ent->name); + if (stat(path.buf, &st)) + die_errno("Failed to stat '%s'", path.buf); + if (index_path(blob_sha1, path.buf, &st, HASH_WRITE_OBJECT)) + die("Failed to write blob object from '%s'", path.buf); if (add_note(partial_tree, obj_sha1, blob_sha1, NULL)) die("Failed to add resolved note '%s' to notes tree", - ent->name); + path.buf); if (o->verbosity >= 4) printf("Added resolved note for object %s: %s\n", sha1_to_hex(obj_sha1), sha1_to_hex(blob_sha1)); + strbuf_setlen(&path, baselen); } strbuf_attach(&sb_msg, msg, strlen(msg), strlen(msg) + 1); @@ -740,20 +750,25 @@ int notes_merge_commit(struct notes_merge_options *o, if (o->verbosity >= 4) printf("Finalized notes merge commit: %s\n", sha1_to_hex(result_sha1)); - free(path); + strbuf_release(&path); + closedir(dir); return 0; } int notes_merge_abort(struct notes_merge_options *o) { - /* Remove .git/NOTES_MERGE_WORKTREE directory and all files within */ + /* + * Remove all files within .git/NOTES_MERGE_WORKTREE. We do not remove + * the .git/NOTES_MERGE_WORKTREE directory itself, since it might be + * the current working directory of the user. + */ struct strbuf buf = STRBUF_INIT; int ret; strbuf_addstr(&buf, git_path(NOTES_MERGE_WORKTREE)); if (o->verbosity >= 3) - printf("Removing notes merge worktree at %s\n", buf.buf); - ret = remove_dir_recursively(&buf, 0); + printf("Removing notes merge worktree at %s/*\n", buf.buf); + ret = remove_dir_recursively(&buf, REMOVE_DIR_KEEP_TOPLEVEL); strbuf_release(&buf); return ret; } diff --git a/perl/Git.pm b/perl/Git.pm index f7ce511bbb..497f420178 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -691,7 +691,7 @@ The hash is in the format C<refname =\> hash>. For tags, the C<refname> entry contains the tag object while a C<refname^{}> entry gives the tagged objects. C<REPOSITORY> has the same meaning as the appropriate C<git-ls-remote> -argument; either an URL or a remote name (if called on a repository instance). +argument; either a URL or a remote name (if called on a repository instance). C<GROUPS> is an optional arrayref that can contain 'tags' to return all the tags and/or 'heads' to return all the heads. C<REFGLOB> is an optional array of strings containing a shell-like glob to further limit the refs returned in diff --git a/perl/Git/I18N.pm b/perl/Git/I18N.pm index 07597dcb93..40dd897191 100644 --- a/perl/Git/I18N.pm +++ b/perl/Git/I18N.pm @@ -2,7 +2,16 @@ package Git::I18N; use 5.008; use strict; use warnings; -use Exporter 'import'; +BEGIN { + require Exporter; + if ($] < 5.008003) { + *import = \&Exporter::import; + } else { + # Exporter 5.57 which supports this invocation was + # released with perl 5.8.3 + Exporter->import('import'); + } +} our @EXPORT = qw(__); our @EXPORT_OK = @EXPORT; diff --git a/perl/Makefile b/perl/Makefile index b2977cd0bc..3e21766d8f 100644 --- a/perl/Makefile +++ b/perl/Makefile @@ -23,15 +23,18 @@ clean: ifdef NO_PERL_MAKEMAKER instdir_SQ = $(subst ','\'',$(prefix)/lib) $(makfile): ../GIT-CFLAGS Makefile - echo all: private-Error.pm Git.pm > $@ - echo ' mkdir -p blib/lib' >> $@ + echo all: private-Error.pm Git.pm Git/I18N.pm > $@ + echo ' mkdir -p blib/lib/Git' >> $@ echo ' $(RM) blib/lib/Git.pm; cp Git.pm blib/lib/' >> $@ + echo ' $(RM) blib/lib/Git/I18N.pm; cp Git/I18N.pm blib/lib/Git/' >> $@ echo ' $(RM) blib/lib/Error.pm' >> $@ '$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \ echo ' cp private-Error.pm blib/lib/Error.pm' >> $@ echo install: >> $@ echo ' mkdir -p "$$(DESTDIR)$(instdir_SQ)"' >> $@ + echo ' mkdir -p "$$(DESTDIR)$(instdir_SQ)/Git"' >> $@ echo ' $(RM) "$$(DESTDIR)$(instdir_SQ)/Git.pm"; cp Git.pm "$$(DESTDIR)$(instdir_SQ)"' >> $@ + echo ' $(RM) "$$(DESTDIR)$(instdir_SQ)/Git/I18N.pm"; cp Git/I18N.pm "$$(DESTDIR)$(instdir_SQ)/Git"' >> $@ echo ' $(RM) "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> $@ '$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \ echo ' cp private-Error.pm "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> $@ @@ -178,7 +178,7 @@ used: C: - - Include builtin.h at the top, it'll pull in in gettext.h, which + - Include builtin.h at the top, it'll pull in gettext.h, which defines the gettext interface. Consult with the list if you need to use gettext.h directly. @@ -1,10 +1,27 @@ Core Git translation language teams (please keep the list sorted alphabetically on language field) +Language: da (Danish) +Repository: https://github.com/git-da/git-po/ +Leader: Byrial Jensen <byrial@vip.cybercity.dk> + +Language: de (German) +Repository: https://github.com/ralfth/git-po-de +Leader: Ralf Thielow <ralf.thielow@googlemail.com> + Language: is (Icelandic) Leader: Ævar Arnfjörð Bjarmason <avarab@gmail.com> +Language: nl (Dutch) +Repository: https://github.com/vfr-nl/git-po/ +Leader: Vincent van Ravesteijn <vfr@lyx.org> + +Language: pt_PT (Portuguese - Portugal) +Repository: https://github.com/marcomsousa/git-l10n-pt_PT/ +Leader: Marco Sousa <marcomsousa AT gmail.com> + Language: sv (Swedish) +Repository: https://github.com/nafmo/git-l10n-sv/ Leader: Peter Krefting <peter@softwolves.pp.se> Language: zh_CN (Simplified Chinese) diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000000..20a88ea529 --- /dev/null +++ b/po/da.po @@ -0,0 +1,3503 @@ +# Danish translations for Git. +# This file is distributed under the same license as the PACKAGE package. +# Byrial Jensen <byrial@vip.cybercity.dk>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: Git\n" +"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" +"POT-Creation-Date: 2012-03-16 20:18+0800\n" +"PO-Revision-Date: 2012-04-10 18:41+0200\n" +"Last-Translator: Byrial Jensen <byrial@vip.cybercity.dk>\n" +"Language-Team: Danish <dansk@dansk-gruppen.dk>\n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: advice.c:34 +#, c-format +msgid "hint: %.*s\n" +msgstr "" + +#. +#. * Message used both when 'git commit' fails and when +#. * other commands doing a merge do. +#. +#: advice.c:64 +msgid "" +"Fix them up in the work tree,\n" +"and then use 'git add/rm <file>' as\n" +"appropriate to mark resolution and make a commit,\n" +"or use 'git commit -a'." +msgstr "" + +#: commit.c:47 +#, c-format +msgid "could not parse %s" +msgstr "" + +#: commit.c:49 +#, c-format +msgid "%s %s is not a commit!" +msgstr "" + +#: compat/obstack.c:406 compat/obstack.c:408 +msgid "memory exhausted" +msgstr "" + +#: connected.c:39 +msgid "Could not run 'git rev-list'" +msgstr "" + +#: connected.c:48 +#, c-format +msgid "failed write to rev-list: %s" +msgstr "" + +#: connected.c:56 +#, c-format +msgid "failed to close rev-list's stdin: %s" +msgstr "" + +#: diff.c:105 +#, c-format +msgid " Failed to parse dirstat cut-off percentage '%.*s'\n" +msgstr "" + +#: diff.c:110 +#, c-format +msgid " Unknown dirstat parameter '%.*s'\n" +msgstr "" + +#: diff.c:210 +#, c-format +msgid "" +"Found errors in 'diff.dirstat' config variable:\n" +"%s" +msgstr "" + +#: diff.c:1336 +msgid " 0 files changed\n" +msgstr "" + +#: diff.c:1340 +#, c-format +msgid " %d file changed" +msgid_plural " %d files changed" +msgstr[0] "" +msgstr[1] "" + +#: diff.c:1357 +#, c-format +msgid ", %d insertion(+)" +msgid_plural ", %d insertions(+)" +msgstr[0] "" +msgstr[1] "" + +#: diff.c:1368 +#, c-format +msgid ", %d deletion(-)" +msgid_plural ", %d deletions(-)" +msgstr[0] "" +msgstr[1] "" + +#: diff.c:3424 +#, c-format +msgid "" +"Failed to parse --dirstat/-X option parameter:\n" +"%s" +msgstr "" + +#: gpg-interface.c:59 +msgid "could not run gpg." +msgstr "" + +#: gpg-interface.c:71 +msgid "gpg did not accept the data" +msgstr "" + +#: gpg-interface.c:82 +msgid "gpg failed to sign the data" +msgstr "" + +#: grep.c:1280 +#, c-format +msgid "'%s': unable to read %s" +msgstr "" + +#: grep.c:1297 +#, c-format +msgid "'%s': %s" +msgstr "" + +#: grep.c:1308 +#, c-format +msgid "'%s': short read %s" +msgstr "" + +#: help.c:287 +#, c-format +msgid "" +"'%s' appears to be a git command, but we were not\n" +"able to execute it. Maybe git-%s is broken?" +msgstr "" + +#: remote.c:1607 +#, c-format +msgid "Your branch is ahead of '%s' by %d commit.\n" +msgid_plural "Your branch is ahead of '%s' by %d commits.\n" +msgstr[0] "" +msgstr[1] "" + +#: remote.c:1613 +#, c-format +msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" +msgid_plural "" +"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" +msgstr[0] "" +msgstr[1] "" + +#: remote.c:1621 +#, c-format +msgid "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commit each, respectively.\n" +msgid_plural "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commits each, respectively.\n" +msgstr[0] "" +msgstr[1] "" + +#: sequencer.c:120 builtin/merge.c:864 builtin/merge.c:985 +#: builtin/merge.c:1095 builtin/merge.c:1105 +#, c-format +msgid "Could not open '%s' for writing" +msgstr "" + +#: sequencer.c:122 builtin/merge.c:334 builtin/merge.c:867 +#: builtin/merge.c:1097 builtin/merge.c:1110 +#, c-format +msgid "Could not write to '%s'" +msgstr "" + +#: sequencer.c:143 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'" +msgstr "" + +#: sequencer.c:146 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'\n" +"and commit the result with 'git commit'" +msgstr "" + +#: sequencer.c:159 sequencer.c:685 sequencer.c:768 +#, c-format +msgid "Could not write to %s" +msgstr "" + +#: sequencer.c:162 +#, c-format +msgid "Error wrapping up %s" +msgstr "" + +#: sequencer.c:177 +msgid "Your local changes would be overwritten by cherry-pick." +msgstr "" + +#: sequencer.c:179 +msgid "Your local changes would be overwritten by revert." +msgstr "" + +#: sequencer.c:182 +msgid "Commit your changes or stash them to proceed." +msgstr "" + +#. TRANSLATORS: %s will be "revert" or "cherry-pick" +#: sequencer.c:232 +#, c-format +msgid "%s: Unable to write new index file" +msgstr "" + +#: sequencer.c:298 +msgid "Your index file is unmerged." +msgstr "" + +#: sequencer.c:301 +msgid "You do not have a valid HEAD" +msgstr "" + +#: sequencer.c:316 +#, c-format +msgid "Commit %s is a merge but no -m option was given." +msgstr "" + +#: sequencer.c:324 +#, c-format +msgid "Commit %s does not have parent %d" +msgstr "" + +#: sequencer.c:328 +#, c-format +msgid "Mainline was specified but commit %s is not a merge." +msgstr "" + +#. TRANSLATORS: The first %s will be "revert" or +#. "cherry-pick", the second %s a SHA1 +#: sequencer.c:339 +#, c-format +msgid "%s: cannot parse parent commit %s" +msgstr "" + +#: sequencer.c:343 +#, c-format +msgid "Cannot get commit message for %s" +msgstr "" + +#: sequencer.c:427 +#, c-format +msgid "could not revert %s... %s" +msgstr "" + +#: sequencer.c:428 +#, c-format +msgid "could not apply %s... %s" +msgstr "" + +#: sequencer.c:450 sequencer.c:909 builtin/log.c:288 builtin/log.c:713 +#: builtin/log.c:1329 builtin/log.c:1548 builtin/merge.c:348 +#: builtin/shortlog.c:181 +msgid "revision walk setup failed" +msgstr "" + +#: sequencer.c:453 +msgid "empty commit set passed" +msgstr "" + +#: sequencer.c:461 +#, c-format +msgid "git %s: failed to read the index" +msgstr "" + +#: sequencer.c:466 +#, c-format +msgid "git %s: failed to refresh the index" +msgstr "" + +#: sequencer.c:551 +#, c-format +msgid "Cannot %s during a %s" +msgstr "" + +#: sequencer.c:573 +#, c-format +msgid "Could not parse line %d." +msgstr "" + +#: sequencer.c:578 +msgid "No commits parsed." +msgstr "" + +#: sequencer.c:591 +#, c-format +msgid "Could not open %s" +msgstr "" + +#: sequencer.c:595 +#, c-format +msgid "Could not read %s." +msgstr "" + +#: sequencer.c:602 +#, c-format +msgid "Unusable instruction sheet: %s" +msgstr "" + +#: sequencer.c:630 +#, c-format +msgid "Invalid key: %s" +msgstr "" + +#: sequencer.c:633 +#, c-format +msgid "Invalid value for %s: %s" +msgstr "" + +#: sequencer.c:645 +#, c-format +msgid "Malformed options sheet: %s" +msgstr "" + +#: sequencer.c:666 +msgid "a cherry-pick or revert is already in progress" +msgstr "" + +#: sequencer.c:667 +msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" +msgstr "" + +#: sequencer.c:671 +#, c-format +msgid "Could not create sequencer directory %s" +msgstr "" + +#: sequencer.c:687 sequencer.c:772 +#, c-format +msgid "Error wrapping up %s." +msgstr "" + +#: sequencer.c:706 sequencer.c:840 +msgid "no cherry-pick or revert in progress" +msgstr "" + +#: sequencer.c:708 +msgid "cannot resolve HEAD" +msgstr "" + +#: sequencer.c:710 +msgid "cannot abort from a branch yet to be born" +msgstr "" + +#: sequencer.c:732 +#, c-format +msgid "cannot open %s: %s" +msgstr "" + +#: sequencer.c:735 +#, c-format +msgid "cannot read %s: %s" +msgstr "" + +#: sequencer.c:736 +msgid "unexpected end of file" +msgstr "" + +#: sequencer.c:742 +#, c-format +msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" +msgstr "" + +#: sequencer.c:765 +#, c-format +msgid "Could not format %s." +msgstr "" + +#: sequencer.c:927 +msgid "Can't revert as initial commit" +msgstr "" + +#: sequencer.c:928 +msgid "Can't cherry-pick into empty head" +msgstr "" + +#: wt-status.c:134 +msgid "Unmerged paths:" +msgstr "" + +#: wt-status.c:140 wt-status.c:157 +#, c-format +msgid " (use \"git reset %s <file>...\" to unstage)" +msgstr "" + +#: wt-status.c:142 wt-status.c:159 +msgid " (use \"git rm --cached <file>...\" to unstage)" +msgstr "" + +#: wt-status.c:143 +msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" +msgstr "" + +#: wt-status.c:151 +msgid "Changes to be committed:" +msgstr "" + +#: wt-status.c:169 +msgid "Changes not staged for commit:" +msgstr "" + +#: wt-status.c:173 +msgid " (use \"git add <file>...\" to update what will be committed)" +msgstr "" + +#: wt-status.c:175 +msgid " (use \"git add/rm <file>...\" to update what will be committed)" +msgstr "" + +#: wt-status.c:176 +msgid "" +" (use \"git checkout -- <file>...\" to discard changes in working directory)" +msgstr "" + +#: wt-status.c:178 +msgid " (commit or discard the untracked or modified content in submodules)" +msgstr "" + +#: wt-status.c:187 +#, c-format +msgid "%s files:" +msgstr "" + +#: wt-status.c:190 +#, c-format +msgid " (use \"git %s <file>...\" to include in what will be committed)" +msgstr "" + +#: wt-status.c:207 +msgid "bug" +msgstr "" + +#: wt-status.c:212 +msgid "both deleted:" +msgstr "" + +#: wt-status.c:213 +msgid "added by us:" +msgstr "" + +#: wt-status.c:214 +msgid "deleted by them:" +msgstr "" + +#: wt-status.c:215 +msgid "added by them:" +msgstr "" + +#: wt-status.c:216 +msgid "deleted by us:" +msgstr "" + +#: wt-status.c:217 +msgid "both added:" +msgstr "" + +#: wt-status.c:218 +msgid "both modified:" +msgstr "" + +#: wt-status.c:248 +msgid "new commits, " +msgstr "" + +#: wt-status.c:250 +msgid "modified content, " +msgstr "" + +#: wt-status.c:252 +msgid "untracked content, " +msgstr "" + +#: wt-status.c:266 +#, c-format +msgid "new file: %s" +msgstr "" + +#: wt-status.c:269 +#, c-format +msgid "copied: %s -> %s" +msgstr "" + +#: wt-status.c:272 +#, c-format +msgid "deleted: %s" +msgstr "" + +#: wt-status.c:275 +#, c-format +msgid "modified: %s" +msgstr "" + +#: wt-status.c:278 +#, c-format +msgid "renamed: %s -> %s" +msgstr "" + +#: wt-status.c:281 +#, c-format +msgid "typechange: %s" +msgstr "" + +#: wt-status.c:284 +#, c-format +msgid "unknown: %s" +msgstr "" + +#: wt-status.c:287 +#, c-format +msgid "unmerged: %s" +msgstr "" + +#: wt-status.c:290 +#, c-format +msgid "bug: unhandled diff status %c" +msgstr "" + +#: wt-status.c:713 +msgid "On branch " +msgstr "" + +#: wt-status.c:720 +msgid "Not currently on any branch." +msgstr "" + +#: wt-status.c:731 +msgid "Initial commit" +msgstr "" + +#: wt-status.c:745 +msgid "Untracked" +msgstr "" + +#: wt-status.c:747 +msgid "Ignored" +msgstr "" + +#: wt-status.c:749 +#, c-format +msgid "Untracked files not listed%s" +msgstr "" + +#: wt-status.c:751 +msgid " (use -u option to show untracked files)" +msgstr "" + +#: wt-status.c:757 +msgid "No changes" +msgstr "" + +#: wt-status.c:761 +#, c-format +msgid "no changes added to commit%s\n" +msgstr "" + +#: wt-status.c:763 +msgid " (use \"git add\" and/or \"git commit -a\")" +msgstr "" + +#: wt-status.c:765 +#, c-format +msgid "nothing added to commit but untracked files present%s\n" +msgstr "" + +#: wt-status.c:767 +msgid " (use \"git add\" to track)" +msgstr "" + +#: wt-status.c:769 wt-status.c:772 wt-status.c:775 +#, c-format +msgid "nothing to commit%s\n" +msgstr "" + +#: wt-status.c:770 +msgid " (create/copy files and use \"git add\" to track)" +msgstr "" + +#: wt-status.c:773 +msgid " (use -u to show untracked files)" +msgstr "" + +#: wt-status.c:776 +msgid " (working directory clean)" +msgstr "" + +#: wt-status.c:884 +msgid "HEAD (no branch)" +msgstr "" + +#: wt-status.c:890 +msgid "Initial commit on " +msgstr "" + +#: wt-status.c:905 +msgid "behind " +msgstr "" + +#: wt-status.c:908 wt-status.c:911 +msgid "ahead " +msgstr "" + +#: wt-status.c:913 +msgid ", behind " +msgstr "" + +#: builtin/add.c:62 +#, c-format +msgid "unexpected diff status %c" +msgstr "" + +#: builtin/add.c:67 builtin/commit.c:298 +msgid "updating files failed" +msgstr "" + +#: builtin/add.c:77 +#, c-format +msgid "remove '%s'\n" +msgstr "" + +#: builtin/add.c:176 +#, c-format +msgid "Path '%s' is in submodule '%.*s'" +msgstr "" + +#: builtin/add.c:192 +msgid "Unstaged changes after refreshing the index:" +msgstr "" + +#: builtin/add.c:195 builtin/add.c:456 builtin/rm.c:186 +#, c-format +msgid "pathspec '%s' did not match any files" +msgstr "" + +#: builtin/add.c:209 +#, c-format +msgid "'%s' is beyond a symbolic link" +msgstr "" + +#: builtin/add.c:276 +msgid "Could not read the index" +msgstr "" + +#: builtin/add.c:286 +#, c-format +msgid "Could not open '%s' for writing." +msgstr "" + +#: builtin/add.c:290 +msgid "Could not write patch" +msgstr "" + +#: builtin/add.c:295 +#, c-format +msgid "Could not stat '%s'" +msgstr "" + +#: builtin/add.c:297 +msgid "Empty patch. Aborted." +msgstr "" + +#: builtin/add.c:303 +#, c-format +msgid "Could not apply '%s'" +msgstr "" + +#: builtin/add.c:312 +msgid "The following paths are ignored by one of your .gitignore files:\n" +msgstr "" + +#: builtin/add.c:352 +#, c-format +msgid "Use -f if you really want to add them.\n" +msgstr "" + +#: builtin/add.c:353 +msgid "no files added" +msgstr "" + +#: builtin/add.c:359 +msgid "adding files failed" +msgstr "" + +#: builtin/add.c:391 +msgid "-A and -u are mutually incompatible" +msgstr "" + +#: builtin/add.c:393 +msgid "Option --ignore-missing can only be used together with --dry-run" +msgstr "" + +#: builtin/add.c:413 +#, c-format +msgid "Nothing specified, nothing added.\n" +msgstr "" + +#: builtin/add.c:414 +#, c-format +msgid "Maybe you wanted to say 'git add .'?\n" +msgstr "" + +#: builtin/add.c:420 builtin/clean.c:95 builtin/commit.c:358 builtin/mv.c:82 +#: builtin/rm.c:162 +msgid "index file corrupt" +msgstr "" + +#: builtin/add.c:476 builtin/mv.c:229 builtin/rm.c:260 +msgid "Unable to write new index file" +msgstr "" + +#: builtin/archive.c:17 +#, c-format +msgid "could not create archive file '%s'" +msgstr "" + +#: builtin/archive.c:20 +msgid "could not redirect output" +msgstr "" + +#: builtin/archive.c:37 +msgid "git archive: Remote with no URL" +msgstr "" + +#: builtin/archive.c:58 +msgid "git archive: expected ACK/NAK, got EOF" +msgstr "" + +#: builtin/archive.c:63 +#, c-format +msgid "git archive: NACK %s" +msgstr "" + +#: builtin/archive.c:65 +#, c-format +msgid "remote error: %s" +msgstr "" + +#: builtin/archive.c:66 +msgid "git archive: protocol error" +msgstr "" + +#: builtin/archive.c:71 +msgid "git archive: expected a flush" +msgstr "" + +#: builtin/branch.c:137 +#, c-format +msgid "" +"deleting branch '%s' that has been merged to\n" +" '%s', but not yet merged to HEAD." +msgstr "" + +#: builtin/branch.c:141 +#, c-format +msgid "" +"not deleting branch '%s' that is not yet merged to\n" +" '%s', even though it is merged to HEAD." +msgstr "" + +#. TRANSLATORS: This is "remote " in "remote branch '%s' not found" +#: builtin/branch.c:163 +msgid "remote " +msgstr "" + +#: builtin/branch.c:171 +msgid "cannot use -a with -d" +msgstr "" + +#: builtin/branch.c:177 +msgid "Couldn't look up commit object for HEAD" +msgstr "" + +#: builtin/branch.c:182 +#, c-format +msgid "Cannot delete the branch '%s' which you are currently on." +msgstr "" + +#: builtin/branch.c:192 +#, c-format +msgid "%sbranch '%s' not found." +msgstr "" + +#: builtin/branch.c:200 +#, c-format +msgid "Couldn't look up commit object for '%s'" +msgstr "" + +#: builtin/branch.c:206 +#, c-format +msgid "" +"The branch '%s' is not fully merged.\n" +"If you are sure you want to delete it, run 'git branch -D %s'." +msgstr "" + +#: builtin/branch.c:214 +#, c-format +msgid "Error deleting %sbranch '%s'" +msgstr "" + +#: builtin/branch.c:219 +#, c-format +msgid "Deleted %sbranch %s (was %s).\n" +msgstr "" + +#: builtin/branch.c:224 +msgid "Update of config-file failed" +msgstr "" + +#: builtin/branch.c:322 +#, c-format +msgid "branch '%s' does not point at a commit" +msgstr "" + +#: builtin/branch.c:394 +#, c-format +msgid "behind %d] " +msgstr "" + +#: builtin/branch.c:396 +#, c-format +msgid "ahead %d] " +msgstr "" + +#: builtin/branch.c:398 +#, c-format +msgid "ahead %d, behind %d] " +msgstr "" + +#: builtin/branch.c:501 +msgid "(no branch)" +msgstr "" + +#: builtin/branch.c:566 +msgid "some refs could not be read" +msgstr "" + +#: builtin/branch.c:579 +msgid "cannot rename the current branch while not on any." +msgstr "" + +#: builtin/branch.c:589 +#, c-format +msgid "Invalid branch name: '%s'" +msgstr "" + +#: builtin/branch.c:604 +msgid "Branch rename failed" +msgstr "" + +#: builtin/branch.c:608 +#, c-format +msgid "Renamed a misnamed branch '%s' away" +msgstr "" + +#: builtin/branch.c:612 +#, c-format +msgid "Branch renamed to %s, but HEAD is not updated!" +msgstr "" + +#: builtin/branch.c:619 +msgid "Branch is renamed, but update of config-file failed" +msgstr "" + +#: builtin/branch.c:634 +#, c-format +msgid "malformed object name %s" +msgstr "" + +#: builtin/branch.c:658 +#, c-format +msgid "could not write branch description template: %s\n" +msgstr "" + +#: builtin/branch.c:746 +msgid "Failed to resolve HEAD as a valid ref." +msgstr "" + +#: builtin/branch.c:751 builtin/clone.c:558 +msgid "HEAD not found below refs/heads!" +msgstr "" + +#: builtin/branch.c:809 +msgid "-a and -r options to 'git branch' do not make sense with a branch name" +msgstr "" + +#: builtin/bundle.c:47 +#, c-format +msgid "%s is okay\n" +msgstr "" + +#: builtin/bundle.c:56 +msgid "Need a repository to create a bundle." +msgstr "" + +#: builtin/bundle.c:60 +msgid "Need a repository to unbundle." +msgstr "" + +#: builtin/checkout.c:113 builtin/checkout.c:146 +#, c-format +msgid "path '%s' does not have our version" +msgstr "" + +#: builtin/checkout.c:115 builtin/checkout.c:148 +#, c-format +msgid "path '%s' does not have their version" +msgstr "" + +#: builtin/checkout.c:131 +#, c-format +msgid "path '%s' does not have all necessary versions" +msgstr "" + +#: builtin/checkout.c:175 +#, c-format +msgid "path '%s' does not have necessary versions" +msgstr "" + +#: builtin/checkout.c:192 +#, c-format +msgid "path '%s': cannot merge" +msgstr "" + +#: builtin/checkout.c:209 +#, c-format +msgid "Unable to add merge result for '%s'" +msgstr "" + +#: builtin/checkout.c:212 builtin/reset.c:158 +#, c-format +msgid "make_cache_entry failed for path '%s'" +msgstr "" + +#: builtin/checkout.c:234 builtin/checkout.c:392 +msgid "corrupt index file" +msgstr "" + +#: builtin/checkout.c:264 builtin/checkout.c:271 +#, c-format +msgid "path '%s' is unmerged" +msgstr "" + +#: builtin/checkout.c:302 builtin/checkout.c:498 builtin/clone.c:583 +#: builtin/merge.c:811 +msgid "unable to write new index file" +msgstr "" + +#: builtin/checkout.c:319 builtin/diff.c:302 builtin/merge.c:408 +msgid "diff_setup_done failed" +msgstr "" + +#: builtin/checkout.c:414 +msgid "you need to resolve your current index first" +msgstr "" + +#: builtin/checkout.c:533 +#, c-format +msgid "Can not do reflog for '%s'\n" +msgstr "" + +#: builtin/checkout.c:565 +msgid "HEAD is now at" +msgstr "" + +#: builtin/checkout.c:572 +#, c-format +msgid "Reset branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:575 +#, c-format +msgid "Already on '%s'\n" +msgstr "" + +#: builtin/checkout.c:579 +#, c-format +msgid "Switched to and reset branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:581 +#, c-format +msgid "Switched to a new branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:583 +#, c-format +msgid "Switched to branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:639 +#, c-format +msgid " ... and %d more.\n" +msgstr "" + +#. The singular version +#: builtin/checkout.c:645 +#, c-format +msgid "" +"Warning: you are leaving %d commit behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgid_plural "" +"Warning: you are leaving %d commits behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgstr[0] "" +msgstr[1] "" + +#: builtin/checkout.c:663 +#, c-format +msgid "" +"If you want to keep them by creating a new branch, this may be a good time\n" +"to do so with:\n" +"\n" +" git branch new_branch_name %s\n" +"\n" +msgstr "" + +#: builtin/checkout.c:692 +msgid "internal error in revision walk" +msgstr "" + +#: builtin/checkout.c:696 +msgid "Previous HEAD position was" +msgstr "" + +#: builtin/checkout.c:722 +msgid "You are on a branch yet to be born" +msgstr "" + +#. case (1) +#: builtin/checkout.c:853 +#, c-format +msgid "invalid reference: %s" +msgstr "" + +#. case (1): want a tree +#: builtin/checkout.c:892 +#, c-format +msgid "reference is not a tree: %s" +msgstr "" + +#: builtin/checkout.c:972 +msgid "-B cannot be used with -b" +msgstr "" + +#: builtin/checkout.c:981 +msgid "--patch is incompatible with all other options" +msgstr "" + +#: builtin/checkout.c:984 +msgid "--detach cannot be used with -b/-B/--orphan" +msgstr "" + +#: builtin/checkout.c:986 +msgid "--detach cannot be used with -t" +msgstr "" + +#: builtin/checkout.c:992 +msgid "--track needs a branch name" +msgstr "" + +#: builtin/checkout.c:999 +msgid "Missing branch name; try -b" +msgstr "" + +#: builtin/checkout.c:1005 +msgid "--orphan and -b|-B are mutually exclusive" +msgstr "" + +#: builtin/checkout.c:1007 +msgid "--orphan cannot be used with -t" +msgstr "" + +#: builtin/checkout.c:1017 +msgid "git checkout: -f and -m are incompatible" +msgstr "" + +#: builtin/checkout.c:1051 +msgid "invalid path specification" +msgstr "" + +#: builtin/checkout.c:1059 +#, c-format +msgid "" +"git checkout: updating paths is incompatible with switching branches.\n" +"Did you intend to checkout '%s' which can not be resolved as commit?" +msgstr "" + +#: builtin/checkout.c:1061 +msgid "git checkout: updating paths is incompatible with switching branches." +msgstr "" + +#: builtin/checkout.c:1066 +msgid "git checkout: --detach does not take a path argument" +msgstr "" + +#: builtin/checkout.c:1069 +msgid "" +"git checkout: --ours/--theirs, --force and --merge are incompatible when\n" +"checking out of the index." +msgstr "" + +#: builtin/checkout.c:1088 +msgid "Cannot switch branch to a non-commit." +msgstr "" + +#: builtin/checkout.c:1091 +msgid "--ours/--theirs is incompatible with switching branches." +msgstr "" + +#: builtin/clean.c:78 +msgid "-x and -X cannot be used together" +msgstr "" + +#: builtin/clean.c:82 +msgid "" +"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +msgstr "" + +#: builtin/clean.c:85 +msgid "" +"clean.requireForce defaults to true and neither -n nor -f given; refusing to " +"clean" +msgstr "" + +#: builtin/clean.c:155 builtin/clean.c:176 +#, c-format +msgid "Would remove %s\n" +msgstr "" + +#: builtin/clean.c:159 builtin/clean.c:179 +#, c-format +msgid "Removing %s\n" +msgstr "" + +#: builtin/clean.c:162 builtin/clean.c:182 +#, c-format +msgid "failed to remove %s" +msgstr "" + +#: builtin/clean.c:166 +#, c-format +msgid "Would not remove %s\n" +msgstr "" + +#: builtin/clean.c:168 +#, c-format +msgid "Not removing %s\n" +msgstr "" + +#: builtin/clone.c:243 +#, c-format +msgid "reference repository '%s' is not a local directory." +msgstr "" + +#: builtin/clone.c:302 +#, c-format +msgid "failed to open '%s'" +msgstr "" + +#: builtin/clone.c:306 +#, c-format +msgid "failed to create directory '%s'" +msgstr "" + +#: builtin/clone.c:308 builtin/diff.c:75 +#, c-format +msgid "failed to stat '%s'" +msgstr "" + +#: builtin/clone.c:310 +#, c-format +msgid "%s exists and is not a directory" +msgstr "" + +#: builtin/clone.c:324 +#, c-format +msgid "failed to stat %s\n" +msgstr "" + +#: builtin/clone.c:341 +#, c-format +msgid "failed to unlink '%s'" +msgstr "" + +#: builtin/clone.c:346 +#, c-format +msgid "failed to create link '%s'" +msgstr "" + +#: builtin/clone.c:350 +#, c-format +msgid "failed to copy file to '%s'" +msgstr "" + +#: builtin/clone.c:373 +#, c-format +msgid "done.\n" +msgstr "" + +#: builtin/clone.c:440 +#, c-format +msgid "Could not find remote branch %s to clone." +msgstr "" + +#: builtin/clone.c:549 +msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" +msgstr "" + +#: builtin/clone.c:639 +msgid "Too many arguments." +msgstr "" + +#: builtin/clone.c:643 +msgid "You must specify a repository to clone." +msgstr "" + +#: builtin/clone.c:654 +#, c-format +msgid "--bare and --origin %s options are incompatible." +msgstr "" + +#: builtin/clone.c:668 +#, c-format +msgid "repository '%s' does not exist" +msgstr "" + +#: builtin/clone.c:673 +msgid "--depth is ignored in local clones; use file:// instead." +msgstr "" + +#: builtin/clone.c:683 +#, c-format +msgid "destination path '%s' already exists and is not an empty directory." +msgstr "" + +#: builtin/clone.c:693 +#, c-format +msgid "working tree '%s' already exists." +msgstr "" + +#: builtin/clone.c:706 builtin/clone.c:720 +#, c-format +msgid "could not create leading directories of '%s'" +msgstr "" + +#: builtin/clone.c:709 +#, c-format +msgid "could not create work tree dir '%s'." +msgstr "" + +#: builtin/clone.c:728 +#, c-format +msgid "Cloning into bare repository '%s'...\n" +msgstr "" + +#: builtin/clone.c:730 +#, c-format +msgid "Cloning into '%s'...\n" +msgstr "" + +#: builtin/clone.c:786 +#, c-format +msgid "Don't know how to clone %s" +msgstr "" + +#: builtin/clone.c:835 +#, c-format +msgid "Remote branch %s not found in upstream %s" +msgstr "" + +#: builtin/clone.c:842 +msgid "You appear to have cloned an empty repository." +msgstr "" + +#: builtin/commit.c:42 +msgid "" +"Your name and email address were configured automatically based\n" +"on your username and hostname. Please check that they are accurate.\n" +"You can suppress this message by setting them explicitly:\n" +"\n" +" git config --global user.name \"Your Name\"\n" +" git config --global user.email you@example.com\n" +"\n" +"After doing this, you may fix the identity used for this commit with:\n" +"\n" +" git commit --amend --reset-author\n" +msgstr "" + +#: builtin/commit.c:54 +msgid "" +"You asked to amend the most recent commit, but doing so would make\n" +"it empty. You can repeat your command with --allow-empty, or you can\n" +"remove the commit entirely with \"git reset HEAD^\".\n" +msgstr "" + +#: builtin/commit.c:59 +msgid "" +"The previous cherry-pick is now empty, possibly due to conflict resolution.\n" +"If you wish to commit it anyway, use:\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Otherwise, please use 'git reset'\n" +msgstr "" + +#: builtin/commit.c:205 builtin/reset.c:33 +msgid "merge" +msgstr "" + +#: builtin/commit.c:208 +msgid "cherry-pick" +msgstr "" + +#: builtin/commit.c:325 +msgid "failed to unpack HEAD tree object" +msgstr "" + +#: builtin/commit.c:367 +msgid "unable to create temporary index" +msgstr "" + +#: builtin/commit.c:373 +msgid "interactive add failed" +msgstr "" + +#: builtin/commit.c:406 builtin/commit.c:427 builtin/commit.c:473 +msgid "unable to write new_index file" +msgstr "" + +#: builtin/commit.c:457 +#, c-format +msgid "cannot do a partial commit during a %s." +msgstr "" + +#: builtin/commit.c:466 +msgid "cannot read the index" +msgstr "" + +#: builtin/commit.c:486 +msgid "unable to write temporary index file" +msgstr "" + +#: builtin/commit.c:550 builtin/commit.c:556 +#, c-format +msgid "invalid commit: %s" +msgstr "" + +#: builtin/commit.c:579 +msgid "malformed --author parameter" +msgstr "" + +#: builtin/commit.c:635 +#, c-format +msgid "Malformed ident string: '%s'" +msgstr "" + +#: builtin/commit.c:670 builtin/commit.c:703 builtin/commit.c:1000 +#, c-format +msgid "could not lookup commit %s" +msgstr "" + +#: builtin/commit.c:682 builtin/shortlog.c:296 +#, c-format +msgid "(reading log message from standard input)\n" +msgstr "" + +#: builtin/commit.c:684 +msgid "could not read log from standard input" +msgstr "" + +#: builtin/commit.c:688 +#, c-format +msgid "could not read log file '%s'" +msgstr "" + +#: builtin/commit.c:694 +msgid "commit has empty message" +msgstr "" + +#: builtin/commit.c:710 +msgid "could not read MERGE_MSG" +msgstr "" + +#: builtin/commit.c:714 +msgid "could not read SQUASH_MSG" +msgstr "" + +#: builtin/commit.c:718 +#, c-format +msgid "could not read '%s'" +msgstr "" + +#: builtin/commit.c:746 +#, c-format +msgid "could not open '%s'" +msgstr "" + +#: builtin/commit.c:770 +msgid "could not write commit template" +msgstr "" + +#: builtin/commit.c:783 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a %s.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" + +#: builtin/commit.c:796 +msgid "Please enter the commit message for your changes." +msgstr "" + +#: builtin/commit.c:799 +msgid "" +" Lines starting\n" +"with '#' will be ignored, and an empty message aborts the commit.\n" +msgstr "" + +#: builtin/commit.c:804 +msgid "" +" Lines starting\n" +"with '#' will be kept; you may remove them yourself if you want to.\n" +"An empty message aborts the commit.\n" +msgstr "" + +#: builtin/commit.c:816 +#, c-format +msgid "%sAuthor: %s" +msgstr "" + +#: builtin/commit.c:823 +#, c-format +msgid "%sCommitter: %s" +msgstr "" + +#: builtin/commit.c:843 +msgid "Cannot read index" +msgstr "" + +#: builtin/commit.c:880 +msgid "Error building trees" +msgstr "" + +#: builtin/commit.c:895 builtin/tag.c:357 +#, c-format +msgid "Please supply the message using either -m or -F option.\n" +msgstr "" + +#: builtin/commit.c:975 +#, c-format +msgid "No existing author found with '%s'" +msgstr "" + +#: builtin/commit.c:990 builtin/commit.c:1182 +#, c-format +msgid "Invalid untracked files mode '%s'" +msgstr "" + +#: builtin/commit.c:1030 +msgid "Using both --reset-author and --author does not make sense" +msgstr "" + +#: builtin/commit.c:1041 +msgid "You have nothing to amend." +msgstr "" + +#: builtin/commit.c:1043 +#, c-format +msgid "You are in the middle of a %s -- cannot amend." +msgstr "" + +#: builtin/commit.c:1045 +msgid "Options --squash and --fixup cannot be used together" +msgstr "" + +#: builtin/commit.c:1055 +msgid "Only one of -c/-C/-F/--fixup can be used." +msgstr "" + +#: builtin/commit.c:1057 +msgid "Option -m cannot be combined with -c/-C/-F/--fixup." +msgstr "" + +#: builtin/commit.c:1063 +msgid "--reset-author can be used only with -C, -c or --amend." +msgstr "" + +#: builtin/commit.c:1080 +msgid "Only one of --include/--only/--all/--interactive/--patch can be used." +msgstr "" + +#: builtin/commit.c:1082 +msgid "No paths with --include/--only does not make sense." +msgstr "" + +#: builtin/commit.c:1084 +msgid "Clever... amending the last one with dirty index." +msgstr "" + +#: builtin/commit.c:1086 +msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +msgstr "" + +#: builtin/commit.c:1096 builtin/tag.c:556 +#, c-format +msgid "Invalid cleanup mode %s" +msgstr "" + +#: builtin/commit.c:1101 +msgid "Paths with -a does not make sense." +msgstr "" + +#: builtin/commit.c:1280 +msgid "couldn't look up newly created commit" +msgstr "" + +#: builtin/commit.c:1282 +msgid "could not parse newly created commit" +msgstr "" + +#: builtin/commit.c:1323 +msgid "detached HEAD" +msgstr "" + +#: builtin/commit.c:1325 +msgid " (root-commit)" +msgstr "" + +#: builtin/commit.c:1415 +msgid "could not parse HEAD commit" +msgstr "" + +#: builtin/commit.c:1452 builtin/merge.c:509 +#, c-format +msgid "could not open '%s' for reading" +msgstr "" + +#: builtin/commit.c:1459 +#, c-format +msgid "Corrupt MERGE_HEAD file (%s)" +msgstr "" + +#: builtin/commit.c:1466 +msgid "could not read MERGE_MODE" +msgstr "" + +#: builtin/commit.c:1485 +#, c-format +msgid "could not read commit message: %s" +msgstr "" + +#: builtin/commit.c:1499 +#, c-format +msgid "Aborting commit due to empty commit message.\n" +msgstr "" + +#: builtin/commit.c:1514 builtin/merge.c:935 builtin/merge.c:968 +msgid "failed to write commit object" +msgstr "" + +#: builtin/commit.c:1535 +msgid "cannot lock HEAD ref" +msgstr "" + +#: builtin/commit.c:1539 +msgid "cannot update HEAD ref" +msgstr "" + +#: builtin/commit.c:1550 +msgid "" +"Repository has been updated, but unable to write\n" +"new_index file. Check that disk is not full or quota is\n" +"not exceeded, and then \"git reset HEAD\" to recover." +msgstr "" + +#: builtin/describe.c:234 +#, c-format +msgid "annotated tag %s not available" +msgstr "" + +#: builtin/describe.c:238 +#, c-format +msgid "annotated tag %s has no embedded name" +msgstr "" + +#: builtin/describe.c:240 +#, c-format +msgid "tag '%s' is really '%s' here" +msgstr "" + +#: builtin/describe.c:267 +#, c-format +msgid "Not a valid object name %s" +msgstr "" + +#: builtin/describe.c:270 +#, c-format +msgid "%s is not a valid '%s' object" +msgstr "" + +#: builtin/describe.c:287 +#, c-format +msgid "no tag exactly matches '%s'" +msgstr "" + +#: builtin/describe.c:289 +#, c-format +msgid "searching to describe %s\n" +msgstr "" + +#: builtin/describe.c:329 +#, c-format +msgid "finished search at %s\n" +msgstr "" + +#: builtin/describe.c:353 +#, c-format +msgid "" +"No annotated tags can describe '%s'.\n" +"However, there were unannotated tags: try --tags." +msgstr "" + +#: builtin/describe.c:357 +#, c-format +msgid "" +"No tags can describe '%s'.\n" +"Try --always, or create some tags." +msgstr "" + +#: builtin/describe.c:378 +#, c-format +msgid "traversed %lu commits\n" +msgstr "" + +#: builtin/describe.c:381 +#, c-format +msgid "" +"more than %i tags found; listed %i most recent\n" +"gave up search at %s\n" +msgstr "" + +#: builtin/describe.c:436 +msgid "--long is incompatible with --abbrev=0" +msgstr "" + +#: builtin/describe.c:462 +msgid "No names found, cannot describe anything." +msgstr "" + +#: builtin/describe.c:482 +msgid "--dirty is incompatible with committishes" +msgstr "" + +#: builtin/diff.c:77 +#, c-format +msgid "'%s': not a regular file or symlink" +msgstr "" + +#: builtin/diff.c:220 +#, c-format +msgid "invalid option: %s" +msgstr "" + +#: builtin/diff.c:297 +msgid "Not a git repository" +msgstr "" + +#: builtin/diff.c:347 +#, c-format +msgid "invalid object '%s' given." +msgstr "" + +#: builtin/diff.c:352 +#, c-format +msgid "more than %d trees given: '%s'" +msgstr "" + +#: builtin/diff.c:362 +#, c-format +msgid "more than two blobs given: '%s'" +msgstr "" + +#: builtin/diff.c:370 +#, c-format +msgid "unhandled object '%s' given." +msgstr "" + +#: builtin/fetch.c:200 +msgid "Couldn't find remote ref HEAD" +msgstr "" + +#: builtin/fetch.c:252 +#, c-format +msgid "object %s not found" +msgstr "" + +#: builtin/fetch.c:258 +msgid "[up to date]" +msgstr "" + +#: builtin/fetch.c:272 +#, c-format +msgid "! %-*s %-*s -> %s (can't fetch in current branch)" +msgstr "" + +#: builtin/fetch.c:273 builtin/fetch.c:351 +msgid "[rejected]" +msgstr "" + +#: builtin/fetch.c:284 +msgid "[tag update]" +msgstr "" + +#: builtin/fetch.c:286 builtin/fetch.c:313 builtin/fetch.c:331 +msgid " (unable to update local ref)" +msgstr "" + +#: builtin/fetch.c:298 +msgid "[new tag]" +msgstr "" + +#: builtin/fetch.c:302 +msgid "[new branch]" +msgstr "" + +#: builtin/fetch.c:347 +msgid "unable to update local ref" +msgstr "" + +#: builtin/fetch.c:347 +msgid "forced update" +msgstr "" + +#: builtin/fetch.c:353 +msgid "(non-fast-forward)" +msgstr "" + +#: builtin/fetch.c:384 builtin/fetch.c:676 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "" + +#: builtin/fetch.c:393 +#, c-format +msgid "%s did not send all necessary objects\n" +msgstr "" + +#: builtin/fetch.c:479 +#, c-format +msgid "From %.*s\n" +msgstr "" + +#: builtin/fetch.c:490 +#, c-format +msgid "" +"some local refs could not be updated; try running\n" +" 'git remote prune %s' to remove any old, conflicting branches" +msgstr "" + +#: builtin/fetch.c:540 +#, c-format +msgid " (%s will become dangling)\n" +msgstr "" + +#: builtin/fetch.c:541 +#, c-format +msgid " (%s has become dangling)\n" +msgstr "" + +#: builtin/fetch.c:548 +msgid "[deleted]" +msgstr "" + +#: builtin/fetch.c:549 +msgid "(none)" +msgstr "" + +#: builtin/fetch.c:666 +#, c-format +msgid "Refusing to fetch into current branch %s of non-bare repository" +msgstr "" + +#: builtin/fetch.c:700 +#, c-format +msgid "Don't know how to fetch from %s" +msgstr "" + +#: builtin/fetch.c:777 +#, c-format +msgid "Option \"%s\" value \"%s\" is not valid for %s" +msgstr "" + +#: builtin/fetch.c:780 +#, c-format +msgid "Option \"%s\" is ignored for %s\n" +msgstr "" + +#: builtin/fetch.c:879 +#, c-format +msgid "Fetching %s\n" +msgstr "" + +#: builtin/fetch.c:881 +#, c-format +msgid "Could not fetch %s" +msgstr "" + +#: builtin/fetch.c:898 +msgid "" +"No remote repository specified. Please, specify either a URL or a\n" +"remote name from which new revisions should be fetched." +msgstr "" + +#: builtin/fetch.c:918 +msgid "You need to specify a tag name." +msgstr "" + +#: builtin/fetch.c:970 +msgid "fetch --all does not take a repository argument" +msgstr "" + +#: builtin/fetch.c:972 +msgid "fetch --all does not make sense with refspecs" +msgstr "" + +#: builtin/fetch.c:983 +#, c-format +msgid "No such remote or remote group: %s" +msgstr "" + +#: builtin/fetch.c:991 +msgid "Fetching a group and specifying refspecs does not make sense" +msgstr "" + +#: builtin/gc.c:63 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "" + +#: builtin/gc.c:78 +msgid "Too many options specified" +msgstr "" + +#: builtin/gc.c:103 +#, c-format +msgid "insanely long object directory %.*s" +msgstr "" + +#: builtin/gc.c:223 +#, c-format +msgid "Auto packing the repository for optimum performance.\n" +msgstr "" + +#: builtin/gc.c:226 +#, c-format +msgid "" +"Auto packing the repository for optimum performance. You may also\n" +"run \"git gc\" manually. See \"git help gc\" for more information.\n" +msgstr "" + +#: builtin/gc.c:256 +msgid "" +"There are too many unreachable loose objects; run 'git prune' to remove them." +msgstr "" + +#: builtin/grep.c:216 +#, c-format +msgid "grep: failed to create thread: %s" +msgstr "" + +#: builtin/grep.c:402 +#, c-format +msgid "Failed to chdir: %s" +msgstr "" + +#: builtin/grep.c:478 builtin/grep.c:512 +#, c-format +msgid "unable to read tree (%s)" +msgstr "" + +#: builtin/grep.c:526 +#, c-format +msgid "unable to grep from object of type %s" +msgstr "" + +#: builtin/grep.c:584 +#, c-format +msgid "switch `%c' expects a numerical value" +msgstr "" + +#: builtin/grep.c:601 +#, c-format +msgid "cannot open '%s'" +msgstr "" + +#: builtin/grep.c:888 +msgid "no pattern given." +msgstr "" + +#: builtin/grep.c:902 +#, c-format +msgid "bad object %s" +msgstr "" + +#: builtin/grep.c:943 +msgid "--open-files-in-pager only works on the worktree" +msgstr "" + +#: builtin/grep.c:966 +msgid "--cached or --untracked cannot be used with --no-index." +msgstr "" + +#: builtin/grep.c:971 +msgid "--no-index or --untracked cannot be used with revs." +msgstr "" + +#: builtin/grep.c:974 +msgid "--[no-]exclude-standard cannot be used for tracked contents." +msgstr "" + +#: builtin/grep.c:982 +msgid "both --cached and trees are given." +msgstr "" + +#: builtin/init-db.c:35 +#, c-format +msgid "Could not make %s writable by group" +msgstr "" + +#: builtin/init-db.c:62 +#, c-format +msgid "insanely long template name %s" +msgstr "" + +#: builtin/init-db.c:67 +#, c-format +msgid "cannot stat '%s'" +msgstr "" + +#: builtin/init-db.c:73 +#, c-format +msgid "cannot stat template '%s'" +msgstr "" + +#: builtin/init-db.c:80 +#, c-format +msgid "cannot opendir '%s'" +msgstr "" + +#: builtin/init-db.c:97 +#, c-format +msgid "cannot readlink '%s'" +msgstr "" + +#: builtin/init-db.c:99 +#, c-format +msgid "insanely long symlink %s" +msgstr "" + +#: builtin/init-db.c:102 +#, c-format +msgid "cannot symlink '%s' '%s'" +msgstr "" + +#: builtin/init-db.c:106 +#, c-format +msgid "cannot copy '%s' to '%s'" +msgstr "" + +#: builtin/init-db.c:110 +#, c-format +msgid "ignoring template %s" +msgstr "" + +#: builtin/init-db.c:133 +#, c-format +msgid "insanely long template path %s" +msgstr "" + +#: builtin/init-db.c:141 +#, c-format +msgid "templates not found %s" +msgstr "" + +#: builtin/init-db.c:154 +#, c-format +msgid "not copying templates of a wrong format version %d from '%s'" +msgstr "" + +#: builtin/init-db.c:192 +#, c-format +msgid "insane git directory %s" +msgstr "" + +#: builtin/init-db.c:322 builtin/init-db.c:325 +#, c-format +msgid "%s already exists" +msgstr "" + +#: builtin/init-db.c:354 +#, c-format +msgid "unable to handle file type %d" +msgstr "" + +#: builtin/init-db.c:357 +#, c-format +msgid "unable to move %s to %s" +msgstr "" + +#: builtin/init-db.c:362 +#, c-format +msgid "Could not create git link %s" +msgstr "" + +#. +#. * TRANSLATORS: The first '%s' is either "Reinitialized +#. * existing" or "Initialized empty", the second " shared" or +#. * "", and the last '%s%s' is the verbatim directory name. +#. +#: builtin/init-db.c:419 +#, c-format +msgid "%s%s Git repository in %s%s\n" +msgstr "" + +#: builtin/init-db.c:420 +msgid "Reinitialized existing" +msgstr "" + +#: builtin/init-db.c:420 +msgid "Initialized empty" +msgstr "" + +#: builtin/init-db.c:421 +msgid " shared" +msgstr "" + +#: builtin/init-db.c:440 +msgid "cannot tell cwd" +msgstr "" + +#: builtin/init-db.c:521 builtin/init-db.c:528 +#, c-format +msgid "cannot mkdir %s" +msgstr "" + +#: builtin/init-db.c:532 +#, c-format +msgid "cannot chdir to %s" +msgstr "" + +#: builtin/init-db.c:554 +#, c-format +msgid "" +"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-" +"dir=<directory>)" +msgstr "" + +#: builtin/init-db.c:578 +msgid "Cannot access current working directory" +msgstr "" + +#: builtin/init-db.c:585 +#, c-format +msgid "Cannot access work tree '%s'" +msgstr "" + +#: builtin/log.c:187 +#, c-format +msgid "Final output: %d %s\n" +msgstr "" + +#: builtin/log.c:395 builtin/log.c:483 +#, c-format +msgid "Could not read object %s" +msgstr "" + +#: builtin/log.c:507 +#, c-format +msgid "Unknown type: %d" +msgstr "" + +#: builtin/log.c:596 +msgid "format.headers without value" +msgstr "" + +#: builtin/log.c:669 +msgid "name of output directory is too long" +msgstr "" + +#: builtin/log.c:680 +#, c-format +msgid "Cannot open patch file %s" +msgstr "" + +#: builtin/log.c:694 +msgid "Need exactly one range." +msgstr "" + +#: builtin/log.c:702 +msgid "Not a range." +msgstr "" + +#: builtin/log.c:739 +msgid "Could not extract email from committer identity." +msgstr "" + +#: builtin/log.c:785 +msgid "Cover letter needs email format" +msgstr "" + +#: builtin/log.c:879 +#, c-format +msgid "insane in-reply-to: %s" +msgstr "" + +#: builtin/log.c:952 +msgid "Two output directories?" +msgstr "" + +#: builtin/log.c:1173 +#, c-format +msgid "bogus committer info %s" +msgstr "" + +#: builtin/log.c:1218 +msgid "-n and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1220 +msgid "--subject-prefix and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1225 builtin/shortlog.c:284 +#, c-format +msgid "unrecognized argument: %s" +msgstr "" + +#: builtin/log.c:1228 +msgid "--name-only does not make sense" +msgstr "" + +#: builtin/log.c:1230 +msgid "--name-status does not make sense" +msgstr "" + +#: builtin/log.c:1232 +msgid "--check does not make sense" +msgstr "" + +#: builtin/log.c:1255 +msgid "standard output, or directory, which one?" +msgstr "" + +#: builtin/log.c:1257 +#, c-format +msgid "Could not create directory '%s'" +msgstr "" + +#: builtin/log.c:1410 +msgid "Failed to create output files" +msgstr "" + +#: builtin/log.c:1514 +#, c-format +msgid "" +"Could not find a tracked remote branch, please specify <upstream> manually.\n" +msgstr "" + +#: builtin/log.c:1530 builtin/log.c:1532 builtin/log.c:1544 +#, c-format +msgid "Unknown commit %s" +msgstr "" + +#: builtin/merge.c:91 +msgid "switch `m' requires a value" +msgstr "" + +#: builtin/merge.c:128 +#, c-format +msgid "Could not find merge strategy '%s'.\n" +msgstr "" + +#: builtin/merge.c:129 +#, c-format +msgid "Available strategies are:" +msgstr "" + +#: builtin/merge.c:134 +#, c-format +msgid "Available custom strategies are:" +msgstr "" + +#: builtin/merge.c:241 +msgid "could not run stash." +msgstr "" + +#: builtin/merge.c:246 +msgid "stash failed" +msgstr "" + +#: builtin/merge.c:251 +#, c-format +msgid "not a valid object: %s" +msgstr "" + +#: builtin/merge.c:270 builtin/merge.c:287 +msgid "read-tree failed" +msgstr "" + +#: builtin/merge.c:317 +msgid " (nothing to squash)" +msgstr "" + +#: builtin/merge.c:330 +#, c-format +msgid "Squash commit -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:362 +msgid "Writing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:364 +msgid "Finishing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:386 +#, c-format +msgid "No merge message -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:437 +#, c-format +msgid "'%s' does not point to a commit" +msgstr "" + +#: builtin/merge.c:536 +#, c-format +msgid "Bad branch.%s.mergeoptions string: %s" +msgstr "" + +#: builtin/merge.c:629 +msgid "git write-tree failed to write a tree" +msgstr "" + +#: builtin/merge.c:679 +msgid "failed to read the cache" +msgstr "" + +#: builtin/merge.c:696 +msgid "Unable to write index." +msgstr "" + +#: builtin/merge.c:709 +msgid "Not handling anything other than two heads merge." +msgstr "" + +#: builtin/merge.c:723 +#, c-format +msgid "Unknown option for merge-recursive: -X%s" +msgstr "" + +#: builtin/merge.c:737 +#, c-format +msgid "unable to write %s" +msgstr "" + +#: builtin/merge.c:876 +#, c-format +msgid "Could not read from '%s'" +msgstr "" + +#: builtin/merge.c:885 +#, c-format +msgid "Not committing merge; use 'git commit' to complete the merge.\n" +msgstr "" + +#: builtin/merge.c:891 +msgid "" +"Please enter a commit message to explain why this merge is necessary,\n" +"especially if it merges an updated upstream into a topic branch.\n" +"\n" +"Lines starting with '#' will be ignored, and an empty message aborts\n" +"the commit.\n" +msgstr "" + +#: builtin/merge.c:915 +msgid "Empty commit message." +msgstr "" + +#: builtin/merge.c:927 +#, c-format +msgid "Wonderful.\n" +msgstr "" + +#: builtin/merge.c:1000 +#, c-format +msgid "Automatic merge failed; fix conflicts and then commit the result.\n" +msgstr "" + +#: builtin/merge.c:1016 +#, c-format +msgid "'%s' is not a commit" +msgstr "" + +#: builtin/merge.c:1057 +msgid "No current branch." +msgstr "" + +#: builtin/merge.c:1059 +msgid "No remote for the current branch." +msgstr "" + +#: builtin/merge.c:1061 +msgid "No default upstream defined for the current branch." +msgstr "" + +#: builtin/merge.c:1066 +#, c-format +msgid "No remote tracking branch for %s from %s" +msgstr "" + +#: builtin/merge.c:1188 +msgid "There is no merge to abort (MERGE_HEAD missing)." +msgstr "" + +#: builtin/merge.c:1204 git-pull.sh:31 +msgid "" +"You have not concluded your merge (MERGE_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1207 git-pull.sh:34 +msgid "You have not concluded your merge (MERGE_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1211 +msgid "" +"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1214 +msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1223 +msgid "You cannot combine --squash with --no-ff." +msgstr "" + +#: builtin/merge.c:1228 +msgid "You cannot combine --no-ff with --ff-only." +msgstr "" + +#: builtin/merge.c:1235 +msgid "No commit specified and merge.defaultToUpstream not set." +msgstr "" + +#: builtin/merge.c:1266 +msgid "Can merge only exactly one commit into empty head" +msgstr "" + +#: builtin/merge.c:1269 +msgid "Squash commit into empty head not supported yet" +msgstr "" + +#: builtin/merge.c:1271 +msgid "Non-fast-forward commit does not make sense into an empty head" +msgstr "" + +#: builtin/merge.c:1275 builtin/merge.c:1319 +#, c-format +msgid "%s - not something we can merge" +msgstr "" + +#: builtin/merge.c:1385 +#, c-format +msgid "Updating %s..%s\n" +msgstr "" + +#: builtin/merge.c:1423 +#, c-format +msgid "Trying really trivial in-index merge...\n" +msgstr "" + +#: builtin/merge.c:1430 +#, c-format +msgid "Nope.\n" +msgstr "" + +#: builtin/merge.c:1462 +msgid "Not possible to fast-forward, aborting." +msgstr "" + +#: builtin/merge.c:1485 builtin/merge.c:1562 +#, c-format +msgid "Rewinding the tree to pristine...\n" +msgstr "" + +#: builtin/merge.c:1489 +#, c-format +msgid "Trying merge strategy %s...\n" +msgstr "" + +#: builtin/merge.c:1553 +#, c-format +msgid "No merge strategy handled the merge.\n" +msgstr "" + +#: builtin/merge.c:1555 +#, c-format +msgid "Merge with strategy %s failed.\n" +msgstr "" + +#: builtin/merge.c:1564 +#, c-format +msgid "Using the %s to prepare resolving by hand.\n" +msgstr "" + +#: builtin/merge.c:1575 +#, c-format +msgid "Automatic merge went well; stopped before committing as requested\n" +msgstr "" + +#: builtin/mv.c:108 +#, c-format +msgid "Checking rename of '%s' to '%s'\n" +msgstr "" + +#: builtin/mv.c:112 +msgid "bad source" +msgstr "" + +#: builtin/mv.c:115 +msgid "can not move directory into itself" +msgstr "" + +#: builtin/mv.c:118 +msgid "cannot move directory over file" +msgstr "" + +#: builtin/mv.c:128 +#, c-format +msgid "Huh? %.*s is in index?" +msgstr "" + +#: builtin/mv.c:140 +msgid "source directory is empty" +msgstr "" + +#: builtin/mv.c:171 +msgid "not under version control" +msgstr "" + +#: builtin/mv.c:173 +msgid "destination exists" +msgstr "" + +#: builtin/mv.c:181 +#, c-format +msgid "overwriting '%s'" +msgstr "" + +#: builtin/mv.c:184 +msgid "Cannot overwrite" +msgstr "" + +#: builtin/mv.c:187 +msgid "multiple sources for the same target" +msgstr "" + +#: builtin/mv.c:202 +#, c-format +msgid "%s, source=%s, destination=%s" +msgstr "" + +#: builtin/mv.c:212 +#, c-format +msgid "Renaming %s to %s\n" +msgstr "" + +#: builtin/mv.c:215 +#, c-format +msgid "renaming '%s' failed" +msgstr "" + +#: builtin/notes.c:139 +#, c-format +msgid "unable to start 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:145 +msgid "can't fdopen 'show' output fd" +msgstr "" + +#: builtin/notes.c:155 +#, c-format +msgid "failed to close pipe to 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:158 +#, c-format +msgid "failed to finish 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:175 builtin/tag.c:343 +#, c-format +msgid "could not create file '%s'" +msgstr "" + +#: builtin/notes.c:189 +msgid "Please supply the note contents using either -m or -F option" +msgstr "" + +#: builtin/notes.c:210 builtin/notes.c:973 +#, c-format +msgid "Removing note for object %s\n" +msgstr "" + +#: builtin/notes.c:215 +msgid "unable to write note object" +msgstr "" + +#: builtin/notes.c:217 +#, c-format +msgid "The note contents has been left in %s" +msgstr "" + +#: builtin/notes.c:251 builtin/tag.c:521 +#, c-format +msgid "cannot read '%s'" +msgstr "" + +#: builtin/notes.c:253 builtin/tag.c:524 +#, c-format +msgid "could not open or read '%s'" +msgstr "" + +#: builtin/notes.c:272 builtin/notes.c:445 builtin/notes.c:447 +#: builtin/notes.c:507 builtin/notes.c:561 builtin/notes.c:644 +#: builtin/notes.c:649 builtin/notes.c:724 builtin/notes.c:766 +#: builtin/notes.c:968 builtin/reset.c:293 builtin/tag.c:537 +#, c-format +msgid "Failed to resolve '%s' as a valid ref." +msgstr "" + +#: builtin/notes.c:275 +#, c-format +msgid "Failed to read object '%s'." +msgstr "" + +#: builtin/notes.c:299 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" + +#: builtin/notes.c:340 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "" + +#: builtin/notes.c:350 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: builtin/notes.c:377 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "" + +#: builtin/notes.c:441 +#, c-format +msgid "Malformed input line: '%s'." +msgstr "" + +#: builtin/notes.c:456 +#, c-format +msgid "Failed to copy notes from '%s' to '%s'" +msgstr "" + +#: builtin/notes.c:500 builtin/notes.c:554 builtin/notes.c:627 +#: builtin/notes.c:639 builtin/notes.c:712 builtin/notes.c:759 +#: builtin/notes.c:1033 +msgid "too many parameters" +msgstr "" + +#: builtin/notes.c:513 builtin/notes.c:772 +#, c-format +msgid "No note found for object %s." +msgstr "" + +#: builtin/notes.c:580 +#, c-format +msgid "" +"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:585 builtin/notes.c:662 +#, c-format +msgid "Overwriting existing notes for object %s\n" +msgstr "" + +#: builtin/notes.c:635 +msgid "too few parameters" +msgstr "" + +#: builtin/notes.c:656 +#, c-format +msgid "" +"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:668 +#, c-format +msgid "Missing notes on source object %s. Cannot copy." +msgstr "" + +#: builtin/notes.c:717 +#, c-format +msgid "" +"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" +"Please use 'git notes add -f -m/-F/-c/-C' instead.\n" +msgstr "" + +#: builtin/notes.c:971 +#, c-format +msgid "Object %s has no note\n" +msgstr "" + +#: builtin/notes.c:1103 +#, c-format +msgid "Unknown subcommand: %s" +msgstr "" + +#: builtin/pack-objects.c:2310 +#, c-format +msgid "unsupported index version %s" +msgstr "" + +#: builtin/pack-objects.c:2314 +#, c-format +msgid "bad index version '%s'" +msgstr "" + +#: builtin/pack-objects.c:2322 +#, c-format +msgid "option %s does not accept negative form" +msgstr "" + +#: builtin/pack-objects.c:2326 +#, c-format +msgid "unable to parse value '%s' for option %s" +msgstr "" + +#: builtin/push.c:44 +msgid "tag shorthand without <tag>" +msgstr "" + +#: builtin/push.c:63 +msgid "--delete only accepts plain target ref names" +msgstr "" + +#: builtin/push.c:73 +#, c-format +msgid "" +"You are not currently on a branch.\n" +"To push the history leading to the current (detached HEAD)\n" +"state now, use\n" +"\n" +" git push %s HEAD:<name-of-remote-branch>\n" +msgstr "" + +#: builtin/push.c:80 +#, c-format +msgid "" +"The current branch %s has no upstream branch.\n" +"To push the current branch and set the remote as upstream, use\n" +"\n" +" git push --set-upstream %s %s\n" +msgstr "" + +#: builtin/push.c:88 +#, c-format +msgid "The current branch %s has multiple upstream branches, refusing to push." +msgstr "" + +#: builtin/push.c:111 +msgid "" +"You didn't specify any refspecs to push, and push.default is \"nothing\"." +msgstr "" + +#: builtin/push.c:131 +#, c-format +msgid "Pushing to %s\n" +msgstr "" + +#: builtin/push.c:135 +#, c-format +msgid "failed to push some refs to '%s'" +msgstr "" + +#: builtin/push.c:143 +#, c-format +msgid "" +"To prevent you from losing history, non-fast-forward updates were rejected\n" +"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n" +"'Note about fast-forwards' section of 'git push --help' for details.\n" +msgstr "" + +#: builtin/push.c:160 +#, c-format +msgid "bad repository '%s'" +msgstr "" + +#: builtin/push.c:161 +msgid "" +"No configured push destination.\n" +"Either specify the URL from the command-line or configure a remote " +"repository using\n" +"\n" +" git remote add <name> <url>\n" +"\n" +"and then push using the remote name\n" +"\n" +" git push <name>\n" +msgstr "" + +#: builtin/push.c:176 +msgid "--all and --tags are incompatible" +msgstr "" + +#: builtin/push.c:177 +msgid "--all can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:182 +msgid "--mirror and --tags are incompatible" +msgstr "" + +#: builtin/push.c:183 +msgid "--mirror can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:188 +msgid "--all and --mirror are incompatible" +msgstr "" + +#: builtin/push.c:274 +msgid "--delete is incompatible with --all, --mirror and --tags" +msgstr "" + +#: builtin/push.c:276 +msgid "--delete doesn't make sense without any refs" +msgstr "" + +#: builtin/reset.c:33 +msgid "mixed" +msgstr "" + +#: builtin/reset.c:33 +msgid "soft" +msgstr "" + +#: builtin/reset.c:33 +msgid "hard" +msgstr "" + +#: builtin/reset.c:33 +msgid "keep" +msgstr "" + +#: builtin/reset.c:77 +msgid "You do not have a valid HEAD." +msgstr "" + +#: builtin/reset.c:79 +msgid "Failed to find tree of HEAD." +msgstr "" + +#: builtin/reset.c:85 +#, c-format +msgid "Failed to find tree of %s." +msgstr "" + +#: builtin/reset.c:96 +msgid "Could not write new index file." +msgstr "" + +#: builtin/reset.c:106 +#, c-format +msgid "HEAD is now at %s" +msgstr "" + +#: builtin/reset.c:130 +msgid "Could not read index" +msgstr "" + +#: builtin/reset.c:133 +msgid "Unstaged changes after reset:" +msgstr "" + +#: builtin/reset.c:223 +#, c-format +msgid "Cannot do a %s reset in the middle of a merge." +msgstr "" + +#: builtin/reset.c:297 +#, c-format +msgid "Could not parse object '%s'." +msgstr "" + +#: builtin/reset.c:302 +msgid "--patch is incompatible with --{hard,mixed,soft}" +msgstr "" + +#: builtin/reset.c:311 +msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." +msgstr "" + +#: builtin/reset.c:313 +#, c-format +msgid "Cannot do %s reset with paths." +msgstr "" + +#: builtin/reset.c:325 +#, c-format +msgid "%s reset is not allowed in a bare repository" +msgstr "" + +#: builtin/reset.c:341 +#, c-format +msgid "Could not reset index file to revision '%s'." +msgstr "" + +#: builtin/revert.c:70 builtin/revert.c:91 +#, c-format +msgid "%s: %s cannot be used with %s" +msgstr "" + +#: builtin/revert.c:126 +msgid "program error" +msgstr "" + +#: builtin/revert.c:209 +msgid "revert failed" +msgstr "" + +#: builtin/revert.c:224 +msgid "cherry-pick failed" +msgstr "" + +#: builtin/rm.c:109 +#, c-format +msgid "" +"'%s' has staged content different from both the file and the HEAD\n" +"(use -f to force removal)" +msgstr "" + +#: builtin/rm.c:115 +#, c-format +msgid "" +"'%s' has changes staged in the index\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" + +#: builtin/rm.c:119 +#, c-format +msgid "" +"'%s' has local modifications\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" + +#: builtin/rm.c:194 +#, c-format +msgid "not removing '%s' recursively without -r" +msgstr "" + +#: builtin/rm.c:230 +#, c-format +msgid "git rm: unable to remove %s" +msgstr "" + +#: builtin/shortlog.c:157 +#, c-format +msgid "Missing author: %s" +msgstr "" + +#: builtin/tag.c:58 +#, c-format +msgid "malformed object at '%s'" +msgstr "" + +#: builtin/tag.c:205 +#, c-format +msgid "tag name too long: %.*s..." +msgstr "" + +#: builtin/tag.c:210 +#, c-format +msgid "tag '%s' not found." +msgstr "" + +#: builtin/tag.c:225 +#, c-format +msgid "Deleted tag '%s' (was %s)\n" +msgstr "" + +#: builtin/tag.c:237 +#, c-format +msgid "could not verify the tag '%s'" +msgstr "" + +#: builtin/tag.c:247 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be ignored.\n" +"#\n" +msgstr "" + +#: builtin/tag.c:254 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be kept; you may remove them yourself if you " +"want to.\n" +"#\n" +msgstr "" + +#: builtin/tag.c:294 +msgid "unable to sign the tag" +msgstr "" + +#: builtin/tag.c:296 +msgid "unable to write tag file" +msgstr "" + +#: builtin/tag.c:321 +msgid "bad object type." +msgstr "" + +#: builtin/tag.c:334 +msgid "tag header too big." +msgstr "" + +#: builtin/tag.c:366 +msgid "no tag message?" +msgstr "" + +#: builtin/tag.c:372 +#, c-format +msgid "The tag message has been left in %s\n" +msgstr "" + +#: builtin/tag.c:421 +msgid "switch 'points-at' requires an object" +msgstr "" + +#: builtin/tag.c:423 +#, c-format +msgid "malformed object name '%s'" +msgstr "" + +#: builtin/tag.c:502 +msgid "-n option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:504 +msgid "--contains option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:506 +msgid "--points-at option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:514 +msgid "only one -F or -m option is allowed." +msgstr "" + +#: builtin/tag.c:534 +msgid "too many params" +msgstr "" + +#: builtin/tag.c:540 +#, c-format +msgid "'%s' is not a valid tag name." +msgstr "" + +#: builtin/tag.c:545 +#, c-format +msgid "tag '%s' already exists" +msgstr "" + +#: builtin/tag.c:563 +#, c-format +msgid "%s: cannot lock the ref" +msgstr "" + +#: builtin/tag.c:565 +#, c-format +msgid "%s: cannot update the ref" +msgstr "" + +#: builtin/tag.c:567 +#, c-format +msgid "Updated tag '%s' (was %s)\n" +msgstr "" + +#: git-am.sh:49 +msgid "You need to set your committer info first" +msgstr "" + +#: git-am.sh:136 +msgid "Repository lacks necessary blobs to fall back on 3-way merge." +msgstr "" + +#: git-am.sh:147 +msgid "" +"Did you hand edit your patch?\n" +"It does not apply to blobs recorded in its index." +msgstr "" + +#: git-am.sh:156 +msgid "Falling back to patching base and 3-way merge..." +msgstr "" + +#: git-am.sh:268 +msgid "Only one StGIT patch series can be applied at once" +msgstr "" + +#: git-am.sh:355 +#, sh-format +msgid "Patch format $patch_format is not supported." +msgstr "" + +#: git-am.sh:357 +msgid "Patch format detection failed." +msgstr "" + +#: git-am.sh:411 +msgid "-d option is no longer supported. Do not use." +msgstr "" + +#: git-am.sh:474 +#, sh-format +msgid "previous rebase directory $dotest still exists but mbox given." +msgstr "" + +#: git-am.sh:479 +msgid "Please make up your mind. --skip or --abort?" +msgstr "" + +#: git-am.sh:506 +msgid "Resolve operation not in progress, we are not resuming." +msgstr "" + +#: git-am.sh:572 +#, sh-format +msgid "Dirty index: cannot apply patches (dirty: $files)" +msgstr "" + +#: git-am.sh:748 +msgid "cannot be interactive without stdin connected to a terminal." +msgstr "" + +#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] +#. in your translation. The program will only accept English +#. input at this point. +#: git-am.sh:759 +msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " +msgstr "" + +#: git-am.sh:795 +#, sh-format +msgid "Applying: $FIRSTLINE" +msgstr "" + +#: git-am.sh:840 +msgid "No changes -- Patch already applied." +msgstr "" + +#: git-am.sh:866 +msgid "applying to an empty history" +msgstr "" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:54 +msgid "Do you want me to do it for you [Y/n]? " +msgstr "" + +#: git-bisect.sh:95 +#, sh-format +msgid "unrecognised option: '$arg'" +msgstr "" + +#: git-bisect.sh:99 +#, sh-format +msgid "'$arg' does not appear to be a valid revision" +msgstr "" + +#: git-bisect.sh:117 +msgid "Bad HEAD - I need a HEAD" +msgstr "" + +#: git-bisect.sh:130 +#, sh-format +msgid "" +"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." +msgstr "" + +#: git-bisect.sh:140 +msgid "won't bisect on seeked tree" +msgstr "" + +#: git-bisect.sh:144 +msgid "Bad HEAD - strange symbolic ref" +msgstr "" + +#: git-bisect.sh:189 +#, sh-format +msgid "Bad bisect_write argument: $state" +msgstr "" + +#: git-bisect.sh:218 +#, sh-format +msgid "Bad rev input: $arg" +msgstr "" + +#: git-bisect.sh:232 +msgid "Please call 'bisect_state' with at least one argument." +msgstr "" + +#: git-bisect.sh:244 +#, sh-format +msgid "Bad rev input: $rev" +msgstr "" + +#: git-bisect.sh:250 +msgid "'git bisect bad' can take only one argument." +msgstr "" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:279 +msgid "Are you sure [Y/n]? " +msgstr "" + +#: git-bisect.sh:354 +#, sh-format +msgid "'$invalid' is not a valid commit" +msgstr "" + +#: git-bisect.sh:363 +#, sh-format +msgid "" +"Could not check out original HEAD '$branch'.\n" +"Try 'git bisect reset <commit>'." +msgstr "" + +#: git-bisect.sh:390 +msgid "No logfile given" +msgstr "" + +#: git-bisect.sh:391 +#, sh-format +msgid "cannot read $file for replaying" +msgstr "" + +#: git-bisect.sh:408 +msgid "?? what are you talking about?" +msgstr "" + +#: git-bisect.sh:474 +msgid "We are not bisecting." +msgstr "" + +#: git-pull.sh:21 +msgid "" +"Pull is not possible because you have unmerged files.\n" +"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n" +"as appropriate to mark resolution, or use 'git commit -a'." +msgstr "" + +#: git-pull.sh:25 +msgid "Pull is not possible because you have unmerged files." +msgstr "" + +#: git-pull.sh:197 +msgid "updating an unborn branch with changes added to the index" +msgstr "" + +#: git-pull.sh:253 +msgid "Cannot merge multiple branches into empty head" +msgstr "" + +#: git-pull.sh:257 +msgid "Cannot rebase onto multiple branches" +msgstr "" + +#: git-stash.sh:51 +msgid "git stash clear with parameters is unimplemented" +msgstr "" + +#: git-stash.sh:74 +msgid "You do not have the initial commit yet" +msgstr "" + +#: git-stash.sh:89 +msgid "Cannot save the current index state" +msgstr "" + +#: git-stash.sh:123 git-stash.sh:136 +msgid "Cannot save the current worktree state" +msgstr "" + +#: git-stash.sh:140 +msgid "No changes selected" +msgstr "" + +#: git-stash.sh:143 +msgid "Cannot remove temporary index (can't happen)" +msgstr "" + +#: git-stash.sh:156 +msgid "Cannot record working tree state" +msgstr "" + +#: git-stash.sh:223 +msgid "No local changes to save" +msgstr "" + +#: git-stash.sh:227 +msgid "Cannot initialize stash" +msgstr "" + +#: git-stash.sh:235 +msgid "Cannot save the current status" +msgstr "" + +#: git-stash.sh:253 +msgid "Cannot remove worktree changes" +msgstr "" + +#: git-stash.sh:352 +msgid "No stash found." +msgstr "" + +#: git-stash.sh:359 +#, sh-format +msgid "Too many revisions specified: $REV" +msgstr "" + +#: git-stash.sh:365 +#, sh-format +msgid "$reference is not valid reference" +msgstr "" + +#: git-stash.sh:393 +#, sh-format +msgid "'$args' is not a stash-like commit" +msgstr "" + +#: git-stash.sh:404 +#, sh-format +msgid "'$args' is not a stash reference" +msgstr "" + +#: git-stash.sh:412 +msgid "unable to refresh index" +msgstr "" + +#: git-stash.sh:416 +msgid "Cannot apply a stash in the middle of a merge" +msgstr "" + +#: git-stash.sh:424 +msgid "Conflicts in index. Try without --index." +msgstr "" + +#: git-stash.sh:426 +msgid "Could not save index tree" +msgstr "" + +#: git-stash.sh:460 +msgid "Cannot unstage modified files" +msgstr "" + +#: git-stash.sh:491 +#, sh-format +msgid "Dropped ${REV} ($s)" +msgstr "" + +#: git-stash.sh:492 +#, sh-format +msgid "${REV}: Could not drop stash entry" +msgstr "" + +#: git-stash.sh:499 +msgid "No branch name specified" +msgstr "" + +#: git-stash.sh:570 +msgid "(To restore them type \"git stash apply\")" +msgstr "" + +#: git-submodule.sh:56 +#, sh-format +msgid "cannot strip one component off url '$remoteurl'" +msgstr "" + +#: git-submodule.sh:108 +#, sh-format +msgid "No submodule mapping found in .gitmodules for path '$path'" +msgstr "" + +#: git-submodule.sh:149 +#, sh-format +msgid "Clone of '$url' into submodule path '$path' failed" +msgstr "" + +#: git-submodule.sh:159 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "" + +#: git-submodule.sh:247 +#, sh-format +msgid "repo URL: '$repo' must be absolute or begin with ./|../" +msgstr "" + +#: git-submodule.sh:264 +#, sh-format +msgid "'$path' already exists in the index" +msgstr "" + +#: git-submodule.sh:281 +#, sh-format +msgid "'$path' already exists and is not a valid git repo" +msgstr "" + +#: git-submodule.sh:295 +#, sh-format +msgid "Unable to checkout submodule '$path'" +msgstr "" + +#: git-submodule.sh:300 +#, sh-format +msgid "Failed to add submodule '$path'" +msgstr "" + +#: git-submodule.sh:305 +#, sh-format +msgid "Failed to register submodule '$path'" +msgstr "" + +#: git-submodule.sh:347 +#, sh-format +msgid "Entering '$prefix$path'" +msgstr "" + +#: git-submodule.sh:359 +#, sh-format +msgid "Stopping at '$path'; script returned non-zero status." +msgstr "" + +#: git-submodule.sh:401 +#, sh-format +msgid "No url found for submodule path '$path' in .gitmodules" +msgstr "" + +#: git-submodule.sh:410 +#, sh-format +msgid "Failed to register url for submodule path '$path'" +msgstr "" + +#: git-submodule.sh:418 +#, sh-format +msgid "Failed to register update mode for submodule path '$path'" +msgstr "" + +#: git-submodule.sh:420 +#, sh-format +msgid "Submodule '$name' ($url) registered for path '$path'" +msgstr "" + +#: git-submodule.sh:519 +#, sh-format +msgid "" +"Submodule path '$path' not initialized\n" +"Maybe you want to use 'update --init'?" +msgstr "" + +#: git-submodule.sh:532 +#, sh-format +msgid "Unable to find current revision in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:551 +#, sh-format +msgid "Unable to fetch in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:565 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:566 +#, sh-format +msgid "Submodule path '$path': rebased into '$sha1'" +msgstr "" + +#: git-submodule.sh:571 +#, sh-format +msgid "Unable to merge '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:572 +#, sh-format +msgid "Submodule path '$path': merged in '$sha1'" +msgstr "" + +#: git-submodule.sh:577 +#, sh-format +msgid "Unable to checkout '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:578 +#, sh-format +msgid "Submodule path '$path': checked out '$sha1'" +msgstr "" + +#: git-submodule.sh:600 git-submodule.sh:923 +#, sh-format +msgid "Failed to recurse into submodule path '$path'" +msgstr "" + +#: git-submodule.sh:708 +msgid "--" +msgstr "" + +#: git-submodule.sh:766 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_src" +msgstr "" + +#: git-submodule.sh:769 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_dst" +msgstr "" + +#: git-submodule.sh:772 +#, sh-format +msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgstr "" + +#: git-submodule.sh:797 +msgid "blob" +msgstr "" + +#: git-submodule.sh:798 +msgid "submodule" +msgstr "" + +#: git-submodule.sh:969 +#, sh-format +msgid "Synchronizing submodule url for '$name'" +msgstr "" diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000000..066f3efd15 --- /dev/null +++ b/po/de.po @@ -0,0 +1,3771 @@ +# German translations for Git. +# Copyright (C) 2012 Ralf Thielow <ralf.thielow@googlemail.com> +# This file is distributed under the same license as the Git package. +# Ralf Thielow <ralf.thielow@googlemail.com>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: git 1.7.10\n" +"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" +"POT-Creation-Date: 2012-04-28 20:33+0800\n" +"PO-Revision-Date: 2012-03-28 18:46+0200\n" +"Last-Translator: Ralf Thielow <ralf.thielow@googlemail.com>\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: advice.c:34 +#, c-format +msgid "hint: %.*s\n" +msgstr "Hinweis: %.*s\n" + +#. +#. * Message used both when 'git commit' fails and when +#. * other commands doing a merge do. +#. +#: advice.c:64 +msgid "" +"Fix them up in the work tree,\n" +"and then use 'git add/rm <file>' as\n" +"appropriate to mark resolution and make a commit,\n" +"or use 'git commit -a'." +msgstr "" +"Korrigiere dies im Arbeitsbaum,\n" +"und benutze dann 'git add/rm <Datei>' wie\n" +"vorgesehen, um die Auflösung zu markieren und dann einzutragen,\n" +"oder benutze 'git commit -a'." + +#: commit.c:47 +#, c-format +msgid "could not parse %s" +msgstr "konnte %s nicht parsen" + +#: commit.c:49 +#, c-format +msgid "%s %s is not a commit!" +msgstr "%s %s ist keine Version!" + +#: compat/obstack.c:406 compat/obstack.c:408 +msgid "memory exhausted" +msgstr "Speicher verbraucht" + +#: connected.c:39 +msgid "Could not run 'git rev-list'" +msgstr "'git rev-list' konnte nicht ausgeführt werden" + +#: connected.c:48 +#, c-format +msgid "failed write to rev-list: %s" +msgstr "Fehler beim Schreiben nach rev-list: %s" + +#: connected.c:56 +#, c-format +msgid "failed to close rev-list's stdin: %s" +msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe: %s" + +#: diff.c:105 +#, c-format +msgid " Failed to parse dirstat cut-off percentage '%.*s'\n" +msgstr "" +" Fehler beim Parsen des abgeschnittenen \"dirstat\" Prozentsatzes '%.*s'\n" + +#: diff.c:110 +#, c-format +msgid " Unknown dirstat parameter '%.*s'\n" +msgstr " Unbekannter \"dirstat\" Parameter '%.*s'\n" + +#: diff.c:210 +#, c-format +msgid "" +"Found errors in 'diff.dirstat' config variable:\n" +"%s" +msgstr "" +"Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n" +"%s" + +#: diff.c:1400 +msgid " 0 files changed\n" +msgstr " 0 Dateien geändert\n" + +#: diff.c:1404 +#, c-format +msgid " %d file changed" +msgid_plural " %d files changed" +msgstr[0] " %d Datei geändert" +msgstr[1] " %d Dateien geändert" + +#: diff.c:1421 +#, c-format +msgid ", %d insertion(+)" +msgid_plural ", %d insertions(+)" +msgstr[0] ", %d Zeile hinzugefügt(+)" +msgstr[1] ", %d Zeilen hinzugefügt(+)" + +#: diff.c:1432 +#, c-format +msgid ", %d deletion(-)" +msgid_plural ", %d deletions(-)" +msgstr[0] ", %d Zeile entfernt(-)" +msgstr[1] ", %d Zeilen entfernt(-)" + +#: diff.c:3435 +#, c-format +msgid "" +"Failed to parse --dirstat/-X option parameter:\n" +"%s" +msgstr "" +"Fehler beim Parsen des --dirstat/-X Optionsparameters:\n" +"%s" + +#: gpg-interface.c:59 +msgid "could not run gpg." +msgstr "gpg konnte nicht ausgeführt werden" + +#: gpg-interface.c:71 +msgid "gpg did not accept the data" +msgstr "gpg hat die Daten nicht akzeptiert" + +#: gpg-interface.c:82 +msgid "gpg failed to sign the data" +msgstr "gpg beim Signieren der Daten fehlgeschlagen" + +#: grep.c:1280 +#, c-format +msgid "'%s': unable to read %s" +msgstr "'%s': konnte nicht lesen %s" + +#: grep.c:1297 +#, c-format +msgid "'%s': %s" +msgstr "'%s': %s" + +#: grep.c:1308 +#, c-format +msgid "'%s': short read %s" +msgstr "'%s': kurz gelesen %s" + +#: help.c:287 +#, c-format +msgid "" +"'%s' appears to be a git command, but we were not\n" +"able to execute it. Maybe git-%s is broken?" +msgstr "" +"'%s' scheint ein git-Kommando zu sein, konnte aber\n" +"nicht ausgeführt werden. Vielleicht ist git-%s fehlerhaft?" + +#: remote.c:1607 +#, c-format +msgid "Your branch is ahead of '%s' by %d commit.\n" +msgid_plural "Your branch is ahead of '%s' by %d commits.\n" +msgstr[0] "Dein Zweig ist vor '%s' um %d Version.\n" +msgstr[1] "Dein Zweig ist vor '%s' um %d Versionen.\n" + +#: remote.c:1613 +#, c-format +msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" +msgid_plural "" +"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" +msgstr[0] "" +"Dein Zweig ist hinter '%s' um %d Version, und kann vorgespult werden.\n" +msgstr[1] "" +"Dein Zweig ist hinter '%s' um %d Versionen, und kann vorgespult werden.\n" + +#: remote.c:1621 +#, c-format +msgid "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commit each, respectively.\n" +msgid_plural "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commits each, respectively.\n" +msgstr[0] "" +"Dein Zweig und '%s' sind divergiert,\n" +"und haben jeweils %d und %d unterschiedliche Versionen.\n" +msgstr[1] "" +"Dein Zweig und '%s' sind divergiert,\n" +"und haben jeweils %d und %d unterschiedliche Versionen.\n" + +#: sequencer.c:120 builtin/merge.c:864 builtin/merge.c:985 +#: builtin/merge.c:1095 builtin/merge.c:1105 +#, c-format +msgid "Could not open '%s' for writing" +msgstr "Konnte '%s' nicht zum Schreiben öffnen." + +#: sequencer.c:122 builtin/merge.c:334 builtin/merge.c:867 +#: builtin/merge.c:1097 builtin/merge.c:1110 +#, c-format +msgid "Could not write to '%s'" +msgstr "Konnte nicht nach '%s' schreiben." + +#: sequencer.c:143 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'" +msgstr "" +"nach Auflösung der Konflikte, markiere die korrigierten Pfade\n" +"mit 'git add <Pfade>' oder 'git rm <Pfade>'" + +#: sequencer.c:146 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'\n" +"and commit the result with 'git commit'" +msgstr "" +"nach Auflösung der Konflikte, markiere die korrigierten Pfade\n" +"mit 'git add <Pfade>' oder 'git rm <Pfade>'und trage das Ergebnis ein mit " +"'git commit'" + +#: sequencer.c:159 sequencer.c:685 sequencer.c:768 +#, c-format +msgid "Could not write to %s" +msgstr "Konnte nicht nach %s schreiben" + +#: sequencer.c:162 +#, c-format +msgid "Error wrapping up %s" +msgstr "Fehler bei Nachbereitung von %s" + +#: sequencer.c:177 +msgid "Your local changes would be overwritten by cherry-pick." +msgstr "" +"Deine lokalen Änderungen würden von \"cherry-pick\" überschrieben werden." + +#: sequencer.c:179 +msgid "Your local changes would be overwritten by revert." +msgstr "Deine lokalen Änderungen würden von \"revert\" überschrieben werden." + +#: sequencer.c:182 +msgid "Commit your changes or stash them to proceed." +msgstr "Trage deine Änderungen ein oder benutze \"stash\" um fortzufahren." + +#. TRANSLATORS: %s will be "revert" or "cherry-pick" +#: sequencer.c:232 +#, c-format +msgid "%s: Unable to write new index file" +msgstr "%s: Konnte neue Bereitstellungsdatei nicht schreiben" + +#: sequencer.c:298 +msgid "Your index file is unmerged." +msgstr "Deine Bereitstellungsdatei ist nicht zusammengeführt." + +#: sequencer.c:301 +msgid "You do not have a valid HEAD" +msgstr "Du hast keine gültige Zweigspitze (HEAD)" + +#: sequencer.c:316 +#, c-format +msgid "Commit %s is a merge but no -m option was given." +msgstr "" +"Version %s ist eine Zusammenführung, aber es wurde keine Option -m angegeben." + +#: sequencer.c:324 +#, c-format +msgid "Commit %s does not have parent %d" +msgstr "Version %s hat keinen Elternteil %d" + +#: sequencer.c:328 +#, c-format +msgid "Mainline was specified but commit %s is not a merge." +msgstr "" +"Hauptlinie wurde spezifiziert, aber Version %s ist keine Zusammenführung." + +#. TRANSLATORS: The first %s will be "revert" or +#. "cherry-pick", the second %s a SHA1 +#: sequencer.c:339 +#, c-format +msgid "%s: cannot parse parent commit %s" +msgstr "%s: kann Elternversion %s nicht parsen" + +#: sequencer.c:343 +#, c-format +msgid "Cannot get commit message for %s" +msgstr "Kann keine Versionsbeschreibung für %s bekommen" + +#: sequencer.c:427 +#, c-format +msgid "could not revert %s... %s" +msgstr "Konnte %s nicht zurücksetzen... %s" + +#: sequencer.c:428 +#, c-format +msgid "could not apply %s... %s" +msgstr "Konnte %s nicht anwenden... %s" + +#: sequencer.c:450 sequencer.c:909 builtin/log.c:288 builtin/log.c:713 +#: builtin/log.c:1329 builtin/log.c:1548 builtin/merge.c:348 +#: builtin/shortlog.c:181 +msgid "revision walk setup failed" +msgstr "Einrichtung des Revisionsgangs fehlgeschlagen" + +#: sequencer.c:453 +msgid "empty commit set passed" +msgstr "leere Menge von Versionen übergeben" + +#: sequencer.c:461 +#, c-format +msgid "git %s: failed to read the index" +msgstr "git %s: Fehler beim Lesen der Bereitstellung" + +#: sequencer.c:466 +#, c-format +msgid "git %s: failed to refresh the index" +msgstr "git %s: Fehler beim Aktualisieren der Bereitstellung" + +#: sequencer.c:551 +#, c-format +msgid "Cannot %s during a %s" +msgstr "Kann %s nicht während eines %s durchführen" + +#: sequencer.c:573 +#, c-format +msgid "Could not parse line %d." +msgstr "Konnte Zeile %d nicht parsen." + +#: sequencer.c:578 +msgid "No commits parsed." +msgstr "Keine Versionen geparst." + +#: sequencer.c:591 +#, c-format +msgid "Could not open %s" +msgstr "%s konnte nicht geöffnet werden." + +#: sequencer.c:595 +#, c-format +msgid "Could not read %s." +msgstr "%s konnte nicht gelesen werden." + +#: sequencer.c:602 +#, c-format +msgid "Unusable instruction sheet: %s" +msgstr "Unbenutzbares Instruktionsblatt: %s" + +#: sequencer.c:630 +#, c-format +msgid "Invalid key: %s" +msgstr "Ungültiger Schlüssel: %s" + +#: sequencer.c:633 +#, c-format +msgid "Invalid value for %s: %s" +msgstr "Ungültiger Wert für %s: %s" + +#: sequencer.c:645 +#, c-format +msgid "Malformed options sheet: %s" +msgstr "Fehlerhaftes Optionsblatt: %s" + +#: sequencer.c:666 +msgid "a cherry-pick or revert is already in progress" +msgstr "\"cherry-pick\" oder \"revert\" wird bereits ausgeführt" + +#: sequencer.c:667 +msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" +msgstr "versuche \"git cherry-pick (--continue | --quit | --abort)\"" + +#: sequencer.c:671 +#, c-format +msgid "Could not create sequencer directory %s" +msgstr "Konnte \"sequencer\"-Verzeichnis %s nicht erstellen" + +#: sequencer.c:687 sequencer.c:772 +#, c-format +msgid "Error wrapping up %s." +msgstr "Fehler beim Einpacken von %s." + +#: sequencer.c:706 sequencer.c:840 +msgid "no cherry-pick or revert in progress" +msgstr "kein \"cherry-pick\" oder \"revert\" in Ausführung" + +#: sequencer.c:708 +msgid "cannot resolve HEAD" +msgstr "kann Zweigspitze (HEAD) nicht auflösen" + +#: sequencer.c:710 +msgid "cannot abort from a branch yet to be born" +msgstr "kann nicht von einem Zweig abbrechen, der noch geboren wird" + +#: sequencer.c:732 +#, c-format +msgid "cannot open %s: %s" +msgstr "Kann %s nicht öffnen: %s" + +#: sequencer.c:735 +#, c-format +msgid "cannot read %s: %s" +msgstr "Kann %s nicht lesen: %s" + +#: sequencer.c:736 +msgid "unexpected end of file" +msgstr "Unerwartetes Dateiende" + +#: sequencer.c:742 +#, c-format +msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" +msgstr "gespeicherte \"pre-cherry-pick\" Datei der Zweigspitze (HEAD) '%s' " +"ist beschädigt" + +#: sequencer.c:765 +#, c-format +msgid "Could not format %s." +msgstr "Konnte %s nicht formatieren." + +#: sequencer.c:927 +msgid "Can't revert as initial commit" +msgstr "Kann nicht zu initialer Version zurücksetzen." + +#: sequencer.c:928 +msgid "Can't cherry-pick into empty head" +msgstr "Kann \"cherry-pick\" nicht in einen leeren Kopf ausführen." + +#: wt-status.c:134 +msgid "Unmerged paths:" +msgstr "Nicht zusammengeführte Pfade:" + +#: wt-status.c:140 wt-status.c:157 +#, c-format +msgid " (use \"git reset %s <file>...\" to unstage)" +msgstr "" +" (benutze \"git reset %s <Datei>...\" zum Herausnehmen aus der " +"Bereitstellung)" + +#: wt-status.c:142 wt-status.c:159 +msgid " (use \"git rm --cached <file>...\" to unstage)" +msgstr "" +" (benutze \"git rm --cached <Datei>...\" zum Herausnehmen aus der " +"Bereitstellung)" + +#: wt-status.c:143 +msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" +msgstr "" +" (benutze \"git add/rm <Datei>...\" wie vorgesehen, um die Auflösung zu " +"markieren)" + +#: wt-status.c:151 +msgid "Changes to be committed:" +msgstr "zum Eintragen bereitgestellte Änderungen:" + +#: wt-status.c:169 +msgid "Changes not staged for commit:" +msgstr "Änderungen, die nicht zum Eintragen bereitgestellt sind:" + +#: wt-status.c:173 +msgid " (use \"git add <file>...\" to update what will be committed)" +msgstr " (benutze \"git add <Datei>...\" zur Aktualisierung der Eintragung)" + +#: wt-status.c:175 +msgid " (use \"git add/rm <file>...\" to update what will be committed)" +msgstr "" +" (benutze \"git add/rm <Datei>...\" zur Aktualisierung der Eintragung)" + +#: wt-status.c:176 +msgid "" +" (use \"git checkout -- <file>...\" to discard changes in working directory)" +msgstr "" +" (benutze \"git checkout -- <Datei>...\" um die Änderungen im " +"Arbeitsverzeichnis zu verwerfen)" + +#: wt-status.c:178 +msgid " (commit or discard the untracked or modified content in submodules)" +msgstr "" +" (trage ein oder verwerfe den ungefolgten oder geänderten Inhalt in den " +"Unterprojekten)" + +#: wt-status.c:187 +#, c-format +msgid "%s files:" +msgstr "%s Dateien:" + +#: wt-status.c:190 +#, c-format +msgid " (use \"git %s <file>...\" to include in what will be committed)" +msgstr " (benutze \"git %s <Datei>...\" zum Einfügen in die Eintragung)" + +#: wt-status.c:207 +msgid "bug" +msgstr "Fehler" + +#: wt-status.c:212 +msgid "both deleted:" +msgstr "beide gelöscht:" + +#: wt-status.c:213 +msgid "added by us:" +msgstr "von uns hinzugefügt:" + +#: wt-status.c:214 +msgid "deleted by them:" +msgstr "von denen gelöscht:" + +#: wt-status.c:215 +msgid "added by them:" +msgstr "von denen hinzugefügt:" + +#: wt-status.c:216 +msgid "deleted by us:" +msgstr "von uns gelöscht:" + +#: wt-status.c:217 +msgid "both added:" +msgstr "von beiden hinzugefügt:" + +#: wt-status.c:218 +msgid "both modified:" +msgstr "von beiden geändert:" + +#: wt-status.c:248 +msgid "new commits, " +msgstr "neue Versionen, " + +#: wt-status.c:250 +msgid "modified content, " +msgstr "geänderter Inhalt, " + +#: wt-status.c:252 +msgid "untracked content, " +msgstr "unverfolgter Inhalt, " + +#: wt-status.c:266 +#, c-format +msgid "new file: %s" +msgstr "neue Datei: %s" + +#: wt-status.c:269 +#, c-format +msgid "copied: %s -> %s" +msgstr "kopiert: %s -> %s" + +#: wt-status.c:272 +#, c-format +msgid "deleted: %s" +msgstr "gelöscht: %s" + +#: wt-status.c:275 +#, c-format +msgid "modified: %s" +msgstr "geändert: %s" + +#: wt-status.c:278 +#, c-format +msgid "renamed: %s -> %s" +msgstr "umbenannt: %s -> %s" + +#: wt-status.c:281 +#, c-format +msgid "typechange: %s" +msgstr "Typänderung: %s" + +#: wt-status.c:284 +#, c-format +msgid "unknown: %s" +msgstr "unbekannt: %s" + +#: wt-status.c:287 +#, c-format +msgid "unmerged: %s" +msgstr "nicht zusammengeführt: %s" + +#: wt-status.c:290 +#, c-format +msgid "bug: unhandled diff status %c" +msgstr "Fehler: unbehandelter Differenz-Status %c" + +#: wt-status.c:713 +msgid "On branch " +msgstr "Auf Zweig " + +#: wt-status.c:720 +msgid "Not currently on any branch." +msgstr "Im Moment auf keinem Zweig." + +#: wt-status.c:731 +msgid "Initial commit" +msgstr "Initiale Version" + +#: wt-status.c:745 +msgid "Untracked" +msgstr "Unverfolgte" + +#: wt-status.c:747 +msgid "Ignored" +msgstr "Ignorierte" + +#: wt-status.c:749 +#, c-format +msgid "Untracked files not listed%s" +msgstr "Unverfolgte Dateien nicht aufgelistet%s" + +#: wt-status.c:751 +msgid " (use -u option to show untracked files)" +msgstr " (benutze die Option -u um unverfolgte Dateien anzuzeigen)" + +#: wt-status.c:757 +msgid "No changes" +msgstr "Keine Änderungen" + +#: wt-status.c:761 +#, c-format +msgid "no changes added to commit%s\n" +msgstr "keine Änderungen zum Eintragen hinzugefügt%s\n" + +#: wt-status.c:763 +msgid " (use \"git add\" and/or \"git commit -a\")" +msgstr " (benutze \"git add\" und/oder \"git commit -a\")" + +#: wt-status.c:765 +#, c-format +msgid "nothing added to commit but untracked files present%s\n" +msgstr "nichts zum Eintragen hinzugefügt, aber es gibt unverfolgte Dateien%s\n" + +#: wt-status.c:767 +msgid " (use \"git add\" to track)" +msgstr " (benutze \"git add\" zum Verfolgen)" + +#: wt-status.c:769 wt-status.c:772 wt-status.c:775 +#, c-format +msgid "nothing to commit%s\n" +msgstr "nichts zum Eintragen%s\n" + +#: wt-status.c:770 +msgid " (create/copy files and use \"git add\" to track)" +msgstr " (Erstelle/Kopiere Dateien und benutze \"git add\" zum Verfolgen)" + +#: wt-status.c:773 +msgid " (use -u to show untracked files)" +msgstr " (benutze -u um unverfolgte Dateien anzuzeigen)" + +#: wt-status.c:776 +msgid " (working directory clean)" +msgstr " (Arbeitsverzeichnis sauber)" + +#: wt-status.c:884 +msgid "HEAD (no branch)" +msgstr "HEAD (kein Zweig)" + +#: wt-status.c:890 +msgid "Initial commit on " +msgstr "Initiale Version auf " + +#: wt-status.c:905 +msgid "behind " +msgstr "hinter " + +#: wt-status.c:908 wt-status.c:911 +msgid "ahead " +msgstr "über " + +#: wt-status.c:913 +msgid ", behind " +msgstr ", hinter " + +#: builtin/add.c:62 +#, c-format +msgid "unexpected diff status %c" +msgstr "unerwarteter Differenz-Status %c" + +#: builtin/add.c:67 builtin/commit.c:298 +msgid "updating files failed" +msgstr "Aktualisierung von Dateien fehlgeschlagen" + +#: builtin/add.c:77 +#, c-format +msgid "remove '%s'\n" +msgstr "entferne '%s'\n" + +#: builtin/add.c:176 +#, c-format +msgid "Path '%s' is in submodule '%.*s'" +msgstr "Pfad '%s' befindet sich in Unterprojekt '%.*s'" + +#: builtin/add.c:192 +msgid "Unstaged changes after refreshing the index:" +msgstr "" +"Nicht bereitgestellte Änderungen nach Aktualisierung der Bereitstellung:" + +#: builtin/add.c:195 builtin/add.c:456 builtin/rm.c:186 +#, c-format +msgid "pathspec '%s' did not match any files" +msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein" + +#: builtin/add.c:209 +#, c-format +msgid "'%s' is beyond a symbolic link" +msgstr "'%s' ist über einer symbolischen Verknüpfung" + +#: builtin/add.c:276 +msgid "Could not read the index" +msgstr "Konnte die Bereitstellung nicht lesen" + +#: builtin/add.c:286 +#, c-format +msgid "Could not open '%s' for writing." +msgstr "Konnte '%s' nicht zum Schreiben öffnen." + +#: builtin/add.c:290 +msgid "Could not write patch" +msgstr "Konnte Patch nicht schreiben" + +#: builtin/add.c:295 +#, c-format +msgid "Could not stat '%s'" +msgstr "Verzeichnis '%s' konnte nicht gelesen werden" + +#: builtin/add.c:297 +msgid "Empty patch. Aborted." +msgstr "Leerer Patch. Abgebrochen." + +#: builtin/add.c:303 +#, c-format +msgid "Could not apply '%s'" +msgstr "Konnte '%s' nicht anwenden." + +#: builtin/add.c:312 +msgid "The following paths are ignored by one of your .gitignore files:\n" +msgstr "" +"Die folgenden Pfade werden durch eine deiner \".gitignore\" Dateien " +"ignoriert:\n" + +#: builtin/add.c:352 +#, c-format +msgid "Use -f if you really want to add them.\n" +msgstr "Verwende -f wenn du diese wirklich hinzufügen möchtest.\n" + +#: builtin/add.c:353 +msgid "no files added" +msgstr "keine Dateien hinzugefügt" + +#: builtin/add.c:359 +msgid "adding files failed" +msgstr "Hinzufügen von Dateien fehlgeschlagen" + +#: builtin/add.c:391 +msgid "-A and -u are mutually incompatible" +msgstr "-A und -u sind zueinander inkompatibel" + +#: builtin/add.c:393 +msgid "Option --ignore-missing can only be used together with --dry-run" +msgstr "" +"Die Option --ignore-missing kann nur zusammen mit --dry-run benutzt werden." + +#: builtin/add.c:413 +#, c-format +msgid "Nothing specified, nothing added.\n" +msgstr "Nichts spezifiziert, nichts hinzugefügt.\n" + +#: builtin/add.c:414 +#, c-format +msgid "Maybe you wanted to say 'git add .'?\n" +msgstr "Wolltest du vieleicht 'git add .' sagen?\n" + +#: builtin/add.c:420 builtin/clean.c:95 builtin/commit.c:358 builtin/mv.c:82 +#: builtin/rm.c:162 +msgid "index file corrupt" +msgstr "Bereitstellungsdatei beschädigt" + +#: builtin/add.c:476 builtin/mv.c:229 builtin/rm.c:260 +msgid "Unable to write new index file" +msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." + +#: builtin/archive.c:17 +#, c-format +msgid "could not create archive file '%s'" +msgstr "Konnte Archiv-Datei '%s' nicht erstellen." + +#: builtin/archive.c:20 +msgid "could not redirect output" +msgstr "Konnte Ausgabe nicht umleiten." + +#: builtin/archive.c:37 +msgid "git archive: Remote with no URL" +msgstr "git archive: Anderes Archiv ohne URL" + +#: builtin/archive.c:58 +msgid "git archive: expected ACK/NAK, got EOF" +msgstr "git archive: habe ACK/NAK erwartet, aber EOF bekommen" + +#: builtin/archive.c:63 +#, c-format +msgid "git archive: NACK %s" +msgstr "git archive: NACK %s" + +#: builtin/archive.c:65 +#, c-format +msgid "remote error: %s" +msgstr "Versandfehler: %s" + +#: builtin/archive.c:66 +msgid "git archive: protocol error" +msgstr "git archive: Protokollfehler" + +#: builtin/archive.c:71 +msgid "git archive: expected a flush" +msgstr "git archive: erwartete eine Leerung (flush)" + +#: builtin/branch.c:137 +#, c-format +msgid "" +"deleting branch '%s' that has been merged to\n" +" '%s', but not yet merged to HEAD." +msgstr "" +"entferne Zweig '%s' der zusammengeführt wurde mit\n" +" '%s', aber noch nicht mit der Zweigspitze (HEAD) zusammengeführt " +"wurde." + +#: builtin/branch.c:141 +#, c-format +msgid "" +"not deleting branch '%s' that is not yet merged to\n" +" '%s', even though it is merged to HEAD." +msgstr "" +"entferne nicht Zweig '%s' der noch nicht zusammengeführt wurde mit\n" +" '%s', obwohl er mit der Zweigspitze (HEAD) zusammengeführt wurde." + +#. TRANSLATORS: This is "remote " in "remote branch '%s' not found" +#: builtin/branch.c:163 +msgid "remote " +msgstr "entfernter " + +#: builtin/branch.c:171 +msgid "cannot use -a with -d" +msgstr "kann -a nicht mit -d benutzen" + +#: builtin/branch.c:177 +msgid "Couldn't look up commit object for HEAD" +msgstr "Konnte Versionsobjekt für Zweigspitze (HEAD) nicht nachschlagen." + +#: builtin/branch.c:182 +#, c-format +msgid "Cannot delete the branch '%s' which you are currently on." +msgstr "Kann Zweig '%s' nicht entfernen auf dem du dich gerade befindest." + +#: builtin/branch.c:192 +#, c-format +msgid "%sbranch '%s' not found." +msgstr "%sZweig '%s' nicht gefunden." + +#: builtin/branch.c:200 +#, c-format +msgid "Couldn't look up commit object for '%s'" +msgstr "Konnte Versionsobjekt für '%s' nicht nachschlagen." + +#: builtin/branch.c:206 +#, c-format +msgid "" +"The branch '%s' is not fully merged.\n" +"If you are sure you want to delete it, run 'git branch -D %s'." +msgstr "" +"Der Zweig '%s' ist nicht vollständig zusammengeführt.\n" +"Wenn du sicher bist diesen Zweig zu entfernen, führe 'git branch -D %s' aus." + +#: builtin/branch.c:214 +#, c-format +msgid "Error deleting %sbranch '%s'" +msgstr "Fehler beim Löschen von %sZweig '%s'" + +#: builtin/branch.c:219 +#, c-format +msgid "Deleted %sbranch %s (was %s).\n" +msgstr "Entferne %sZweig %s (war %s).\n" + +#: builtin/branch.c:224 +msgid "Update of config-file failed" +msgstr "Aktualisierung der Konfigurationsdatei fehlgeschlagen." + +#: builtin/branch.c:322 +#, c-format +msgid "branch '%s' does not point at a commit" +msgstr "Zweig '%s' zeigt auf keine Version" + +#: builtin/branch.c:394 +#, c-format +msgid "behind %d] " +msgstr "hinter %d] " + +#: builtin/branch.c:396 +#, c-format +msgid "ahead %d] " +msgstr "vor %d] " + +#: builtin/branch.c:398 +#, c-format +msgid "ahead %d, behind %d] " +msgstr "vor %d, hinter %d] " + +#: builtin/branch.c:501 +msgid "(no branch)" +msgstr "(kein Zweig)" + +#: builtin/branch.c:566 +msgid "some refs could not be read" +msgstr "einige Referenzen konnten nicht gelesen werden" + +#: builtin/branch.c:579 +msgid "cannot rename the current branch while not on any." +msgstr "" +"Kann aktuellen Zweig nicht umbennen, solange du dich auf keinem befindest." + +#: builtin/branch.c:589 +#, c-format +msgid "Invalid branch name: '%s'" +msgstr "Ungültiger Zweig-Name: '%s'" + +#: builtin/branch.c:604 +msgid "Branch rename failed" +msgstr "Umbenennung des Zweiges fehlgeschlagen" + +#: builtin/branch.c:608 +#, c-format +msgid "Renamed a misnamed branch '%s' away" +msgstr "falsch benannten Zweig '%s' umbenannt" + +#: builtin/branch.c:612 +#, c-format +msgid "Branch renamed to %s, but HEAD is not updated!" +msgstr "Zweig umbenannt zu %s, aber Zweigspitze (HEAD) ist nicht aktualisiert!" + +#: builtin/branch.c:619 +msgid "Branch is renamed, but update of config-file failed" +msgstr "" +"Zweig ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist " +"fehlgeschlagen." + +#: builtin/branch.c:634 +#, c-format +msgid "malformed object name %s" +msgstr "Missgebildeter Objektname %s" + +#: builtin/branch.c:658 +#, c-format +msgid "could not write branch description template: %s\n" +msgstr "Konnte Beschreibungsvorlage für Zweig nicht schreiben: %s\n" + +#: builtin/branch.c:746 +msgid "Failed to resolve HEAD as a valid ref." +msgstr "Zweigspitze (HEAD) konnte nicht als gültige Referenz aufgelöst werden." + +#: builtin/branch.c:751 builtin/clone.c:558 +msgid "HEAD not found below refs/heads!" +msgstr "Zweigspitze (HEAD) wurde nicht unter \"refs/heads\" gefunden!" + +#: builtin/branch.c:809 +msgid "-a and -r options to 'git branch' do not make sense with a branch name" +msgstr "" +"Die Optionen -a und -r bei 'git branch' machen mit einem Zweignamen keinen " +"Sinn." + +#: builtin/bundle.c:47 +#, c-format +msgid "%s is okay\n" +msgstr "%s ist in Ordnung\n" + +#: builtin/bundle.c:56 +msgid "Need a repository to create a bundle." +msgstr "Um ein Paket zu erstellen wird ein Projektarchiv benötigt." + +#: builtin/bundle.c:60 +msgid "Need a repository to unbundle." +msgstr "Zum Zerlegen wird ein Projektarchiv benötigt." + +#: builtin/checkout.c:113 builtin/checkout.c:146 +#, c-format +msgid "path '%s' does not have our version" +msgstr "Pfad '%s' hat nicht unsere Version." + +#: builtin/checkout.c:115 builtin/checkout.c:148 +#, c-format +msgid "path '%s' does not have their version" +msgstr "Pfad '%s' hat nicht deren Version." + +#: builtin/checkout.c:131 +#, c-format +msgid "path '%s' does not have all necessary versions" +msgstr "Pfad '%s' hat nicht alle notwendigen Versionen." + +#: builtin/checkout.c:175 +#, c-format +msgid "path '%s' does not have necessary versions" +msgstr "Pfad '%s' hat nicht die notwendigen Versionen." + +#: builtin/checkout.c:192 +#, c-format +msgid "path '%s': cannot merge" +msgstr "Pfad '%s': kann nicht zusammenführen" + +#: builtin/checkout.c:209 +#, c-format +msgid "Unable to add merge result for '%s'" +msgstr "Konnte Ergebnis der Zusammenführung von '%s' nicht hinzufügen." + +#: builtin/checkout.c:212 builtin/reset.c:158 +#, c-format +msgid "make_cache_entry failed for path '%s'" +msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen" + +#: builtin/checkout.c:234 builtin/checkout.c:392 +msgid "corrupt index file" +msgstr "beschädigte Bereitstellungsdatei" + +#: builtin/checkout.c:264 builtin/checkout.c:271 +#, c-format +msgid "path '%s' is unmerged" +msgstr "Pfad '%s' ist nicht zusammengeführt." + +#: builtin/checkout.c:302 builtin/checkout.c:498 builtin/clone.c:583 +#: builtin/merge.c:811 +msgid "unable to write new index file" +msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." + +#: builtin/checkout.c:319 builtin/diff.c:302 builtin/merge.c:408 +msgid "diff_setup_done failed" +msgstr "diff_setup_done fehlgeschlagen" + +#: builtin/checkout.c:414 +msgid "you need to resolve your current index first" +msgstr "Du musst zuerst deine aktuelle Bereitstellung auflösen." + +#: builtin/checkout.c:533 +#, c-format +msgid "Can not do reflog for '%s'\n" +msgstr "Konnte \"reflog\" für '%s' nicht durchführen\n" + +#: builtin/checkout.c:565 +msgid "HEAD is now at" +msgstr "Zweigspitze (HEAD) ist jetzt bei" + +#: builtin/checkout.c:572 +#, c-format +msgid "Reset branch '%s'\n" +msgstr "Setze Zweig '%s' zurück\n" + +#: builtin/checkout.c:575 +#, c-format +msgid "Already on '%s'\n" +msgstr "Bereits auf '%s'\n" + +#: builtin/checkout.c:579 +#, c-format +msgid "Switched to and reset branch '%s'\n" +msgstr "Gewechselt zu zurückgesetztem Zweig '%s'\n" + +#: builtin/checkout.c:581 +#, c-format +msgid "Switched to a new branch '%s'\n" +msgstr "Gewechselt zu einem neuen Zweig '%s'\n" + +#: builtin/checkout.c:583 +#, c-format +msgid "Switched to branch '%s'\n" +msgstr "Gewechselt zu Zweig '%s'\n" + +#: builtin/checkout.c:639 +#, c-format +msgid " ... and %d more.\n" +msgstr " ... und %d weitere.\n" + +#. The singular version +#: builtin/checkout.c:645 +#, c-format +msgid "" +"Warning: you are leaving %d commit behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgid_plural "" +"Warning: you are leaving %d commits behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgstr[0] "" +"Warnung: Du verlässt %d Version zurückliegend, nicht verbunden zu\n" +"einem deiner Zweige:\n" +"\n" +"%s\n" +msgstr[1] "" +"Warnung: Du verlässt %d Versionen zurückliegend, nicht verbunden zu\n" +"einem deiner Zweige:\n" +"\n" +"%s\n" + +#: builtin/checkout.c:663 +#, c-format +msgid "" +"If you want to keep them by creating a new branch, this may be a good time\n" +"to do so with:\n" +"\n" +" git branch new_branch_name %s\n" +"\n" +msgstr "" +"Wenn du diese durch einen neuen Zweig behalten möchtest, dann könnte jetzt\n" +"ein guter Zeitpunkt sein dies zu tun mit:\n" +"\n" +" git branch neuer_zweig_name %s\n" +"\n" + +#: builtin/checkout.c:692 +msgid "internal error in revision walk" +msgstr "interner Fehler im Revisionsgang" + +#: builtin/checkout.c:696 +msgid "Previous HEAD position was" +msgstr "Vorherige Position der Zweigspitze (HEAD) war" + +#: builtin/checkout.c:722 +msgid "You are on a branch yet to be born" +msgstr "Du bist auf einem Zweig, der noch nicht geboren wurde." + +#. case (1) +#: builtin/checkout.c:853 +#, c-format +msgid "invalid reference: %s" +msgstr "Ungültige Referenz: %s" + +#. case (1): want a tree +#: builtin/checkout.c:892 +#, c-format +msgid "reference is not a tree: %s" +msgstr "Referenz ist kein Baum: %s" + +#: builtin/checkout.c:972 +msgid "-B cannot be used with -b" +msgstr "-B kann nicht mit -b benutzt werden" + +#: builtin/checkout.c:981 +msgid "--patch is incompatible with all other options" +msgstr "--patch ist inkompatibel mit allen anderen Optionen" + +#: builtin/checkout.c:984 +msgid "--detach cannot be used with -b/-B/--orphan" +msgstr "--detach kann nicht mit -b/-B/--orphan benutzt werden" + +#: builtin/checkout.c:986 +msgid "--detach cannot be used with -t" +msgstr "--detach kann nicht mit -t benutzt werden" + +#: builtin/checkout.c:992 +msgid "--track needs a branch name" +msgstr "--track benötigt einen Zweignamen" + +#: builtin/checkout.c:999 +msgid "Missing branch name; try -b" +msgstr "Vermisse Zweignamen; versuche -b" + +#: builtin/checkout.c:1005 +msgid "--orphan and -b|-B are mutually exclusive" +msgstr "--orphan und -b|-B sind gegenseitig exklusiv" + +#: builtin/checkout.c:1007 +msgid "--orphan cannot be used with -t" +msgstr "--orphan kann nicht mit -t benutzt werden" + +#: builtin/checkout.c:1017 +msgid "git checkout: -f and -m are incompatible" +msgstr "git checkout: -f und -m sind inkompatibel" + +#: builtin/checkout.c:1051 +msgid "invalid path specification" +msgstr "ungültige Pfadspezifikation" + +#: builtin/checkout.c:1059 +#, c-format +msgid "" +"git checkout: updating paths is incompatible with switching branches.\n" +"Did you intend to checkout '%s' which can not be resolved as commit?" +msgstr "" +"git checkout: Aktualisierung der Pfade ist inkompatibel mit dem Wechsel von " +"Zweigen.\n" +"Hast du beabsichtigt '%s' auszuchecken, welcher nicht als Version aufgelöst " +"werden kann?" + +#: builtin/checkout.c:1061 +msgid "git checkout: updating paths is incompatible with switching branches." +msgstr "" +"git checkout: Aktualisierung von Pfaden ist inkompatibel mit dem Wechsel von " +"Zweigen." + +#: builtin/checkout.c:1066 +msgid "git checkout: --detach does not take a path argument" +msgstr "git checkout: --detach nimmt kein Pfad-Argument" + +#: builtin/checkout.c:1069 +msgid "" +"git checkout: --ours/--theirs, --force and --merge are incompatible when\n" +"checking out of the index." +msgstr "" +"git checkout: --ours/--theirs, --force and --merge sind inkompatibel wenn\n" +"du außerhalb der Bereitstellung auscheckst." + +#: builtin/checkout.c:1088 +msgid "Cannot switch branch to a non-commit." +msgstr "Kann Zweig nur zu einer Version wechseln." + +#: builtin/checkout.c:1091 +msgid "--ours/--theirs is incompatible with switching branches." +msgstr "--ours/--theirs ist inkompatibel mit den Wechseln von Zweigen." + +#: builtin/clean.c:78 +msgid "-x and -X cannot be used together" +msgstr "-x und -X können nicht zusammen benutzt werden" + +#: builtin/clean.c:82 +msgid "" +"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +msgstr "" +"clean.requireForce auf \"true\" gesetzt und weder -n noch -f gegeben; " +"Ablehnung der Reinigung" + +#: builtin/clean.c:85 +msgid "" +"clean.requireForce defaults to true and neither -n nor -f given; refusing to " +"clean" +msgstr "" +"clean.requireForce standardmäßig auf \"true\" gesetzt und weder -n noch -f " +"gegeben; Ablehnung der Reinigung" + +#: builtin/clean.c:155 builtin/clean.c:176 +#, c-format +msgid "Would remove %s\n" +msgstr "Würde entfernen %s\n" + +#: builtin/clean.c:159 builtin/clean.c:179 +#, c-format +msgid "Removing %s\n" +msgstr "Entferne %s\n" + +#: builtin/clean.c:162 builtin/clean.c:182 +#, c-format +msgid "failed to remove %s" +msgstr "Fehler beim Entfernen von %s" + +#: builtin/clean.c:166 +#, c-format +msgid "Would not remove %s\n" +msgstr "Würde %s nicht entfernen\n" + +#: builtin/clean.c:168 +#, c-format +msgid "Not removing %s\n" +msgstr "Entferne %s nicht\n" + +#: builtin/clone.c:243 +#, c-format +msgid "reference repository '%s' is not a local directory." +msgstr "Referenziertes Projektarchiv '%s' ist kein lokales Verzeichnis." + +#: builtin/clone.c:302 +#, c-format +msgid "failed to open '%s'" +msgstr "Fehler beim Öffnen von '%s'" + +#: builtin/clone.c:306 +#, c-format +msgid "failed to create directory '%s'" +msgstr "Fehler beim Erstellen von Verzeichnis '%s'" + +#: builtin/clone.c:308 builtin/diff.c:75 +#, c-format +msgid "failed to stat '%s'" +msgstr "'%s' konnte nicht gelesen werden" + +#: builtin/clone.c:310 +#, c-format +msgid "%s exists and is not a directory" +msgstr "%s existiert und ist kein Verzeichnis" + +#: builtin/clone.c:324 +#, c-format +msgid "failed to stat %s\n" +msgstr "%s konnte nicht gelesen werden\n" + +#: builtin/clone.c:341 +#, c-format +msgid "failed to unlink '%s'" +msgstr "Verknüpfung von '%s' konnte nicht aufgehoben werden." + +#: builtin/clone.c:346 +#, c-format +msgid "failed to create link '%s'" +msgstr "Verknüpfung '%s' konnte nicht erstellt werden." + +#: builtin/clone.c:350 +#, c-format +msgid "failed to copy file to '%s'" +msgstr "Datei konnte nicht nach '%s' kopiert werden." + +#: builtin/clone.c:373 +#, c-format +msgid "done.\n" +msgstr "Fertig.\n" + +#: builtin/clone.c:440 +#, c-format +msgid "Could not find remote branch %s to clone." +msgstr "Entfernter Zweig %s konnte nicht zum Klonen gefunden werden." + +#: builtin/clone.c:549 +msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" +msgstr "" +"Entfernte Zweigspitze (HEAD) bezieht sich auf eine nicht existierende " +"Referenz und kann nicht ausgecheckt werden.\n" + +#: builtin/clone.c:639 +msgid "Too many arguments." +msgstr "Zu viele Argumente." + +#: builtin/clone.c:643 +msgid "You must specify a repository to clone." +msgstr "Du musst ein Projektarchiv zum Klonen spezifizieren." + +#: builtin/clone.c:654 +#, c-format +msgid "--bare and --origin %s options are incompatible." +msgstr "--bare und --origin %s Optionen sind inkompatibel." + +#: builtin/clone.c:668 +#, c-format +msgid "repository '%s' does not exist" +msgstr "Projektarchiv '%s' existiert nicht." + +#: builtin/clone.c:673 +msgid "--depth is ignored in local clones; use file:// instead." +msgstr "--depth wird in lokalen Klonen ignoriert; benutze stattdessen file://." + +#: builtin/clone.c:683 +#, c-format +msgid "destination path '%s' already exists and is not an empty directory." +msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis." + +#: builtin/clone.c:693 +#, c-format +msgid "working tree '%s' already exists." +msgstr "Arbeitsbaum '%s' existiert bereits." + +#: builtin/clone.c:706 builtin/clone.c:720 +#, c-format +msgid "could not create leading directories of '%s'" +msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen." + +#: builtin/clone.c:709 +#, c-format +msgid "could not create work tree dir '%s'." +msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen." + +#: builtin/clone.c:728 +#, c-format +msgid "Cloning into bare repository '%s'...\n" +msgstr "Klone in leeres Projektarchiv '%s'...\n" + +#: builtin/clone.c:730 +#, c-format +msgid "Cloning into '%s'...\n" +msgstr "Klone nach '%s'...\n" + +#: builtin/clone.c:786 +#, c-format +msgid "Don't know how to clone %s" +msgstr "Weiß nicht wie %s zu klonen ist." + +#: builtin/clone.c:835 +#, c-format +msgid "Remote branch %s not found in upstream %s" +msgstr "entfernten Zweig %s nicht im anderen Projektarchiv %s gefunden" + +#: builtin/clone.c:842 +msgid "You appear to have cloned an empty repository." +msgstr "Du scheinst ein leeres Projektarchiv geklont zu haben." + +#: builtin/commit.c:42 +msgid "" +"Your name and email address were configured automatically based\n" +"on your username and hostname. Please check that they are accurate.\n" +"You can suppress this message by setting them explicitly:\n" +"\n" +" git config --global user.name \"Your Name\"\n" +" git config --global user.email you@example.com\n" +"\n" +"After doing this, you may fix the identity used for this commit with:\n" +"\n" +" git commit --amend --reset-author\n" +msgstr "" +"Dein Name und E-Mail Adresse wurden automatisch auf Basis\n" +"deines Benutzer- und Rechnernamens konfiguriert. Bitte prüfe, dass diese\n" +"zutreffend sind. Du kannst diese Meldung unterdrücken, indem du diese\n" +"explizit setzt:\n" +"\n" +" git config --global user.name \"Dein Name\"\n" +" git config --global user.email deine@emailadresse.de\n" +"\n" +"Nachdem du das getan hast, kannst du deine Identität für diese Version " +"ändern mit:\n" +"\n" +" git commit --amend --reset-author\n" + +#: builtin/commit.c:54 +msgid "" +"You asked to amend the most recent commit, but doing so would make\n" +"it empty. You can repeat your command with --allow-empty, or you can\n" +"remove the commit entirely with \"git reset HEAD^\".\n" +msgstr "" +"Du fragtest die jüngste Version nachzubessern, aber das würde diese leer\n" +"machen. Du kannst Dein Kommando mit --allow-empty wiederholen, oder die\n" +"Version mit \"git reset HEAD^\" vollständig entfernen.\n" + +#: builtin/commit.c:59 +msgid "" +"The previous cherry-pick is now empty, possibly due to conflict resolution.\n" +"If you wish to commit it anyway, use:\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Otherwise, please use 'git reset'\n" +msgstr "" +"Der letzte \"cherry-pick\" ist jetzt leer, möglicherweise durch eine " +"Konfliktauflösung.\n" +"Wenn du dies trotzdem eintragen willst, benutze:\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Andernfalls benutze bitte 'git reset'\n" + +#: builtin/commit.c:205 builtin/reset.c:33 +msgid "merge" +msgstr "zusammenführen" + +#: builtin/commit.c:208 +msgid "cherry-pick" +msgstr "cherry-pick" + +#: builtin/commit.c:325 +msgid "failed to unpack HEAD tree object" +msgstr "Fehler beim Entpacken des Baum-Objektes der Zweigspitze (HEAD)." + +#: builtin/commit.c:367 +msgid "unable to create temporary index" +msgstr "Konnte temporäre Bereitstellung nicht erstellen." + +#: builtin/commit.c:373 +msgid "interactive add failed" +msgstr "interaktives Hinzufügen fehlgeschlagen" + +#: builtin/commit.c:406 builtin/commit.c:427 builtin/commit.c:473 +msgid "unable to write new_index file" +msgstr "Konnte new_index Datei nicht schreiben" + +#: builtin/commit.c:457 +#, c-format +msgid "cannot do a partial commit during a %s." +msgstr "Kann keine partielle Eintragung während eines %s durchführen." + +#: builtin/commit.c:466 +msgid "cannot read the index" +msgstr "Kann Bereitstellung nicht lesen" + +#: builtin/commit.c:486 +msgid "unable to write temporary index file" +msgstr "Konnte temporäre Bereitstellungsdatei nicht schreiben." + +#: builtin/commit.c:561 builtin/commit.c:567 +#, c-format +msgid "invalid commit: %s" +msgstr "Ungültige Version: %s" + +#: builtin/commit.c:590 +msgid "malformed --author parameter" +msgstr "Fehlerhafter --author Parameter" + +#: builtin/commit.c:651 +#, c-format +msgid "Malformed ident string: '%s'" +msgstr "Fehlerhafter Identifikations-String: '%s'" + +#: builtin/commit.c:689 builtin/commit.c:722 builtin/commit.c:1033 +#, c-format +msgid "could not lookup commit %s" +msgstr "Konnte Version %s nicht nachschlagen" + +#: builtin/commit.c:701 builtin/shortlog.c:296 +#, c-format +msgid "(reading log message from standard input)\n" +msgstr "(lese Log-Nachricht von Standard-Eingabe)\n" + +#: builtin/commit.c:703 +msgid "could not read log from standard input" +msgstr "Konnte Log nicht von Standard-Eingabe lesen." + +#: builtin/commit.c:707 +#, c-format +msgid "could not read log file '%s'" +msgstr "Konnte Log-Datei '%s' nicht lesen" + +#: builtin/commit.c:713 +msgid "commit has empty message" +msgstr "Version hat eine leere Beschreibung" + +#: builtin/commit.c:729 +msgid "could not read MERGE_MSG" +msgstr "Konnte MERGE_MSG nicht lesen" + +#: builtin/commit.c:733 +msgid "could not read SQUASH_MSG" +msgstr "Konnte SQUASH_MSG nicht lesen" + +#: builtin/commit.c:737 +#, c-format +msgid "could not read '%s'" +msgstr "Konnte '%s' nicht lesen" + +#: builtin/commit.c:765 +#, c-format +msgid "could not open '%s'" +msgstr "Konnte '%s' nicht öffnen" + +#: builtin/commit.c:789 +msgid "could not write commit template" +msgstr "Konnte Versionsvorlage nicht schreiben" + +#: builtin/commit.c:799 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a %s.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" +"\n" +"Es sieht so aus, als trägst du ein '%s' ein.\n" +"Falls das nicht korrekt ist, entferne bitte die Datei\n" +"\t%s\n" +"und versuche es erneut.\n" + +#: builtin/commit.c:812 +msgid "Please enter the commit message for your changes." +msgstr "Bitte gebe die Versionsbeschreibung für deine Änderungen ein." + +#: builtin/commit.c:815 +msgid "" +" Lines starting\n" +"with '#' will be ignored, and an empty message aborts the commit.\n" +msgstr "" +" Zeilen beginnend\n" +"mit '#' werden ignoriert, und eine leere Versionsbeschreibung bricht die " +"Eintragung ab.\n" + +#: builtin/commit.c:820 +msgid "" +" Lines starting\n" +"with '#' will be kept; you may remove them yourself if you want to.\n" +"An empty message aborts the commit.\n" +msgstr "" +" Zeilen beginnend\n" +"mit '#' werden beibehalten; wenn du möchtest, kannst du diese entfernen.\n" +"Eine leere Versionsbeschreibung bricht die Eintragung ab.\n" + +#: builtin/commit.c:832 +#, c-format +msgid "%sAuthor: %s" +msgstr "%sAutor: %s" + +#: builtin/commit.c:839 +#, c-format +msgid "%sCommitter: %s" +msgstr "%sEintragender: %s" + +#: builtin/commit.c:859 +msgid "Cannot read index" +msgstr "Kann Bereitstellung nicht lesen" + +#: builtin/commit.c:896 +msgid "Error building trees" +msgstr "Fehler beim Erzeugen der Bäume" + +#: builtin/commit.c:911 builtin/tag.c:357 +#, c-format +msgid "Please supply the message using either -m or -F option.\n" +msgstr "Bitte liefere die Beschreibung entweder mit der Option -m oder -F.\n" + +#: builtin/commit.c:1008 +#, c-format +msgid "No existing author found with '%s'" +msgstr "Kein existierender Autor mit '%s' gefunden." + +#: builtin/commit.c:1023 builtin/commit.c:1217 +#, c-format +msgid "Invalid untracked files mode '%s'" +msgstr "Ungültiger Modus '%s' für unverfolgte Dateien" + +#: builtin/commit.c:1063 +msgid "Using both --reset-author and --author does not make sense" +msgstr "Verwendung von --reset-author und --author macht keinen Sinn." + +#: builtin/commit.c:1074 +msgid "You have nothing to amend." +msgstr "Du hast nichts zum nachbessern." + +#: builtin/commit.c:1076 +#, c-format +msgid "You are in the middle of a %s -- cannot amend." +msgstr "Du bist in der Mitte eines %s -- kann nicht nachbessern." + +#: builtin/commit.c:1078 +msgid "Options --squash and --fixup cannot be used together" +msgstr "" +"Die Optionen --squash und --fixup können nicht gemeinsam benutzt werden." + +#: builtin/commit.c:1088 +msgid "Only one of -c/-C/-F/--fixup can be used." +msgstr "Nur eines von -c/-C/-F/--fixup kann benutzt werden." + +#: builtin/commit.c:1090 +msgid "Option -m cannot be combined with -c/-C/-F/--fixup." +msgstr "Option -m kann nicht mit -c/-C/-F/--fixup kombiniert werden" + +#: builtin/commit.c:1098 +msgid "--reset-author can be used only with -C, -c or --amend." +msgstr "--reset--author kann nur mit -C, -c oder --amend benutzt werden" + +#: builtin/commit.c:1115 +msgid "Only one of --include/--only/--all/--interactive/--patch can be used." +msgstr "" +"Nur eines von --include/--only/--all/--interactive/--patch kann benutzt " +"werden." + +#: builtin/commit.c:1117 +msgid "No paths with --include/--only does not make sense." +msgstr "--include/--only machen ohne Pfade keinen Sinn." + +#: builtin/commit.c:1119 +msgid "Clever... amending the last one with dirty index." +msgstr "" +"Klug... nachbessern der letzten Version mit einer unsauberen Bereitstellung." + +#: builtin/commit.c:1121 +msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +msgstr "" +"Explizite Pfade ohne -i oder -o spezifiziert; unter der Annahme von --only " +"Pfaden..." + +#: builtin/commit.c:1131 builtin/tag.c:556 +#, c-format +msgid "Invalid cleanup mode %s" +msgstr "Ungültiger \"cleanup\" Modus %s" + +#: builtin/commit.c:1136 +msgid "Paths with -a does not make sense." +msgstr "Pfade mit -a machen keinen Sinn." + +#: builtin/commit.c:1315 +msgid "couldn't look up newly created commit" +msgstr "Konnte neu erstellte Version nicht nachschlagen." + +#: builtin/commit.c:1317 +msgid "could not parse newly created commit" +msgstr "Konnte neu erstellte Version nicht analysieren." + +#: builtin/commit.c:1358 +msgid "detached HEAD" +msgstr "losgelöste Zweigspitze (HEAD)" + +#: builtin/commit.c:1360 +msgid " (root-commit)" +msgstr " (Basis-Version)" + +#: builtin/commit.c:1450 +msgid "could not parse HEAD commit" +msgstr "Konnte Version der Zweigspitze (HEAD) nicht analysieren." + +#: builtin/commit.c:1487 builtin/merge.c:509 +#, c-format +msgid "could not open '%s' for reading" +msgstr "Konnte '%s' nicht zum Lesen öffnen." + +#: builtin/commit.c:1494 +#, c-format +msgid "Corrupt MERGE_HEAD file (%s)" +msgstr "Beschädigte MERGE_HEAD-Datei (%s)" + +#: builtin/commit.c:1501 +msgid "could not read MERGE_MODE" +msgstr "Konnte MERGE_MODE nicht lesen" + +#: builtin/commit.c:1520 +#, c-format +msgid "could not read commit message: %s" +msgstr "Konnte Versionsbeschreibung nicht lesen: %s" + +#: builtin/commit.c:1534 +#, c-format +msgid "Aborting commit; you did not edit the message.\n" +msgstr "Eintragung abgebrochen; du hast die Beschreibung nicht editiert.\n" + +#: builtin/commit.c:1539 +#, c-format +msgid "Aborting commit due to empty commit message.\n" +msgstr "Eintragung aufgrund leerer Versionsbeschreibung abgebrochen.\n" + +#: builtin/commit.c:1554 builtin/merge.c:935 builtin/merge.c:968 +msgid "failed to write commit object" +msgstr "Fehler beim Schreiben des Versionsobjektes." + +#: builtin/commit.c:1575 +msgid "cannot lock HEAD ref" +msgstr "Kann Referenz der Zweigspitze (HEAD) nicht sperren." + +#: builtin/commit.c:1579 +msgid "cannot update HEAD ref" +msgstr "Kann Referenz der Zweigspitze (HEAD) nicht aktualisieren." + +#: builtin/commit.c:1590 +msgid "" +"Repository has been updated, but unable to write\n" +"new_index file. Check that disk is not full or quota is\n" +"not exceeded, and then \"git reset HEAD\" to recover." +msgstr "" +"Das Projektarchiv wurde aktualisiert, aber die \"new_index\"-Datei\n" +"konnte nicht geschrieben werden. Prüfe, dass dein Speicher nicht\n" +"voll und dein Kontingent nicht aufgebraucht ist und führe\n" +"anschließend \"git reset HEAD\" zu Wiederherstellung aus." + +#: builtin/describe.c:234 +#, c-format +msgid "annotated tag %s not available" +msgstr "annotierte Markierung %s ist nicht verfügbar" + +#: builtin/describe.c:238 +#, c-format +msgid "annotated tag %s has no embedded name" +msgstr "annotierte Markierung %s hat keinen eingebetteten Namen" + +#: builtin/describe.c:240 +#, c-format +msgid "tag '%s' is really '%s' here" +msgstr "Markierung '%s' ist wirklich '%s' hier" + +#: builtin/describe.c:267 +#, c-format +msgid "Not a valid object name %s" +msgstr "kein gültiger Objekt-Name %s" + +#: builtin/describe.c:270 +#, c-format +msgid "%s is not a valid '%s' object" +msgstr "%s ist kein gültiges '%s' Objekt" + +#: builtin/describe.c:287 +#, c-format +msgid "no tag exactly matches '%s'" +msgstr "kein Markierung entspricht exakt '%s'" + +#: builtin/describe.c:289 +#, c-format +msgid "searching to describe %s\n" +msgstr "suche um zu beschreiben %s\n" + +#: builtin/describe.c:329 +#, c-format +msgid "finished search at %s\n" +msgstr "beendete Suche bei %s\n" + +#: builtin/describe.c:353 +#, c-format +msgid "" +"No annotated tags can describe '%s'.\n" +"However, there were unannotated tags: try --tags." +msgstr "" +"Keine annotierten Markierungen können '%s' beschreiben.\n" +"Jedoch gab es nicht annotierte Markierungen: versuche --tags." + +#: builtin/describe.c:357 +#, c-format +msgid "" +"No tags can describe '%s'.\n" +"Try --always, or create some tags." +msgstr "" +"Keine Markierungen können '%s' beschreiben.\n" +"Versuche --always oder erstelle einige Markierungen." + +#: builtin/describe.c:378 +#, c-format +msgid "traversed %lu commits\n" +msgstr "verarbeitete %lu Versionen\n" + +#: builtin/describe.c:381 +#, c-format +msgid "" +"more than %i tags found; listed %i most recent\n" +"gave up search at %s\n" +msgstr "" +"mehr als %i Markierungen gefunden; Führe die %i jüngsten auf\n" +"Suche bei %s aufgegeben\n" + +#: builtin/describe.c:436 +msgid "--long is incompatible with --abbrev=0" +msgstr "--long ist inkompatibel mit --abbrev=0" + +#: builtin/describe.c:462 +msgid "No names found, cannot describe anything." +msgstr "Keine Namen gefunden, kann nichts beschreiben." + +#: builtin/describe.c:482 +msgid "--dirty is incompatible with committishes" +msgstr "--dirty ist inkompatibel mit \"committish\"-Werten" + +#: builtin/diff.c:77 +#, c-format +msgid "'%s': not a regular file or symlink" +msgstr "'%s': keine reguläre Datei oder symbolische Verknüpfung" + +#: builtin/diff.c:220 +#, c-format +msgid "invalid option: %s" +msgstr "Ungültige Option: %s" + +#: builtin/diff.c:297 +msgid "Not a git repository" +msgstr "Kein Git-Projektarchiv" + +#: builtin/diff.c:347 +#, c-format +msgid "invalid object '%s' given." +msgstr "Ungültiges Objekt '%s' gegeben." + +#: builtin/diff.c:352 +#, c-format +msgid "more than %d trees given: '%s'" +msgstr "Mehr als %d Bäume gegeben: '%s'" + +#: builtin/diff.c:362 +#, c-format +msgid "more than two blobs given: '%s'" +msgstr "Mehr als zwei Blobs gegeben: '%s'" + +#: builtin/diff.c:370 +#, c-format +msgid "unhandled object '%s' given." +msgstr "unbehandeltes Objekt '%s' gegeben" + +#: builtin/fetch.c:200 +msgid "Couldn't find remote ref HEAD" +msgstr "Konnte entfernte Referenz der Zweigspitze (HEAD) nicht finden." + +#: builtin/fetch.c:252 +#, c-format +msgid "object %s not found" +msgstr "Objekt %s nicht gefunden" + +#: builtin/fetch.c:258 +msgid "[up to date]" +msgstr "[aktuell]" + +#: builtin/fetch.c:272 +#, c-format +msgid "! %-*s %-*s -> %s (can't fetch in current branch)" +msgstr "! %-*s %-*s -> %s (kann nicht im aktuellen Zweig anfordern)" + +#: builtin/fetch.c:273 builtin/fetch.c:351 +msgid "[rejected]" +msgstr "[zurückgewiesen]" + +#: builtin/fetch.c:284 +msgid "[tag update]" +msgstr "[Markierungsaktualisierung]" + +#: builtin/fetch.c:286 builtin/fetch.c:313 builtin/fetch.c:331 +msgid " (unable to update local ref)" +msgstr " (kann lokale Referenz nicht aktualisieren)" + +#: builtin/fetch.c:298 +msgid "[new tag]" +msgstr "[neue Markierung]" + +#: builtin/fetch.c:302 +msgid "[new branch]" +msgstr "[neuer Zweig]" + +#: builtin/fetch.c:347 +msgid "unable to update local ref" +msgstr "kann lokale Referenz nicht aktualisieren" + +#: builtin/fetch.c:347 +msgid "forced update" +msgstr "Aktualisierung erzwungen" + +#: builtin/fetch.c:353 +msgid "(non-fast-forward)" +msgstr "(kein Vorspulen)" + +#: builtin/fetch.c:384 builtin/fetch.c:676 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "kann %s nicht öffnen: %s\n" + +#: builtin/fetch.c:393 +#, c-format +msgid "%s did not send all necessary objects\n" +msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n" + +#: builtin/fetch.c:479 +#, c-format +msgid "From %.*s\n" +msgstr "Von %.*s\n" + +#: builtin/fetch.c:490 +#, c-format +msgid "" +"some local refs could not be updated; try running\n" +" 'git remote prune %s' to remove any old, conflicting branches" +msgstr "" +"Einige lokale Referenzen konnten nicht aktualisiert werden; versuche\n" +"'git remote prune %s' um jeden älteren, widersprüchlichen Zweig zu entfernen." + +#: builtin/fetch.c:540 +#, c-format +msgid " (%s will become dangling)\n" +msgstr " (%s wird unreferenziert werden)\n" + +#: builtin/fetch.c:541 +#, c-format +msgid " (%s has become dangling)\n" +msgstr " (%s wurde unreferenziert)\n" + +#: builtin/fetch.c:548 +msgid "[deleted]" +msgstr "[gelöscht]" + +#: builtin/fetch.c:549 +msgid "(none)" +msgstr "(keine)" + +#: builtin/fetch.c:666 +#, c-format +msgid "Refusing to fetch into current branch %s of non-bare repository" +msgstr "" +"Ablehnung des Anforderns in aktuellen Zweig %s von einem nicht-leeren " +"Projektarchiv" + +#: builtin/fetch.c:700 +#, c-format +msgid "Don't know how to fetch from %s" +msgstr "Weiß nicht wie von %s angefordert wird." + +#: builtin/fetch.c:777 +#, c-format +msgid "Option \"%s\" value \"%s\" is not valid for %s" +msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s" + +#: builtin/fetch.c:780 +#, c-format +msgid "Option \"%s\" is ignored for %s\n" +msgstr "Option \"%s\" wird ignoriert für %s\n" + +#: builtin/fetch.c:879 +#, c-format +msgid "Fetching %s\n" +msgstr "Hole %s ab\n" + +#: builtin/fetch.c:881 +#, c-format +msgid "Could not fetch %s" +msgstr "Konnte %s nicht anfordern" + +#: builtin/fetch.c:898 +msgid "" +"No remote repository specified. Please, specify either a URL or a\n" +"remote name from which new revisions should be fetched." +msgstr "" +"Kein entferntes Projektarchiv spezifiziert. Bitte spezifiziere entweder\n" +"eine URL oder einen Entfernungsname, von welchem neue Revisionen angefordert " +"werden sollen." + +#: builtin/fetch.c:918 +msgid "You need to specify a tag name." +msgstr "Du musst den Namen der Markierung spezifizieren." + +#: builtin/fetch.c:970 +msgid "fetch --all does not take a repository argument" +msgstr "fetch -all nimmt kein Projektarchiv als Argument" + +#: builtin/fetch.c:972 +msgid "fetch --all does not make sense with refspecs" +msgstr "fetch --all macht keinen Sinn mit Referenzspezifikationen" + +#: builtin/fetch.c:983 +#, c-format +msgid "No such remote or remote group: %s" +msgstr "Keine solche Entfernung oder Entfernungsgruppe: %s" + +#: builtin/fetch.c:991 +msgid "Fetching a group and specifying refspecs does not make sense" +msgstr "" +"Abholen einer Gruppe und Spezifizieren von Referenzspezifikationen macht " +"keinen Sinn." + +#: builtin/gc.c:63 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "Ungültiger %s: '%s'" + +#: builtin/gc.c:78 +msgid "Too many options specified" +msgstr "Zu viele Optionen spezifiziert" + +#: builtin/gc.c:103 +#, c-format +msgid "insanely long object directory %.*s" +msgstr "wahnsinnig langes Objekt-Verzeichnis %.*s" + +#: builtin/gc.c:223 +#, c-format +msgid "Auto packing the repository for optimum performance.\n" +msgstr "Automatische Paketierung des Repositories für optimale Leitung.\n" + +#: builtin/gc.c:226 +#, c-format +msgid "" +"Auto packing the repository for optimum performance. You may also\n" +"run \"git gc\" manually. See \"git help gc\" for more information.\n" +msgstr "" +"Automatische Paketierung des Repositories für optimale Leitung. Du darfst " +"auch\n" +"\"git gc\" manuell ausführen. Siehe \"git help gc\" für weitere " +"Informationen.\n" + +#: builtin/gc.c:256 +msgid "" +"There are too many unreachable loose objects; run 'git prune' to remove them." +msgstr "" +"Es gibt zu viele unerreichbare, verlorene Objekte; führe 'git prune' aus um " +"diese zu entfernen." + +#: builtin/grep.c:216 +#, c-format +msgid "grep: failed to create thread: %s" +msgstr "grep: Fehler beim Erzeugen eines Thread: %s" + +#: builtin/grep.c:402 +#, c-format +msgid "Failed to chdir: %s" +msgstr "Fehler beim Verzeichniswechsel: %s" + +#: builtin/grep.c:478 builtin/grep.c:512 +#, c-format +msgid "unable to read tree (%s)" +msgstr "konnte Baum (%s) nicht lesen" + +#: builtin/grep.c:526 +#, c-format +msgid "unable to grep from object of type %s" +msgstr "kann \"grep\" nicht mit Objekt des Typs \"%s\" durchführen" + +#: builtin/grep.c:584 +#, c-format +msgid "switch `%c' expects a numerical value" +msgstr "Schalter '%c' erwartet einen numerischen Wert" + +#: builtin/grep.c:601 +#, c-format +msgid "cannot open '%s'" +msgstr "kann '%s' nicht öffnen" + +#: builtin/grep.c:888 +msgid "no pattern given." +msgstr "keine Muster gegeben" + +#: builtin/grep.c:902 +#, c-format +msgid "bad object %s" +msgstr "schlechtes Objekt %s" + +#: builtin/grep.c:943 +msgid "--open-files-in-pager only works on the worktree" +msgstr "--open-files-in-pager arbeitet nur auf dem Arbeitsbaum" + +#: builtin/grep.c:966 +msgid "--cached or --untracked cannot be used with --no-index." +msgstr "--cached oder --untracked kann nicht mit --no-index benutzt werden" + +#: builtin/grep.c:971 +msgid "--no-index or --untracked cannot be used with revs." +msgstr "--no-index oder --untracked kann nicht mit Revisionen benutzt werden" + +#: builtin/grep.c:974 +msgid "--[no-]exclude-standard cannot be used for tracked contents." +msgstr "" +"--[no-]exlude-standard kann nicht mit verfolgten Inhalten benutzt werden" + +#: builtin/grep.c:982 +msgid "both --cached and trees are given." +msgstr "sowohl --cached als auch Bäume gegeben" + +#: builtin/init-db.c:35 +#, c-format +msgid "Could not make %s writable by group" +msgstr "Konnte %s nicht schreibbar für Gruppen machen" + +#: builtin/init-db.c:62 +#, c-format +msgid "insanely long template name %s" +msgstr "verrückt langer Vorlagen-Name %s" + +#: builtin/init-db.c:67 +#, c-format +msgid "cannot stat '%s'" +msgstr "'%s' kann nicht gelesen werden" + +#: builtin/init-db.c:73 +#, c-format +msgid "cannot stat template '%s'" +msgstr "kann Vorlage '%s' nicht lesen" + +#: builtin/init-db.c:80 +#, c-format +msgid "cannot opendir '%s'" +msgstr "kann Verzeichnis '%s' nicht öffnen" + +#: builtin/init-db.c:97 +#, c-format +msgid "cannot readlink '%s'" +msgstr "kann Verknüfpung '%s' nicht lesen" + +#: builtin/init-db.c:99 +#, c-format +msgid "insanely long symlink %s" +msgstr "verrückt lange symbolische Verknüpfung %s" + +#: builtin/init-db.c:102 +#, c-format +msgid "cannot symlink '%s' '%s'" +msgstr "kann '%s' '%s' nicht symbolisch verknüpfen" + +#: builtin/init-db.c:106 +#, c-format +msgid "cannot copy '%s' to '%s'" +msgstr "kann '%s' nicht nach '%s' kopieren" + +#: builtin/init-db.c:110 +#, c-format +msgid "ignoring template %s" +msgstr "ignoriere Vorlage %s" + +#: builtin/init-db.c:133 +#, c-format +msgid "insanely long template path %s" +msgstr "verrückt langer Vorlagen-Pfad %s" + +#: builtin/init-db.c:141 +#, c-format +msgid "templates not found %s" +msgstr "Vorlagen nicht gefunden %s" + +#: builtin/init-db.c:154 +#, c-format +msgid "not copying templates of a wrong format version %d from '%s'" +msgstr "kopiere keine Vorlagen mit einer falschen Formatversion %d von '%s'" + +#: builtin/init-db.c:192 +#, c-format +msgid "insane git directory %s" +msgstr "verrücktes git Verzeichnis %s" + +#: builtin/init-db.c:322 builtin/init-db.c:325 +#, c-format +msgid "%s already exists" +msgstr "%s existiert bereits" + +#: builtin/init-db.c:354 +#, c-format +msgid "unable to handle file type %d" +msgstr "kann Dateityp %d nicht behandeln" + +#: builtin/init-db.c:357 +#, c-format +msgid "unable to move %s to %s" +msgstr "konnte %s nicht nach %s verschieben" + +#: builtin/init-db.c:362 +#, c-format +msgid "Could not create git link %s" +msgstr "Konnte git-Verknüfung %s nicht erstellen" + +#. +#. * TRANSLATORS: The first '%s' is either "Reinitialized +#. * existing" or "Initialized empty", the second " shared" or +#. * "", and the last '%s%s' is the verbatim directory name. +#. +#: builtin/init-db.c:419 +#, c-format +msgid "%s%s Git repository in %s%s\n" +msgstr "%s%s Git-Projektarchiv in %s%s\n" + +#: builtin/init-db.c:420 +msgid "Reinitialized existing" +msgstr "Reinitialisierte existierendes" + +#: builtin/init-db.c:420 +msgid "Initialized empty" +msgstr "Initialisierte leeres" + +#: builtin/init-db.c:421 +msgid " shared" +msgstr " geteilt" + +#: builtin/init-db.c:440 +msgid "cannot tell cwd" +msgstr "kann nicht \"cwd\" sagen" + +#: builtin/init-db.c:521 builtin/init-db.c:528 +#, c-format +msgid "cannot mkdir %s" +msgstr "kann Verzeichnis %s nicht erstellen" + +#: builtin/init-db.c:532 +#, c-format +msgid "cannot chdir to %s" +msgstr "kann nicht zu Verzeichnis %s wechseln" + +#: builtin/init-db.c:554 +#, c-format +msgid "" +"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-" +"dir=<directory>)" +msgstr "" +"%s (oder --work-tree=<Verzeichnis>) nicht erlaubt ohne Spezifizierung von %s " +"(oder --git-dir=<Verzeichnis>)" + +#: builtin/init-db.c:578 +msgid "Cannot access current working directory" +msgstr "Kann nicht auf aktuelles Arbeitsverzeichnis zugreifen." + +#: builtin/init-db.c:585 +#, c-format +msgid "Cannot access work tree '%s'" +msgstr "Kann nicht auf Arbeitsbaum '%s' zugreifen." + +#: builtin/log.c:187 +#, c-format +msgid "Final output: %d %s\n" +msgstr "letzte Ausgabe: %d %s\n" + +#: builtin/log.c:395 builtin/log.c:483 +#, c-format +msgid "Could not read object %s" +msgstr "Kann Objekt %s nicht lesen." + +#: builtin/log.c:507 +#, c-format +msgid "Unknown type: %d" +msgstr "Unbekannter Typ: %d" + +#: builtin/log.c:596 +msgid "format.headers without value" +msgstr "format.headers ohne Wert" + +#: builtin/log.c:669 +msgid "name of output directory is too long" +msgstr "Name des Ausgabeverzeichnisses ist zu lang." + +#: builtin/log.c:680 +#, c-format +msgid "Cannot open patch file %s" +msgstr "Kann Patch-Datei %s nicht öffnen" + +#: builtin/log.c:694 +msgid "Need exactly one range." +msgstr "Brauche genau einen Bereich." + +#: builtin/log.c:702 +msgid "Not a range." +msgstr "Kein Bereich." + +#: builtin/log.c:739 +msgid "Could not extract email from committer identity." +msgstr "Konnte E-Mail von der Intentität des Einreichers nicht extrahieren." + +#: builtin/log.c:785 +msgid "Cover letter needs email format" +msgstr "Deckblatt benötigt E-Mail-Format" + +#: builtin/log.c:879 +#, c-format +msgid "insane in-reply-to: %s" +msgstr "verrücktes in-reply-to: %s" + +#: builtin/log.c:952 +msgid "Two output directories?" +msgstr "Zwei Ausgabeverzeichnisse?" + +#: builtin/log.c:1173 +#, c-format +msgid "bogus committer info %s" +msgstr "unechte Einreicher-Information %s" + +#: builtin/log.c:1218 +msgid "-n and -k are mutually exclusive." +msgstr "-n und -k sind zueinander exklusiv" + +#: builtin/log.c:1220 +msgid "--subject-prefix and -k are mutually exclusive." +msgstr "--subject-prefix und -k sind zueinander exklusiv" + +#: builtin/log.c:1225 builtin/shortlog.c:284 +#, c-format +msgid "unrecognized argument: %s" +msgstr "nicht erkanntes Argument: %s" + +#: builtin/log.c:1228 +msgid "--name-only does not make sense" +msgstr "--name-only macht keinen Sinn" + +#: builtin/log.c:1230 +msgid "--name-status does not make sense" +msgstr "--name-status macht keinen Sinn" + +#: builtin/log.c:1232 +msgid "--check does not make sense" +msgstr "--check macht keinen Sinn" + +#: builtin/log.c:1255 +msgid "standard output, or directory, which one?" +msgstr "Standard-Ausgabe oder Verzeichnis, welches von beidem?" + +#: builtin/log.c:1257 +#, c-format +msgid "Could not create directory '%s'" +msgstr "Konnte Verzeichnis '%s' nicht erstellen." + +#: builtin/log.c:1410 +msgid "Failed to create output files" +msgstr "Fehler beim Erstellen der Ausgabedateien." + +#: builtin/log.c:1514 +#, c-format +msgid "" +"Could not find a tracked remote branch, please specify <upstream> manually.\n" +msgstr "" +"Konnte gefolgten, entfernten Zweig nicht finden, bitte spezifiziere " +"<upstream> manuell.\n" + +#: builtin/log.c:1530 builtin/log.c:1532 builtin/log.c:1544 +#, c-format +msgid "Unknown commit %s" +msgstr "Unbekannte Version %s" + +#: builtin/merge.c:91 +msgid "switch `m' requires a value" +msgstr "Schalter 'm' erfordert einen Wert." + +#: builtin/merge.c:128 +#, c-format +msgid "Could not find merge strategy '%s'.\n" +msgstr "Konnte Zusammenführungsstrategie '%s' nicht finden.\n" + +#: builtin/merge.c:129 +#, c-format +msgid "Available strategies are:" +msgstr "Verfügbare Strategien sind:" + +#: builtin/merge.c:134 +#, c-format +msgid "Available custom strategies are:" +msgstr "Verfügbare benutzerdefinierte Strategien sind:" + +#: builtin/merge.c:241 +msgid "could not run stash." +msgstr "Konnte \"stash\" nicht ausführen." + +#: builtin/merge.c:246 +msgid "stash failed" +msgstr "\"stash\" fehlgeschlagen" + +#: builtin/merge.c:251 +#, c-format +msgid "not a valid object: %s" +msgstr "kein gültiges Objekt: %s" + +#: builtin/merge.c:270 builtin/merge.c:287 +msgid "read-tree failed" +msgstr "read-tree fehlgeschlagen" + +#: builtin/merge.c:317 +msgid " (nothing to squash)" +msgstr " (nichts zu quetschen)" + +#: builtin/merge.c:330 +#, c-format +msgid "Squash commit -- not updating HEAD\n" +msgstr "Quetsche Version -- aktualisiere Zweigspitze (HEAD) nicht\n" + +#: builtin/merge.c:362 +msgid "Writing SQUASH_MSG" +msgstr "Schreibe SQUASH_MSG" + +#: builtin/merge.c:364 +msgid "Finishing SQUASH_MSG" +msgstr "Schließe SQUASH_MSG ab" + +#: builtin/merge.c:386 +#, c-format +msgid "No merge message -- not updating HEAD\n" +msgstr "Keine Zusammenführungsbeschreibung -- aktualisiere Zweigspitze (HEAD) " +"nicht\n" + +#: builtin/merge.c:437 +#, c-format +msgid "'%s' does not point to a commit" +msgstr "'%s' zeigt auf keine Version" + +#: builtin/merge.c:536 +#, c-format +msgid "Bad branch.%s.mergeoptions string: %s" +msgstr "Schlechter branch.%s.mergeoptions String: %s" + +#: builtin/merge.c:629 +msgid "git write-tree failed to write a tree" +msgstr "\"git write-tree\" schlug beim Schreiben eines Baumes fehl" + +#: builtin/merge.c:679 +msgid "failed to read the cache" +msgstr "Lesen des Zwischenspeichers fehlgeschlagen" + +#: builtin/merge.c:696 +msgid "Unable to write index." +msgstr "Konnte Bereitstellung nicht schreiben." + +#: builtin/merge.c:709 +msgid "Not handling anything other than two heads merge." +msgstr "Behandle nichts anderes als die Zusammenführung von zwei Köpfen." + +#: builtin/merge.c:723 +#, c-format +msgid "Unknown option for merge-recursive: -X%s" +msgstr "Unbekannte Option für merge-recursive: -X%s" + +#: builtin/merge.c:737 +#, c-format +msgid "unable to write %s" +msgstr "konnte %s nicht schreiben" + +#: builtin/merge.c:876 +#, c-format +msgid "Could not read from '%s'" +msgstr "konnte nicht von '%s' lesen" + +#: builtin/merge.c:885 +#, c-format +msgid "Not committing merge; use 'git commit' to complete the merge.\n" +msgstr "" +"Zusammenführung nicht eingetragen; benutze 'git commit' um die " +"Zusammenführung abzuschließen.\n" + +#: builtin/merge.c:891 +msgid "" +"Please enter a commit message to explain why this merge is necessary,\n" +"especially if it merges an updated upstream into a topic branch.\n" +"\n" +"Lines starting with '#' will be ignored, and an empty message aborts\n" +"the commit.\n" +msgstr "" +"Bitte gebe eine Versionsbeschreibung ein um zu erklären, warum diese " +"Zusammenführung erforderlich ist,\n" +"insbesondere wenn es einen aktualisierten entfernten Zweig mit einem " +"Thema-Zweig zusammenführt.\n" +"\n" +"Zeilen beginnend mit '#' werden ignoriert, und eine leere Beschreibung " +"bricht die Eintragung ab.\n" + +#: builtin/merge.c:915 +msgid "Empty commit message." +msgstr "Leere Versionsbeschreibung." + +#: builtin/merge.c:927 +#, c-format +msgid "Wonderful.\n" +msgstr "Wunderbar.\n" + +#: builtin/merge.c:1000 +#, c-format +msgid "Automatic merge failed; fix conflicts and then commit the result.\n" +msgstr "" +"Automatische Zusammenführung fehlgeschlagen; behebe die Konflikte und trage " +"dann das Ergebnis ein.\n" + +#: builtin/merge.c:1016 +#, c-format +msgid "'%s' is not a commit" +msgstr "'%s' ist keine Version" + +#: builtin/merge.c:1057 +msgid "No current branch." +msgstr "Kein aktueller Zweig." + +#: builtin/merge.c:1059 +msgid "No remote for the current branch." +msgstr "Kein anderes Archiv für den aktuellen Zweig." + +#: builtin/merge.c:1061 +msgid "No default upstream defined for the current branch." +msgstr "Kein entferntes Standard-Projektarchiv für den aktuellen Zweig " +"definiert." + +#: builtin/merge.c:1066 +#, c-format +msgid "No remote tracking branch for %s from %s" +msgstr "Kein entfernter Übernahmezweig für %s von %s" + +#: builtin/merge.c:1188 +msgid "There is no merge to abort (MERGE_HEAD missing)." +msgstr "Es gibt keine Zusammenführung zum Abbrechen (vermisse MERGE_HEAD)" + +#: builtin/merge.c:1204 git-pull.sh:31 +msgid "" +"You have not concluded your merge (MERGE_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" +"Du hast deine Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert).\n" +"Bitte trage deine Änderungen ein, bevor du zusammenführen kannst." + +#: builtin/merge.c:1207 git-pull.sh:34 +msgid "You have not concluded your merge (MERGE_HEAD exists)." +msgstr "" +"Du hast deine Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert)." + +#: builtin/merge.c:1211 +msgid "" +"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" +"Du hast deinen \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD " +"existiert).\n" +"Bitte trage deine Änderungen ein, bevor du zusammenführen kannst." + +#: builtin/merge.c:1214 +msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." +msgstr "" +"Du hast deinen \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD " +"existiert)." + +#: builtin/merge.c:1223 +msgid "You cannot combine --squash with --no-ff." +msgstr "Du kannst --squash nicht mit --no-ff kombinieren." + +#: builtin/merge.c:1228 +msgid "You cannot combine --no-ff with --ff-only." +msgstr "Du kannst --no-ff nicht mit --ff--only kombinieren." + +#: builtin/merge.c:1235 +msgid "No commit specified and merge.defaultToUpstream not set." +msgstr "Keine Version spezifiziert und merge.defaultToUpstream nicht gesetzt." + +#: builtin/merge.c:1266 +msgid "Can merge only exactly one commit into empty head" +msgstr "Kann nur exakt eine Version in einem leeren Kopf zusammenführen." + +#: builtin/merge.c:1269 +msgid "Squash commit into empty head not supported yet" +msgstr "" +"Quetschen einer Version in einen leeren Kopf wird momentan nicht unterstützt." + +#: builtin/merge.c:1271 +msgid "Non-fast-forward commit does not make sense into an empty head" +msgstr "nicht vorzuspulende Version macht in einem leeren Kopf keinen Sinn" + +#: builtin/merge.c:1275 builtin/merge.c:1319 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - nichts was wir zusammenführen können" + +#: builtin/merge.c:1382 +#, c-format +msgid "Updating %s..%s\n" +msgstr "Aktualisiere %s..%s\n" + +#: builtin/merge.c:1420 +#, c-format +msgid "Trying really trivial in-index merge...\n" +msgstr "Probiere wirklich triviale \"in-index\"-Zusammenführung...\n" + +#: builtin/merge.c:1427 +#, c-format +msgid "Nope.\n" +msgstr "Nein.\n" + +#: builtin/merge.c:1459 +msgid "Not possible to fast-forward, aborting." +msgstr "Vorspulen nicht möglich, breche ab." + +#: builtin/merge.c:1482 builtin/merge.c:1559 +#, c-format +msgid "Rewinding the tree to pristine...\n" +msgstr "Rücklauf des Baumes bis zum Ursprung...\n" + +#: builtin/merge.c:1486 +#, c-format +msgid "Trying merge strategy %s...\n" +msgstr "Probiere Zusammenführungsstrategie %s...\n" + +#: builtin/merge.c:1550 +#, c-format +msgid "No merge strategy handled the merge.\n" +msgstr "Keine Zusammenführungsstrategie behandelt die Zusammenführung.\n" + +#: builtin/merge.c:1552 +#, c-format +msgid "Merge with strategy %s failed.\n" +msgstr "Zusammenführung mit Strategie %s fehlgeschlagen.\n" + +#: builtin/merge.c:1561 +#, c-format +msgid "Using the %s to prepare resolving by hand.\n" +msgstr "Benutze \"%s\" um die Auflösung per Hand vorzubereiten.\n" + +#: builtin/merge.c:1572 +#, c-format +msgid "Automatic merge went well; stopped before committing as requested\n" +msgstr "" +"Automatische Zusammenführung gut gegangen; stoppe, wie angefragt, vor der " +"Eintragung\n" + +#: builtin/mv.c:108 +#, c-format +msgid "Checking rename of '%s' to '%s'\n" +msgstr "Prüfe Umbenennen von '%s' nach '%s'\n" + +#: builtin/mv.c:112 +msgid "bad source" +msgstr "schlechte Quelle" + +#: builtin/mv.c:115 +msgid "can not move directory into itself" +msgstr "kann Verzeichnis nicht in sich selbst verschieben" + +#: builtin/mv.c:118 +msgid "cannot move directory over file" +msgstr "kann Verzeichnis nicht über Datei verschieben" + +#: builtin/mv.c:128 +#, c-format +msgid "Huh? %.*s is in index?" +msgstr "Huh? %.*s ist bereitgestellt?" + +#: builtin/mv.c:140 +msgid "source directory is empty" +msgstr "Quellverzeichnis ist leer" + +#: builtin/mv.c:171 +msgid "not under version control" +msgstr "nicht unter Versionskontrolle" + +#: builtin/mv.c:173 +msgid "destination exists" +msgstr "Ziel existiert" + +#: builtin/mv.c:181 +#, c-format +msgid "overwriting '%s'" +msgstr "überschreibe '%s'" + +#: builtin/mv.c:184 +msgid "Cannot overwrite" +msgstr "Kann nicht überschreiben" + +#: builtin/mv.c:187 +msgid "multiple sources for the same target" +msgstr "mehrere Quellen für das selbe Ziel" + +#: builtin/mv.c:202 +#, c-format +msgid "%s, source=%s, destination=%s" +msgstr "%s, Quelle=%s, Ziel=%s" + +#: builtin/mv.c:212 +#, c-format +msgid "Renaming %s to %s\n" +msgstr "Benenne %s nach %s um\n" + +#: builtin/mv.c:215 +#, c-format +msgid "renaming '%s' failed" +msgstr "Umbenennen von '%s' fehlgeschlagen" + +#: builtin/notes.c:139 +#, c-format +msgid "unable to start 'show' for object '%s'" +msgstr "konnte 'show' für Objekt '%s' nicht starten" + +#: builtin/notes.c:145 +msgid "can't fdopen 'show' output fd" +msgstr "konnte Datei-Deskriptor für Ausgabe von 'show' nicht öffnen" + +#: builtin/notes.c:155 +#, c-format +msgid "failed to close pipe to 'show' for object '%s'" +msgstr "Schließen der Pipe zu 'show' für Objekt '%s' fehlgeschlagen." + +#: builtin/notes.c:158 +#, c-format +msgid "failed to finish 'show' for object '%s'" +msgstr "'show' konnte für Objekt '%s' nicht abgeschlossen werden" + +#: builtin/notes.c:175 builtin/tag.c:343 +#, c-format +msgid "could not create file '%s'" +msgstr "konnte Datei '%s' nicht erstellen" + +#: builtin/notes.c:189 +msgid "Please supply the note contents using either -m or -F option" +msgstr "Bitte liefere den Notiz-Inhalt unter Verwendung der Option -m oder -F." + +#: builtin/notes.c:210 builtin/notes.c:973 +#, c-format +msgid "Removing note for object %s\n" +msgstr "Entferne Notiz für Objekt %s\n" + +#: builtin/notes.c:215 +msgid "unable to write note object" +msgstr "Konnte Notiz-Objekt nicht schreiben" + +#: builtin/notes.c:217 +#, c-format +msgid "The note contents has been left in %s" +msgstr "Die Notiz-Inhalte wurden in %s belassen" + +#: builtin/notes.c:251 builtin/tag.c:521 +#, c-format +msgid "cannot read '%s'" +msgstr "kann '%s' nicht lesen" + +#: builtin/notes.c:253 builtin/tag.c:524 +#, c-format +msgid "could not open or read '%s'" +msgstr "konnte '%s' nicht öffnen oder lesen" + +#: builtin/notes.c:272 builtin/notes.c:445 builtin/notes.c:447 +#: builtin/notes.c:507 builtin/notes.c:561 builtin/notes.c:644 +#: builtin/notes.c:649 builtin/notes.c:724 builtin/notes.c:766 +#: builtin/notes.c:968 builtin/reset.c:293 builtin/tag.c:537 +#, c-format +msgid "Failed to resolve '%s' as a valid ref." +msgstr "'%s' konnte nicht als gültige Referenz aufgelöst werden." + +#: builtin/notes.c:275 +#, c-format +msgid "Failed to read object '%s'." +msgstr "Fehler beim Lesen des Objektes '%s'." + +#: builtin/notes.c:299 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "Kann uninitialisierten/unreferenzierten Notiz-Baum nicht eintragen." + +#: builtin/notes.c:340 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "Schlechter notes.rewriteMode Wert: '%s'" + +#: builtin/notes.c:350 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" +"Neuschreiben der Notizen in %s zurückgewiesen (außerhalb von refs/notes/)" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: builtin/notes.c:377 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Schlechter %s Wert: '%s'" + +#: builtin/notes.c:441 +#, c-format +msgid "Malformed input line: '%s'." +msgstr "Fehlerhafte Eingabezeile: '%s'." + +#: builtin/notes.c:456 +#, c-format +msgid "Failed to copy notes from '%s' to '%s'" +msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'" + +#: builtin/notes.c:500 builtin/notes.c:554 builtin/notes.c:627 +#: builtin/notes.c:639 builtin/notes.c:712 builtin/notes.c:759 +#: builtin/notes.c:1033 +msgid "too many parameters" +msgstr "zu viele Parameter" + +#: builtin/notes.c:513 builtin/notes.c:772 +#, c-format +msgid "No note found for object %s." +msgstr "Kein Notiz für Objekt %s gefunden." + +#: builtin/notes.c:580 +#, c-format +msgid "" +"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" +"Konnte Notizen nicht hinzufügen. Existierende Notizen für Objekt %s " +"gefunden. Verwende '-f' um die existierenden Notizen zu überschreiben." + +#: builtin/notes.c:585 builtin/notes.c:662 +#, c-format +msgid "Overwriting existing notes for object %s\n" +msgstr "Überschreibe existierende Notizen für Objekt %s\n" + +#: builtin/notes.c:635 +msgid "too few parameters" +msgstr "zu wenig Parameter" + +#: builtin/notes.c:656 +#, c-format +msgid "" +"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" +"Kann Notizen nicht kopieren. Existierende Notizen für Objekt %s gefunden. " +"Verwende '-f' um die existierenden Notizen zu überschreiben." + +#: builtin/notes.c:668 +#, c-format +msgid "Missing notes on source object %s. Cannot copy." +msgstr "Vermisse Notizen für Quell-Objekt %s. Kann nicht kopieren." + +#: builtin/notes.c:717 +#, c-format +msgid "" +"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" +"Please use 'git notes add -f -m/-F/-c/-C' instead.\n" +msgstr "" +"Die Optionen -m/-F/-c/-C sind veraltet für das 'edit' Unterkommando.\n" +"Bitte benutze stattdessen 'git notes add -f -m/-F/-c/-C'.\n" + +#: builtin/notes.c:971 +#, c-format +msgid "Object %s has no note\n" +msgstr "Objekt %s hat keine Notiz\n" + +#: builtin/notes.c:1103 +#, c-format +msgid "Unknown subcommand: %s" +msgstr "Unbekanntes Unterkommando: %s" + +#: builtin/pack-objects.c:2310 +#, c-format +msgid "unsupported index version %s" +msgstr "Nicht unterstützte Bereitstellungsversion %s" + +#: builtin/pack-objects.c:2314 +#, c-format +msgid "bad index version '%s'" +msgstr "Schlechte Bereitstellungsversion '%s'" + +#: builtin/pack-objects.c:2322 +#, c-format +msgid "option %s does not accept negative form" +msgstr "Option %s akzeptiert keine negative Form" + +#: builtin/pack-objects.c:2326 +#, c-format +msgid "unable to parse value '%s' for option %s" +msgstr "konnte Wert '%s' für Option %s nicht analysieren" + +#: builtin/push.c:44 +msgid "tag shorthand without <tag>" +msgstr "Kurzschrift für Markierung ohne <Markierung>" + +#: builtin/push.c:63 +msgid "--delete only accepts plain target ref names" +msgstr "--delete akzeptiert nur reine Referenz-Namen als Ziel" + +#: builtin/push.c:83 +#, c-format +msgid "" +"You are not currently on a branch.\n" +"To push the history leading to the current (detached HEAD)\n" +"state now, use\n" +"\n" +" git push %s HEAD:<name-of-remote-branch>\n" +msgstr "" +"Du befindest dich sich im Moment auf keinem Zweig.\n" +"Um die Historie, führend zum aktuellen (freistehende Zweigspitze (HEAD))\n" +"Status zu versenden, benutze\n" +"\n" +" git push %s HEAD:<Name-des-entfernten-Zweiges>\n" + +#: builtin/push.c:90 +#, c-format +msgid "" +"The current branch %s has no upstream branch.\n" +"To push the current branch and set the remote as upstream, use\n" +"\n" +" git push --set-upstream %s %s\n" +msgstr "" +"Der aktuelle Zweig %s hat keinen Zweig im entfernten Projektarchiv.\n" +"Um den aktuellen Zweig zu versenden und die Entfernung als entferntes\n" +"Projektarchiv zu setzen, benutze\n" +"\n" +" git push --set-upstream %s %s\n" + +#: builtin/push.c:98 +#, c-format +msgid "The current branch %s has multiple upstream branches, refusing to push." +msgstr "" +"Der aktuelle Zweig %s hat mehrere entfernte Zweige, Versand verweigert." + +#: builtin/push.c:101 +#, c-format +msgid "" +"You are pushing to remote '%s', which is not the upstream of\n" +"your current branch '%s', without telling me what to push\n" +"to update which remote branch." +msgstr "" +"Du versendest nach '%s', welches kein entferntes Projektarchiv deines\n" +"aktuellen Zweiges '%s' ist, ohne mir mitzuteilen, was ich versenden\n" +"soll, um welchen entfernten Zweig zu aktualisieren." + +#: builtin/push.c:127 +msgid "" +"You didn't specify any refspecs to push, and push.default is \"nothing\"." +msgstr "" +"Du hast keine Referenzspezifikationen zum Versenden spezifiziert, und " +"push.default ist \"nothing\"." + +#: builtin/push.c:147 +#, c-format +msgid "Pushing to %s\n" +msgstr "Sende nach %s\n" + +#: builtin/push.c:151 +#, c-format +msgid "failed to push some refs to '%s'" +msgstr "Fehler beim Versenden einiger Referenzen nach '%s'" + +#: builtin/push.c:159 +#, c-format +msgid "" +"To prevent you from losing history, non-fast-forward updates were rejected\n" +"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n" +"'Note about fast-forwards' section of 'git push --help' for details.\n" +msgstr "" +"Um dich vor Verlust von Historie zu bewahren, wurden nicht vorzuspulende " +"Aktualisierungen zurückgewiesen.\n" +"Führe die entfernten Änderungen zusammen (z.B. 'git pull') bevor du erneut " +"versendest. Siehe auch die 'Note about fast-forwards' Sektion von \n" +"'git push --help' für weitere Details.\n" + +#: builtin/push.c:176 +#, c-format +msgid "bad repository '%s'" +msgstr "schlechtes Projektarchiv '%s'" + +#: builtin/push.c:177 +msgid "" +"No configured push destination.\n" +"Either specify the URL from the command-line or configure a remote " +"repository using\n" +"\n" +" git remote add <name> <url>\n" +"\n" +"and then push using the remote name\n" +"\n" +" git push <name>\n" +msgstr "" +"Kein Ziel zum Versenden konfiguriert.\n" +"Entweder spezifizierst du die URL von der Kommandozeile oder konfigurierst " +"ein entferntes Projektarchiv unter Benutzung von\n" +"\n" +" git remote add <Name> <URL>\n" +"\n" +"und versendest dann unter Benutzung dieses Namens\n" +"\n" +" git push <Name>\n" + +#: builtin/push.c:192 +msgid "--all and --tags are incompatible" +msgstr "--all und --tags sind inkompatibel" + +#: builtin/push.c:193 +msgid "--all can't be combined with refspecs" +msgstr "--all kann nicht mit Referenzspezifikationen kombiniert werden" + +#: builtin/push.c:198 +msgid "--mirror and --tags are incompatible" +msgstr "--mirror und --tags sind inkompatibel" + +#: builtin/push.c:199 +msgid "--mirror can't be combined with refspecs" +msgstr "--mirror kann nicht mit Referenzspezifikationen kombiniert werden" + +#: builtin/push.c:204 +msgid "--all and --mirror are incompatible" +msgstr "--all und --mirror sind inkompatibel" + +#: builtin/push.c:284 +msgid "--delete is incompatible with --all, --mirror and --tags" +msgstr "--delete ist inkompatibel mit --all, --mirror und --tags" + +#: builtin/push.c:286 +msgid "--delete doesn't make sense without any refs" +msgstr "--delete macht ohne irgendeine Referenz ohne keinen Sinn" + +#: builtin/reset.c:33 +msgid "mixed" +msgstr "gemischt" + +#: builtin/reset.c:33 +msgid "soft" +msgstr "weich" + +#: builtin/reset.c:33 +msgid "hard" +msgstr "hart" + +#: builtin/reset.c:33 +msgid "keep" +msgstr "halten" + +#: builtin/reset.c:77 +msgid "You do not have a valid HEAD." +msgstr "Du hast keine gültige Zweigspitze (HEAD)." + +#: builtin/reset.c:79 +msgid "Failed to find tree of HEAD." +msgstr "Fehler beim Finden des Baumes der Zweigspitze (HEAD)." + +#: builtin/reset.c:85 +#, c-format +msgid "Failed to find tree of %s." +msgstr "Fehler beim Finden des Baumes von %s." + +#: builtin/reset.c:96 +msgid "Could not write new index file." +msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." + +#: builtin/reset.c:106 +#, c-format +msgid "HEAD is now at %s" +msgstr "Zweigspitze (HEAD) ist jetzt bei %s" + +#: builtin/reset.c:130 +msgid "Could not read index" +msgstr "Konnte Bereitstellung nicht lesen" + +#: builtin/reset.c:133 +msgid "Unstaged changes after reset:" +msgstr "Nicht bereitgestellte Änderungen nach Zurücksetzung:" + +#: builtin/reset.c:223 +#, c-format +msgid "Cannot do a %s reset in the middle of a merge." +msgstr "" +"Kann keine %s Zurücksetzung innerhalb einer Zusammenführung durchführen." + +#: builtin/reset.c:297 +#, c-format +msgid "Could not parse object '%s'." +msgstr "Konnte Objekt '%s' nicht parsen." + +#: builtin/reset.c:302 +msgid "--patch is incompatible with --{hard,mixed,soft}" +msgstr "--patch ist inkompatibel mit --{hard,mixed,soft}" + +#: builtin/reset.c:311 +msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." +msgstr "" +"--mixed mit Pfaden ist veraltet; benutze stattdessen 'git reset -- <Pfade>'." + +#: builtin/reset.c:313 +#, c-format +msgid "Cannot do %s reset with paths." +msgstr "Kann keine %s Zurücksetzung mit Pfaden machen." + +#: builtin/reset.c:325 +#, c-format +msgid "%s reset is not allowed in a bare repository" +msgstr "%s Zurücksetzung ist in einem leeren Projektarchiv nicht erlaubt" + +#: builtin/reset.c:341 +#, c-format +msgid "Could not reset index file to revision '%s'." +msgstr "Konnte Bereitstellungsdatei nicht zu Revision '%s' zurücksetzen." + +#: builtin/revert.c:70 builtin/revert.c:91 +#, c-format +msgid "%s: %s cannot be used with %s" +msgstr "%s: %s kann nicht mit %s benutzt werden" + +#: builtin/revert.c:126 +msgid "program error" +msgstr "Programmfehler" + +#: builtin/revert.c:209 +msgid "revert failed" +msgstr "\"revert\" fehlgeschlagen" + +#: builtin/revert.c:224 +msgid "cherry-pick failed" +msgstr "\"cherry-pick\" fehlgeschlagen" + +#: builtin/rm.c:109 +#, c-format +msgid "" +"'%s' has staged content different from both the file and the HEAD\n" +"(use -f to force removal)" +msgstr "" +"'%s' hat bereitgestellten Inhalt unterschiedlich zu der Datei und der\n" +"Zweigspitze (HEAD) (benutze -f um die Entfernung zu erzwingen)" + +#: builtin/rm.c:115 +#, c-format +msgid "" +"'%s' has changes staged in the index\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" +"'%s' hat Änderungen in der Bereitstellung\n" +"(benutze --cached um die Datei zu behalten, oder -f um die Entfernung zu " +"erzwingen)" + +#: builtin/rm.c:119 +#, c-format +msgid "" +"'%s' has local modifications\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" +"'%s' hat lokale Modifikationen\n" +"(benutze --cached um die Datei zu behalten, oder -f um die Entfernung zu " +"erzwingen)" + +#: builtin/rm.c:194 +#, c-format +msgid "not removing '%s' recursively without -r" +msgstr "entferne '%s' nicht rekursiv ohne -r" + +#: builtin/rm.c:230 +#, c-format +msgid "git rm: unable to remove %s" +msgstr "git rm: konnte %s nicht entfernen" + +#: builtin/shortlog.c:157 +#, c-format +msgid "Missing author: %s" +msgstr "fehlender Autor: %s" + +#: builtin/tag.c:58 +#, c-format +msgid "malformed object at '%s'" +msgstr "fehlerhaftes Objekt bei '%s'" + +#: builtin/tag.c:205 +#, c-format +msgid "tag name too long: %.*s..." +msgstr "Markierungsname zu lang: %.*s..." + +#: builtin/tag.c:210 +#, c-format +msgid "tag '%s' not found." +msgstr "Markierung '%s' nicht gefunden." + +#: builtin/tag.c:225 +#, c-format +msgid "Deleted tag '%s' (was %s)\n" +msgstr "Gelöschte Markierung '%s' (war %s)\n" + +#: builtin/tag.c:237 +#, c-format +msgid "could not verify the tag '%s'" +msgstr "Konnte Markierung '%s' nicht verifizieren" + +#: builtin/tag.c:247 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be ignored.\n" +"#\n" +msgstr "" +"\n" +"#\n" +"# Gebe eine Markierungsbeschreibung ein\n" +"# Zeilen beginnend mit '#' werden ignoriert.\n" +"#\n" + +#: builtin/tag.c:254 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be kept; you may remove them yourself if you " +"want to.\n" +"#\n" +msgstr "" +"\n" +"#\n" +"# Gebe eine Markierungsbeschreibung ein\n" +"# Zeilen beginnend mit '#' werden behalten; du darfst diese selbst entfernen " +"wenn du möchtest.\n" +"#\n" + +#: builtin/tag.c:294 +msgid "unable to sign the tag" +msgstr "konnte Markierung nicht signieren" + +#: builtin/tag.c:296 +msgid "unable to write tag file" +msgstr "konnte Markierungsdatei nicht schreiben" + +#: builtin/tag.c:321 +msgid "bad object type." +msgstr "schlechter Objekt-Typ" + +#: builtin/tag.c:334 +msgid "tag header too big." +msgstr "Markierungskopf zu groß." + +#: builtin/tag.c:366 +msgid "no tag message?" +msgstr "keine Markierungsbeschreibung?" + +#: builtin/tag.c:372 +#, c-format +msgid "The tag message has been left in %s\n" +msgstr "Die Markierungsbeschreibung wurde in %s gelassen\n" + +#: builtin/tag.c:421 +msgid "switch 'points-at' requires an object" +msgstr "Wechseln von 'points-at' erfordert ein Objekt" + +#: builtin/tag.c:423 +#, c-format +msgid "malformed object name '%s'" +msgstr "fehlerhafter Objekt-Name '%s'" + +#: builtin/tag.c:502 +msgid "-n option is only allowed with -l." +msgstr "-n Option ist nur erlaubt mit -l." + +#: builtin/tag.c:504 +msgid "--contains option is only allowed with -l." +msgstr "--contains Option ist nur erlaubt mit -l." + +#: builtin/tag.c:506 +msgid "--points-at option is only allowed with -l." +msgstr "--points-at Option ist nur erlaubt mit -l." + +#: builtin/tag.c:514 +msgid "only one -F or -m option is allowed." +msgstr "nur eine -F oder -m Option ist erlaubt." + +#: builtin/tag.c:534 +msgid "too many params" +msgstr "zu viele Parameter" + +#: builtin/tag.c:540 +#, c-format +msgid "'%s' is not a valid tag name." +msgstr "'%s' ist kein gültiger Markierungsname." + +#: builtin/tag.c:545 +#, c-format +msgid "tag '%s' already exists" +msgstr "Markierung '%s' existiert bereits" + +#: builtin/tag.c:563 +#, c-format +msgid "%s: cannot lock the ref" +msgstr "%s: kann Referenz nicht sperren" + +#: builtin/tag.c:565 +#, c-format +msgid "%s: cannot update the ref" +msgstr "%s: kann Referenz nicht aktualisieren" + +#: builtin/tag.c:567 +#, c-format +msgid "Updated tag '%s' (was %s)\n" +msgstr "Aktualisierte Markierung '%s' (war %s)\n" + +#: git-am.sh:49 +msgid "You need to set your committer info first" +msgstr "Du musst zuerst die Informationen des Eintragenden setzen." + +#: git-am.sh:136 +msgid "Repository lacks necessary blobs to fall back on 3-way merge." +msgstr "" +"Dem Projektarchiv fehlen notwendige Blobs um auf eine 3-Wege-Zusammenführung " +"zurückzufallen." + +#: git-am.sh:147 +msgid "" +"Did you hand edit your patch?\n" +"It does not apply to blobs recorded in its index." +msgstr "" +"Hast du den Patch per Hand editiert?\n" +"Er kann nicht auf aufgezeichnete Blobs in seiner Bereitstellung angewendet " +"werden." + +#: git-am.sh:156 +msgid "Falling back to patching base and 3-way merge..." +msgstr "Falle zurück zum Patchen der Basis und der 3-Wege-Zusammenführung..." + +#: git-am.sh:268 +msgid "Only one StGIT patch series can be applied at once" +msgstr "Es kann nur eine StGIT Patch-Serie auf einmal angewendet werden." + +#: git-am.sh:355 +#, sh-format +msgid "Patch format $patch_format is not supported." +msgstr "Patch-Format $patch_format wird nicht unterstützt." + +#: git-am.sh:357 +msgid "Patch format detection failed." +msgstr "Patch-Formaterkennung fehlgeschlagen." + +#: git-am.sh:411 +msgid "-d option is no longer supported. Do not use." +msgstr "-d Option wird nicht länger unterstützt. Nicht benutzen." + +#: git-am.sh:474 +#, sh-format +msgid "previous rebase directory $dotest still exists but mbox given." +msgstr "" +"Vorheriges Verzeichnis des Neuaufbaus $dotest existiert noch, aber mbox " +"gegeben." + +#: git-am.sh:479 +msgid "Please make up your mind. --skip or --abort?" +msgstr "Bitte werde dir klar. --skip oder --abort?" + +#: git-am.sh:506 +msgid "Resolve operation not in progress, we are not resuming." +msgstr "keine Auflösung in Durchführung, wir setzen nicht fort." + +#: git-am.sh:572 +#, sh-format +msgid "Dirty index: cannot apply patches (dirty: $files)" +msgstr "" +"Unsaubere Bereitstellung: kann Patches nicht anwenden (unsauber: $files)" + +#: git-am.sh:748 +msgid "cannot be interactive without stdin connected to a terminal." +msgstr "" +"Kann nicht interaktiv sein, ohne das die Standard-Eingabe mit einem Terminal " +"verbunden ist." + +#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] +#. in your translation. The program will only accept English +#. input at this point. +#: git-am.sh:759 +msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " +msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " + +#: git-am.sh:795 +#, sh-format +msgid "Applying: $FIRSTLINE" +msgstr "Wende an: $FIRSTLINE" + +#: git-am.sh:840 +msgid "No changes -- Patch already applied." +msgstr "Keine Änderungen -- Patches bereits angewendet." + +#: git-am.sh:866 +msgid "applying to an empty history" +msgstr "wende zu leerer Historie an" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:54 +msgid "Do you want me to do it for you [Y/n]? " +msgstr "Willst du, dass ich es für dich mache [Y/n]? " + +#: git-bisect.sh:95 +#, sh-format +msgid "unrecognised option: '$arg'" +msgstr "nicht erkannte Option: '$arg'" + +#: git-bisect.sh:99 +#, sh-format +msgid "'$arg' does not appear to be a valid revision" +msgstr "'$arg' scheint keine gültige Option zu sein" + +#: git-bisect.sh:117 +msgid "Bad HEAD - I need a HEAD" +msgstr "Schlechte Zweigspitze (HEAD) - Ich brauche eine Zweigspitze (HEAD)" + +#: git-bisect.sh:130 +#, sh-format +msgid "" +"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." +msgstr "" +"Auschecken von '$start_head' fehlgeschlagen. Versuche 'git bisect reset " +"<gueltigerzweig>'." + +#: git-bisect.sh:140 +msgid "won't bisect on seeked tree" +msgstr "werde nicht auf gesuchtem Baum halbieren" + +#: git-bisect.sh:144 +msgid "Bad HEAD - strange symbolic ref" +msgstr "Schlechte Zweigspitze (HEAD) - merkwürdige symbolische Referenz" + +#: git-bisect.sh:189 +#, sh-format +msgid "Bad bisect_write argument: $state" +msgstr "Schlechtes \"bisect_write\" Argument: $state" + +#: git-bisect.sh:218 +#, sh-format +msgid "Bad rev input: $arg" +msgstr "Schlechte Referenz-Eingabe: $arg" + +#: git-bisect.sh:232 +msgid "Please call 'bisect_state' with at least one argument." +msgstr "Bitte rufe 'bisect_state' mit mindestens einem Argument." + +#: git-bisect.sh:244 +#, sh-format +msgid "Bad rev input: $rev" +msgstr "Schlechte Referenz-Eingabe: $rev" + +#: git-bisect.sh:250 +msgid "'git bisect bad' can take only one argument." +msgstr "'git bisect bad' kann nur ein Argument entgegennehmen." + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:279 +msgid "Are you sure [Y/n]? " +msgstr "Bist du sicher [Y/n]? " + +#: git-bisect.sh:354 +#, sh-format +msgid "'$invalid' is not a valid commit" +msgstr "'$invalid' ist keine gültige Version" + +#: git-bisect.sh:363 +#, sh-format +msgid "" +"Could not check out original HEAD '$branch'.\n" +"Try 'git bisect reset <commit>'." +msgstr "" +"Konnte die originale Zweigspitze (HEAD) '$branch' nicht auschecken.\n" +"Versuche 'git bisect reset <Version>'." + +#: git-bisect.sh:390 +msgid "No logfile given" +msgstr "Keine Log-Datei gegeben" + +#: git-bisect.sh:391 +#, sh-format +msgid "cannot read $file for replaying" +msgstr "kann $file nicht zum neu abspielen lesen" + +#: git-bisect.sh:408 +msgid "?? what are you talking about?" +msgstr "?? Was redest du da?" + +#: git-bisect.sh:474 +msgid "We are not bisecting." +msgstr "Wir sind nicht beim Halbieren." + +#: git-pull.sh:21 +msgid "" +"Pull is not possible because you have unmerged files.\n" +"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n" +"as appropriate to mark resolution, or use 'git commit -a'." +msgstr "" +"\"pull\" ist nicht möglich weil du nicht zusammengeführte Dateien hast.\n" +"Bitte korrigiere dies im Arbeitsbaum und benutze dann 'git add/rm <Datei>'\n" +"wie vorgesehen, um die Auflösung zu markieren, oder benutze 'git commit -a'." + +#: git-pull.sh:25 +msgid "Pull is not possible because you have unmerged files." +msgstr "" +"\"pull\" ist nicht möglich, weil du nicht zusammengeführte Dateien hast." + +#: git-pull.sh:197 +msgid "updating an unborn branch with changes added to the index" +msgstr "" +"Aktualisiere eine ungeborenen Zweig mit Änderungen, die zur Bereitstellung " +"hinzugefügt wurden" + +#: git-pull.sh:253 +msgid "Cannot merge multiple branches into empty head" +msgstr "Kann nicht mehrere Zweige in einen leeren Kopf zusammenführen" + +#: git-pull.sh:257 +msgid "Cannot rebase onto multiple branches" +msgstr "kann nicht auf mehrere Zweige neu aufbauen" + +#: git-stash.sh:51 +msgid "git stash clear with parameters is unimplemented" +msgstr "git stash clear mit Parametern ist nicht implementiert" + +#: git-stash.sh:74 +msgid "You do not have the initial commit yet" +msgstr "Du hast bisher noch keine initiale Version" + +#: git-stash.sh:89 +msgid "Cannot save the current index state" +msgstr "Kann den aktuellen Zustand der Bereitstellung nicht speichern" + +#: git-stash.sh:123 git-stash.sh:136 +msgid "Cannot save the current worktree state" +msgstr "Kann den aktuellen Zustand des Arbeitsbaumes nicht speichern" + +#: git-stash.sh:140 +msgid "No changes selected" +msgstr "Keine Änderungen ausgewählt" + +#: git-stash.sh:143 +msgid "Cannot remove temporary index (can't happen)" +msgstr "Kann temporäre Bereitstellung nicht entfernen (kann nicht passieren)" + +#: git-stash.sh:156 +msgid "Cannot record working tree state" +msgstr "Kann Zustand des Arbeitsbaumes nicht aufzeichnen" + +#: git-stash.sh:223 +msgid "No local changes to save" +msgstr "Keine lokalen Änderungen zum Speichern" + +#: git-stash.sh:227 +msgid "Cannot initialize stash" +msgstr "Kann \"stash\" nicht initialisieren" + +#: git-stash.sh:235 +msgid "Cannot save the current status" +msgstr "Kann den aktuellen Status nicht speichern" + +#: git-stash.sh:253 +msgid "Cannot remove worktree changes" +msgstr "Kann Änderungen am Arbeitsbaum nicht entfernen" + +#: git-stash.sh:352 +msgid "No stash found." +msgstr "Kein \"stash\" gefunden." + +#: git-stash.sh:359 +#, sh-format +msgid "Too many revisions specified: $REV" +msgstr "Zu viele Revisionen spezifiziert: $REV" + +#: git-stash.sh:365 +#, sh-format +msgid "$reference is not valid reference" +msgstr "$reference ist keine gültige Referenz" + +#: git-stash.sh:393 +#, sh-format +msgid "'$args' is not a stash-like commit" +msgstr "'$args' ist keine \"stash\"-artiger Version" + +#: git-stash.sh:404 +#, sh-format +msgid "'$args' is not a stash reference" +msgstr "'$args' ist keine \"stash\"-Referenz" + +#: git-stash.sh:412 +msgid "unable to refresh index" +msgstr "Konnte die Bereitstellung nicht aktualisieren" + +#: git-stash.sh:416 +msgid "Cannot apply a stash in the middle of a merge" +msgstr "Kann keinen \"stash\" innerhalb einer Zusammenführung anwenden" + +#: git-stash.sh:424 +msgid "Conflicts in index. Try without --index." +msgstr "Konflikte in der Bereitstellung. Versuche es ohne --index." + +#: git-stash.sh:426 +msgid "Could not save index tree" +msgstr "Konnte Bereitstellungsbaum nicht speichern" + +#: git-stash.sh:460 +msgid "Cannot unstage modified files" +msgstr "Kann geänderte Dateien nicht aus der Bereitstellung herausnehmen" + +#: git-stash.sh:491 +#, sh-format +msgid "Dropped ${REV} ($s)" +msgstr "Gelöscht ${REV} ($s)" + +#: git-stash.sh:492 +#, sh-format +msgid "${REV}: Could not drop stash entry" +msgstr "${REV}: Konnte \"stash\"-Eintrag nicht löschen" + +#: git-stash.sh:499 +msgid "No branch name specified" +msgstr "Kein Zweigname spezifiziert" + +#: git-stash.sh:570 +msgid "(To restore them type \"git stash apply\")" +msgstr "(Um es wiederherzustellen, schreibe \"git stash apply\")" + +#: git-submodule.sh:56 +#, sh-format +msgid "cannot strip one component off url '$remoteurl'" +msgstr "Kann eine Komponente von URL '$remoteurl' nicht rausziehen" + +#: git-submodule.sh:108 +#, sh-format +msgid "No submodule mapping found in .gitmodules for path '$path'" +msgstr "Keine Unterprojekt-Zuordnung in .gitmodules für Pfad '$path' gefunden" + +#: git-submodule.sh:149 +#, sh-format +msgid "Clone of '$url' into submodule path '$path' failed" +msgstr "Klonen von '$url' in Unterprojekt-Pfad '$path' fehlgeschlagen" + +#: git-submodule.sh:159 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Git-Verzeichnis '$a' ist Teil des Unterprojekt-Pfades '$b' oder umgekehrt" + +#: git-submodule.sh:247 +#, sh-format +msgid "repo URL: '$repo' must be absolute or begin with ./|../" +msgstr "repo URL: '$repo' muss absolut sein oder mit ./|../ beginnen" + +#: git-submodule.sh:264 +#, sh-format +msgid "'$path' already exists in the index" +msgstr "'$path' existiert bereits in der Bereitstellung" + +#: git-submodule.sh:281 +#, sh-format +msgid "'$path' already exists and is not a valid git repo" +msgstr "'$path' existiert bereits und ist kein gültiges Git-Projektarchiv" + +#: git-submodule.sh:295 +#, sh-format +msgid "Unable to checkout submodule '$path'" +msgstr "Unfähig Unterprojekt '$path' auszuchecken" + +#: git-submodule.sh:300 +#, sh-format +msgid "Failed to add submodule '$path'" +msgstr "Hinzufügen von Unterprojekt '$path' fehlgeschlagen" + +#: git-submodule.sh:305 +#, sh-format +msgid "Failed to register submodule '$path'" +msgstr "Registrierung von Unterprojekt '$path' fehlgeschlagen" + +#: git-submodule.sh:347 +#, sh-format +msgid "Entering '$prefix$path'" +msgstr "Betrete '$prefix$path'" + +#: git-submodule.sh:359 +#, sh-format +msgid "Stopping at '$path'; script returned non-zero status." +msgstr "Stoppe bei '$path'; Skript gab nicht-Null Status zurück." + +#: git-submodule.sh:401 +#, sh-format +msgid "No url found for submodule path '$path' in .gitmodules" +msgstr "Keine URL für Unterprojekt-Pfad '$path' in .gitmodules gefunden" + +#: git-submodule.sh:410 +#, sh-format +msgid "Failed to register url for submodule path '$path'" +msgstr "Fehler beim Registrieren der URL für Unterprojekt-Pfad '$path'" + +#: git-submodule.sh:418 +#, sh-format +msgid "Failed to register update mode for submodule path '$path'" +msgstr "Fehler beim Registrieren des Aktualisierungsmodus für Unterprojekt-Pfad" +" '$path'" + +#: git-submodule.sh:420 +#, sh-format +msgid "Submodule '$name' ($url) registered for path '$path'" +msgstr "Unterprojekt '$name' ($url) registriert für Pfad '$path'" + +#: git-submodule.sh:519 +#, sh-format +msgid "" +"Submodule path '$path' not initialized\n" +"Maybe you want to use 'update --init'?" +msgstr "" +"Unterprojekt-Pfad '$path' nicht initialisiert\n" +"Vielleicht möchtest du 'update --init' benutzen?" + +#: git-submodule.sh:532 +#, sh-format +msgid "Unable to find current revision in submodule path '$path'" +msgstr "Konnte aktuelle Revision in Unterprojekt-Pfad '$path' nicht finden" + +#: git-submodule.sh:551 +#, sh-format +msgid "Unable to fetch in submodule path '$path'" +msgstr "Konnte Unterprojekt-Pfad '$path' nicht anfordern" + +#: git-submodule.sh:565 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$path'" +msgstr "Neuaufbau von '$sha1' in Unterprojekt-Pfad '$path' nicht möglich" + +#: git-submodule.sh:566 +#, sh-format +msgid "Submodule path '$path': rebased into '$sha1'" +msgstr "Unterprojekt-Pfad '$path': neu aufgebaut in '$sha1'" + +#: git-submodule.sh:571 +#, sh-format +msgid "Unable to merge '$sha1' in submodule path '$path'" +msgstr "Konnte '$sha1' nicht in Unterprojekt-Pfad '$path' zusammenführen" + +#: git-submodule.sh:572 +#, sh-format +msgid "Submodule path '$path': merged in '$sha1'" +msgstr "Unterprojekt-Pfad '$path': zusammengeführt in '$sha1'" + +#: git-submodule.sh:577 +#, sh-format +msgid "Unable to checkout '$sha1' in submodule path '$path'" +msgstr "Konnte '$sha1' in Unterprojekt-Pfad '$path' nicht auschecken." + +#: git-submodule.sh:578 +#, sh-format +msgid "Submodule path '$path': checked out '$sha1'" +msgstr "Unterprojekt-Pfad: '$path': '$sha1' ausgecheckt" + +#: git-submodule.sh:600 git-submodule.sh:923 +#, sh-format +msgid "Failed to recurse into submodule path '$path'" +msgstr "Fehler bei Rekursion in Unterprojekt-Pfad '$path'" + +#: git-submodule.sh:708 +msgid "--" +msgstr "--" + +#: git-submodule.sh:766 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_src" +msgstr " Warnung: $name beinhaltet nicht Version $sha1_src" + +#: git-submodule.sh:769 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_dst" +msgstr " Warnung: $name beinhaltet nicht Version $sha1_dst" + +#: git-submodule.sh:772 +#, sh-format +msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgstr " Warnung: $name beinhaltet nich die Versionen $sha1_src und $sha1_dst" + +#: git-submodule.sh:797 +msgid "blob" +msgstr "Blob" + +#: git-submodule.sh:798 +msgid "submodule" +msgstr "Unterprojekt" + +#: git-submodule.sh:969 +#, sh-format +msgid "Synchronizing submodule url for '$name'" +msgstr "Synchronisiere Unterprojekt-URL für '$name'" diff --git a/po/git.pot b/po/git.pot index 8bdaf3cc34..67acae4116 100644 --- a/po/git.pot +++ b/po/git.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2012-03-08 10:19+0800\n" +"POT-Creation-Date: 2012-04-28 20:33+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -80,32 +80,32 @@ msgid "" "%s" msgstr "" -#: diff.c:1336 +#: diff.c:1400 msgid " 0 files changed\n" msgstr "" -#: diff.c:1340 +#: diff.c:1404 #, c-format msgid " %d file changed" msgid_plural " %d files changed" msgstr[0] "" msgstr[1] "" -#: diff.c:1357 +#: diff.c:1421 #, c-format msgid ", %d insertion(+)" msgid_plural ", %d insertions(+)" msgstr[0] "" msgstr[1] "" -#: diff.c:1368 +#: diff.c:1432 #, c-format msgid ", %d deletion(-)" msgid_plural ", %d deletions(-)" msgstr[0] "" msgstr[1] "" -#: diff.c:3424 +#: diff.c:3435 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -1365,66 +1365,66 @@ msgstr "" msgid "unable to write temporary index file" msgstr "" -#: builtin/commit.c:550 builtin/commit.c:556 +#: builtin/commit.c:561 builtin/commit.c:567 #, c-format msgid "invalid commit: %s" msgstr "" -#: builtin/commit.c:579 +#: builtin/commit.c:590 msgid "malformed --author parameter" msgstr "" -#: builtin/commit.c:635 +#: builtin/commit.c:651 #, c-format msgid "Malformed ident string: '%s'" msgstr "" -#: builtin/commit.c:670 builtin/commit.c:703 builtin/commit.c:1000 +#: builtin/commit.c:689 builtin/commit.c:722 builtin/commit.c:1033 #, c-format msgid "could not lookup commit %s" msgstr "" -#: builtin/commit.c:682 builtin/shortlog.c:296 +#: builtin/commit.c:701 builtin/shortlog.c:296 #, c-format msgid "(reading log message from standard input)\n" msgstr "" -#: builtin/commit.c:684 +#: builtin/commit.c:703 msgid "could not read log from standard input" msgstr "" -#: builtin/commit.c:688 +#: builtin/commit.c:707 #, c-format msgid "could not read log file '%s'" msgstr "" -#: builtin/commit.c:694 +#: builtin/commit.c:713 msgid "commit has empty message" msgstr "" -#: builtin/commit.c:710 +#: builtin/commit.c:729 msgid "could not read MERGE_MSG" msgstr "" -#: builtin/commit.c:714 +#: builtin/commit.c:733 msgid "could not read SQUASH_MSG" msgstr "" -#: builtin/commit.c:718 +#: builtin/commit.c:737 #, c-format msgid "could not read '%s'" msgstr "" -#: builtin/commit.c:746 +#: builtin/commit.c:765 #, c-format msgid "could not open '%s'" msgstr "" -#: builtin/commit.c:770 +#: builtin/commit.c:789 msgid "could not write commit template" msgstr "" -#: builtin/commit.c:783 +#: builtin/commit.c:799 #, c-format msgid "" "\n" @@ -1434,167 +1434,172 @@ msgid "" "and try again.\n" msgstr "" -#: builtin/commit.c:796 +#: builtin/commit.c:812 msgid "Please enter the commit message for your changes." msgstr "" -#: builtin/commit.c:799 +#: builtin/commit.c:815 msgid "" " Lines starting\n" "with '#' will be ignored, and an empty message aborts the commit.\n" msgstr "" -#: builtin/commit.c:804 +#: builtin/commit.c:820 msgid "" " Lines starting\n" "with '#' will be kept; you may remove them yourself if you want to.\n" "An empty message aborts the commit.\n" msgstr "" -#: builtin/commit.c:816 +#: builtin/commit.c:832 #, c-format msgid "%sAuthor: %s" msgstr "" -#: builtin/commit.c:823 +#: builtin/commit.c:839 #, c-format msgid "%sCommitter: %s" msgstr "" -#: builtin/commit.c:843 +#: builtin/commit.c:859 msgid "Cannot read index" msgstr "" -#: builtin/commit.c:880 +#: builtin/commit.c:896 msgid "Error building trees" msgstr "" -#: builtin/commit.c:895 builtin/tag.c:357 +#: builtin/commit.c:911 builtin/tag.c:357 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "" -#: builtin/commit.c:975 +#: builtin/commit.c:1008 #, c-format msgid "No existing author found with '%s'" msgstr "" -#: builtin/commit.c:990 builtin/commit.c:1182 +#: builtin/commit.c:1023 builtin/commit.c:1217 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "" -#: builtin/commit.c:1030 +#: builtin/commit.c:1063 msgid "Using both --reset-author and --author does not make sense" msgstr "" -#: builtin/commit.c:1041 +#: builtin/commit.c:1074 msgid "You have nothing to amend." msgstr "" -#: builtin/commit.c:1043 +#: builtin/commit.c:1076 #, c-format msgid "You are in the middle of a %s -- cannot amend." msgstr "" -#: builtin/commit.c:1045 +#: builtin/commit.c:1078 msgid "Options --squash and --fixup cannot be used together" msgstr "" -#: builtin/commit.c:1055 +#: builtin/commit.c:1088 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "" -#: builtin/commit.c:1057 +#: builtin/commit.c:1090 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "" -#: builtin/commit.c:1063 +#: builtin/commit.c:1098 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" -#: builtin/commit.c:1080 +#: builtin/commit.c:1115 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" -#: builtin/commit.c:1082 +#: builtin/commit.c:1117 msgid "No paths with --include/--only does not make sense." msgstr "" -#: builtin/commit.c:1084 +#: builtin/commit.c:1119 msgid "Clever... amending the last one with dirty index." msgstr "" -#: builtin/commit.c:1086 +#: builtin/commit.c:1121 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" -#: builtin/commit.c:1096 builtin/tag.c:556 +#: builtin/commit.c:1131 builtin/tag.c:556 #, c-format msgid "Invalid cleanup mode %s" msgstr "" -#: builtin/commit.c:1101 +#: builtin/commit.c:1136 msgid "Paths with -a does not make sense." msgstr "" -#: builtin/commit.c:1280 +#: builtin/commit.c:1315 msgid "couldn't look up newly created commit" msgstr "" -#: builtin/commit.c:1282 +#: builtin/commit.c:1317 msgid "could not parse newly created commit" msgstr "" -#: builtin/commit.c:1323 +#: builtin/commit.c:1358 msgid "detached HEAD" msgstr "" -#: builtin/commit.c:1325 +#: builtin/commit.c:1360 msgid " (root-commit)" msgstr "" -#: builtin/commit.c:1415 +#: builtin/commit.c:1450 msgid "could not parse HEAD commit" msgstr "" -#: builtin/commit.c:1452 builtin/merge.c:509 +#: builtin/commit.c:1487 builtin/merge.c:509 #, c-format msgid "could not open '%s' for reading" msgstr "" -#: builtin/commit.c:1459 +#: builtin/commit.c:1494 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "" -#: builtin/commit.c:1466 +#: builtin/commit.c:1501 msgid "could not read MERGE_MODE" msgstr "" -#: builtin/commit.c:1485 +#: builtin/commit.c:1520 #, c-format msgid "could not read commit message: %s" msgstr "" -#: builtin/commit.c:1499 +#: builtin/commit.c:1534 +#, c-format +msgid "Aborting commit; you did not edit the message.\n" +msgstr "" + +#: builtin/commit.c:1539 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "" -#: builtin/commit.c:1514 builtin/merge.c:935 builtin/merge.c:968 +#: builtin/commit.c:1554 builtin/merge.c:935 builtin/merge.c:968 msgid "failed to write commit object" msgstr "" -#: builtin/commit.c:1535 +#: builtin/commit.c:1575 msgid "cannot lock HEAD ref" msgstr "" -#: builtin/commit.c:1539 +#: builtin/commit.c:1579 msgid "cannot update HEAD ref" msgstr "" -#: builtin/commit.c:1550 +#: builtin/commit.c:1590 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -2401,51 +2406,51 @@ msgstr "" msgid "%s - not something we can merge" msgstr "" -#: builtin/merge.c:1385 +#: builtin/merge.c:1382 #, c-format msgid "Updating %s..%s\n" msgstr "" -#: builtin/merge.c:1423 +#: builtin/merge.c:1420 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "" -#: builtin/merge.c:1430 +#: builtin/merge.c:1427 #, c-format msgid "Nope.\n" msgstr "" -#: builtin/merge.c:1462 +#: builtin/merge.c:1459 msgid "Not possible to fast-forward, aborting." msgstr "" -#: builtin/merge.c:1485 builtin/merge.c:1562 +#: builtin/merge.c:1482 builtin/merge.c:1559 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "" -#: builtin/merge.c:1489 +#: builtin/merge.c:1486 #, c-format msgid "Trying merge strategy %s...\n" msgstr "" -#: builtin/merge.c:1553 +#: builtin/merge.c:1550 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "" -#: builtin/merge.c:1555 +#: builtin/merge.c:1552 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "" -#: builtin/merge.c:1564 +#: builtin/merge.c:1561 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "" -#: builtin/merge.c:1575 +#: builtin/merge.c:1572 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -2692,7 +2697,7 @@ msgstr "" msgid "--delete only accepts plain target ref names" msgstr "" -#: builtin/push.c:73 +#: builtin/push.c:83 #, c-format msgid "" "You are not currently on a branch.\n" @@ -2702,7 +2707,7 @@ msgid "" " git push %s HEAD:<name-of-remote-branch>\n" msgstr "" -#: builtin/push.c:80 +#: builtin/push.c:90 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -2711,27 +2716,35 @@ msgid "" " git push --set-upstream %s %s\n" msgstr "" -#: builtin/push.c:88 +#: builtin/push.c:98 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "" -#: builtin/push.c:111 +#: builtin/push.c:101 +#, c-format +msgid "" +"You are pushing to remote '%s', which is not the upstream of\n" +"your current branch '%s', without telling me what to push\n" +"to update which remote branch." +msgstr "" + +#: builtin/push.c:127 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" -#: builtin/push.c:131 +#: builtin/push.c:147 #, c-format msgid "Pushing to %s\n" msgstr "" -#: builtin/push.c:135 +#: builtin/push.c:151 #, c-format msgid "failed to push some refs to '%s'" msgstr "" -#: builtin/push.c:143 +#: builtin/push.c:159 #, c-format msgid "" "To prevent you from losing history, non-fast-forward updates were rejected\n" @@ -2739,12 +2752,12 @@ msgid "" "'Note about fast-forwards' section of 'git push --help' for details.\n" msgstr "" -#: builtin/push.c:160 +#: builtin/push.c:176 #, c-format msgid "bad repository '%s'" msgstr "" -#: builtin/push.c:161 +#: builtin/push.c:177 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -2757,31 +2770,31 @@ msgid "" " git push <name>\n" msgstr "" -#: builtin/push.c:176 +#: builtin/push.c:192 msgid "--all and --tags are incompatible" msgstr "" -#: builtin/push.c:177 +#: builtin/push.c:193 msgid "--all can't be combined with refspecs" msgstr "" -#: builtin/push.c:182 +#: builtin/push.c:198 msgid "--mirror and --tags are incompatible" msgstr "" -#: builtin/push.c:183 +#: builtin/push.c:199 msgid "--mirror can't be combined with refspecs" msgstr "" -#: builtin/push.c:188 +#: builtin/push.c:204 msgid "--all and --mirror are incompatible" msgstr "" -#: builtin/push.c:274 +#: builtin/push.c:284 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "" -#: builtin/push.c:276 +#: builtin/push.c:286 msgid "--delete doesn't make sense without any refs" msgstr "" @@ -3071,49 +3084,49 @@ msgstr "" msgid "Patch format detection failed." msgstr "" -#: git-am.sh:409 +#: git-am.sh:411 msgid "-d option is no longer supported. Do not use." msgstr "" -#: git-am.sh:472 +#: git-am.sh:474 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "" -#: git-am.sh:477 +#: git-am.sh:479 msgid "Please make up your mind. --skip or --abort?" msgstr "" -#: git-am.sh:504 +#: git-am.sh:506 msgid "Resolve operation not in progress, we are not resuming." msgstr "" -#: git-am.sh:570 +#: git-am.sh:572 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "" -#: git-am.sh:746 +#: git-am.sh:748 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:757 +#: git-am.sh:759 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "" -#: git-am.sh:793 +#: git-am.sh:795 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "" -#: git-am.sh:838 +#: git-am.sh:840 msgid "No changes -- Patch already applied." msgstr "" -#: git-am.sh:864 +#: git-am.sh:866 msgid "applying to an empty history" msgstr "" @@ -3350,11 +3363,16 @@ msgstr "" msgid "No submodule mapping found in .gitmodules for path '$path'" msgstr "" -#: git-submodule.sh:173 +#: git-submodule.sh:149 #, sh-format msgid "Clone of '$url' into submodule path '$path' failed" msgstr "" +#: git-submodule.sh:159 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "" + #: git-submodule.sh:247 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000000..e1399e2b6d --- /dev/null +++ b/po/nl.po @@ -0,0 +1,3493 @@ +# Dutch translations for Git. +# Copyright (C) 2012 Vincent van Ravesteijn <vfr@lyx.org> +# This file is distributed under the same license as the Git package. +# Vincent van Ravesteijn <vfr@lyx.org>, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: Git\n" +"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" +"POT-Creation-Date: 2012-02-28 09:17+0800\n" +"PO-Revision-Date: 2012-03-07 12:02+0100\n" +"Last-Translator: Vincent van Ravesteijn <vfr@lyx.org>\n" +"Language-Team: Dutch\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ASCII\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: advice.c:34 +#, c-format +msgid "hint: %.*s\n" +msgstr "" + +#. +#. * Message used both when 'git commit' fails and when +#. * other commands doing a merge do. +#. +#: advice.c:64 +msgid "" +"Fix them up in the work tree,\n" +"and then use 'git add/rm <file>' as\n" +"appropriate to mark resolution and make a commit,\n" +"or use 'git commit -a'." +msgstr "" + +#: commit.c:47 +#, c-format +msgid "could not parse %s" +msgstr "" + +#: commit.c:49 +#, c-format +msgid "%s %s is not a commit!" +msgstr "" + +#: compat/obstack.c:406 compat/obstack.c:408 +msgid "memory exhausted" +msgstr "" + +#: connected.c:39 +msgid "Could not run 'git rev-list'" +msgstr "" + +#: connected.c:48 +#, c-format +msgid "failed write to rev-list: %s" +msgstr "" + +#: connected.c:56 +#, c-format +msgid "failed to close rev-list's stdin: %s" +msgstr "" + +#: diff.c:104 +#, c-format +msgid " Failed to parse dirstat cut-off percentage '%.*s'\n" +msgstr "" + +#: diff.c:109 +#, c-format +msgid " Unknown dirstat parameter '%.*s'\n" +msgstr "" + +#: diff.c:205 +#, c-format +msgid "" +"Found errors in 'diff.dirstat' config variable:\n" +"%s" +msgstr "" + +#: diff.c:1331 +msgid " 0 files changed\n" +msgstr "" + +#: diff.c:1335 +#, c-format +msgid " %d file changed" +msgid_plural " %d files changed" +msgstr[0] "" +msgstr[1] "" + +#: diff.c:1352 +#, c-format +msgid ", %d insertion(+)" +msgid_plural ", %d insertions(+)" +msgstr[0] "" +msgstr[1] "" + +#: diff.c:1363 +#, c-format +msgid ", %d deletion(-)" +msgid_plural ", %d deletions(-)" +msgstr[0] "" +msgstr[1] "" + +#: diff.c:3364 +#, c-format +msgid "" +"Failed to parse --dirstat/-X option parameter:\n" +"%s" +msgstr "" + +#: gpg-interface.c:59 +msgid "could not run gpg." +msgstr "" + +#: gpg-interface.c:71 +msgid "gpg did not accept the data" +msgstr "" + +#: gpg-interface.c:82 +msgid "gpg failed to sign the data" +msgstr "" + +#: grep.c:1285 +#, c-format +msgid "'%s': unable to read %s" +msgstr "" + +#: grep.c:1302 +#, c-format +msgid "'%s': %s" +msgstr "" + +#: grep.c:1313 +#, c-format +msgid "'%s': short read %s" +msgstr "" + +#: help.c:287 +#, c-format +msgid "" +"'%s' appears to be a git command, but we were not\n" +"able to execute it. Maybe git-%s is broken?" +msgstr "" + +#: remote.c:1607 +#, c-format +msgid "Your branch is ahead of '%s' by %d commit.\n" +msgid_plural "Your branch is ahead of '%s' by %d commits.\n" +msgstr[0] "" +msgstr[1] "" + +#: remote.c:1613 +#, c-format +msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" +msgid_plural "" +"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" +msgstr[0] "" +msgstr[1] "" + +#: remote.c:1621 +#, c-format +msgid "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commit each, respectively.\n" +msgid_plural "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commits each, respectively.\n" +msgstr[0] "" +msgstr[1] "" + +#: sequencer.c:120 builtin/merge.c:862 builtin/merge.c:983 +#: builtin/merge.c:1093 builtin/merge.c:1103 +#, c-format +msgid "Could not open '%s' for writing" +msgstr "" + +#: sequencer.c:122 builtin/merge.c:334 builtin/merge.c:865 +#: builtin/merge.c:1095 builtin/merge.c:1108 +#, c-format +msgid "Could not write to '%s'" +msgstr "" + +#: sequencer.c:142 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'\n" +"and commit the result with 'git commit'" +msgstr "" + +#: sequencer.c:154 sequencer.c:680 sequencer.c:763 +#, c-format +msgid "Could not write to %s" +msgstr "" + +#: sequencer.c:157 +#, c-format +msgid "Error wrapping up %s" +msgstr "" + +#: sequencer.c:172 +msgid "Your local changes would be overwritten by cherry-pick." +msgstr "" + +#: sequencer.c:174 +msgid "Your local changes would be overwritten by revert." +msgstr "" + +#: sequencer.c:177 +msgid "Commit your changes or stash them to proceed." +msgstr "" + +#. TRANSLATORS: %s will be "revert" or "cherry-pick" +#: sequencer.c:227 +#, c-format +msgid "%s: Unable to write new index file" +msgstr "" + +#: sequencer.c:293 +msgid "Your index file is unmerged." +msgstr "" + +#: sequencer.c:296 +msgid "You do not have a valid HEAD" +msgstr "" + +#: sequencer.c:311 +#, c-format +msgid "Commit %s is a merge but no -m option was given." +msgstr "" + +#: sequencer.c:319 +#, c-format +msgid "Commit %s does not have parent %d" +msgstr "" + +#: sequencer.c:323 +#, c-format +msgid "Mainline was specified but commit %s is not a merge." +msgstr "" + +#. TRANSLATORS: The first %s will be "revert" or +#. "cherry-pick", the second %s a SHA1 +#: sequencer.c:334 +#, c-format +msgid "%s: cannot parse parent commit %s" +msgstr "" + +#: sequencer.c:338 +#, c-format +msgid "Cannot get commit message for %s" +msgstr "" + +#: sequencer.c:422 +#, c-format +msgid "could not revert %s... %s" +msgstr "" + +#: sequencer.c:423 +#, c-format +msgid "could not apply %s... %s" +msgstr "" + +#: sequencer.c:445 sequencer.c:904 builtin/log.c:286 builtin/log.c:709 +#: builtin/log.c:1325 builtin/log.c:1544 builtin/merge.c:348 +#: builtin/shortlog.c:181 +msgid "revision walk setup failed" +msgstr "" + +#: sequencer.c:448 +msgid "empty commit set passed" +msgstr "" + +#: sequencer.c:456 +#, c-format +msgid "git %s: failed to read the index" +msgstr "" + +#: sequencer.c:461 +#, c-format +msgid "git %s: failed to refresh the index" +msgstr "" + +#: sequencer.c:546 +#, c-format +msgid "Cannot %s during a %s" +msgstr "" + +#: sequencer.c:568 +#, c-format +msgid "Could not parse line %d." +msgstr "" + +#: sequencer.c:573 +msgid "No commits parsed." +msgstr "" + +#: sequencer.c:586 +#, c-format +msgid "Could not open %s" +msgstr "" + +#: sequencer.c:590 +#, c-format +msgid "Could not read %s." +msgstr "" + +#: sequencer.c:597 +#, c-format +msgid "Unusable instruction sheet: %s" +msgstr "" + +#: sequencer.c:625 +#, c-format +msgid "Invalid key: %s" +msgstr "" + +#: sequencer.c:628 +#, c-format +msgid "Invalid value for %s: %s" +msgstr "" + +#: sequencer.c:640 +#, c-format +msgid "Malformed options sheet: %s" +msgstr "" + +#: sequencer.c:661 +msgid "a cherry-pick or revert is already in progress" +msgstr "" + +#: sequencer.c:662 +msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" +msgstr "" + +#: sequencer.c:666 +#, c-format +msgid "Could not create sequencer directory %s" +msgstr "" + +#: sequencer.c:682 sequencer.c:767 +#, c-format +msgid "Error wrapping up %s." +msgstr "" + +#: sequencer.c:701 sequencer.c:835 +msgid "no cherry-pick or revert in progress" +msgstr "" + +#: sequencer.c:703 +msgid "cannot resolve HEAD" +msgstr "" + +#: sequencer.c:705 +msgid "cannot abort from a branch yet to be born" +msgstr "" + +#: sequencer.c:727 +#, c-format +msgid "cannot open %s: %s" +msgstr "" + +#: sequencer.c:730 +#, c-format +msgid "cannot read %s: %s" +msgstr "" + +#: sequencer.c:731 +msgid "unexpected end of file" +msgstr "" + +#: sequencer.c:737 +#, c-format +msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" +msgstr "" + +#: sequencer.c:760 +#, c-format +msgid "Could not format %s." +msgstr "" + +#: sequencer.c:922 +msgid "Can't revert as initial commit" +msgstr "" + +#: sequencer.c:923 +msgid "Can't cherry-pick into empty head" +msgstr "" + +#: wt-status.c:134 +msgid "Unmerged paths:" +msgstr "" + +#: wt-status.c:140 wt-status.c:157 +#, c-format +msgid " (use \"git reset %s <file>...\" to unstage)" +msgstr "" + +#: wt-status.c:142 wt-status.c:159 +msgid " (use \"git rm --cached <file>...\" to unstage)" +msgstr "" + +#: wt-status.c:143 +msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" +msgstr "" + +#: wt-status.c:151 +msgid "Changes to be committed:" +msgstr "" + +#: wt-status.c:169 +msgid "Changes not staged for commit:" +msgstr "" + +#: wt-status.c:173 +msgid " (use \"git add <file>...\" to update what will be committed)" +msgstr "" + +#: wt-status.c:175 +msgid " (use \"git add/rm <file>...\" to update what will be committed)" +msgstr "" + +#: wt-status.c:176 +msgid "" +" (use \"git checkout -- <file>...\" to discard changes in working directory)" +msgstr "" + +#: wt-status.c:178 +msgid " (commit or discard the untracked or modified content in submodules)" +msgstr "" + +#: wt-status.c:187 +#, c-format +msgid "%s files:" +msgstr "" + +#: wt-status.c:190 +#, c-format +msgid " (use \"git %s <file>...\" to include in what will be committed)" +msgstr "" + +#: wt-status.c:207 +msgid "bug" +msgstr "" + +#: wt-status.c:212 +msgid "both deleted:" +msgstr "" + +#: wt-status.c:213 +msgid "added by us:" +msgstr "" + +#: wt-status.c:214 +msgid "deleted by them:" +msgstr "" + +#: wt-status.c:215 +msgid "added by them:" +msgstr "" + +#: wt-status.c:216 +msgid "deleted by us:" +msgstr "" + +#: wt-status.c:217 +msgid "both added:" +msgstr "" + +#: wt-status.c:218 +msgid "both modified:" +msgstr "" + +#: wt-status.c:248 +msgid "new commits, " +msgstr "" + +#: wt-status.c:250 +msgid "modified content, " +msgstr "" + +#: wt-status.c:252 +msgid "untracked content, " +msgstr "" + +#: wt-status.c:266 +#, c-format +msgid "new file: %s" +msgstr "" + +#: wt-status.c:269 +#, c-format +msgid "copied: %s -> %s" +msgstr "" + +#: wt-status.c:272 +#, c-format +msgid "deleted: %s" +msgstr "" + +#: wt-status.c:275 +#, c-format +msgid "modified: %s" +msgstr "" + +#: wt-status.c:278 +#, c-format +msgid "renamed: %s -> %s" +msgstr "" + +#: wt-status.c:281 +#, c-format +msgid "typechange: %s" +msgstr "" + +#: wt-status.c:284 +#, c-format +msgid "unknown: %s" +msgstr "" + +#: wt-status.c:287 +#, c-format +msgid "unmerged: %s" +msgstr "" + +#: wt-status.c:290 +#, c-format +msgid "bug: unhandled diff status %c" +msgstr "" + +#: wt-status.c:713 +msgid "On branch " +msgstr "" + +#: wt-status.c:720 +msgid "Not currently on any branch." +msgstr "" + +#: wt-status.c:731 +msgid "Initial commit" +msgstr "" + +#: wt-status.c:745 +msgid "Untracked" +msgstr "" + +#: wt-status.c:747 +msgid "Ignored" +msgstr "" + +#: wt-status.c:749 +#, c-format +msgid "Untracked files not listed%s" +msgstr "" + +#: wt-status.c:751 +msgid " (use -u option to show untracked files)" +msgstr "" + +#: wt-status.c:757 +msgid "No changes" +msgstr "" + +#: wt-status.c:761 +#, c-format +msgid "no changes added to commit%s\n" +msgstr "" + +#: wt-status.c:763 +msgid " (use \"git add\" and/or \"git commit -a\")" +msgstr "" + +#: wt-status.c:765 +#, c-format +msgid "nothing added to commit but untracked files present%s\n" +msgstr "" + +#: wt-status.c:767 +msgid " (use \"git add\" to track)" +msgstr "" + +#: wt-status.c:769 wt-status.c:772 wt-status.c:775 +#, c-format +msgid "nothing to commit%s\n" +msgstr "" + +#: wt-status.c:770 +msgid " (create/copy files and use \"git add\" to track)" +msgstr "" + +#: wt-status.c:773 +msgid " (use -u to show untracked files)" +msgstr "" + +#: wt-status.c:776 +msgid " (working directory clean)" +msgstr "" + +#: wt-status.c:884 +msgid "HEAD (no branch)" +msgstr "" + +#: wt-status.c:890 +msgid "Initial commit on " +msgstr "" + +#: wt-status.c:905 +msgid "behind " +msgstr "" + +#: wt-status.c:908 wt-status.c:911 +msgid "ahead " +msgstr "" + +#: wt-status.c:913 +msgid ", behind " +msgstr "" + +#: builtin/add.c:62 +#, c-format +msgid "unexpected diff status %c" +msgstr "" + +#: builtin/add.c:67 builtin/commit.c:298 +msgid "updating files failed" +msgstr "" + +#: builtin/add.c:77 +#, c-format +msgid "remove '%s'\n" +msgstr "" + +#: builtin/add.c:176 +#, c-format +msgid "Path '%s' is in submodule '%.*s'" +msgstr "" + +#: builtin/add.c:192 +msgid "Unstaged changes after refreshing the index:" +msgstr "" + +#: builtin/add.c:195 builtin/add.c:456 builtin/rm.c:186 +#, c-format +msgid "pathspec '%s' did not match any files" +msgstr "" + +#: builtin/add.c:209 +#, c-format +msgid "'%s' is beyond a symbolic link" +msgstr "" + +#: builtin/add.c:276 +msgid "Could not read the index" +msgstr "" + +#: builtin/add.c:286 +#, c-format +msgid "Could not open '%s' for writing." +msgstr "" + +#: builtin/add.c:290 +msgid "Could not write patch" +msgstr "" + +#: builtin/add.c:295 +#, c-format +msgid "Could not stat '%s'" +msgstr "" + +#: builtin/add.c:297 +msgid "Empty patch. Aborted." +msgstr "" + +#: builtin/add.c:303 +#, c-format +msgid "Could not apply '%s'" +msgstr "" + +#: builtin/add.c:312 +msgid "The following paths are ignored by one of your .gitignore files:\n" +msgstr "" + +#: builtin/add.c:352 +#, c-format +msgid "Use -f if you really want to add them.\n" +msgstr "" + +#: builtin/add.c:353 +msgid "no files added" +msgstr "" + +#: builtin/add.c:359 +msgid "adding files failed" +msgstr "" + +#: builtin/add.c:391 +msgid "-A and -u are mutually incompatible" +msgstr "" + +#: builtin/add.c:393 +msgid "Option --ignore-missing can only be used together with --dry-run" +msgstr "" + +#: builtin/add.c:413 +#, c-format +msgid "Nothing specified, nothing added.\n" +msgstr "" + +#: builtin/add.c:414 +#, c-format +msgid "Maybe you wanted to say 'git add .'?\n" +msgstr "" + +#: builtin/add.c:420 builtin/clean.c:95 builtin/commit.c:358 builtin/mv.c:82 +#: builtin/rm.c:162 +msgid "index file corrupt" +msgstr "" + +#: builtin/add.c:476 builtin/mv.c:229 builtin/rm.c:260 +msgid "Unable to write new index file" +msgstr "" + +#: builtin/archive.c:17 +#, c-format +msgid "could not create archive file '%s'" +msgstr "" + +#: builtin/archive.c:20 +msgid "could not redirect output" +msgstr "" + +#: builtin/archive.c:37 +msgid "git archive: Remote with no URL" +msgstr "" + +#: builtin/archive.c:58 +msgid "git archive: expected ACK/NAK, got EOF" +msgstr "" + +#: builtin/archive.c:63 +#, c-format +msgid "git archive: NACK %s" +msgstr "" + +#: builtin/archive.c:65 +#, c-format +msgid "remote error: %s" +msgstr "" + +#: builtin/archive.c:66 +msgid "git archive: protocol error" +msgstr "" + +#: builtin/archive.c:71 +msgid "git archive: expected a flush" +msgstr "" + +#: builtin/branch.c:137 +#, c-format +msgid "" +"deleting branch '%s' that has been merged to\n" +" '%s', but not yet merged to HEAD." +msgstr "" + +#: builtin/branch.c:141 +#, c-format +msgid "" +"not deleting branch '%s' that is not yet merged to\n" +" '%s', even though it is merged to HEAD." +msgstr "" + +#. TRANSLATORS: This is "remote " in "remote branch '%s' not found" +#: builtin/branch.c:163 +msgid "remote " +msgstr "" + +#: builtin/branch.c:171 +msgid "cannot use -a with -d" +msgstr "" + +#: builtin/branch.c:177 +msgid "Couldn't look up commit object for HEAD" +msgstr "" + +#: builtin/branch.c:182 +#, c-format +msgid "Cannot delete the branch '%s' which you are currently on." +msgstr "" + +#: builtin/branch.c:192 +#, c-format +msgid "%sbranch '%s' not found." +msgstr "" + +#: builtin/branch.c:200 +#, c-format +msgid "Couldn't look up commit object for '%s'" +msgstr "" + +#: builtin/branch.c:206 +#, c-format +msgid "" +"The branch '%s' is not fully merged.\n" +"If you are sure you want to delete it, run 'git branch -D %s'." +msgstr "" + +#: builtin/branch.c:214 +#, c-format +msgid "Error deleting %sbranch '%s'" +msgstr "" + +#: builtin/branch.c:219 +#, c-format +msgid "Deleted %sbranch %s (was %s).\n" +msgstr "" + +#: builtin/branch.c:224 +msgid "Update of config-file failed" +msgstr "" + +#: builtin/branch.c:322 +#, c-format +msgid "branch '%s' does not point at a commit" +msgstr "" + +#: builtin/branch.c:394 +#, c-format +msgid "behind %d] " +msgstr "" + +#: builtin/branch.c:396 +#, c-format +msgid "ahead %d] " +msgstr "" + +#: builtin/branch.c:398 +#, c-format +msgid "ahead %d, behind %d] " +msgstr "" + +#: builtin/branch.c:501 +msgid "(no branch)" +msgstr "" + +#: builtin/branch.c:562 +msgid "some refs could not be read" +msgstr "" + +#: builtin/branch.c:575 +msgid "cannot rename the current branch while not on any." +msgstr "" + +#: builtin/branch.c:585 +#, c-format +msgid "Invalid branch name: '%s'" +msgstr "" + +#: builtin/branch.c:600 +msgid "Branch rename failed" +msgstr "" + +#: builtin/branch.c:604 +#, c-format +msgid "Renamed a misnamed branch '%s' away" +msgstr "" + +#: builtin/branch.c:608 +#, c-format +msgid "Branch renamed to %s, but HEAD is not updated!" +msgstr "" + +#: builtin/branch.c:615 +msgid "Branch is renamed, but update of config-file failed" +msgstr "" + +#: builtin/branch.c:630 +#, c-format +msgid "malformed object name %s" +msgstr "" + +#: builtin/branch.c:654 +#, c-format +msgid "could not write branch description template: %s\n" +msgstr "" + +#: builtin/branch.c:742 +msgid "Failed to resolve HEAD as a valid ref." +msgstr "" + +#: builtin/branch.c:747 builtin/clone.c:558 +msgid "HEAD not found below refs/heads!" +msgstr "" + +#: builtin/branch.c:805 +msgid "-a and -r options to 'git branch' do not make sense with a branch name" +msgstr "" + +#: builtin/bundle.c:47 +#, c-format +msgid "%s is okay\n" +msgstr "" + +#: builtin/bundle.c:56 +msgid "Need a repository to create a bundle." +msgstr "" + +#: builtin/bundle.c:60 +msgid "Need a repository to unbundle." +msgstr "" + +#: builtin/checkout.c:113 builtin/checkout.c:146 +#, c-format +msgid "path '%s' does not have our version" +msgstr "" + +#: builtin/checkout.c:115 builtin/checkout.c:148 +#, c-format +msgid "path '%s' does not have their version" +msgstr "" + +#: builtin/checkout.c:131 +#, c-format +msgid "path '%s' does not have all necessary versions" +msgstr "" + +#: builtin/checkout.c:175 +#, c-format +msgid "path '%s' does not have necessary versions" +msgstr "" + +#: builtin/checkout.c:192 +#, c-format +msgid "path '%s': cannot merge" +msgstr "" + +#: builtin/checkout.c:209 +#, c-format +msgid "Unable to add merge result for '%s'" +msgstr "" + +#: builtin/checkout.c:212 builtin/reset.c:158 +#, c-format +msgid "make_cache_entry failed for path '%s'" +msgstr "" + +#: builtin/checkout.c:234 builtin/checkout.c:392 +msgid "corrupt index file" +msgstr "" + +#: builtin/checkout.c:264 builtin/checkout.c:271 +#, c-format +msgid "path '%s' is unmerged" +msgstr "" + +#: builtin/checkout.c:302 builtin/checkout.c:498 builtin/clone.c:583 +#: builtin/merge.c:809 +msgid "unable to write new index file" +msgstr "" + +#: builtin/checkout.c:319 builtin/diff.c:298 builtin/merge.c:406 +msgid "diff_setup_done failed" +msgstr "" + +#: builtin/checkout.c:414 +msgid "you need to resolve your current index first" +msgstr "" + +#: builtin/checkout.c:533 +#, c-format +msgid "Can not do reflog for '%s'\n" +msgstr "" + +#: builtin/checkout.c:565 +msgid "HEAD is now at" +msgstr "" + +#: builtin/checkout.c:572 +#, c-format +msgid "Reset branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:575 +#, c-format +msgid "Already on '%s'\n" +msgstr "" + +#: builtin/checkout.c:579 +#, c-format +msgid "Switched to and reset branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:581 +#, c-format +msgid "Switched to a new branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:583 +#, c-format +msgid "Switched to branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:639 +#, c-format +msgid " ... and %d more.\n" +msgstr "" + +#. The singular version +#: builtin/checkout.c:645 +#, c-format +msgid "" +"Warning: you are leaving %d commit behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgid_plural "" +"Warning: you are leaving %d commits behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgstr[0] "" +msgstr[1] "" + +#: builtin/checkout.c:663 +#, c-format +msgid "" +"If you want to keep them by creating a new branch, this may be a good time\n" +"to do so with:\n" +"\n" +" git branch new_branch_name %s\n" +"\n" +msgstr "" + +#: builtin/checkout.c:692 +msgid "internal error in revision walk" +msgstr "" + +#: builtin/checkout.c:696 +msgid "Previous HEAD position was" +msgstr "" + +#: builtin/checkout.c:722 +msgid "You are on a branch yet to be born" +msgstr "" + +#. case (1) +#: builtin/checkout.c:853 +#, c-format +msgid "invalid reference: %s" +msgstr "" + +#. case (1): want a tree +#: builtin/checkout.c:892 +#, c-format +msgid "reference is not a tree: %s" +msgstr "" + +#: builtin/checkout.c:972 +msgid "-B cannot be used with -b" +msgstr "" + +#: builtin/checkout.c:981 +msgid "--patch is incompatible with all other options" +msgstr "" + +#: builtin/checkout.c:984 +msgid "--detach cannot be used with -b/-B/--orphan" +msgstr "" + +#: builtin/checkout.c:986 +msgid "--detach cannot be used with -t" +msgstr "" + +#: builtin/checkout.c:992 +msgid "--track needs a branch name" +msgstr "" + +#: builtin/checkout.c:999 +msgid "Missing branch name; try -b" +msgstr "" + +#: builtin/checkout.c:1005 +msgid "--orphan and -b|-B are mutually exclusive" +msgstr "" + +#: builtin/checkout.c:1007 +msgid "--orphan cannot be used with -t" +msgstr "" + +#: builtin/checkout.c:1017 +msgid "git checkout: -f and -m are incompatible" +msgstr "" + +#: builtin/checkout.c:1051 +msgid "invalid path specification" +msgstr "" + +#: builtin/checkout.c:1059 +#, c-format +msgid "" +"git checkout: updating paths is incompatible with switching branches.\n" +"Did you intend to checkout '%s' which can not be resolved as commit?" +msgstr "" + +#: builtin/checkout.c:1061 +msgid "git checkout: updating paths is incompatible with switching branches." +msgstr "" + +#: builtin/checkout.c:1066 +msgid "git checkout: --detach does not take a path argument" +msgstr "" + +#: builtin/checkout.c:1069 +msgid "" +"git checkout: --ours/--theirs, --force and --merge are incompatible when\n" +"checking out of the index." +msgstr "" + +#: builtin/checkout.c:1088 +msgid "Cannot switch branch to a non-commit." +msgstr "" + +#: builtin/checkout.c:1091 +msgid "--ours/--theirs is incompatible with switching branches." +msgstr "" + +#: builtin/clean.c:78 +msgid "-x and -X cannot be used together" +msgstr "" + +#: builtin/clean.c:82 +msgid "" +"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +msgstr "" + +#: builtin/clean.c:85 +msgid "" +"clean.requireForce defaults to true and neither -n nor -f given; refusing to " +"clean" +msgstr "" + +#: builtin/clean.c:155 builtin/clean.c:176 +#, c-format +msgid "Would remove %s\n" +msgstr "" + +#: builtin/clean.c:159 builtin/clean.c:179 +#, c-format +msgid "Removing %s\n" +msgstr "" + +#: builtin/clean.c:162 builtin/clean.c:182 +#, c-format +msgid "failed to remove %s" +msgstr "" + +#: builtin/clean.c:166 +#, c-format +msgid "Would not remove %s\n" +msgstr "" + +#: builtin/clean.c:168 +#, c-format +msgid "Not removing %s\n" +msgstr "" + +#: builtin/clone.c:243 +#, c-format +msgid "reference repository '%s' is not a local directory." +msgstr "" + +#: builtin/clone.c:302 +#, c-format +msgid "failed to open '%s'" +msgstr "" + +#: builtin/clone.c:306 +#, c-format +msgid "failed to create directory '%s'" +msgstr "" + +#: builtin/clone.c:308 builtin/diff.c:75 +#, c-format +msgid "failed to stat '%s'" +msgstr "" + +#: builtin/clone.c:310 +#, c-format +msgid "%s exists and is not a directory" +msgstr "" + +#: builtin/clone.c:324 +#, c-format +msgid "failed to stat %s\n" +msgstr "" + +#: builtin/clone.c:341 +#, c-format +msgid "failed to unlink '%s'" +msgstr "" + +#: builtin/clone.c:346 +#, c-format +msgid "failed to create link '%s'" +msgstr "" + +#: builtin/clone.c:350 +#, c-format +msgid "failed to copy file to '%s'" +msgstr "" + +#: builtin/clone.c:373 +#, c-format +msgid "done.\n" +msgstr "" + +#: builtin/clone.c:440 +#, c-format +msgid "Could not find remote branch %s to clone." +msgstr "" + +#: builtin/clone.c:549 +msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" +msgstr "" + +#: builtin/clone.c:639 +msgid "Too many arguments." +msgstr "" + +#: builtin/clone.c:643 +msgid "You must specify a repository to clone." +msgstr "" + +#: builtin/clone.c:654 +#, c-format +msgid "--bare and --origin %s options are incompatible." +msgstr "" + +#: builtin/clone.c:668 +#, c-format +msgid "repository '%s' does not exist" +msgstr "" + +#: builtin/clone.c:673 +msgid "--depth is ignored in local clones; use file:// instead." +msgstr "" + +#: builtin/clone.c:683 +#, c-format +msgid "destination path '%s' already exists and is not an empty directory." +msgstr "" + +#: builtin/clone.c:693 +#, c-format +msgid "working tree '%s' already exists." +msgstr "" + +#: builtin/clone.c:706 builtin/clone.c:720 +#, c-format +msgid "could not create leading directories of '%s'" +msgstr "" + +#: builtin/clone.c:709 +#, c-format +msgid "could not create work tree dir '%s'." +msgstr "" + +#: builtin/clone.c:728 +#, c-format +msgid "Cloning into bare repository '%s'...\n" +msgstr "" + +#: builtin/clone.c:730 +#, c-format +msgid "Cloning into '%s'...\n" +msgstr "" + +#: builtin/clone.c:786 +#, c-format +msgid "Don't know how to clone %s" +msgstr "" + +#: builtin/clone.c:835 +#, c-format +msgid "Remote branch %s not found in upstream %s" +msgstr "" + +#: builtin/clone.c:842 +msgid "You appear to have cloned an empty repository." +msgstr "" + +#: builtin/commit.c:42 +msgid "" +"Your name and email address were configured automatically based\n" +"on your username and hostname. Please check that they are accurate.\n" +"You can suppress this message by setting them explicitly:\n" +"\n" +" git config --global user.name \"Your Name\"\n" +" git config --global user.email you@example.com\n" +"\n" +"After doing this, you may fix the identity used for this commit with:\n" +"\n" +" git commit --amend --reset-author\n" +msgstr "" + +#: builtin/commit.c:54 +msgid "" +"You asked to amend the most recent commit, but doing so would make\n" +"it empty. You can repeat your command with --allow-empty, or you can\n" +"remove the commit entirely with \"git reset HEAD^\".\n" +msgstr "" + +#: builtin/commit.c:59 +msgid "" +"The previous cherry-pick is now empty, possibly due to conflict resolution.\n" +"If you wish to commit it anyway, use:\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Otherwise, please use 'git reset'\n" +msgstr "" + +#: builtin/commit.c:205 builtin/reset.c:33 +msgid "merge" +msgstr "" + +#: builtin/commit.c:208 +msgid "cherry-pick" +msgstr "" + +#: builtin/commit.c:325 +msgid "failed to unpack HEAD tree object" +msgstr "" + +#: builtin/commit.c:367 +msgid "unable to create temporary index" +msgstr "" + +#: builtin/commit.c:373 +msgid "interactive add failed" +msgstr "" + +#: builtin/commit.c:406 builtin/commit.c:427 builtin/commit.c:473 +msgid "unable to write new_index file" +msgstr "" + +#: builtin/commit.c:457 +#, c-format +msgid "cannot do a partial commit during a %s." +msgstr "" + +#: builtin/commit.c:466 +msgid "cannot read the index" +msgstr "" + +#: builtin/commit.c:486 +msgid "unable to write temporary index file" +msgstr "" + +#: builtin/commit.c:550 builtin/commit.c:556 +#, c-format +msgid "invalid commit: %s" +msgstr "" + +#: builtin/commit.c:579 +msgid "malformed --author parameter" +msgstr "" + +#: builtin/commit.c:635 +#, c-format +msgid "Malformed ident string: '%s'" +msgstr "" + +#: builtin/commit.c:670 builtin/commit.c:703 builtin/commit.c:1000 +#, c-format +msgid "could not lookup commit %s" +msgstr "" + +#: builtin/commit.c:682 builtin/shortlog.c:296 +#, c-format +msgid "(reading log message from standard input)\n" +msgstr "" + +#: builtin/commit.c:684 +msgid "could not read log from standard input" +msgstr "" + +#: builtin/commit.c:688 +#, c-format +msgid "could not read log file '%s'" +msgstr "" + +#: builtin/commit.c:694 +msgid "commit has empty message" +msgstr "" + +#: builtin/commit.c:710 +msgid "could not read MERGE_MSG" +msgstr "" + +#: builtin/commit.c:714 +msgid "could not read SQUASH_MSG" +msgstr "" + +#: builtin/commit.c:718 +#, c-format +msgid "could not read '%s'" +msgstr "" + +#: builtin/commit.c:746 +#, c-format +msgid "could not open '%s'" +msgstr "" + +#: builtin/commit.c:770 +msgid "could not write commit template" +msgstr "" + +#: builtin/commit.c:783 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a %s.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" + +#: builtin/commit.c:796 +msgid "Please enter the commit message for your changes." +msgstr "" + +#: builtin/commit.c:799 +msgid "" +" Lines starting\n" +"with '#' will be ignored, and an empty message aborts the commit.\n" +msgstr "" + +#: builtin/commit.c:804 +msgid "" +" Lines starting\n" +"with '#' will be kept; you may remove them yourself if you want to.\n" +"An empty message aborts the commit.\n" +msgstr "" + +#: builtin/commit.c:816 +#, c-format +msgid "%sAuthor: %s" +msgstr "" + +#: builtin/commit.c:823 +#, c-format +msgid "%sCommitter: %s" +msgstr "" + +#: builtin/commit.c:843 +msgid "Cannot read index" +msgstr "" + +#: builtin/commit.c:880 +msgid "Error building trees" +msgstr "" + +#: builtin/commit.c:895 builtin/tag.c:357 +#, c-format +msgid "Please supply the message using either -m or -F option.\n" +msgstr "" + +#: builtin/commit.c:975 +#, c-format +msgid "No existing author found with '%s'" +msgstr "" + +#: builtin/commit.c:990 builtin/commit.c:1182 +#, c-format +msgid "Invalid untracked files mode '%s'" +msgstr "" + +#: builtin/commit.c:1030 +msgid "Using both --reset-author and --author does not make sense" +msgstr "" + +#: builtin/commit.c:1041 +msgid "You have nothing to amend." +msgstr "" + +#: builtin/commit.c:1043 +#, c-format +msgid "You are in the middle of a %s -- cannot amend." +msgstr "" + +#: builtin/commit.c:1045 +msgid "Options --squash and --fixup cannot be used together" +msgstr "" + +#: builtin/commit.c:1055 +msgid "Only one of -c/-C/-F/--fixup can be used." +msgstr "" + +#: builtin/commit.c:1057 +msgid "Option -m cannot be combined with -c/-C/-F/--fixup." +msgstr "" + +#: builtin/commit.c:1063 +msgid "--reset-author can be used only with -C, -c or --amend." +msgstr "" + +#: builtin/commit.c:1080 +msgid "Only one of --include/--only/--all/--interactive/--patch can be used." +msgstr "" + +#: builtin/commit.c:1082 +msgid "No paths with --include/--only does not make sense." +msgstr "" + +#: builtin/commit.c:1084 +msgid "Clever... amending the last one with dirty index." +msgstr "" + +#: builtin/commit.c:1086 +msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +msgstr "" + +#: builtin/commit.c:1096 builtin/tag.c:556 +#, c-format +msgid "Invalid cleanup mode %s" +msgstr "" + +#: builtin/commit.c:1101 +msgid "Paths with -a does not make sense." +msgstr "" + +#: builtin/commit.c:1280 +msgid "couldn't look up newly created commit" +msgstr "" + +#: builtin/commit.c:1282 +msgid "could not parse newly created commit" +msgstr "" + +#: builtin/commit.c:1323 +msgid "detached HEAD" +msgstr "" + +#: builtin/commit.c:1325 +msgid " (root-commit)" +msgstr "" + +#: builtin/commit.c:1415 +msgid "could not parse HEAD commit" +msgstr "" + +#: builtin/commit.c:1452 builtin/merge.c:507 +#, c-format +msgid "could not open '%s' for reading" +msgstr "" + +#: builtin/commit.c:1459 +#, c-format +msgid "Corrupt MERGE_HEAD file (%s)" +msgstr "" + +#: builtin/commit.c:1466 +msgid "could not read MERGE_MODE" +msgstr "" + +#: builtin/commit.c:1485 +#, c-format +msgid "could not read commit message: %s" +msgstr "" + +#: builtin/commit.c:1499 +#, c-format +msgid "Aborting commit due to empty commit message.\n" +msgstr "" + +#: builtin/commit.c:1514 builtin/merge.c:933 builtin/merge.c:966 +msgid "failed to write commit object" +msgstr "" + +#: builtin/commit.c:1535 +msgid "cannot lock HEAD ref" +msgstr "" + +#: builtin/commit.c:1539 +msgid "cannot update HEAD ref" +msgstr "" + +#: builtin/commit.c:1550 +msgid "" +"Repository has been updated, but unable to write\n" +"new_index file. Check that disk is not full or quota is\n" +"not exceeded, and then \"git reset HEAD\" to recover." +msgstr "" + +#: builtin/describe.c:234 +#, c-format +msgid "annotated tag %s not available" +msgstr "" + +#: builtin/describe.c:238 +#, c-format +msgid "annotated tag %s has no embedded name" +msgstr "" + +#: builtin/describe.c:240 +#, c-format +msgid "tag '%s' is really '%s' here" +msgstr "" + +#: builtin/describe.c:267 +#, c-format +msgid "Not a valid object name %s" +msgstr "" + +#: builtin/describe.c:270 +#, c-format +msgid "%s is not a valid '%s' object" +msgstr "" + +#: builtin/describe.c:287 +#, c-format +msgid "no tag exactly matches '%s'" +msgstr "" + +#: builtin/describe.c:289 +#, c-format +msgid "searching to describe %s\n" +msgstr "" + +#: builtin/describe.c:329 +#, c-format +msgid "finished search at %s\n" +msgstr "" + +#: builtin/describe.c:353 +#, c-format +msgid "" +"No annotated tags can describe '%s'.\n" +"However, there were unannotated tags: try --tags." +msgstr "" + +#: builtin/describe.c:357 +#, c-format +msgid "" +"No tags can describe '%s'.\n" +"Try --always, or create some tags." +msgstr "" + +#: builtin/describe.c:378 +#, c-format +msgid "traversed %lu commits\n" +msgstr "" + +#: builtin/describe.c:381 +#, c-format +msgid "" +"more than %i tags found; listed %i most recent\n" +"gave up search at %s\n" +msgstr "" + +#: builtin/describe.c:436 +msgid "--long is incompatible with --abbrev=0" +msgstr "" + +#: builtin/describe.c:462 +msgid "No names found, cannot describe anything." +msgstr "" + +#: builtin/describe.c:482 +msgid "--dirty is incompatible with committishes" +msgstr "" + +#: builtin/diff.c:77 +#, c-format +msgid "'%s': not a regular file or symlink" +msgstr "" + +#: builtin/diff.c:220 +#, c-format +msgid "invalid option: %s" +msgstr "" + +#: builtin/diff.c:293 +msgid "Not a git repository" +msgstr "" + +#: builtin/diff.c:343 +#, c-format +msgid "invalid object '%s' given." +msgstr "" + +#: builtin/diff.c:348 +#, c-format +msgid "more than %d trees given: '%s'" +msgstr "" + +#: builtin/diff.c:358 +#, c-format +msgid "more than two blobs given: '%s'" +msgstr "" + +#: builtin/diff.c:366 +#, c-format +msgid "unhandled object '%s' given." +msgstr "" + +#: builtin/fetch.c:200 +msgid "Couldn't find remote ref HEAD" +msgstr "" + +#: builtin/fetch.c:252 +#, c-format +msgid "object %s not found" +msgstr "" + +#: builtin/fetch.c:258 +msgid "[up to date]" +msgstr "" + +#: builtin/fetch.c:272 +#, c-format +msgid "! %-*s %-*s -> %s (can't fetch in current branch)" +msgstr "" + +#: builtin/fetch.c:273 builtin/fetch.c:351 +msgid "[rejected]" +msgstr "" + +#: builtin/fetch.c:284 +msgid "[tag update]" +msgstr "" + +#: builtin/fetch.c:286 builtin/fetch.c:313 builtin/fetch.c:331 +msgid " (unable to update local ref)" +msgstr "" + +#: builtin/fetch.c:298 +msgid "[new tag]" +msgstr "" + +#: builtin/fetch.c:302 +msgid "[new branch]" +msgstr "" + +#: builtin/fetch.c:347 +msgid "unable to update local ref" +msgstr "" + +#: builtin/fetch.c:347 +msgid "forced update" +msgstr "" + +#: builtin/fetch.c:353 +msgid "(non-fast-forward)" +msgstr "" + +#: builtin/fetch.c:384 builtin/fetch.c:676 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "" + +#: builtin/fetch.c:393 +#, c-format +msgid "%s did not send all necessary objects\n" +msgstr "" + +#: builtin/fetch.c:479 +#, c-format +msgid "From %.*s\n" +msgstr "" + +#: builtin/fetch.c:490 +#, c-format +msgid "" +"some local refs could not be updated; try running\n" +" 'git remote prune %s' to remove any old, conflicting branches" +msgstr "" + +#: builtin/fetch.c:540 +#, c-format +msgid " (%s will become dangling)\n" +msgstr "" + +#: builtin/fetch.c:541 +#, c-format +msgid " (%s has become dangling)\n" +msgstr "" + +#: builtin/fetch.c:548 +msgid "[deleted]" +msgstr "" + +#: builtin/fetch.c:549 +msgid "(none)" +msgstr "" + +#: builtin/fetch.c:666 +#, c-format +msgid "Refusing to fetch into current branch %s of non-bare repository" +msgstr "" + +#: builtin/fetch.c:700 +#, c-format +msgid "Don't know how to fetch from %s" +msgstr "" + +#: builtin/fetch.c:777 +#, c-format +msgid "Option \"%s\" value \"%s\" is not valid for %s" +msgstr "" + +#: builtin/fetch.c:780 +#, c-format +msgid "Option \"%s\" is ignored for %s\n" +msgstr "" + +#: builtin/fetch.c:879 +#, c-format +msgid "Fetching %s\n" +msgstr "" + +#: builtin/fetch.c:881 +#, c-format +msgid "Could not fetch %s" +msgstr "" + +#: builtin/fetch.c:898 +msgid "" +"No remote repository specified. Please, specify either a URL or a\n" +"remote name from which new revisions should be fetched." +msgstr "" + +#: builtin/fetch.c:918 +msgid "You need to specify a tag name." +msgstr "" + +#: builtin/fetch.c:970 +msgid "fetch --all does not take a repository argument" +msgstr "" + +#: builtin/fetch.c:972 +msgid "fetch --all does not make sense with refspecs" +msgstr "" + +#: builtin/fetch.c:983 +#, c-format +msgid "No such remote or remote group: %s" +msgstr "" + +#: builtin/fetch.c:991 +msgid "Fetching a group and specifying refspecs does not make sense" +msgstr "" + +#: builtin/gc.c:63 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "" + +#: builtin/gc.c:78 +msgid "Too many options specified" +msgstr "" + +#: builtin/gc.c:103 +#, c-format +msgid "insanely long object directory %.*s" +msgstr "" + +#: builtin/gc.c:223 +#, c-format +msgid "Auto packing the repository for optimum performance.\n" +msgstr "" + +#: builtin/gc.c:226 +#, c-format +msgid "" +"Auto packing the repository for optimum performance. You may also\n" +"run \"git gc\" manually. See \"git help gc\" for more information.\n" +msgstr "" + +#: builtin/gc.c:256 +msgid "" +"There are too many unreachable loose objects; run 'git prune' to remove them." +msgstr "" + +#: builtin/grep.c:216 +#, c-format +msgid "grep: failed to create thread: %s" +msgstr "" + +#: builtin/grep.c:402 +#, c-format +msgid "Failed to chdir: %s" +msgstr "" + +#: builtin/grep.c:478 builtin/grep.c:512 +#, c-format +msgid "unable to read tree (%s)" +msgstr "" + +#: builtin/grep.c:526 +#, c-format +msgid "unable to grep from object of type %s" +msgstr "" + +#: builtin/grep.c:584 +#, c-format +msgid "switch `%c' expects a numerical value" +msgstr "" + +#: builtin/grep.c:601 +#, c-format +msgid "cannot open '%s'" +msgstr "" + +#: builtin/grep.c:889 +msgid "no pattern given." +msgstr "" + +#: builtin/grep.c:903 +#, c-format +msgid "bad object %s" +msgstr "" + +#: builtin/grep.c:944 +msgid "--open-files-in-pager only works on the worktree" +msgstr "" + +#: builtin/grep.c:967 +msgid "--cached or --untracked cannot be used with --no-index." +msgstr "" + +#: builtin/grep.c:972 +msgid "--no-index or --untracked cannot be used with revs." +msgstr "" + +#: builtin/grep.c:975 +msgid "--[no-]exclude-standard cannot be used for tracked contents." +msgstr "" + +#: builtin/grep.c:983 +msgid "both --cached and trees are given." +msgstr "" + +#: builtin/init-db.c:35 +#, c-format +msgid "Could not make %s writable by group" +msgstr "" + +#: builtin/init-db.c:62 +#, c-format +msgid "insanely long template name %s" +msgstr "" + +#: builtin/init-db.c:67 +#, c-format +msgid "cannot stat '%s'" +msgstr "" + +#: builtin/init-db.c:73 +#, c-format +msgid "cannot stat template '%s'" +msgstr "" + +#: builtin/init-db.c:80 +#, c-format +msgid "cannot opendir '%s'" +msgstr "" + +#: builtin/init-db.c:97 +#, c-format +msgid "cannot readlink '%s'" +msgstr "" + +#: builtin/init-db.c:99 +#, c-format +msgid "insanely long symlink %s" +msgstr "" + +#: builtin/init-db.c:102 +#, c-format +msgid "cannot symlink '%s' '%s'" +msgstr "" + +#: builtin/init-db.c:106 +#, c-format +msgid "cannot copy '%s' to '%s'" +msgstr "" + +#: builtin/init-db.c:110 +#, c-format +msgid "ignoring template %s" +msgstr "" + +#: builtin/init-db.c:133 +#, c-format +msgid "insanely long template path %s" +msgstr "" + +#: builtin/init-db.c:141 +#, c-format +msgid "templates not found %s" +msgstr "" + +#: builtin/init-db.c:154 +#, c-format +msgid "not copying templates of a wrong format version %d from '%s'" +msgstr "" + +#: builtin/init-db.c:192 +#, c-format +msgid "insane git directory %s" +msgstr "" + +#: builtin/init-db.c:322 builtin/init-db.c:325 +#, c-format +msgid "%s already exists" +msgstr "" + +#: builtin/init-db.c:354 +#, c-format +msgid "unable to handle file type %d" +msgstr "" + +#: builtin/init-db.c:357 +#, c-format +msgid "unable to move %s to %s" +msgstr "" + +#: builtin/init-db.c:362 +#, c-format +msgid "Could not create git link %s" +msgstr "" + +#. +#. * TRANSLATORS: The first '%s' is either "Reinitialized +#. * existing" or "Initialized empty", the second " shared" or +#. * "", and the last '%s%s' is the verbatim directory name. +#. +#: builtin/init-db.c:419 +#, c-format +msgid "%s%s Git repository in %s%s\n" +msgstr "" + +#: builtin/init-db.c:420 +msgid "Reinitialized existing" +msgstr "" + +#: builtin/init-db.c:420 +msgid "Initialized empty" +msgstr "" + +#: builtin/init-db.c:421 +msgid " shared" +msgstr "" + +#: builtin/init-db.c:440 +msgid "cannot tell cwd" +msgstr "" + +#: builtin/init-db.c:521 builtin/init-db.c:528 +#, c-format +msgid "cannot mkdir %s" +msgstr "" + +#: builtin/init-db.c:532 +#, c-format +msgid "cannot chdir to %s" +msgstr "" + +#: builtin/init-db.c:554 +#, c-format +msgid "" +"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-" +"dir=<directory>)" +msgstr "" + +#: builtin/init-db.c:578 +msgid "Cannot access current working directory" +msgstr "" + +#: builtin/init-db.c:585 +#, c-format +msgid "Cannot access work tree '%s'" +msgstr "" + +#: builtin/log.c:185 +#, c-format +msgid "Final output: %d %s\n" +msgstr "" + +#: builtin/log.c:393 builtin/log.c:479 +#, c-format +msgid "Could not read object %s" +msgstr "" + +#: builtin/log.c:503 +#, c-format +msgid "Unknown type: %d" +msgstr "" + +#: builtin/log.c:592 +msgid "format.headers without value" +msgstr "" + +#: builtin/log.c:665 +msgid "name of output directory is too long" +msgstr "" + +#: builtin/log.c:676 +#, c-format +msgid "Cannot open patch file %s" +msgstr "" + +#: builtin/log.c:690 +msgid "Need exactly one range." +msgstr "" + +#: builtin/log.c:698 +msgid "Not a range." +msgstr "" + +#: builtin/log.c:735 +msgid "Could not extract email from committer identity." +msgstr "" + +#: builtin/log.c:781 +msgid "Cover letter needs email format" +msgstr "" + +#: builtin/log.c:875 +#, c-format +msgid "insane in-reply-to: %s" +msgstr "" + +#: builtin/log.c:948 +msgid "Two output directories?" +msgstr "" + +#: builtin/log.c:1169 +#, c-format +msgid "bogus committer info %s" +msgstr "" + +#: builtin/log.c:1214 +msgid "-n and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1216 +msgid "--subject-prefix and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1221 builtin/shortlog.c:284 +#, c-format +msgid "unrecognized argument: %s" +msgstr "" + +#: builtin/log.c:1224 +msgid "--name-only does not make sense" +msgstr "" + +#: builtin/log.c:1226 +msgid "--name-status does not make sense" +msgstr "" + +#: builtin/log.c:1228 +msgid "--check does not make sense" +msgstr "" + +#: builtin/log.c:1251 +msgid "standard output, or directory, which one?" +msgstr "" + +#: builtin/log.c:1253 +#, c-format +msgid "Could not create directory '%s'" +msgstr "" + +#: builtin/log.c:1406 +msgid "Failed to create output files" +msgstr "" + +#: builtin/log.c:1510 +#, c-format +msgid "" +"Could not find a tracked remote branch, please specify <upstream> manually.\n" +msgstr "" + +#: builtin/log.c:1526 builtin/log.c:1528 builtin/log.c:1540 +#, c-format +msgid "Unknown commit %s" +msgstr "" + +#: builtin/merge.c:91 +msgid "switch `m' requires a value" +msgstr "" + +#: builtin/merge.c:128 +#, c-format +msgid "Could not find merge strategy '%s'.\n" +msgstr "" + +#: builtin/merge.c:129 +#, c-format +msgid "Available strategies are:" +msgstr "" + +#: builtin/merge.c:134 +#, c-format +msgid "Available custom strategies are:" +msgstr "" + +#: builtin/merge.c:241 +msgid "could not run stash." +msgstr "" + +#: builtin/merge.c:246 +msgid "stash failed" +msgstr "" + +#: builtin/merge.c:251 +#, c-format +msgid "not a valid object: %s" +msgstr "" + +#: builtin/merge.c:270 builtin/merge.c:287 +msgid "read-tree failed" +msgstr "" + +#: builtin/merge.c:317 +msgid " (nothing to squash)" +msgstr "" + +#: builtin/merge.c:330 +#, c-format +msgid "Squash commit -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:362 +msgid "Writing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:364 +msgid "Finishing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:386 +#, c-format +msgid "No merge message -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:435 +#, c-format +msgid "'%s' does not point to a commit" +msgstr "" + +#: builtin/merge.c:534 +#, c-format +msgid "Bad branch.%s.mergeoptions string: %s" +msgstr "" + +#: builtin/merge.c:627 +msgid "git write-tree failed to write a tree" +msgstr "" + +#: builtin/merge.c:677 +msgid "failed to read the cache" +msgstr "" + +#: builtin/merge.c:694 +msgid "Unable to write index." +msgstr "" + +#: builtin/merge.c:707 +msgid "Not handling anything other than two heads merge." +msgstr "" + +#: builtin/merge.c:721 +#, c-format +msgid "Unknown option for merge-recursive: -X%s" +msgstr "" + +#: builtin/merge.c:735 +#, c-format +msgid "unable to write %s" +msgstr "" + +#: builtin/merge.c:874 +#, c-format +msgid "Could not read from '%s'" +msgstr "" + +#: builtin/merge.c:883 +#, c-format +msgid "Not committing merge; use 'git commit' to complete the merge.\n" +msgstr "" + +#: builtin/merge.c:889 +msgid "" +"Please enter a commit message to explain why this merge is necessary,\n" +"especially if it merges an updated upstream into a topic branch.\n" +"\n" +"Lines starting with '#' will be ignored, and an empty message aborts\n" +"the commit.\n" +msgstr "" + +#: builtin/merge.c:913 +msgid "Empty commit message." +msgstr "" + +#: builtin/merge.c:925 +#, c-format +msgid "Wonderful.\n" +msgstr "" + +#: builtin/merge.c:998 +#, c-format +msgid "Automatic merge failed; fix conflicts and then commit the result.\n" +msgstr "" + +#: builtin/merge.c:1014 +#, c-format +msgid "'%s' is not a commit" +msgstr "" + +#: builtin/merge.c:1055 +msgid "No current branch." +msgstr "" + +#: builtin/merge.c:1057 +msgid "No remote for the current branch." +msgstr "" + +#: builtin/merge.c:1059 +msgid "No default upstream defined for the current branch." +msgstr "" + +#: builtin/merge.c:1064 +#, c-format +msgid "No remote tracking branch for %s from %s" +msgstr "" + +#: builtin/merge.c:1186 +msgid "There is no merge to abort (MERGE_HEAD missing)." +msgstr "" + +#: builtin/merge.c:1202 git-pull.sh:31 +msgid "" +"You have not concluded your merge (MERGE_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1205 git-pull.sh:34 +msgid "You have not concluded your merge (MERGE_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1209 +msgid "" +"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1212 +msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1221 +msgid "You cannot combine --squash with --no-ff." +msgstr "" + +#: builtin/merge.c:1226 +msgid "You cannot combine --no-ff with --ff-only." +msgstr "" + +#: builtin/merge.c:1233 +msgid "No commit specified and merge.defaultToUpstream not set." +msgstr "" + +#: builtin/merge.c:1264 +msgid "Can merge only exactly one commit into empty head" +msgstr "" + +#: builtin/merge.c:1267 +msgid "Squash commit into empty head not supported yet" +msgstr "" + +#: builtin/merge.c:1269 +msgid "Non-fast-forward commit does not make sense into an empty head" +msgstr "" + +#: builtin/merge.c:1273 builtin/merge.c:1317 +#, c-format +msgid "%s - not something we can merge" +msgstr "" + +#: builtin/merge.c:1383 +#, c-format +msgid "Updating %s..%s\n" +msgstr "" + +#: builtin/merge.c:1421 +#, c-format +msgid "Trying really trivial in-index merge...\n" +msgstr "" + +#: builtin/merge.c:1428 +#, c-format +msgid "Nope.\n" +msgstr "" + +#: builtin/merge.c:1460 +msgid "Not possible to fast-forward, aborting." +msgstr "" + +#: builtin/merge.c:1483 builtin/merge.c:1560 +#, c-format +msgid "Rewinding the tree to pristine...\n" +msgstr "" + +#: builtin/merge.c:1487 +#, c-format +msgid "Trying merge strategy %s...\n" +msgstr "" + +#: builtin/merge.c:1551 +#, c-format +msgid "No merge strategy handled the merge.\n" +msgstr "" + +#: builtin/merge.c:1553 +#, c-format +msgid "Merge with strategy %s failed.\n" +msgstr "" + +#: builtin/merge.c:1562 +#, c-format +msgid "Using the %s to prepare resolving by hand.\n" +msgstr "" + +#: builtin/merge.c:1573 +#, c-format +msgid "Automatic merge went well; stopped before committing as requested\n" +msgstr "" + +#: builtin/mv.c:108 +#, c-format +msgid "Checking rename of '%s' to '%s'\n" +msgstr "" + +#: builtin/mv.c:112 +msgid "bad source" +msgstr "" + +#: builtin/mv.c:115 +msgid "can not move directory into itself" +msgstr "" + +#: builtin/mv.c:118 +msgid "cannot move directory over file" +msgstr "" + +#: builtin/mv.c:128 +#, c-format +msgid "Huh? %.*s is in index?" +msgstr "" + +#: builtin/mv.c:140 +msgid "source directory is empty" +msgstr "" + +#: builtin/mv.c:171 +msgid "not under version control" +msgstr "" + +#: builtin/mv.c:173 +msgid "destination exists" +msgstr "" + +#: builtin/mv.c:181 +#, c-format +msgid "overwriting '%s'" +msgstr "" + +#: builtin/mv.c:184 +msgid "Cannot overwrite" +msgstr "" + +#: builtin/mv.c:187 +msgid "multiple sources for the same target" +msgstr "" + +#: builtin/mv.c:202 +#, c-format +msgid "%s, source=%s, destination=%s" +msgstr "" + +#: builtin/mv.c:212 +#, c-format +msgid "Renaming %s to %s\n" +msgstr "" + +#: builtin/mv.c:215 +#, c-format +msgid "renaming '%s' failed" +msgstr "" + +#: builtin/notes.c:139 +#, c-format +msgid "unable to start 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:145 +msgid "can't fdopen 'show' output fd" +msgstr "" + +#: builtin/notes.c:155 +#, c-format +msgid "failed to close pipe to 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:158 +#, c-format +msgid "failed to finish 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:175 builtin/tag.c:343 +#, c-format +msgid "could not create file '%s'" +msgstr "" + +#: builtin/notes.c:189 +msgid "Please supply the note contents using either -m or -F option" +msgstr "" + +#: builtin/notes.c:210 builtin/notes.c:973 +#, c-format +msgid "Removing note for object %s\n" +msgstr "" + +#: builtin/notes.c:215 +msgid "unable to write note object" +msgstr "" + +#: builtin/notes.c:217 +#, c-format +msgid "The note contents has been left in %s" +msgstr "" + +#: builtin/notes.c:251 builtin/tag.c:521 +#, c-format +msgid "cannot read '%s'" +msgstr "" + +#: builtin/notes.c:253 builtin/tag.c:524 +#, c-format +msgid "could not open or read '%s'" +msgstr "" + +#: builtin/notes.c:272 builtin/notes.c:445 builtin/notes.c:447 +#: builtin/notes.c:507 builtin/notes.c:561 builtin/notes.c:644 +#: builtin/notes.c:649 builtin/notes.c:724 builtin/notes.c:766 +#: builtin/notes.c:968 builtin/reset.c:293 builtin/tag.c:537 +#, c-format +msgid "Failed to resolve '%s' as a valid ref." +msgstr "" + +#: builtin/notes.c:275 +#, c-format +msgid "Failed to read object '%s'." +msgstr "" + +#: builtin/notes.c:299 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" + +#: builtin/notes.c:340 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "" + +#: builtin/notes.c:350 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: builtin/notes.c:377 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "" + +#: builtin/notes.c:441 +#, c-format +msgid "Malformed input line: '%s'." +msgstr "" + +#: builtin/notes.c:456 +#, c-format +msgid "Failed to copy notes from '%s' to '%s'" +msgstr "" + +#: builtin/notes.c:500 builtin/notes.c:554 builtin/notes.c:627 +#: builtin/notes.c:639 builtin/notes.c:712 builtin/notes.c:759 +#: builtin/notes.c:1033 +msgid "too many parameters" +msgstr "" + +#: builtin/notes.c:513 builtin/notes.c:772 +#, c-format +msgid "No note found for object %s." +msgstr "" + +#: builtin/notes.c:580 +#, c-format +msgid "" +"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:585 builtin/notes.c:662 +#, c-format +msgid "Overwriting existing notes for object %s\n" +msgstr "" + +#: builtin/notes.c:635 +msgid "too few parameters" +msgstr "" + +#: builtin/notes.c:656 +#, c-format +msgid "" +"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:668 +#, c-format +msgid "Missing notes on source object %s. Cannot copy." +msgstr "" + +#: builtin/notes.c:717 +#, c-format +msgid "" +"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" +"Please use 'git notes add -f -m/-F/-c/-C' instead.\n" +msgstr "" + +#: builtin/notes.c:971 +#, c-format +msgid "Object %s has no note\n" +msgstr "" + +#: builtin/notes.c:1103 +#, c-format +msgid "Unknown subcommand: %s" +msgstr "" + +#: builtin/pack-objects.c:2310 +#, c-format +msgid "unsupported index version %s" +msgstr "" + +#: builtin/pack-objects.c:2314 +#, c-format +msgid "bad index version '%s'" +msgstr "" + +#: builtin/pack-objects.c:2322 +#, c-format +msgid "option %s does not accept negative form" +msgstr "" + +#: builtin/pack-objects.c:2326 +#, c-format +msgid "unable to parse value '%s' for option %s" +msgstr "" + +#: builtin/push.c:44 +msgid "tag shorthand without <tag>" +msgstr "" + +#: builtin/push.c:63 +msgid "--delete only accepts plain target ref names" +msgstr "" + +#: builtin/push.c:73 +#, c-format +msgid "" +"You are not currently on a branch.\n" +"To push the history leading to the current (detached HEAD)\n" +"state now, use\n" +"\n" +" git push %s HEAD:<name-of-remote-branch>\n" +msgstr "" + +#: builtin/push.c:80 +#, c-format +msgid "" +"The current branch %s has no upstream branch.\n" +"To push the current branch and set the remote as upstream, use\n" +"\n" +" git push --set-upstream %s %s\n" +msgstr "" + +#: builtin/push.c:88 +#, c-format +msgid "The current branch %s has multiple upstream branches, refusing to push." +msgstr "" + +#: builtin/push.c:111 +msgid "" +"You didn't specify any refspecs to push, and push.default is \"nothing\"." +msgstr "" + +#: builtin/push.c:131 +#, c-format +msgid "Pushing to %s\n" +msgstr "" + +#: builtin/push.c:135 +#, c-format +msgid "failed to push some refs to '%s'" +msgstr "" + +#: builtin/push.c:143 +#, c-format +msgid "" +"To prevent you from losing history, non-fast-forward updates were rejected\n" +"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n" +"'Note about fast-forwards' section of 'git push --help' for details.\n" +msgstr "" + +#: builtin/push.c:160 +#, c-format +msgid "bad repository '%s'" +msgstr "" + +#: builtin/push.c:161 +msgid "" +"No configured push destination.\n" +"Either specify the URL from the command-line or configure a remote " +"repository using\n" +"\n" +" git remote add <name> <url>\n" +"\n" +"and then push using the remote name\n" +"\n" +" git push <name>\n" +msgstr "" + +#: builtin/push.c:176 +msgid "--all and --tags are incompatible" +msgstr "" + +#: builtin/push.c:177 +msgid "--all can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:182 +msgid "--mirror and --tags are incompatible" +msgstr "" + +#: builtin/push.c:183 +msgid "--mirror can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:188 +msgid "--all and --mirror are incompatible" +msgstr "" + +#: builtin/push.c:274 +msgid "--delete is incompatible with --all, --mirror and --tags" +msgstr "" + +#: builtin/push.c:276 +msgid "--delete doesn't make sense without any refs" +msgstr "" + +#: builtin/reset.c:33 +msgid "mixed" +msgstr "" + +#: builtin/reset.c:33 +msgid "soft" +msgstr "" + +#: builtin/reset.c:33 +msgid "hard" +msgstr "" + +#: builtin/reset.c:33 +msgid "keep" +msgstr "" + +#: builtin/reset.c:77 +msgid "You do not have a valid HEAD." +msgstr "" + +#: builtin/reset.c:79 +msgid "Failed to find tree of HEAD." +msgstr "" + +#: builtin/reset.c:85 +#, c-format +msgid "Failed to find tree of %s." +msgstr "" + +#: builtin/reset.c:96 +msgid "Could not write new index file." +msgstr "" + +#: builtin/reset.c:106 +#, c-format +msgid "HEAD is now at %s" +msgstr "" + +#: builtin/reset.c:130 +msgid "Could not read index" +msgstr "" + +#: builtin/reset.c:133 +msgid "Unstaged changes after reset:" +msgstr "" + +#: builtin/reset.c:223 +#, c-format +msgid "Cannot do a %s reset in the middle of a merge." +msgstr "" + +#: builtin/reset.c:297 +#, c-format +msgid "Could not parse object '%s'." +msgstr "" + +#: builtin/reset.c:302 +msgid "--patch is incompatible with --{hard,mixed,soft}" +msgstr "" + +#: builtin/reset.c:311 +msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." +msgstr "" + +#: builtin/reset.c:313 +#, c-format +msgid "Cannot do %s reset with paths." +msgstr "" + +#: builtin/reset.c:325 +#, c-format +msgid "%s reset is not allowed in a bare repository" +msgstr "" + +#: builtin/reset.c:341 +#, c-format +msgid "Could not reset index file to revision '%s'." +msgstr "" + +#: builtin/revert.c:70 builtin/revert.c:91 +#, c-format +msgid "%s: %s cannot be used with %s" +msgstr "" + +#: builtin/revert.c:126 +msgid "program error" +msgstr "" + +#: builtin/revert.c:209 +msgid "revert failed" +msgstr "" + +#: builtin/revert.c:224 +msgid "cherry-pick failed" +msgstr "" + +#: builtin/rm.c:109 +#, c-format +msgid "" +"'%s' has staged content different from both the file and the HEAD\n" +"(use -f to force removal)" +msgstr "" + +#: builtin/rm.c:115 +#, c-format +msgid "" +"'%s' has changes staged in the index\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" + +#: builtin/rm.c:119 +#, c-format +msgid "" +"'%s' has local modifications\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" + +#: builtin/rm.c:194 +#, c-format +msgid "not removing '%s' recursively without -r" +msgstr "" + +#: builtin/rm.c:230 +#, c-format +msgid "git rm: unable to remove %s" +msgstr "" + +#: builtin/shortlog.c:157 +#, c-format +msgid "Missing author: %s" +msgstr "" + +#: builtin/tag.c:58 +#, c-format +msgid "malformed object at '%s'" +msgstr "" + +#: builtin/tag.c:205 +#, c-format +msgid "tag name too long: %.*s..." +msgstr "" + +#: builtin/tag.c:210 +#, c-format +msgid "tag '%s' not found." +msgstr "" + +#: builtin/tag.c:225 +#, c-format +msgid "Deleted tag '%s' (was %s)\n" +msgstr "" + +#: builtin/tag.c:237 +#, c-format +msgid "could not verify the tag '%s'" +msgstr "" + +#: builtin/tag.c:247 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be ignored.\n" +"#\n" +msgstr "" + +#: builtin/tag.c:254 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be kept; you may remove them yourself if you " +"want to.\n" +"#\n" +msgstr "" + +#: builtin/tag.c:294 +msgid "unable to sign the tag" +msgstr "" + +#: builtin/tag.c:296 +msgid "unable to write tag file" +msgstr "" + +#: builtin/tag.c:321 +msgid "bad object type." +msgstr "" + +#: builtin/tag.c:334 +msgid "tag header too big." +msgstr "" + +#: builtin/tag.c:366 +msgid "no tag message?" +msgstr "" + +#: builtin/tag.c:372 +#, c-format +msgid "The tag message has been left in %s\n" +msgstr "" + +#: builtin/tag.c:421 +msgid "switch 'points-at' requires an object" +msgstr "" + +#: builtin/tag.c:423 +#, c-format +msgid "malformed object name '%s'" +msgstr "" + +#: builtin/tag.c:502 +msgid "-n option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:504 +msgid "--contains option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:506 +msgid "--points-at option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:514 +msgid "only one -F or -m option is allowed." +msgstr "" + +#: builtin/tag.c:534 +msgid "too many params" +msgstr "" + +#: builtin/tag.c:540 +#, c-format +msgid "'%s' is not a valid tag name." +msgstr "" + +#: builtin/tag.c:545 +#, c-format +msgid "tag '%s' already exists" +msgstr "" + +#: builtin/tag.c:563 +#, c-format +msgid "%s: cannot lock the ref" +msgstr "" + +#: builtin/tag.c:565 +#, c-format +msgid "%s: cannot update the ref" +msgstr "" + +#: builtin/tag.c:567 +#, c-format +msgid "Updated tag '%s' (was %s)\n" +msgstr "" + +#: git-am.sh:49 +msgid "You need to set your committer info first" +msgstr "" + +#: git-am.sh:135 +msgid "Repository lacks necessary blobs to fall back on 3-way merge." +msgstr "" + +#: git-am.sh:144 +msgid "" +"Did you hand edit your patch?\n" +"It does not apply to blobs recorded in its index." +msgstr "" + +#: git-am.sh:153 +msgid "Falling back to patching base and 3-way merge..." +msgstr "" + +#: git-am.sh:265 +msgid "Only one StGIT patch series can be applied at once" +msgstr "" + +#: git-am.sh:352 +#, sh-format +msgid "Patch format $patch_format is not supported." +msgstr "" + +#: git-am.sh:354 +msgid "Patch format detection failed." +msgstr "" + +#: git-am.sh:406 +msgid "-d option is no longer supported. Do not use." +msgstr "" + +#: git-am.sh:469 +#, sh-format +msgid "previous rebase directory $dotest still exists but mbox given." +msgstr "" + +#: git-am.sh:474 +msgid "Please make up your mind. --skip or --abort?" +msgstr "" + +#: git-am.sh:501 +msgid "Resolve operation not in progress, we are not resuming." +msgstr "" + +#: git-am.sh:567 +#, sh-format +msgid "Dirty index: cannot apply patches (dirty: $files)" +msgstr "" + +#: git-am.sh:743 +msgid "cannot be interactive without stdin connected to a terminal." +msgstr "" + +#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] +#. in your translation. The program will only accept English +#. input at this point. +#: git-am.sh:754 +msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " +msgstr "" + +#: git-am.sh:790 +#, sh-format +msgid "Applying: $FIRSTLINE" +msgstr "" + +#: git-am.sh:835 +msgid "No changes -- Patch already applied." +msgstr "" + +#: git-am.sh:861 +msgid "applying to an empty history" +msgstr "" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:54 +msgid "Do you want me to do it for you [Y/n]? " +msgstr "" + +#: git-bisect.sh:95 +#, sh-format +msgid "unrecognised option: '$arg'" +msgstr "" + +#: git-bisect.sh:99 +#, sh-format +msgid "'$arg' does not appear to be a valid revision" +msgstr "" + +#: git-bisect.sh:117 +msgid "Bad HEAD - I need a HEAD" +msgstr "" + +#: git-bisect.sh:130 +#, sh-format +msgid "" +"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." +msgstr "" + +#: git-bisect.sh:140 +msgid "won't bisect on seeked tree" +msgstr "" + +#: git-bisect.sh:144 +msgid "Bad HEAD - strange symbolic ref" +msgstr "" + +#: git-bisect.sh:189 +#, sh-format +msgid "Bad bisect_write argument: $state" +msgstr "" + +#: git-bisect.sh:218 +#, sh-format +msgid "Bad rev input: $arg" +msgstr "" + +#: git-bisect.sh:232 +msgid "Please call 'bisect_state' with at least one argument." +msgstr "" + +#: git-bisect.sh:244 +#, sh-format +msgid "Bad rev input: $rev" +msgstr "" + +#: git-bisect.sh:250 +msgid "'git bisect bad' can take only one argument." +msgstr "" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:279 +msgid "Are you sure [Y/n]? " +msgstr "" + +#: git-bisect.sh:354 +#, sh-format +msgid "'$invalid' is not a valid commit" +msgstr "" + +#: git-bisect.sh:363 +#, sh-format +msgid "" +"Could not check out original HEAD '$branch'.\n" +"Try 'git bisect reset <commit>'." +msgstr "" + +#: git-bisect.sh:390 +msgid "No logfile given" +msgstr "" + +#: git-bisect.sh:391 +#, sh-format +msgid "cannot read $file for replaying" +msgstr "" + +#: git-bisect.sh:408 +msgid "?? what are you talking about?" +msgstr "" + +#: git-bisect.sh:474 +msgid "We are not bisecting." +msgstr "" + +#: git-pull.sh:21 +msgid "" +"Pull is not possible because you have unmerged files.\n" +"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n" +"as appropriate to mark resolution, or use 'git commit -a'." +msgstr "" + +#: git-pull.sh:25 +msgid "Pull is not possible because you have unmerged files." +msgstr "" + +#: git-pull.sh:197 +msgid "updating an unborn branch with changes added to the index" +msgstr "" + +#: git-pull.sh:253 +msgid "Cannot merge multiple branches into empty head" +msgstr "" + +#: git-pull.sh:257 +msgid "Cannot rebase onto multiple branches" +msgstr "" + +#: git-stash.sh:51 +msgid "git stash clear with parameters is unimplemented" +msgstr "" + +#: git-stash.sh:74 +msgid "You do not have the initial commit yet" +msgstr "" + +#: git-stash.sh:89 +msgid "Cannot save the current index state" +msgstr "" + +#: git-stash.sh:123 git-stash.sh:136 +msgid "Cannot save the current worktree state" +msgstr "" + +#: git-stash.sh:140 +msgid "No changes selected" +msgstr "" + +#: git-stash.sh:143 +msgid "Cannot remove temporary index (can't happen)" +msgstr "" + +#: git-stash.sh:156 +msgid "Cannot record working tree state" +msgstr "" + +#: git-stash.sh:223 +msgid "No local changes to save" +msgstr "" + +#: git-stash.sh:227 +msgid "Cannot initialize stash" +msgstr "" + +#: git-stash.sh:235 +msgid "Cannot save the current status" +msgstr "" + +#: git-stash.sh:253 +msgid "Cannot remove worktree changes" +msgstr "" + +#: git-stash.sh:352 +msgid "No stash found." +msgstr "" + +#: git-stash.sh:359 +#, sh-format +msgid "Too many revisions specified: $REV" +msgstr "" + +#: git-stash.sh:365 +#, sh-format +msgid "$reference is not valid reference" +msgstr "" + +#: git-stash.sh:393 +#, sh-format +msgid "'$args' is not a stash-like commit" +msgstr "" + +#: git-stash.sh:404 +#, sh-format +msgid "'$args' is not a stash reference" +msgstr "" + +#: git-stash.sh:412 +msgid "unable to refresh index" +msgstr "" + +#: git-stash.sh:416 +msgid "Cannot apply a stash in the middle of a merge" +msgstr "" + +#: git-stash.sh:424 +msgid "Conflicts in index. Try without --index." +msgstr "" + +#: git-stash.sh:426 +msgid "Could not save index tree" +msgstr "" + +#: git-stash.sh:460 +msgid "Cannot unstage modified files" +msgstr "" + +#: git-stash.sh:491 +#, sh-format +msgid "Dropped ${REV} ($s)" +msgstr "" + +#: git-stash.sh:492 +#, sh-format +msgid "${REV}: Could not drop stash entry" +msgstr "" + +#: git-stash.sh:499 +msgid "No branch name specified" +msgstr "" + +#: git-stash.sh:570 +msgid "(To restore them type \"git stash apply\")" +msgstr "" + +#: git-submodule.sh:56 +#, sh-format +msgid "cannot strip one component off url '$remoteurl'" +msgstr "" + +#: git-submodule.sh:108 +#, sh-format +msgid "No submodule mapping found in .gitmodules for path '$path'" +msgstr "" + +#: git-submodule.sh:173 +#, sh-format +msgid "Clone of '$url' into submodule path '$path' failed" +msgstr "" + +#: git-submodule.sh:247 +#, sh-format +msgid "repo URL: '$repo' must be absolute or begin with ./|../" +msgstr "" + +#: git-submodule.sh:264 +#, sh-format +msgid "'$path' already exists in the index" +msgstr "" + +#: git-submodule.sh:281 +#, sh-format +msgid "'$path' already exists and is not a valid git repo" +msgstr "" + +#: git-submodule.sh:295 +#, sh-format +msgid "Unable to checkout submodule '$path'" +msgstr "" + +#: git-submodule.sh:300 +#, sh-format +msgid "Failed to add submodule '$path'" +msgstr "" + +#: git-submodule.sh:305 +#, sh-format +msgid "Failed to register submodule '$path'" +msgstr "" + +#: git-submodule.sh:347 +#, sh-format +msgid "Entering '$prefix$path'" +msgstr "" + +#: git-submodule.sh:359 +#, sh-format +msgid "Stopping at '$path'; script returned non-zero status." +msgstr "" + +#: git-submodule.sh:401 +#, sh-format +msgid "No url found for submodule path '$path' in .gitmodules" +msgstr "" + +#: git-submodule.sh:410 +#, sh-format +msgid "Failed to register url for submodule path '$path'" +msgstr "" + +#: git-submodule.sh:418 +#, sh-format +msgid "Failed to register update mode for submodule path '$path'" +msgstr "" + +#: git-submodule.sh:420 +#, sh-format +msgid "Submodule '$name' ($url) registered for path '$path'" +msgstr "" + +#: git-submodule.sh:519 +#, sh-format +msgid "" +"Submodule path '$path' not initialized\n" +"Maybe you want to use 'update --init'?" +msgstr "" + +#: git-submodule.sh:532 +#, sh-format +msgid "Unable to find current revision in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:551 +#, sh-format +msgid "Unable to fetch in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:565 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:566 +#, sh-format +msgid "Submodule path '$path': rebased into '$sha1'" +msgstr "" + +#: git-submodule.sh:571 +#, sh-format +msgid "Unable to merge '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:572 +#, sh-format +msgid "Submodule path '$path': merged in '$sha1'" +msgstr "" + +#: git-submodule.sh:577 +#, sh-format +msgid "Unable to checkout '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:578 +#, sh-format +msgid "Submodule path '$path': checked out '$sha1'" +msgstr "" + +#: git-submodule.sh:600 git-submodule.sh:923 +#, sh-format +msgid "Failed to recurse into submodule path '$path'" +msgstr "" + +#: git-submodule.sh:708 +msgid "--" +msgstr "" + +#: git-submodule.sh:766 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_src" +msgstr "" + +#: git-submodule.sh:769 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_dst" +msgstr "" + +#: git-submodule.sh:772 +#, sh-format +msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgstr "" + +#: git-submodule.sh:797 +msgid "blob" +msgstr "" + +#: git-submodule.sh:798 +msgid "submodule" +msgstr "" + +#: git-submodule.sh:969 +#, sh-format +msgid "Synchronizing submodule url for '$name'" +msgstr "" diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000000..d28c568c73 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,3595 @@ +# Portuguese translations for Git package. +# Copyright (C) 2012 Marco Sousa <marcomsousa AT gmail.com> +# This file is distributed under the same license as the Git package. +# Contributers: +# - Marco Sousa <marcomsousa AT gmail.com> +# +msgid "" +msgstr "" +"Project-Id-Version: Git\n" +"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" +"POT-Creation-Date: 2012-03-16 20:18+0800\n" +"PO-Revision-Date: 2012-04-05 20:48+0100\n" +"Last-Translator: Marco Sousa <marcomsousa AT gmail.com>\n" +"Language-Team: Portuguese\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: advice.c:34 +#, c-format +msgid "hint: %.*s\n" +msgstr "dica: %.*s\n" + +#. +#. * Message used both when 'git commit' fails and when +#. * other commands doing a merge do. +#. +#: advice.c:64 +msgid "" +"Fix them up in the work tree,\n" +"and then use 'git add/rm <file>' as\n" +"appropriate to mark resolution and make a commit,\n" +"or use 'git commit -a'." +msgstr "" + +#: commit.c:47 +#, c-format +msgid "could not parse %s" +msgstr "não consigo parsear %s" + +#: commit.c:49 +#, c-format +msgid "%s %s is not a commit!" +msgstr "%s %s não é um commit!" + +#: compat/obstack.c:406 +#: compat/obstack.c:408 +msgid "memory exhausted" +msgstr "memória esgotada" + +#: connected.c:39 +msgid "Could not run 'git rev-list'" +msgstr "Não foi possível executar 'git rev-list'" + +#: connected.c:48 +#, c-format +msgid "failed write to rev-list: %s" +msgstr "" + +#: connected.c:56 +#, c-format +msgid "failed to close rev-list's stdin: %s" +msgstr "" + +#: diff.c:105 +#, c-format +msgid " Failed to parse dirstat cut-off percentage '%.*s'\n" +msgstr "" + +#: diff.c:110 +#, c-format +msgid " Unknown dirstat parameter '%.*s'\n" +msgstr "" + +#: diff.c:210 +#, c-format +msgid "" +"Found errors in 'diff.dirstat' config variable:\n" +"%s" +msgstr "" + +#: diff.c:1336 +msgid " 0 files changed\n" +msgstr " 0 ficheros modificados\n" + +#: diff.c:1340 +#, c-format +msgid " %d file changed" +msgid_plural " %d files changed" +msgstr[0] " %d ficheiro modificado" +msgstr[1] " %d ficheiros modificados" + +#: diff.c:1357 +#, c-format +msgid ", %d insertion(+)" +msgid_plural ", %d insertions(+)" +msgstr[0] ", %d adição(+)" +msgstr[1] ", %d adições(+)" + +#: diff.c:1368 +#, c-format +msgid ", %d deletion(-)" +msgid_plural ", %d deletions(-)" +msgstr[0] ", %d eliminado(-)" +msgstr[1] ", %d eliminados(-)" + +#: diff.c:3424 +#, c-format +msgid "" +"Failed to parse --dirstat/-X option parameter:\n" +"%s" +msgstr "" + +#: gpg-interface.c:59 +msgid "could not run gpg." +msgstr "não consegue ejecutar gpg." + +#: gpg-interface.c:71 +msgid "gpg did not accept the data" +msgstr "" + +#: gpg-interface.c:82 +msgid "gpg failed to sign the data" +msgstr "" + +#: grep.c:1280 +#, c-format +msgid "'%s': unable to read %s" +msgstr "" + +#: grep.c:1297 +#, c-format +msgid "'%s': %s" +msgstr "'%s': %s" + +#: grep.c:1308 +#, c-format +msgid "'%s': short read %s" +msgstr "" + +#: help.c:287 +#, c-format +msgid "" +"'%s' appears to be a git command, but we were not\n" +"able to execute it. Maybe git-%s is broken?" +msgstr "" + +#: remote.c:1607 +#, c-format +msgid "Your branch is ahead of '%s' by %d commit.\n" +msgid_plural "Your branch is ahead of '%s' by %d commits.\n" +msgstr[0] "A sua rama está à frente de '%s' pelo commit %d.\n" +msgstr[1] "A sua rama está à frente de '%s' pelos commites %d.\n" + +#: remote.c:1613 +#, c-format +msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" +msgid_plural "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" +msgstr[0] "" +msgstr[1] "" + +#: remote.c:1621 +#, c-format +msgid "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commit each, respectively.\n" +msgid_plural "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commits each, respectively.\n" +msgstr[0] "" +msgstr[1] "" + +#: sequencer.c:120 +#: builtin/merge.c:864 +#: builtin/merge.c:985 +#: builtin/merge.c:1095 +#: builtin/merge.c:1105 +#, c-format +msgid "Could not open '%s' for writing" +msgstr "" + +#: sequencer.c:122 +#: builtin/merge.c:334 +#: builtin/merge.c:867 +#: builtin/merge.c:1097 +#: builtin/merge.c:1110 +#, c-format +msgid "Could not write to '%s'" +msgstr "Não foi possível escrever para '%s'" + +#: sequencer.c:143 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'" +msgstr "" + +#: sequencer.c:146 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'\n" +"and commit the result with 'git commit'" +msgstr "" + +#: sequencer.c:159 +#: sequencer.c:685 +#: sequencer.c:768 +#, c-format +msgid "Could not write to %s" +msgstr "Não foi possível gravar para %s" + +#: sequencer.c:162 +#, c-format +msgid "Error wrapping up %s" +msgstr "" + +#: sequencer.c:177 +msgid "Your local changes would be overwritten by cherry-pick." +msgstr "" + +#: sequencer.c:179 +msgid "Your local changes would be overwritten by revert." +msgstr "" + +#: sequencer.c:182 +msgid "Commit your changes or stash them to proceed." +msgstr "" + +#. TRANSLATORS: %s will be "revert" or "cherry-pick" +#: sequencer.c:232 +#, c-format +msgid "%s: Unable to write new index file" +msgstr "" + +#: sequencer.c:298 +msgid "Your index file is unmerged." +msgstr "O seu ficheiro de índice é não fundido." + +#: sequencer.c:301 +msgid "You do not have a valid HEAD" +msgstr "Você não tem uma HEAD válida" + +#: sequencer.c:316 +#, c-format +msgid "Commit %s is a merge but no -m option was given." +msgstr "" + +#: sequencer.c:324 +#, c-format +msgid "Commit %s does not have parent %d" +msgstr "" + +#: sequencer.c:328 +#, c-format +msgid "Mainline was specified but commit %s is not a merge." +msgstr "" + +#. TRANSLATORS: The first %s will be "revert" or +#. "cherry-pick", the second %s a SHA1 +#: sequencer.c:339 +#, c-format +msgid "%s: cannot parse parent commit %s" +msgstr "" + +#: sequencer.c:343 +#, c-format +msgid "Cannot get commit message for %s" +msgstr "Não é possível obter mensagem commit para %s" + +#: sequencer.c:427 +#, c-format +msgid "could not revert %s... %s" +msgstr "" + +#: sequencer.c:428 +#, c-format +msgid "could not apply %s... %s" +msgstr "" + +#: sequencer.c:450 +#: sequencer.c:909 +#: builtin/log.c:288 +#: builtin/log.c:713 +#: builtin/log.c:1329 +#: builtin/log.c:1548 +#: builtin/merge.c:348 +#: builtin/shortlog.c:181 +msgid "revision walk setup failed" +msgstr "" + +#: sequencer.c:453 +msgid "empty commit set passed" +msgstr "passado commit com o set vazio" + +#: sequencer.c:461 +#, c-format +msgid "git %s: failed to read the index" +msgstr "" + +#: sequencer.c:466 +#, c-format +msgid "git %s: failed to refresh the index" +msgstr "" + +#: sequencer.c:551 +#, c-format +msgid "Cannot %s during a %s" +msgstr "Não foi possível abrir %s durante um %s" + +#: sequencer.c:573 +#, c-format +msgid "Could not parse line %d." +msgstr "Não foi possível parsear linha %d." + +#: sequencer.c:578 +msgid "No commits parsed." +msgstr "Nenhum commit parseado." + +#: sequencer.c:591 +#, c-format +msgid "Could not open %s" +msgstr "Não foi possível abrir %s" + +#: sequencer.c:595 +#, c-format +msgid "Could not read %s." +msgstr "Não foi possível ler %s." + +#: sequencer.c:602 +#, c-format +msgid "Unusable instruction sheet: %s" +msgstr "" + +#: sequencer.c:630 +#, c-format +msgid "Invalid key: %s" +msgstr "" + +#: sequencer.c:633 +#, c-format +msgid "Invalid value for %s: %s" +msgstr "Valor inválido para %s: %s" + +#: sequencer.c:645 +#, c-format +msgid "Malformed options sheet: %s" +msgstr "" + +#: sequencer.c:666 +msgid "a cherry-pick or revert is already in progress" +msgstr "" + +#: sequencer.c:667 +msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" +msgstr "" + +#: sequencer.c:671 +#, c-format +msgid "Could not create sequencer directory %s" +msgstr "" + +#: sequencer.c:687 +#: sequencer.c:772 +#, c-format +msgid "Error wrapping up %s." +msgstr "" + +#: sequencer.c:706 +#: sequencer.c:840 +msgid "no cherry-pick or revert in progress" +msgstr "" + +#: sequencer.c:708 +msgid "cannot resolve HEAD" +msgstr "" + +#: sequencer.c:710 +msgid "cannot abort from a branch yet to be born" +msgstr "" + +#: sequencer.c:732 +#, c-format +msgid "cannot open %s: %s" +msgstr "não foi possível abrir %s: %s" + +#: sequencer.c:735 +#, c-format +msgid "cannot read %s: %s" +msgstr "não foi possível ler %s: %s" + +#: sequencer.c:736 +msgid "unexpected end of file" +msgstr "" + +#: sequencer.c:742 +#, c-format +msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" +msgstr "" + +#: sequencer.c:765 +#, c-format +msgid "Could not format %s." +msgstr "Não foi possível formatear %s." + +#: sequencer.c:927 +msgid "Can't revert as initial commit" +msgstr "" + +#: sequencer.c:928 +msgid "Can't cherry-pick into empty head" +msgstr "" + +#: wt-status.c:134 +msgid "Unmerged paths:" +msgstr "caminhos não fundidos:" + +#: wt-status.c:140 +#: wt-status.c:157 +#, c-format +msgid " (use \"git reset %s <file>...\" to unstage)" +msgstr "" + +#: wt-status.c:142 +#: wt-status.c:159 +msgid " (use \"git rm --cached <file>...\" to unstage)" +msgstr "" + +#: wt-status.c:143 +msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" +msgstr " (usa \"git add/rm <ficheiro>...\" para marcar como resolvido)" + +#: wt-status.c:151 +msgid "Changes to be committed:" +msgstr "Mudanças a serem commitadas" + +#: wt-status.c:169 +msgid "Changes not staged for commit:" +msgstr "" + +#: wt-status.c:173 +msgid " (use \"git add <file>...\" to update what will be committed)" +msgstr " (usa \"git add <ficheiro>...\" para actualizar o que vai ser commitado)" + +#: wt-status.c:175 +msgid " (use \"git add/rm <file>...\" to update what will be committed)" +msgstr " (usa \"git add/rm <ficheiro>...\" para actualizar o que vai ser commitado)" + +#: wt-status.c:176 +msgid " (use \"git checkout -- <file>...\" to discard changes in working directory)" +msgstr "" + +#: wt-status.c:178 +msgid " (commit or discard the untracked or modified content in submodules)" +msgstr "" + +#: wt-status.c:187 +#, c-format +msgid "%s files:" +msgstr "%s ficheros:" + +#: wt-status.c:190 +#, c-format +msgid " (use \"git %s <file>...\" to include in what will be committed)" +msgstr "" + +#: wt-status.c:207 +msgid "bug" +msgstr "erro" + +#: wt-status.c:212 +msgid "both deleted:" +msgstr "eliminados em ambos:" + +#: wt-status.c:213 +msgid "added by us:" +msgstr "adicionado por nós:" + +#: wt-status.c:214 +msgid "deleted by them:" +msgstr "eliminados por eles:" + +#: wt-status.c:215 +msgid "added by them:" +msgstr "adicionados por eles:" + +#: wt-status.c:216 +msgid "deleted by us:" +msgstr "eliminados por nós:" + +#: wt-status.c:217 +msgid "both added:" +msgstr "adicionados em ambos:" + +#: wt-status.c:218 +msgid "both modified:" +msgstr "modificados em ambos:" + +#: wt-status.c:248 +msgid "new commits, " +msgstr "novos commits, " + +#: wt-status.c:250 +msgid "modified content, " +msgstr "conteúdo modificado, " + +#: wt-status.c:252 +msgid "untracked content, " +msgstr "conteúdo não seguido" + +#: wt-status.c:266 +#, c-format +msgid "new file: %s" +msgstr "novo ficheiro: %s" + +#: wt-status.c:269 +#, c-format +msgid "copied: %s -> %s" +msgstr "copiado: %s -> %s" + +#: wt-status.c:272 +#, c-format +msgid "deleted: %s" +msgstr "eliminado: %s" + +#: wt-status.c:275 +#, c-format +msgid "modified: %s" +msgstr "modificado: %s" + +#: wt-status.c:278 +#, c-format +msgid "renamed: %s -> %s" +msgstr "mudado de nome: %s -> %s" + +#: wt-status.c:281 +#, c-format +msgid "typechange: %s" +msgstr "" + +#: wt-status.c:284 +#, c-format +msgid "unknown: %s" +msgstr "desconhecido: %s" + +#: wt-status.c:287 +#, c-format +msgid "unmerged: %s" +msgstr "não fundidos: %s" + +#: wt-status.c:290 +#, c-format +msgid "bug: unhandled diff status %c" +msgstr "" + +#: wt-status.c:713 +msgid "On branch " +msgstr "Na rama" + +#: wt-status.c:720 +msgid "Not currently on any branch." +msgstr "Não está em nenhuma rama." + +#: wt-status.c:731 +msgid "Initial commit" +msgstr "Commit inicial" + +#: wt-status.c:745 +msgid "Untracked" +msgstr "Não seguido" + +#: wt-status.c:747 +msgid "Ignored" +msgstr "Ignorado" + +#: wt-status.c:749 +#, c-format +msgid "Untracked files not listed%s" +msgstr "" + +#: wt-status.c:751 +msgid " (use -u option to show untracked files)" +msgstr "" + +#: wt-status.c:757 +msgid "No changes" +msgstr "Sem mudanças" + +#: wt-status.c:761 +#, c-format +msgid "no changes added to commit%s\n" +msgstr "nenhuma alteração adicionado ao commit%s\n" + +#: wt-status.c:763 +msgid " (use \"git add\" and/or \"git commit -a\")" +msgstr " (usa \"git add\" e/ou \"git commit -a\")" + +#: wt-status.c:765 +#, c-format +msgid "nothing added to commit but untracked files present%s\n" +msgstr "" + +#: wt-status.c:767 +msgid " (use \"git add\" to track)" +msgstr " (usa \"git add\" para seguir)" + +#: wt-status.c:769 +#: wt-status.c:772 +#: wt-status.c:775 +#, c-format +msgid "nothing to commit%s\n" +msgstr "nada para fazer commit%s\n" + +#: wt-status.c:770 +msgid " (create/copy files and use \"git add\" to track)" +msgstr "" + +#: wt-status.c:773 +msgid " (use -u to show untracked files)" +msgstr "" + +#: wt-status.c:776 +msgid " (working directory clean)" +msgstr " (directório de trabalho vacio)" + +#: wt-status.c:884 +msgid "HEAD (no branch)" +msgstr "HEAD (Não é rama)" + +#: wt-status.c:890 +msgid "Initial commit on " +msgstr "Commit inicial em " + +#: wt-status.c:905 +msgid "behind " +msgstr "atrás " + +#: wt-status.c:908 +#: wt-status.c:911 +msgid "ahead " +msgstr "a frente " + +#: wt-status.c:913 +msgid ", behind " +msgstr ", atrás " + +#: builtin/add.c:62 +#, c-format +msgid "unexpected diff status %c" +msgstr "" + +#: builtin/add.c:67 +#: builtin/commit.c:298 +msgid "updating files failed" +msgstr "Falou a atualização dos ficheiros" + +#: builtin/add.c:77 +#, c-format +msgid "remove '%s'\n" +msgstr "eliminar '%s'\n" + +#: builtin/add.c:176 +#, c-format +msgid "Path '%s' is in submodule '%.*s'" +msgstr "" + +#: builtin/add.c:192 +msgid "Unstaged changes after refreshing the index:" +msgstr "" + +#: builtin/add.c:195 +#: builtin/add.c:456 +#: builtin/rm.c:186 +#, c-format +msgid "pathspec '%s' did not match any files" +msgstr "" + +#: builtin/add.c:209 +#, c-format +msgid "'%s' is beyond a symbolic link" +msgstr "" + +#: builtin/add.c:276 +msgid "Could not read the index" +msgstr "Não foi possível ler o indíce" + +#: builtin/add.c:286 +#, c-format +msgid "Could not open '%s' for writing." +msgstr "Não foi possível abrir '%s' para escrever." + +#: builtin/add.c:290 +msgid "Could not write patch" +msgstr "Não consegue escrever patch" + +#: builtin/add.c:295 +#, c-format +msgid "Could not stat '%s'" +msgstr "" + +#: builtin/add.c:297 +msgid "Empty patch. Aborted." +msgstr "Patch vazio. Aborted." + +#: builtin/add.c:303 +#, c-format +msgid "Could not apply '%s'" +msgstr "Não foi possível aplicar o '%s'" + +#: builtin/add.c:312 +msgid "The following paths are ignored by one of your .gitignore files:\n" +msgstr "" + +#: builtin/add.c:352 +#, c-format +msgid "Use -f if you really want to add them.\n" +msgstr "" + +#: builtin/add.c:353 +msgid "no files added" +msgstr "nenhum ficheiros adicionado" + +#: builtin/add.c:359 +msgid "adding files failed" +msgstr "falhou a adicionar ficheiros" + +#: builtin/add.c:391 +msgid "-A and -u are mutually incompatible" +msgstr "" + +#: builtin/add.c:393 +msgid "Option --ignore-missing can only be used together with --dry-run" +msgstr "" + +#: builtin/add.c:413 +#, c-format +msgid "Nothing specified, nothing added.\n" +msgstr "" + +#: builtin/add.c:414 +#, c-format +msgid "Maybe you wanted to say 'git add .'?\n" +msgstr "" + +#: builtin/add.c:420 +#: builtin/clean.c:95 +#: builtin/commit.c:358 +#: builtin/mv.c:82 +#: builtin/rm.c:162 +msgid "index file corrupt" +msgstr "ficheiro index corrupto" + +#: builtin/add.c:476 +#: builtin/mv.c:229 +#: builtin/rm.c:260 +msgid "Unable to write new index file" +msgstr "" + +#: builtin/archive.c:17 +#, c-format +msgid "could not create archive file '%s'" +msgstr "" + +#: builtin/archive.c:20 +msgid "could not redirect output" +msgstr "" + +#: builtin/archive.c:37 +msgid "git archive: Remote with no URL" +msgstr "" + +#: builtin/archive.c:58 +msgid "git archive: expected ACK/NAK, got EOF" +msgstr "" + +#: builtin/archive.c:63 +#, c-format +msgid "git archive: NACK %s" +msgstr "" + +#: builtin/archive.c:65 +#, c-format +msgid "remote error: %s" +msgstr "erro remoto: %s" + +#: builtin/archive.c:66 +msgid "git archive: protocol error" +msgstr "" + +#: builtin/archive.c:71 +msgid "git archive: expected a flush" +msgstr "" + +#: builtin/branch.c:137 +#, c-format +msgid "" +"deleting branch '%s' that has been merged to\n" +" '%s', but not yet merged to HEAD." +msgstr "" + +#: builtin/branch.c:141 +#, c-format +msgid "" +"not deleting branch '%s' that is not yet merged to\n" +" '%s', even though it is merged to HEAD." +msgstr "" + +#. TRANSLATORS: This is "remote " in "remote branch '%s' not found" +#: builtin/branch.c:163 +msgid "remote " +msgstr "remota" + +#: builtin/branch.c:171 +msgid "cannot use -a with -d" +msgstr "Não é possível usar -a com um -d" + +#: builtin/branch.c:177 +msgid "Couldn't look up commit object for HEAD" +msgstr "" + +#: builtin/branch.c:182 +#, c-format +msgid "Cannot delete the branch '%s' which you are currently on." +msgstr "" + +#: builtin/branch.c:192 +#, c-format +msgid "%sbranch '%s' not found." +msgstr "%sbranch '%s' não encontrado." + +#: builtin/branch.c:200 +#, c-format +msgid "Couldn't look up commit object for '%s'" +msgstr "" + +#: builtin/branch.c:206 +#, c-format +msgid "" +"The branch '%s' is not fully merged.\n" +"If you are sure you want to delete it, run 'git branch -D %s'." +msgstr "" + +#: builtin/branch.c:214 +#, c-format +msgid "Error deleting %sbranch '%s'" +msgstr "" + +#: builtin/branch.c:219 +#, c-format +msgid "Deleted %sbranch %s (was %s).\n" +msgstr "" + +#: builtin/branch.c:224 +msgid "Update of config-file failed" +msgstr "" + +#: builtin/branch.c:322 +#, c-format +msgid "branch '%s' does not point at a commit" +msgstr "" + +#: builtin/branch.c:394 +#, c-format +msgid "behind %d] " +msgstr "atrás %d] " + +#: builtin/branch.c:396 +#, c-format +msgid "ahead %d] " +msgstr "a frente %d] " + +#: builtin/branch.c:398 +#, c-format +msgid "ahead %d, behind %d] " +msgstr "a frente %d, atrás %d] " + +#: builtin/branch.c:501 +msgid "(no branch)" +msgstr "(não é rama)" + +#: builtin/branch.c:566 +msgid "some refs could not be read" +msgstr "" + +#: builtin/branch.c:579 +msgid "cannot rename the current branch while not on any." +msgstr "" + +#: builtin/branch.c:589 +#, c-format +msgid "Invalid branch name: '%s'" +msgstr "Nome da rama inválida: '%s'" + +#: builtin/branch.c:604 +msgid "Branch rename failed" +msgstr "Falhou renomeação da rama" + +#: builtin/branch.c:608 +#, c-format +msgid "Renamed a misnamed branch '%s' away" +msgstr "Renomeado uma rama erronea '%s'" + +#: builtin/branch.c:612 +#, c-format +msgid "Branch renamed to %s, but HEAD is not updated!" +msgstr "" + +#: builtin/branch.c:619 +msgid "Branch is renamed, but update of config-file failed" +msgstr "" + +#: builtin/branch.c:634 +#, c-format +msgid "malformed object name %s" +msgstr "" + +#: builtin/branch.c:658 +#, c-format +msgid "could not write branch description template: %s\n" +msgstr "" + +#: builtin/branch.c:746 +msgid "Failed to resolve HEAD as a valid ref." +msgstr "" + +#: builtin/branch.c:751 +#: builtin/clone.c:558 +msgid "HEAD not found below refs/heads!" +msgstr "" + +#: builtin/branch.c:809 +msgid "-a and -r options to 'git branch' do not make sense with a branch name" +msgstr "" + +#: builtin/bundle.c:47 +#, c-format +msgid "%s is okay\n" +msgstr "%s está bem\n" + +#: builtin/bundle.c:56 +msgid "Need a repository to create a bundle." +msgstr "" + +#: builtin/bundle.c:60 +msgid "Need a repository to unbundle." +msgstr "" + +#: builtin/checkout.c:113 +#: builtin/checkout.c:146 +#, c-format +msgid "path '%s' does not have our version" +msgstr "" + +#: builtin/checkout.c:115 +#: builtin/checkout.c:148 +#, c-format +msgid "path '%s' does not have their version" +msgstr "" + +#: builtin/checkout.c:131 +#, c-format +msgid "path '%s' does not have all necessary versions" +msgstr "" + +#: builtin/checkout.c:175 +#, c-format +msgid "path '%s' does not have necessary versions" +msgstr "" + +#: builtin/checkout.c:192 +#, c-format +msgid "path '%s': cannot merge" +msgstr "" + +#: builtin/checkout.c:209 +#, c-format +msgid "Unable to add merge result for '%s'" +msgstr "" + +#: builtin/checkout.c:212 +#: builtin/reset.c:158 +#, c-format +msgid "make_cache_entry failed for path '%s'" +msgstr "" + +#: builtin/checkout.c:234 +#: builtin/checkout.c:392 +msgid "corrupt index file" +msgstr "ficheiro index corrupto" + +#: builtin/checkout.c:264 +#: builtin/checkout.c:271 +#, c-format +msgid "path '%s' is unmerged" +msgstr "" + +#: builtin/checkout.c:302 +#: builtin/checkout.c:498 +#: builtin/clone.c:583 +#: builtin/merge.c:811 +msgid "unable to write new index file" +msgstr "" + +#: builtin/checkout.c:319 +#: builtin/diff.c:302 +#: builtin/merge.c:408 +msgid "diff_setup_done failed" +msgstr "" + +#: builtin/checkout.c:414 +msgid "you need to resolve your current index first" +msgstr "" + +#: builtin/checkout.c:533 +#, c-format +msgid "Can not do reflog for '%s'\n" +msgstr "" + +#: builtin/checkout.c:565 +msgid "HEAD is now at" +msgstr "HEAD é agora em " + +#: builtin/checkout.c:572 +#, c-format +msgid "Reset branch '%s'\n" +msgstr "Reset rama '%s'\n" + +#: builtin/checkout.c:575 +#, c-format +msgid "Already on '%s'\n" +msgstr "Já em '%s'\n" + +#: builtin/checkout.c:579 +#, c-format +msgid "Switched to and reset branch '%s'\n" +msgstr "" + +#: builtin/checkout.c:581 +#, c-format +msgid "Switched to a new branch '%s'\n" +msgstr "Mudado para a nova rama '%s'\n" + +#: builtin/checkout.c:583 +#, c-format +msgid "Switched to branch '%s'\n" +msgstr "Mudado para a rama '%s'\n" + +#: builtin/checkout.c:639 +#, c-format +msgid " ... and %d more.\n" +msgstr " ... e %d mais.\n" + +#. The singular version +#: builtin/checkout.c:645 +#, c-format +msgid "" +"Warning: you are leaving %d commit behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgid_plural "" +"Warning: you are leaving %d commits behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgstr[0] "" +msgstr[1] "" + +#: builtin/checkout.c:663 +#, c-format +msgid "" +"If you want to keep them by creating a new branch, this may be a good time\n" +"to do so with:\n" +"\n" +" git branch new_branch_name %s\n" +"\n" +msgstr "" + +#: builtin/checkout.c:692 +msgid "internal error in revision walk" +msgstr "" + +#: builtin/checkout.c:696 +msgid "Previous HEAD position was" +msgstr "" + +#: builtin/checkout.c:722 +msgid "You are on a branch yet to be born" +msgstr "" + +#. case (1) +#: builtin/checkout.c:853 +#, c-format +msgid "invalid reference: %s" +msgstr "" + +#. case (1): want a tree +#: builtin/checkout.c:892 +#, c-format +msgid "reference is not a tree: %s" +msgstr "" + +#: builtin/checkout.c:972 +msgid "-B cannot be used with -b" +msgstr "" + +#: builtin/checkout.c:981 +msgid "--patch is incompatible with all other options" +msgstr "" + +#: builtin/checkout.c:984 +msgid "--detach cannot be used with -b/-B/--orphan" +msgstr "" + +#: builtin/checkout.c:986 +msgid "--detach cannot be used with -t" +msgstr "" + +#: builtin/checkout.c:992 +msgid "--track needs a branch name" +msgstr "" + +#: builtin/checkout.c:999 +msgid "Missing branch name; try -b" +msgstr "" + +#: builtin/checkout.c:1005 +msgid "--orphan and -b|-B are mutually exclusive" +msgstr "" + +#: builtin/checkout.c:1007 +msgid "--orphan cannot be used with -t" +msgstr "" + +#: builtin/checkout.c:1017 +msgid "git checkout: -f and -m are incompatible" +msgstr "" + +#: builtin/checkout.c:1051 +msgid "invalid path specification" +msgstr "" + +#: builtin/checkout.c:1059 +#, c-format +msgid "" +"git checkout: updating paths is incompatible with switching branches.\n" +"Did you intend to checkout '%s' which can not be resolved as commit?" +msgstr "" + +#: builtin/checkout.c:1061 +msgid "git checkout: updating paths is incompatible with switching branches." +msgstr "" + +#: builtin/checkout.c:1066 +msgid "git checkout: --detach does not take a path argument" +msgstr "" + +#: builtin/checkout.c:1069 +msgid "" +"git checkout: --ours/--theirs, --force and --merge are incompatible when\n" +"checking out of the index." +msgstr "" + +#: builtin/checkout.c:1088 +msgid "Cannot switch branch to a non-commit." +msgstr "" + +#: builtin/checkout.c:1091 +msgid "--ours/--theirs is incompatible with switching branches." +msgstr "" + +#: builtin/clean.c:78 +msgid "-x and -X cannot be used together" +msgstr "" + +#: builtin/clean.c:82 +msgid "clean.requireForce set to true and neither -n nor -f given; refusing to clean" +msgstr "" + +#: builtin/clean.c:85 +msgid "clean.requireForce defaults to true and neither -n nor -f given; refusing to clean" +msgstr "" + +#: builtin/clean.c:155 +#: builtin/clean.c:176 +#, c-format +msgid "Would remove %s\n" +msgstr "" + +#: builtin/clean.c:159 +#: builtin/clean.c:179 +#, c-format +msgid "Removing %s\n" +msgstr "Eliminando %s\n" + +#: builtin/clean.c:162 +#: builtin/clean.c:182 +#, c-format +msgid "failed to remove %s" +msgstr "" + +#: builtin/clean.c:166 +#, c-format +msgid "Would not remove %s\n" +msgstr "" + +#: builtin/clean.c:168 +#, c-format +msgid "Not removing %s\n" +msgstr "" + +#: builtin/clone.c:243 +#, c-format +msgid "reference repository '%s' is not a local directory." +msgstr "" + +#: builtin/clone.c:302 +#, c-format +msgid "failed to open '%s'" +msgstr "" + +#: builtin/clone.c:306 +#, c-format +msgid "failed to create directory '%s'" +msgstr "" + +#: builtin/clone.c:308 +#: builtin/diff.c:75 +#, c-format +msgid "failed to stat '%s'" +msgstr "" + +#: builtin/clone.c:310 +#, c-format +msgid "%s exists and is not a directory" +msgstr "" + +#: builtin/clone.c:324 +#, c-format +msgid "failed to stat %s\n" +msgstr "" + +#: builtin/clone.c:341 +#, c-format +msgid "failed to unlink '%s'" +msgstr "" + +#: builtin/clone.c:346 +#, c-format +msgid "failed to create link '%s'" +msgstr "" + +#: builtin/clone.c:350 +#, c-format +msgid "failed to copy file to '%s'" +msgstr "" + +#: builtin/clone.c:373 +#, c-format +msgid "done.\n" +msgstr "terminado.\n" + +#: builtin/clone.c:440 +#, c-format +msgid "Could not find remote branch %s to clone." +msgstr "" + +#: builtin/clone.c:549 +msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" +msgstr "" + +#: builtin/clone.c:639 +msgid "Too many arguments." +msgstr "Demasiados parametros." + +#: builtin/clone.c:643 +msgid "You must specify a repository to clone." +msgstr "" + +#: builtin/clone.c:654 +#, c-format +msgid "--bare and --origin %s options are incompatible." +msgstr "" + +#: builtin/clone.c:668 +#, c-format +msgid "repository '%s' does not exist" +msgstr "" + +#: builtin/clone.c:673 +msgid "--depth is ignored in local clones; use file:// instead." +msgstr "" + +#: builtin/clone.c:683 +#, c-format +msgid "destination path '%s' already exists and is not an empty directory." +msgstr "" + +#: builtin/clone.c:693 +#, c-format +msgid "working tree '%s' already exists." +msgstr "" + +#: builtin/clone.c:706 +#: builtin/clone.c:720 +#, c-format +msgid "could not create leading directories of '%s'" +msgstr "" + +#: builtin/clone.c:709 +#, c-format +msgid "could not create work tree dir '%s'." +msgstr "" + +#: builtin/clone.c:728 +#, c-format +msgid "Cloning into bare repository '%s'...\n" +msgstr "Clonando em um repositorio nu (bare) '%s'...\n" + +#: builtin/clone.c:730 +#, c-format +msgid "Cloning into '%s'...\n" +msgstr "Clonar em '%s'...\n" + +#: builtin/clone.c:786 +#, c-format +msgid "Don't know how to clone %s" +msgstr "Não sei como clonar %s" + +#: builtin/clone.c:835 +#, c-format +msgid "Remote branch %s not found in upstream %s" +msgstr "" + +#: builtin/clone.c:842 +msgid "You appear to have cloned an empty repository." +msgstr "" + +#: builtin/commit.c:42 +msgid "" +"Your name and email address were configured automatically based\n" +"on your username and hostname. Please check that they are accurate.\n" +"You can suppress this message by setting them explicitly:\n" +"\n" +" git config --global user.name \"Your Name\"\n" +" git config --global user.email you@example.com\n" +"\n" +"After doing this, you may fix the identity used for this commit with:\n" +"\n" +" git commit --amend --reset-author\n" +msgstr "" +"O seu nome e endereço de e-mail foram configurados automaticamente com base\n" +"no o seu usuario e nome da maquina. Por favor, verifique se eles são precisos.\n" +"Você pode suprimir esta mensagem, configurando-los explicitamente:\n" +"\n" +" git config --global user.name \"O teu Nome\"\n" +" git config --global user.email tu@examplo.com\n" +"\n" +"Após fazer isso, você pode corregir a identidade usada em este commit com:\n" +"\n" +" git commit --amend --reset-author\n" + +#: builtin/commit.c:54 +msgid "" +"You asked to amend the most recent commit, but doing so would make\n" +"it empty. You can repeat your command with --allow-empty, or you can\n" +"remove the commit entirely with \"git reset HEAD^\".\n" +msgstr "" + +#: builtin/commit.c:59 +msgid "" +"The previous cherry-pick is now empty, possibly due to conflict resolution.\n" +"If you wish to commit it anyway, use:\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Otherwise, please use 'git reset'\n" +msgstr "" + +#: builtin/commit.c:205 +#: builtin/reset.c:33 +msgid "merge" +msgstr "juntar" + +#: builtin/commit.c:208 +msgid "cherry-pick" +msgstr "cherry-pick" + +#: builtin/commit.c:325 +msgid "failed to unpack HEAD tree object" +msgstr "" + +#: builtin/commit.c:367 +msgid "unable to create temporary index" +msgstr "" + +#: builtin/commit.c:373 +msgid "interactive add failed" +msgstr "falhou adicionar interativo" + +#: builtin/commit.c:406 +#: builtin/commit.c:427 +#: builtin/commit.c:473 +msgid "unable to write new_index file" +msgstr "" + +#: builtin/commit.c:457 +#, c-format +msgid "cannot do a partial commit during a %s." +msgstr "" + +#: builtin/commit.c:466 +msgid "cannot read the index" +msgstr "não foi possível ler o indíce" + +#: builtin/commit.c:486 +msgid "unable to write temporary index file" +msgstr "" + +#: builtin/commit.c:550 +#: builtin/commit.c:556 +#, c-format +msgid "invalid commit: %s" +msgstr "commit inválido: %s" + +#: builtin/commit.c:579 +msgid "malformed --author parameter" +msgstr "" + +#: builtin/commit.c:635 +#, c-format +msgid "Malformed ident string: '%s'" +msgstr "" + +#: builtin/commit.c:670 +#: builtin/commit.c:703 +#: builtin/commit.c:1000 +#, c-format +msgid "could not lookup commit %s" +msgstr "" + +#: builtin/commit.c:682 +#: builtin/shortlog.c:296 +#, c-format +msgid "(reading log message from standard input)\n" +msgstr "" + +#: builtin/commit.c:684 +msgid "could not read log from standard input" +msgstr "" + +#: builtin/commit.c:688 +#, c-format +msgid "could not read log file '%s'" +msgstr "não é possivel ler o ficheiro de log '%s'" + +#: builtin/commit.c:694 +msgid "commit has empty message" +msgstr "a mensagem do commit está vazia" + +#: builtin/commit.c:710 +msgid "could not read MERGE_MSG" +msgstr "não é possivel ler MERGE_MSG" + +#: builtin/commit.c:714 +msgid "could not read SQUASH_MSG" +msgstr "não é possivel ler SQUASH_MSG" + +#: builtin/commit.c:718 +#, c-format +msgid "could not read '%s'" +msgstr "não é possivel ler '%s'" + +#: builtin/commit.c:746 +#, c-format +msgid "could not open '%s'" +msgstr "não é possivel abrir '%s'" + +#: builtin/commit.c:770 +msgid "could not write commit template" +msgstr "" + +#: builtin/commit.c:783 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a %s.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" + +#: builtin/commit.c:796 +msgid "Please enter the commit message for your changes." +msgstr "Por favor insira a mensagem de commit das suas alterações." + +#: builtin/commit.c:799 +msgid "" +" Lines starting\n" +"with '#' will be ignored, and an empty message aborts the commit.\n" +msgstr "" + +#: builtin/commit.c:804 +msgid "" +" Lines starting\n" +"with '#' will be kept; you may remove them yourself if you want to.\n" +"An empty message aborts the commit.\n" +msgstr "" + +#: builtin/commit.c:816 +#, c-format +msgid "%sAuthor: %s" +msgstr "%sAutor: %s" + +#: builtin/commit.c:823 +#, c-format +msgid "%sCommitter: %s" +msgstr "%sCommitador: %s" + +#: builtin/commit.c:843 +msgid "Cannot read index" +msgstr "" + +#: builtin/commit.c:880 +msgid "Error building trees" +msgstr "" + +#: builtin/commit.c:895 +#: builtin/tag.c:357 +#, c-format +msgid "Please supply the message using either -m or -F option.\n" +msgstr "" + +#: builtin/commit.c:975 +#, c-format +msgid "No existing author found with '%s'" +msgstr "" + +#: builtin/commit.c:990 +#: builtin/commit.c:1182 +#, c-format +msgid "Invalid untracked files mode '%s'" +msgstr "" + +#: builtin/commit.c:1030 +msgid "Using both --reset-author and --author does not make sense" +msgstr "" + +#: builtin/commit.c:1041 +msgid "You have nothing to amend." +msgstr "Você não tem nada a corregir." + +#: builtin/commit.c:1043 +#, c-format +msgid "You are in the middle of a %s -- cannot amend." +msgstr "" + +#: builtin/commit.c:1045 +msgid "Options --squash and --fixup cannot be used together" +msgstr "" + +#: builtin/commit.c:1055 +msgid "Only one of -c/-C/-F/--fixup can be used." +msgstr "" + +#: builtin/commit.c:1057 +msgid "Option -m cannot be combined with -c/-C/-F/--fixup." +msgstr "" + +#: builtin/commit.c:1063 +msgid "--reset-author can be used only with -C, -c or --amend." +msgstr "" + +#: builtin/commit.c:1080 +msgid "Only one of --include/--only/--all/--interactive/--patch can be used." +msgstr "" + +#: builtin/commit.c:1082 +msgid "No paths with --include/--only does not make sense." +msgstr "" + +#: builtin/commit.c:1084 +msgid "Clever... amending the last one with dirty index." +msgstr "" + +#: builtin/commit.c:1086 +msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +msgstr "" + +#: builtin/commit.c:1096 +#: builtin/tag.c:556 +#, c-format +msgid "Invalid cleanup mode %s" +msgstr "" + +#: builtin/commit.c:1101 +msgid "Paths with -a does not make sense." +msgstr "" + +#: builtin/commit.c:1280 +msgid "couldn't look up newly created commit" +msgstr "" + +#: builtin/commit.c:1282 +msgid "could not parse newly created commit" +msgstr "" + +#: builtin/commit.c:1323 +msgid "detached HEAD" +msgstr "" + +#: builtin/commit.c:1325 +msgid " (root-commit)" +msgstr " (root-commit)" + +#: builtin/commit.c:1415 +msgid "could not parse HEAD commit" +msgstr "" + +#: builtin/commit.c:1452 +#: builtin/merge.c:509 +#, c-format +msgid "could not open '%s' for reading" +msgstr "" + +#: builtin/commit.c:1459 +#, c-format +msgid "Corrupt MERGE_HEAD file (%s)" +msgstr "" + +#: builtin/commit.c:1466 +msgid "could not read MERGE_MODE" +msgstr "" + +#: builtin/commit.c:1485 +#, c-format +msgid "could not read commit message: %s" +msgstr "" + +#: builtin/commit.c:1499 +#, c-format +msgid "Aborting commit due to empty commit message.\n" +msgstr "" + +#: builtin/commit.c:1514 +#: builtin/merge.c:935 +#: builtin/merge.c:968 +msgid "failed to write commit object" +msgstr "" + +#: builtin/commit.c:1535 +msgid "cannot lock HEAD ref" +msgstr "" + +#: builtin/commit.c:1539 +msgid "cannot update HEAD ref" +msgstr "" + +#: builtin/commit.c:1550 +msgid "" +"Repository has been updated, but unable to write\n" +"new_index file. Check that disk is not full or quota is\n" +"not exceeded, and then \"git reset HEAD\" to recover." +msgstr "" + +#: builtin/describe.c:234 +#, c-format +msgid "annotated tag %s not available" +msgstr "" + +#: builtin/describe.c:238 +#, c-format +msgid "annotated tag %s has no embedded name" +msgstr "" + +#: builtin/describe.c:240 +#, c-format +msgid "tag '%s' is really '%s' here" +msgstr "" + +#: builtin/describe.c:267 +#, c-format +msgid "Not a valid object name %s" +msgstr "" + +#: builtin/describe.c:270 +#, c-format +msgid "%s is not a valid '%s' object" +msgstr "" + +#: builtin/describe.c:287 +#, c-format +msgid "no tag exactly matches '%s'" +msgstr "" + +#: builtin/describe.c:289 +#, c-format +msgid "searching to describe %s\n" +msgstr "" + +#: builtin/describe.c:329 +#, c-format +msgid "finished search at %s\n" +msgstr "" + +#: builtin/describe.c:353 +#, c-format +msgid "" +"No annotated tags can describe '%s'.\n" +"However, there were unannotated tags: try --tags." +msgstr "" + +#: builtin/describe.c:357 +#, c-format +msgid "" +"No tags can describe '%s'.\n" +"Try --always, or create some tags." +msgstr "" + +#: builtin/describe.c:378 +#, c-format +msgid "traversed %lu commits\n" +msgstr "" + +#: builtin/describe.c:381 +#, c-format +msgid "" +"more than %i tags found; listed %i most recent\n" +"gave up search at %s\n" +msgstr "" + +#: builtin/describe.c:436 +msgid "--long is incompatible with --abbrev=0" +msgstr "" + +#: builtin/describe.c:462 +msgid "No names found, cannot describe anything." +msgstr "Nenhum nome encontrado, não descreve nada." + +#: builtin/describe.c:482 +msgid "--dirty is incompatible with committishes" +msgstr "" + +#: builtin/diff.c:77 +#, c-format +msgid "'%s': not a regular file or symlink" +msgstr "" + +#: builtin/diff.c:220 +#, c-format +msgid "invalid option: %s" +msgstr "" + +#: builtin/diff.c:297 +msgid "Not a git repository" +msgstr "Não é um repositorio git" + +#: builtin/diff.c:347 +#, c-format +msgid "invalid object '%s' given." +msgstr "" + +#: builtin/diff.c:352 +#, c-format +msgid "more than %d trees given: '%s'" +msgstr "" + +#: builtin/diff.c:362 +#, c-format +msgid "more than two blobs given: '%s'" +msgstr "" + +#: builtin/diff.c:370 +#, c-format +msgid "unhandled object '%s' given." +msgstr "" + +#: builtin/fetch.c:200 +msgid "Couldn't find remote ref HEAD" +msgstr "" + +#: builtin/fetch.c:252 +#, c-format +msgid "object %s not found" +msgstr "" + +#: builtin/fetch.c:258 +msgid "[up to date]" +msgstr "[Actualizada]" + +#: builtin/fetch.c:272 +#, c-format +msgid "! %-*s %-*s -> %s (can't fetch in current branch)" +msgstr "" + +#: builtin/fetch.c:273 +#: builtin/fetch.c:351 +msgid "[rejected]" +msgstr "[rejeitado]" + +#: builtin/fetch.c:284 +msgid "[tag update]" +msgstr "[etiqueta actualizada]" + +#: builtin/fetch.c:286 +#: builtin/fetch.c:313 +#: builtin/fetch.c:331 +msgid " (unable to update local ref)" +msgstr "" + +#: builtin/fetch.c:298 +msgid "[new tag]" +msgstr "[nova etiqueta]" + +#: builtin/fetch.c:302 +msgid "[new branch]" +msgstr "[nova rama]" + +#: builtin/fetch.c:347 +msgid "unable to update local ref" +msgstr "" + +#: builtin/fetch.c:347 +msgid "forced update" +msgstr "actualização forçada" + +#: builtin/fetch.c:353 +msgid "(non-fast-forward)" +msgstr "" + +#: builtin/fetch.c:384 +#: builtin/fetch.c:676 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "" + +#: builtin/fetch.c:393 +#, c-format +msgid "%s did not send all necessary objects\n" +msgstr "" + +#: builtin/fetch.c:479 +#, c-format +msgid "From %.*s\n" +msgstr "Para %.*s\n" + +#: builtin/fetch.c:490 +#, c-format +msgid "" +"some local refs could not be updated; try running\n" +" 'git remote prune %s' to remove any old, conflicting branches" +msgstr "" + +#: builtin/fetch.c:540 +#, c-format +msgid " (%s will become dangling)\n" +msgstr "" + +#: builtin/fetch.c:541 +#, c-format +msgid " (%s has become dangling)\n" +msgstr "" + +#: builtin/fetch.c:548 +msgid "[deleted]" +msgstr "[eliminado]" + +#: builtin/fetch.c:549 +msgid "(none)" +msgstr "(nenhum)" + +#: builtin/fetch.c:666 +#, c-format +msgid "Refusing to fetch into current branch %s of non-bare repository" +msgstr "" + +#: builtin/fetch.c:700 +#, c-format +msgid "Don't know how to fetch from %s" +msgstr "" + +#: builtin/fetch.c:777 +#, c-format +msgid "Option \"%s\" value \"%s\" is not valid for %s" +msgstr "" + +#: builtin/fetch.c:780 +#, c-format +msgid "Option \"%s\" is ignored for %s\n" +msgstr "" + +#: builtin/fetch.c:879 +#, c-format +msgid "Fetching %s\n" +msgstr "Baixando %s\n" + +#: builtin/fetch.c:881 +#, c-format +msgid "Could not fetch %s" +msgstr "" + +#: builtin/fetch.c:898 +msgid "" +"No remote repository specified. Please, specify either a URL or a\n" +"remote name from which new revisions should be fetched." +msgstr "" +"Nenhum repositório remoto especificado. Por favor, especifique um URL ou o\n" +"nome remoto a partir do qual novas revisões devem ser obtida." + +#: builtin/fetch.c:918 +msgid "You need to specify a tag name." +msgstr "Você precisa especificar um nome da etiqueta." + +#: builtin/fetch.c:970 +msgid "fetch --all does not take a repository argument" +msgstr "" + +#: builtin/fetch.c:972 +msgid "fetch --all does not make sense with refspecs" +msgstr "" + +#: builtin/fetch.c:983 +#, c-format +msgid "No such remote or remote group: %s" +msgstr "" + +#: builtin/fetch.c:991 +msgid "Fetching a group and specifying refspecs does not make sense" +msgstr "" + +#: builtin/gc.c:63 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "Inválido %s: '%s'" + +#: builtin/gc.c:78 +msgid "Too many options specified" +msgstr "Demasiadas opções especificadas" + +#: builtin/gc.c:103 +#, c-format +msgid "insanely long object directory %.*s" +msgstr "" + +#: builtin/gc.c:223 +#, c-format +msgid "Auto packing the repository for optimum performance.\n" +msgstr "" + +#: builtin/gc.c:226 +#, c-format +msgid "" +"Auto packing the repository for optimum performance. You may also\n" +"run \"git gc\" manually. See \"git help gc\" for more information.\n" +msgstr "" + +#: builtin/gc.c:256 +msgid "There are too many unreachable loose objects; run 'git prune' to remove them." +msgstr "" + +#: builtin/grep.c:216 +#, c-format +msgid "grep: failed to create thread: %s" +msgstr "" + +#: builtin/grep.c:402 +#, c-format +msgid "Failed to chdir: %s" +msgstr "" + +#: builtin/grep.c:478 +#: builtin/grep.c:512 +#, c-format +msgid "unable to read tree (%s)" +msgstr "" + +#: builtin/grep.c:526 +#, c-format +msgid "unable to grep from object of type %s" +msgstr "" + +#: builtin/grep.c:584 +#, c-format +msgid "switch `%c' expects a numerical value" +msgstr "" + +#: builtin/grep.c:601 +#, c-format +msgid "cannot open '%s'" +msgstr "" + +#: builtin/grep.c:888 +msgid "no pattern given." +msgstr "" + +#: builtin/grep.c:902 +#, c-format +msgid "bad object %s" +msgstr "" + +#: builtin/grep.c:943 +msgid "--open-files-in-pager only works on the worktree" +msgstr "" + +#: builtin/grep.c:966 +msgid "--cached or --untracked cannot be used with --no-index." +msgstr "" + +#: builtin/grep.c:971 +msgid "--no-index or --untracked cannot be used with revs." +msgstr "" + +#: builtin/grep.c:974 +msgid "--[no-]exclude-standard cannot be used for tracked contents." +msgstr "" + +#: builtin/grep.c:982 +msgid "both --cached and trees are given." +msgstr "" + +#: builtin/init-db.c:35 +#, c-format +msgid "Could not make %s writable by group" +msgstr "" + +#: builtin/init-db.c:62 +#, c-format +msgid "insanely long template name %s" +msgstr "" + +#: builtin/init-db.c:67 +#, c-format +msgid "cannot stat '%s'" +msgstr "" + +#: builtin/init-db.c:73 +#, c-format +msgid "cannot stat template '%s'" +msgstr "" + +#: builtin/init-db.c:80 +#, c-format +msgid "cannot opendir '%s'" +msgstr "" + +#: builtin/init-db.c:97 +#, c-format +msgid "cannot readlink '%s'" +msgstr "" + +#: builtin/init-db.c:99 +#, c-format +msgid "insanely long symlink %s" +msgstr "" + +#: builtin/init-db.c:102 +#, c-format +msgid "cannot symlink '%s' '%s'" +msgstr "" + +#: builtin/init-db.c:106 +#, c-format +msgid "cannot copy '%s' to '%s'" +msgstr "" + +#: builtin/init-db.c:110 +#, c-format +msgid "ignoring template %s" +msgstr "" + +#: builtin/init-db.c:133 +#, c-format +msgid "insanely long template path %s" +msgstr "" + +#: builtin/init-db.c:141 +#, c-format +msgid "templates not found %s" +msgstr "" + +#: builtin/init-db.c:154 +#, c-format +msgid "not copying templates of a wrong format version %d from '%s'" +msgstr "" + +#: builtin/init-db.c:192 +#, c-format +msgid "insane git directory %s" +msgstr "" + +#: builtin/init-db.c:322 +#: builtin/init-db.c:325 +#, c-format +msgid "%s already exists" +msgstr "%s já existe" + +#: builtin/init-db.c:354 +#, c-format +msgid "unable to handle file type %d" +msgstr "" + +#: builtin/init-db.c:357 +#, c-format +msgid "unable to move %s to %s" +msgstr "" + +#: builtin/init-db.c:362 +#, c-format +msgid "Could not create git link %s" +msgstr "" + +#. +#. * TRANSLATORS: The first '%s' is either "Reinitialized +#. * existing" or "Initialized empty", the second " shared" or +#. * "", and the last '%s%s' is the verbatim directory name. +#. +#: builtin/init-db.c:419 +#, c-format +msgid "%s%s Git repository in %s%s\n" +msgstr "" + +#: builtin/init-db.c:420 +msgid "Reinitialized existing" +msgstr "" + +#: builtin/init-db.c:420 +msgid "Initialized empty" +msgstr "Inicializada vazio" + +#: builtin/init-db.c:421 +msgid " shared" +msgstr " partilhado" + +#: builtin/init-db.c:440 +msgid "cannot tell cwd" +msgstr "" + +#: builtin/init-db.c:521 +#: builtin/init-db.c:528 +#, c-format +msgid "cannot mkdir %s" +msgstr "" + +#: builtin/init-db.c:532 +#, c-format +msgid "cannot chdir to %s" +msgstr "" + +#: builtin/init-db.c:554 +#, c-format +msgid "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-dir=<directory>)" +msgstr "" + +#: builtin/init-db.c:578 +msgid "Cannot access current working directory" +msgstr "" + +#: builtin/init-db.c:585 +#, c-format +msgid "Cannot access work tree '%s'" +msgstr "" + +#: builtin/log.c:187 +#, c-format +msgid "Final output: %d %s\n" +msgstr "" + +#: builtin/log.c:395 +#: builtin/log.c:483 +#, c-format +msgid "Could not read object %s" +msgstr "" + +#: builtin/log.c:507 +#, c-format +msgid "Unknown type: %d" +msgstr "Tipo desconhecido: %d" + +#: builtin/log.c:596 +msgid "format.headers without value" +msgstr "" + +#: builtin/log.c:669 +msgid "name of output directory is too long" +msgstr "nome do diretório de saída é demasiado longo" + +#: builtin/log.c:680 +#, c-format +msgid "Cannot open patch file %s" +msgstr "Não é possivel abrir o ficheiro patch %s" + +#: builtin/log.c:694 +msgid "Need exactly one range." +msgstr "Necessita de exatamente um intervalo." + +#: builtin/log.c:702 +msgid "Not a range." +msgstr "Não é um intervalo." + +#: builtin/log.c:739 +msgid "Could not extract email from committer identity." +msgstr "Não foi possível extrair a identidade do committer do e-mail." + +#: builtin/log.c:785 +msgid "Cover letter needs email format" +msgstr "Carta de apresentação necessita um modelo de e-mail" + +#: builtin/log.c:879 +#, c-format +msgid "insane in-reply-to: %s" +msgstr "" + +#: builtin/log.c:952 +msgid "Two output directories?" +msgstr "Dois diretórios de saída?" + +#: builtin/log.c:1173 +#, c-format +msgid "bogus committer info %s" +msgstr "" + +#: builtin/log.c:1218 +msgid "-n and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1220 +msgid "--subject-prefix and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1225 +#: builtin/shortlog.c:284 +#, c-format +msgid "unrecognized argument: %s" +msgstr "argumento não reconhecido: %s" + +#: builtin/log.c:1228 +msgid "--name-only does not make sense" +msgstr "" + +#: builtin/log.c:1230 +msgid "--name-status does not make sense" +msgstr "" + +#: builtin/log.c:1232 +msgid "--check does not make sense" +msgstr "" + +#: builtin/log.c:1255 +msgid "standard output, or directory, which one?" +msgstr "saída padrão, ou diretório, qual deles?" + +#: builtin/log.c:1257 +#, c-format +msgid "Could not create directory '%s'" +msgstr "" + +#: builtin/log.c:1410 +msgid "Failed to create output files" +msgstr "Falhou ao criar ficheiros de saída" + +#: builtin/log.c:1514 +#, c-format +msgid "Could not find a tracked remote branch, please specify <upstream> manually.\n" +msgstr "" + +#: builtin/log.c:1530 +#: builtin/log.c:1532 +#: builtin/log.c:1544 +#, c-format +msgid "Unknown commit %s" +msgstr "Commit desconhecido %s" + +#: builtin/merge.c:91 +msgid "switch `m' requires a value" +msgstr "" + +#: builtin/merge.c:128 +#, c-format +msgid "Could not find merge strategy '%s'.\n" +msgstr "" + +#: builtin/merge.c:129 +#, c-format +msgid "Available strategies are:" +msgstr "As estratégias disponíveis são:" + +#: builtin/merge.c:134 +#, c-format +msgid "Available custom strategies are:" +msgstr "Estratégias personalizadas disponíveis são:" + +#: builtin/merge.c:241 +msgid "could not run stash." +msgstr "" + +#: builtin/merge.c:246 +msgid "stash failed" +msgstr "falhou o stash" + +#: builtin/merge.c:251 +#, c-format +msgid "not a valid object: %s" +msgstr "" + +#: builtin/merge.c:270 +#: builtin/merge.c:287 +msgid "read-tree failed" +msgstr "" + +#: builtin/merge.c:317 +msgid " (nothing to squash)" +msgstr " (nada para squash)" + +#: builtin/merge.c:330 +#, c-format +msgid "Squash commit -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:362 +msgid "Writing SQUASH_MSG" +msgstr "Escrevendo SQUASH_MSG" + +#: builtin/merge.c:364 +msgid "Finishing SQUASH_MSG" +msgstr "Terminando SQUASH_MSG" + +#: builtin/merge.c:386 +#, c-format +msgid "No merge message -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:437 +#, c-format +msgid "'%s' does not point to a commit" +msgstr "" + +#: builtin/merge.c:536 +#, c-format +msgid "Bad branch.%s.mergeoptions string: %s" +msgstr "" + +#: builtin/merge.c:629 +msgid "git write-tree failed to write a tree" +msgstr "" + +#: builtin/merge.c:679 +msgid "failed to read the cache" +msgstr "" + +#: builtin/merge.c:696 +msgid "Unable to write index." +msgstr "" + +#: builtin/merge.c:709 +msgid "Not handling anything other than two heads merge." +msgstr "" + +#: builtin/merge.c:723 +#, c-format +msgid "Unknown option for merge-recursive: -X%s" +msgstr "" + +#: builtin/merge.c:737 +#, c-format +msgid "unable to write %s" +msgstr "" + +#: builtin/merge.c:876 +#, c-format +msgid "Could not read from '%s'" +msgstr "" + +#: builtin/merge.c:885 +#, c-format +msgid "Not committing merge; use 'git commit' to complete the merge.\n" +msgstr "Não commitando um merge; usa 'git commit' para completar o merge.\n" + +#: builtin/merge.c:891 +msgid "" +"Please enter a commit message to explain why this merge is necessary,\n" +"especially if it merges an updated upstream into a topic branch.\n" +"\n" +"Lines starting with '#' will be ignored, and an empty message aborts\n" +"the commit.\n" +msgstr "" + +#: builtin/merge.c:915 +msgid "Empty commit message." +msgstr "Mensagem de commit vazia." + +#: builtin/merge.c:927 +#, c-format +msgid "Wonderful.\n" +msgstr "Fastastico.\n" + +#: builtin/merge.c:1000 +#, c-format +msgid "Automatic merge failed; fix conflicts and then commit the result.\n" +msgstr "" + +#: builtin/merge.c:1016 +#, c-format +msgid "'%s' is not a commit" +msgstr "'%s' não é um commit" + +#: builtin/merge.c:1057 +msgid "No current branch." +msgstr "Nenhuma rama actual" + +#: builtin/merge.c:1059 +msgid "No remote for the current branch." +msgstr "" + +#: builtin/merge.c:1061 +msgid "No default upstream defined for the current branch." +msgstr "" + +#: builtin/merge.c:1066 +#, c-format +msgid "No remote tracking branch for %s from %s" +msgstr "" + +#: builtin/merge.c:1188 +msgid "There is no merge to abort (MERGE_HEAD missing)." +msgstr "" + +#: builtin/merge.c:1204 +#: git-pull.sh:31 +msgid "" +"You have not concluded your merge (MERGE_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1207 +#: git-pull.sh:34 +msgid "You have not concluded your merge (MERGE_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1211 +msgid "" +"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1214 +msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1223 +msgid "You cannot combine --squash with --no-ff." +msgstr "" + +#: builtin/merge.c:1228 +msgid "You cannot combine --no-ff with --ff-only." +msgstr "" + +#: builtin/merge.c:1235 +msgid "No commit specified and merge.defaultToUpstream not set." +msgstr "" + +#: builtin/merge.c:1266 +msgid "Can merge only exactly one commit into empty head" +msgstr "" + +#: builtin/merge.c:1269 +msgid "Squash commit into empty head not supported yet" +msgstr "" + +#: builtin/merge.c:1271 +msgid "Non-fast-forward commit does not make sense into an empty head" +msgstr "" + +#: builtin/merge.c:1275 +#: builtin/merge.c:1319 +#, c-format +msgid "%s - not something we can merge" +msgstr "" + +#: builtin/merge.c:1385 +#, c-format +msgid "Updating %s..%s\n" +msgstr "Actualizando %s..%s\n" + +#: builtin/merge.c:1423 +#, c-format +msgid "Trying really trivial in-index merge...\n" +msgstr "" + +#: builtin/merge.c:1430 +#, c-format +msgid "Nope.\n" +msgstr "Não.\n" + +#: builtin/merge.c:1462 +msgid "Not possible to fast-forward, aborting." +msgstr "" + +#: builtin/merge.c:1485 +#: builtin/merge.c:1562 +#, c-format +msgid "Rewinding the tree to pristine...\n" +msgstr "" + +#: builtin/merge.c:1489 +#, c-format +msgid "Trying merge strategy %s...\n" +msgstr "" + +#: builtin/merge.c:1553 +#, c-format +msgid "No merge strategy handled the merge.\n" +msgstr "" + +#: builtin/merge.c:1555 +#, c-format +msgid "Merge with strategy %s failed.\n" +msgstr "Fundir com a estratégia %s falhou.\n" + +#: builtin/merge.c:1564 +#, c-format +msgid "Using the %s to prepare resolving by hand.\n" +msgstr "" + +#: builtin/merge.c:1575 +#, c-format +msgid "Automatic merge went well; stopped before committing as requested\n" +msgstr "" + +#: builtin/mv.c:108 +#, c-format +msgid "Checking rename of '%s' to '%s'\n" +msgstr "" + +#: builtin/mv.c:112 +msgid "bad source" +msgstr "fonte inválida" + +#: builtin/mv.c:115 +msgid "can not move directory into itself" +msgstr "" + +#: builtin/mv.c:118 +msgid "cannot move directory over file" +msgstr "" + +#: builtin/mv.c:128 +#, c-format +msgid "Huh? %.*s is in index?" +msgstr "" + +#: builtin/mv.c:140 +msgid "source directory is empty" +msgstr "o directorio fonte está vazio" + +#: builtin/mv.c:171 +msgid "not under version control" +msgstr "não está no controlo de versões" + +#: builtin/mv.c:173 +msgid "destination exists" +msgstr "existe destino" + +#: builtin/mv.c:181 +#, c-format +msgid "overwriting '%s'" +msgstr "subscrevendo '%s'" + +#: builtin/mv.c:184 +msgid "Cannot overwrite" +msgstr "Não consegue subscrever" + +#: builtin/mv.c:187 +msgid "multiple sources for the same target" +msgstr "múltiplas fontes para o mesmo alvo" + +#: builtin/mv.c:202 +#, c-format +msgid "%s, source=%s, destination=%s" +msgstr "" + +#: builtin/mv.c:212 +#, c-format +msgid "Renaming %s to %s\n" +msgstr "Mudar de nome %s para %s\n" + +#: builtin/mv.c:215 +#, c-format +msgid "renaming '%s' failed" +msgstr "mudar de nome '%s' falhou" + +#: builtin/notes.c:139 +#, c-format +msgid "unable to start 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:145 +msgid "can't fdopen 'show' output fd" +msgstr "" + +#: builtin/notes.c:155 +#, c-format +msgid "failed to close pipe to 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:158 +#, c-format +msgid "failed to finish 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:175 +#: builtin/tag.c:343 +#, c-format +msgid "could not create file '%s'" +msgstr "" + +#: builtin/notes.c:189 +msgid "Please supply the note contents using either -m or -F option" +msgstr "" + +#: builtin/notes.c:210 +#: builtin/notes.c:973 +#, c-format +msgid "Removing note for object %s\n" +msgstr "" + +#: builtin/notes.c:215 +msgid "unable to write note object" +msgstr "" + +#: builtin/notes.c:217 +#, c-format +msgid "The note contents has been left in %s" +msgstr "" + +#: builtin/notes.c:251 +#: builtin/tag.c:521 +#, c-format +msgid "cannot read '%s'" +msgstr "não consegue ler '%s'" + +#: builtin/notes.c:253 +#: builtin/tag.c:524 +#, c-format +msgid "could not open or read '%s'" +msgstr "" + +#: builtin/notes.c:272 +#: builtin/notes.c:445 +#: builtin/notes.c:447 +#: builtin/notes.c:507 +#: builtin/notes.c:561 +#: builtin/notes.c:644 +#: builtin/notes.c:649 +#: builtin/notes.c:724 +#: builtin/notes.c:766 +#: builtin/notes.c:968 +#: builtin/reset.c:293 +#: builtin/tag.c:537 +#, c-format +msgid "Failed to resolve '%s' as a valid ref." +msgstr "" + +#: builtin/notes.c:275 +#, c-format +msgid "Failed to read object '%s'." +msgstr "" + +#: builtin/notes.c:299 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" + +#: builtin/notes.c:340 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "" + +#: builtin/notes.c:350 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: builtin/notes.c:377 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Inválido %s valor: '%s'" + +#: builtin/notes.c:441 +#, c-format +msgid "Malformed input line: '%s'." +msgstr "" + +#: builtin/notes.c:456 +#, c-format +msgid "Failed to copy notes from '%s' to '%s'" +msgstr "" + +#: builtin/notes.c:500 +#: builtin/notes.c:554 +#: builtin/notes.c:627 +#: builtin/notes.c:639 +#: builtin/notes.c:712 +#: builtin/notes.c:759 +#: builtin/notes.c:1033 +msgid "too many parameters" +msgstr "demasiado parametros" + +#: builtin/notes.c:513 +#: builtin/notes.c:772 +#, c-format +msgid "No note found for object %s." +msgstr "Nenhuma nota encontrada para o objecto %s." + +#: builtin/notes.c:580 +#, c-format +msgid "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite existing notes" +msgstr "" + +#: builtin/notes.c:585 +#: builtin/notes.c:662 +#, c-format +msgid "Overwriting existing notes for object %s\n" +msgstr "" + +#: builtin/notes.c:635 +msgid "too few parameters" +msgstr "" + +#: builtin/notes.c:656 +#, c-format +msgid "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite existing notes" +msgstr "" + +#: builtin/notes.c:668 +#, c-format +msgid "Missing notes on source object %s. Cannot copy." +msgstr "" + +#: builtin/notes.c:717 +#, c-format +msgid "" +"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" +"Please use 'git notes add -f -m/-F/-c/-C' instead.\n" +msgstr "" + +#: builtin/notes.c:971 +#, c-format +msgid "Object %s has no note\n" +msgstr "" + +#: builtin/notes.c:1103 +#, c-format +msgid "Unknown subcommand: %s" +msgstr "" + +#: builtin/pack-objects.c:2310 +#, c-format +msgid "unsupported index version %s" +msgstr "" + +#: builtin/pack-objects.c:2314 +#, c-format +msgid "bad index version '%s'" +msgstr "" + +#: builtin/pack-objects.c:2322 +#, c-format +msgid "option %s does not accept negative form" +msgstr "opção %s não aceita formato negativo" + +#: builtin/pack-objects.c:2326 +#, c-format +msgid "unable to parse value '%s' for option %s" +msgstr "" + +#: builtin/push.c:44 +msgid "tag shorthand without <tag>" +msgstr "" + +#: builtin/push.c:63 +msgid "--delete only accepts plain target ref names" +msgstr "--delete só aceita nomes simples para o ref de destino" + +#: builtin/push.c:73 +#, c-format +msgid "" +"You are not currently on a branch.\n" +"To push the history leading to the current (detached HEAD)\n" +"state now, use\n" +"\n" +" git push %s HEAD:<name-of-remote-branch>\n" +msgstr "" + +#: builtin/push.c:80 +#, c-format +msgid "" +"The current branch %s has no upstream branch.\n" +"To push the current branch and set the remote as upstream, use\n" +"\n" +" git push --set-upstream %s %s\n" +msgstr "" + +#: builtin/push.c:88 +#, c-format +msgid "The current branch %s has multiple upstream branches, refusing to push." +msgstr "" + +#: builtin/push.c:111 +msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"." +msgstr "" + +#: builtin/push.c:131 +#, c-format +msgid "Pushing to %s\n" +msgstr "Pushing para %s\n" + +#: builtin/push.c:135 +#, c-format +msgid "failed to push some refs to '%s'" +msgstr "" + +#: builtin/push.c:143 +#, c-format +msgid "" +"To prevent you from losing history, non-fast-forward updates were rejected\n" +"Merge the remote changes (e.g. 'git pull') before pushing again. See the\n" +"'Note about fast-forwards' section of 'git push --help' for details.\n" +msgstr "" + +#: builtin/push.c:160 +#, c-format +msgid "bad repository '%s'" +msgstr "repositorio inválido '%s'" + +#: builtin/push.c:161 +msgid "" +"No configured push destination.\n" +"Either specify the URL from the command-line or configure a remote repository using\n" +"\n" +" git remote add <name> <url>\n" +"\n" +"and then push using the remote name\n" +"\n" +" git push <name>\n" +msgstr "" + +#: builtin/push.c:176 +msgid "--all and --tags are incompatible" +msgstr "--all e --tags are são incompatíveis" + +#: builtin/push.c:177 +msgid "--all can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:182 +msgid "--mirror and --tags are incompatible" +msgstr "" + +#: builtin/push.c:183 +msgid "--mirror can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:188 +msgid "--all and --mirror are incompatible" +msgstr "" + +#: builtin/push.c:274 +msgid "--delete is incompatible with --all, --mirror and --tags" +msgstr "" + +#: builtin/push.c:276 +msgid "--delete doesn't make sense without any refs" +msgstr "" + +#: builtin/reset.c:33 +msgid "mixed" +msgstr "mistura" + +#: builtin/reset.c:33 +msgid "soft" +msgstr "leve" + +#: builtin/reset.c:33 +msgid "hard" +msgstr "forte" + +#: builtin/reset.c:33 +msgid "keep" +msgstr "manter" + +#: builtin/reset.c:77 +msgid "You do not have a valid HEAD." +msgstr "Não tens a HEAD válida." + +#: builtin/reset.c:79 +msgid "Failed to find tree of HEAD." +msgstr "" + +#: builtin/reset.c:85 +#, c-format +msgid "Failed to find tree of %s." +msgstr "" + +#: builtin/reset.c:96 +msgid "Could not write new index file." +msgstr "" + +#: builtin/reset.c:106 +#, c-format +msgid "HEAD is now at %s" +msgstr "HEAD é agora em %s" + +#: builtin/reset.c:130 +msgid "Could not read index" +msgstr "" + +#: builtin/reset.c:133 +msgid "Unstaged changes after reset:" +msgstr "" + +#: builtin/reset.c:223 +#, c-format +msgid "Cannot do a %s reset in the middle of a merge." +msgstr "" + +#: builtin/reset.c:297 +#, c-format +msgid "Could not parse object '%s'." +msgstr "Não foi possível analisar objeto '%s'." + +#: builtin/reset.c:302 +msgid "--patch is incompatible with --{hard,mixed,soft}" +msgstr "" + +#: builtin/reset.c:311 +msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." +msgstr "" + +#: builtin/reset.c:313 +#, c-format +msgid "Cannot do %s reset with paths." +msgstr "" + +#: builtin/reset.c:325 +#, c-format +msgid "%s reset is not allowed in a bare repository" +msgstr "" + +#: builtin/reset.c:341 +#, c-format +msgid "Could not reset index file to revision '%s'." +msgstr "" + +#: builtin/revert.c:70 +#: builtin/revert.c:91 +#, c-format +msgid "%s: %s cannot be used with %s" +msgstr "" + +#: builtin/revert.c:126 +msgid "program error" +msgstr "erro do programa" + +#: builtin/revert.c:209 +msgid "revert failed" +msgstr "falhou o revert" + +#: builtin/revert.c:224 +msgid "cherry-pick failed" +msgstr "cherry-pick falhou" + +#: builtin/rm.c:109 +#, c-format +msgid "" +"'%s' has staged content different from both the file and the HEAD\n" +"(use -f to force removal)" +msgstr "" + +#: builtin/rm.c:115 +#, c-format +msgid "" +"'%s' has changes staged in the index\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" + +#: builtin/rm.c:119 +#, c-format +msgid "" +"'%s' has local modifications\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" + +#: builtin/rm.c:194 +#, c-format +msgid "not removing '%s' recursively without -r" +msgstr "" + +#: builtin/rm.c:230 +#, c-format +msgid "git rm: unable to remove %s" +msgstr "" + +#: builtin/shortlog.c:157 +#, c-format +msgid "Missing author: %s" +msgstr "Autor em falta: %s" + +#: builtin/tag.c:58 +#, c-format +msgid "malformed object at '%s'" +msgstr "" + +#: builtin/tag.c:205 +#, c-format +msgid "tag name too long: %.*s..." +msgstr "" + +#: builtin/tag.c:210 +#, c-format +msgid "tag '%s' not found." +msgstr "etiqueta '%s' não foi encontrada." + +#: builtin/tag.c:225 +#, c-format +msgid "Deleted tag '%s' (was %s)\n" +msgstr "" + +#: builtin/tag.c:237 +#, c-format +msgid "could not verify the tag '%s'" +msgstr "" + +#: builtin/tag.c:247 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be ignored.\n" +"#\n" +msgstr "" + +#: builtin/tag.c:254 +msgid "" +"\n" +"#\n" +"# Write a tag message\n" +"# Lines starting with '#' will be kept; you may remove them yourself if you want to.\n" +"#\n" +msgstr "" + +#: builtin/tag.c:294 +msgid "unable to sign the tag" +msgstr "" + +#: builtin/tag.c:296 +msgid "unable to write tag file" +msgstr "" + +#: builtin/tag.c:321 +msgid "bad object type." +msgstr "" + +#: builtin/tag.c:334 +msgid "tag header too big." +msgstr "" + +#: builtin/tag.c:366 +msgid "no tag message?" +msgstr "nenhuma mensaje para a etiqueta?" + +#: builtin/tag.c:372 +#, c-format +msgid "The tag message has been left in %s\n" +msgstr "" + +#: builtin/tag.c:421 +msgid "switch 'points-at' requires an object" +msgstr "" + +#: builtin/tag.c:423 +#, c-format +msgid "malformed object name '%s'" +msgstr "" + +#: builtin/tag.c:502 +msgid "-n option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:504 +msgid "--contains option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:506 +msgid "--points-at option is only allowed with -l." +msgstr "" + +#: builtin/tag.c:514 +msgid "only one -F or -m option is allowed." +msgstr "" + +#: builtin/tag.c:534 +msgid "too many params" +msgstr "demasiado parametros" + +#: builtin/tag.c:540 +#, c-format +msgid "'%s' is not a valid tag name." +msgstr "" + +#: builtin/tag.c:545 +#, c-format +msgid "tag '%s' already exists" +msgstr "etiqueta '%s' já existe" + +#: builtin/tag.c:563 +#, c-format +msgid "%s: cannot lock the ref" +msgstr "" + +#: builtin/tag.c:565 +#, c-format +msgid "%s: cannot update the ref" +msgstr "" + +#: builtin/tag.c:567 +#, c-format +msgid "Updated tag '%s' (was %s)\n" +msgstr "" + +#: git-am.sh:49 +msgid "You need to set your committer info first" +msgstr "Necessitas primeiro de especificiar os teus dados de committer" + +#: git-am.sh:136 +msgid "Repository lacks necessary blobs to fall back on 3-way merge." +msgstr "" + +#: git-am.sh:147 +msgid "" +"Did you hand edit your patch?\n" +"It does not apply to blobs recorded in its index." +msgstr "" + +#: git-am.sh:156 +msgid "Falling back to patching base and 3-way merge..." +msgstr "" + +#: git-am.sh:268 +msgid "Only one StGIT patch series can be applied at once" +msgstr "" + +#: git-am.sh:355 +#, sh-format +msgid "Patch format $patch_format is not supported." +msgstr "" + +#: git-am.sh:357 +msgid "Patch format detection failed." +msgstr "Falhou a detecção do formato do patch." + +#: git-am.sh:411 +msgid "-d option is no longer supported. Do not use." +msgstr "" + +#: git-am.sh:474 +#, sh-format +msgid "previous rebase directory $dotest still exists but mbox given." +msgstr "" + +#: git-am.sh:479 +msgid "Please make up your mind. --skip or --abort?" +msgstr "" + +#: git-am.sh:506 +msgid "Resolve operation not in progress, we are not resuming." +msgstr "" + +#: git-am.sh:572 +#, sh-format +msgid "Dirty index: cannot apply patches (dirty: $files)" +msgstr "" + +#: git-am.sh:748 +msgid "cannot be interactive without stdin connected to a terminal." +msgstr "" + +#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] +#. in your translation. The program will only accept English +#. input at this point. +#: git-am.sh:759 +msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " +msgstr "Aplicar? Sim[y]/[n]ão/[e]ditar/[v]er patch/[a]ceitar todos " + +#: git-am.sh:795 +#, sh-format +msgid "Applying: $FIRSTLINE" +msgstr "Aplicando: $FIRSTLINE" + +#: git-am.sh:840 +msgid "No changes -- Patch already applied." +msgstr "Nenhuma mudança -- Já foi aplicado o patch." + +#: git-am.sh:866 +msgid "applying to an empty history" +msgstr "" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:54 +msgid "Do you want me to do it for you [Y/n]? " +msgstr "Queres que eu faça por sí [Y/n]?" + +#: git-bisect.sh:95 +#, sh-format +msgid "unrecognised option: '$arg'" +msgstr "" + +#: git-bisect.sh:99 +#, sh-format +msgid "'$arg' does not appear to be a valid revision" +msgstr "" + +#: git-bisect.sh:117 +msgid "Bad HEAD - I need a HEAD" +msgstr "" + +#: git-bisect.sh:130 +#, sh-format +msgid "Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." +msgstr "" + +#: git-bisect.sh:140 +msgid "won't bisect on seeked tree" +msgstr "" + +#: git-bisect.sh:144 +msgid "Bad HEAD - strange symbolic ref" +msgstr "" + +#: git-bisect.sh:189 +#, sh-format +msgid "Bad bisect_write argument: $state" +msgstr "" + +#: git-bisect.sh:218 +#, sh-format +msgid "Bad rev input: $arg" +msgstr "" + +#: git-bisect.sh:232 +msgid "Please call 'bisect_state' with at least one argument." +msgstr "" + +#: git-bisect.sh:244 +#, sh-format +msgid "Bad rev input: $rev" +msgstr "" + +#: git-bisect.sh:250 +msgid "'git bisect bad' can take only one argument." +msgstr "" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:279 +msgid "Are you sure [Y/n]? " +msgstr "Tens a certeza [Y/n]? " + +#: git-bisect.sh:354 +#, sh-format +msgid "'$invalid' is not a valid commit" +msgstr "" + +#: git-bisect.sh:363 +#, sh-format +msgid "" +"Could not check out original HEAD '$branch'.\n" +"Try 'git bisect reset <commit>'." +msgstr "" + +#: git-bisect.sh:390 +msgid "No logfile given" +msgstr "Nenhum ficheiro de log dado" + +#: git-bisect.sh:391 +#, sh-format +msgid "cannot read $file for replaying" +msgstr "" + +#: git-bisect.sh:408 +msgid "?? what are you talking about?" +msgstr "" + +#: git-bisect.sh:474 +msgid "We are not bisecting." +msgstr "" + +#: git-pull.sh:21 +msgid "" +"Pull is not possible because you have unmerged files.\n" +"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n" +"as appropriate to mark resolution, or use 'git commit -a'." +msgstr "" + +#: git-pull.sh:25 +msgid "Pull is not possible because you have unmerged files." +msgstr "" + +#: git-pull.sh:197 +msgid "updating an unborn branch with changes added to the index" +msgstr "" + +#: git-pull.sh:253 +msgid "Cannot merge multiple branches into empty head" +msgstr "" + +#: git-pull.sh:257 +msgid "Cannot rebase onto multiple branches" +msgstr "Não é possível fazer rebase com várias ramas" + +#: git-stash.sh:51 +msgid "git stash clear with parameters is unimplemented" +msgstr "" + +#: git-stash.sh:74 +msgid "You do not have the initial commit yet" +msgstr "Tu ainda não tens o commit inicial" + +#: git-stash.sh:89 +msgid "Cannot save the current index state" +msgstr "" + +#: git-stash.sh:123 +#: git-stash.sh:136 +msgid "Cannot save the current worktree state" +msgstr "" + +#: git-stash.sh:140 +msgid "No changes selected" +msgstr "Não há alterações seleccionadas" + +#: git-stash.sh:143 +msgid "Cannot remove temporary index (can't happen)" +msgstr "" + +#: git-stash.sh:156 +msgid "Cannot record working tree state" +msgstr "" + +#: git-stash.sh:223 +msgid "No local changes to save" +msgstr "Sem alterações locais para guardar" + +#: git-stash.sh:227 +msgid "Cannot initialize stash" +msgstr "Não é possível inicializar o stash" + +#: git-stash.sh:235 +msgid "Cannot save the current status" +msgstr "" + +#: git-stash.sh:253 +msgid "Cannot remove worktree changes" +msgstr "" + +#: git-stash.sh:352 +msgid "No stash found." +msgstr "nenhum stash encontrado." + +#: git-stash.sh:359 +#, sh-format +msgid "Too many revisions specified: $REV" +msgstr "" + +#: git-stash.sh:365 +#, sh-format +msgid "$reference is not valid reference" +msgstr "" + +#: git-stash.sh:393 +#, sh-format +msgid "'$args' is not a stash-like commit" +msgstr "" + +#: git-stash.sh:404 +#, sh-format +msgid "'$args' is not a stash reference" +msgstr "" + +#: git-stash.sh:412 +msgid "unable to refresh index" +msgstr "" + +#: git-stash.sh:416 +msgid "Cannot apply a stash in the middle of a merge" +msgstr "" + +#: git-stash.sh:424 +msgid "Conflicts in index. Try without --index." +msgstr "" + +#: git-stash.sh:426 +msgid "Could not save index tree" +msgstr "Não foi posivel guardar o index tree" + +#: git-stash.sh:460 +msgid "Cannot unstage modified files" +msgstr "" + +#: git-stash.sh:491 +#, sh-format +msgid "Dropped ${REV} ($s)" +msgstr "Deixado cair ${REV} ($s)" + +#: git-stash.sh:492 +#, sh-format +msgid "${REV}: Could not drop stash entry" +msgstr "" + +#: git-stash.sh:499 +msgid "No branch name specified" +msgstr "Nenhum nome para a rama especificado" + +#: git-stash.sh:570 +msgid "(To restore them type \"git stash apply\")" +msgstr "" + +#: git-submodule.sh:56 +#, sh-format +msgid "cannot strip one component off url '$remoteurl'" +msgstr "" + +#: git-submodule.sh:108 +#, sh-format +msgid "No submodule mapping found in .gitmodules for path '$path'" +msgstr "" + +#: git-submodule.sh:149 +#, sh-format +msgid "Clone of '$url' into submodule path '$path' failed" +msgstr "" + +#: git-submodule.sh:159 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "" + +#: git-submodule.sh:247 +#, sh-format +msgid "repo URL: '$repo' must be absolute or begin with ./|../" +msgstr "" + +#: git-submodule.sh:264 +#, sh-format +msgid "'$path' already exists in the index" +msgstr "" + +#: git-submodule.sh:281 +#, sh-format +msgid "'$path' already exists and is not a valid git repo" +msgstr "" + +#: git-submodule.sh:295 +#, sh-format +msgid "Unable to checkout submodule '$path'" +msgstr "" + +#: git-submodule.sh:300 +#, sh-format +msgid "Failed to add submodule '$path'" +msgstr "" + +#: git-submodule.sh:305 +#, sh-format +msgid "Failed to register submodule '$path'" +msgstr "" + +#: git-submodule.sh:347 +#, sh-format +msgid "Entering '$prefix$path'" +msgstr "Entrando '$prefix$path'" + +#: git-submodule.sh:359 +#, sh-format +msgid "Stopping at '$path'; script returned non-zero status." +msgstr "" + +#: git-submodule.sh:401 +#, sh-format +msgid "No url found for submodule path '$path' in .gitmodules" +msgstr "" + +#: git-submodule.sh:410 +#, sh-format +msgid "Failed to register url for submodule path '$path'" +msgstr "" + +#: git-submodule.sh:418 +#, sh-format +msgid "Failed to register update mode for submodule path '$path'" +msgstr "" + +#: git-submodule.sh:420 +#, sh-format +msgid "Submodule '$name' ($url) registered for path '$path'" +msgstr "" + +#: git-submodule.sh:519 +#, sh-format +msgid "" +"Submodule path '$path' not initialized\n" +"Maybe you want to use 'update --init'?" +msgstr "" + +#: git-submodule.sh:532 +#, sh-format +msgid "Unable to find current revision in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:551 +#, sh-format +msgid "Unable to fetch in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:565 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:566 +#, sh-format +msgid "Submodule path '$path': rebased into '$sha1'" +msgstr "" + +#: git-submodule.sh:571 +#, sh-format +msgid "Unable to merge '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:572 +#, sh-format +msgid "Submodule path '$path': merged in '$sha1'" +msgstr "" + +#: git-submodule.sh:577 +#, sh-format +msgid "Unable to checkout '$sha1' in submodule path '$path'" +msgstr "" + +#: git-submodule.sh:578 +#, sh-format +msgid "Submodule path '$path': checked out '$sha1'" +msgstr "" + +#: git-submodule.sh:600 +#: git-submodule.sh:923 +#, sh-format +msgid "Failed to recurse into submodule path '$path'" +msgstr "" + +#: git-submodule.sh:708 +msgid "--" +msgstr "--" + +#: git-submodule.sh:766 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_src" +msgstr "" + +#: git-submodule.sh:769 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_dst" +msgstr "" + +#: git-submodule.sh:772 +#, sh-format +msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgstr "" + +#: git-submodule.sh:797 +msgid "blob" +msgstr "blob" + +#: git-submodule.sh:798 +msgid "submodule" +msgstr "submódulos" + +#: git-submodule.sh:969 +#, sh-format +msgid "Synchronizing submodule url for '$name'" +msgstr "" + @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git 1.7.3\n" +"Project-Id-Version: git 1.7.10\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2012-03-08 10:19+0800\n" -"PO-Revision-Date: 2012-03-08 10:53+0100\n" +"POT-Creation-Date: 2012-03-16 20:18+0800\n" +"PO-Revision-Date: 2012-03-26 07:00+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -463,11 +463,11 @@ msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" " (checka in eller förkasta ospårat eller ändrat innehåll i undermoduler)" -# %s är ett verb ("Untracked"/"Ignored"). +# %s är ett verb ("Untracked"/"Ignored"); lägg till ett -e. #: wt-status.c:187 #, c-format msgid "%s files:" -msgstr "%s filer:" +msgstr "%se filer:" #: wt-status.c:190 #, c-format @@ -1886,7 +1886,7 @@ msgid "" "some local refs could not be updated; try running\n" " 'git remote prune %s' to remove any old, conflicting branches" msgstr "" -"några lokala referenser kunde inte uppdateras; testa att köra\n" +"vissa lokala referenser kunde inte uppdateras; testa att köra\n" " \"git remote prune %s\" för att ta bort gamla grenar som står i konflikt" #: builtin/fetch.c:540 @@ -2872,7 +2872,7 @@ msgstr "Sänder till %s\n" #: builtin/push.c:135 #, c-format msgid "failed to push some refs to '%s'" -msgstr "misslyckades sända några referenser till \"%s\"" +msgstr "misslyckades sända vissa referenser till \"%s\"" #: builtin/push.c:143 #, c-format @@ -3251,29 +3251,29 @@ msgstr "Patchformatet $patch_format stöds inte." msgid "Patch format detection failed." msgstr "Misslyckades detektera patchformat." -#: git-am.sh:409 +#: git-am.sh:411 msgid "-d option is no longer supported. Do not use." msgstr "Flaggan -d stöds inte lägre. Använd inte." -#: git-am.sh:472 +#: git-am.sh:474 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "tidigare rebase-katalog $dotest finns fortfarande, men mbox angavs." -#: git-am.sh:477 +#: git-am.sh:479 msgid "Please make up your mind. --skip or --abort?" msgstr "Bestäm dig. --skip eller --abort?" -#: git-am.sh:504 +#: git-am.sh:506 msgid "Resolve operation not in progress, we are not resuming." msgstr "Lösningsoperation pågår inte, vi återupptar inte." -#: git-am.sh:570 +#: git-am.sh:572 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "Smutsigt index: kan inte applicera patchar (smutsiga: $files)" -#: git-am.sh:746 +#: git-am.sh:748 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "kan inte vara interaktiv om standard in inte är ansluten till en terminal." @@ -3281,20 +3281,20 @@ msgstr "" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:757 +#: git-am.sh:759 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "Applicera? Y=ja/N=nej/E=redigera/V=visa patch/A=godta alla " -#: git-am.sh:793 +#: git-am.sh:795 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "Applicerar: $FIRSTLINE" -#: git-am.sh:838 +#: git-am.sh:840 msgid "No changes -- Patch already applied." msgstr "Inga ändringar -- Patchen har redan applicerats." -#: git-am.sh:864 +#: git-am.sh:866 msgid "applying to an empty history" msgstr "applicerar på en tom historik" @@ -3539,11 +3539,16 @@ msgstr "kan inte ta bort en komponent från url:en \"$remoteurl\"" msgid "No submodule mapping found in .gitmodules for path '$path'" msgstr "Hittade ingen undermodulmappning i .gitmodules för sökvägen \"$path\"" -#: git-submodule.sh:173 +#: git-submodule.sh:149 #, sh-format msgid "Clone of '$url' into submodule path '$path' failed" msgstr "Misslyckades klona \"$url\" till undermodulsökvägen \"$path\"" +#: git-submodule.sh:159 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Gitkatalog \"$a\" ingår i underkatalogsökvägen \"$b\" eller omvänt" + #: git-submodule.sh:247 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" diff --git a/po/zh_CN.po b/po/zh_CN.po index 713542fdcd..58c4508778 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2012-03-08 10:19+0800\n" +"POT-Creation-Date: 2012-04-28 20:33+0800\n" "PO-Revision-Date: 2012-01-30 00:00+0800\n" "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" "Language-Team: GitHub <https://github.com/gotgit/git/>\n" @@ -70,13 +70,13 @@ msgstr "无法写入 rev-list:%s" msgid "failed to close rev-list's stdin: %s" msgstr "无法关闭 rev-list 的标准输入:%s" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: diff.c:105 #, c-format msgid " Failed to parse dirstat cut-off percentage '%.*s'\n" msgstr " 无法解析 dirstat 阈值 '%.*s'\n" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: diff.c:110 #, c-format msgid " Unknown dirstat parameter '%.*s'\n" @@ -88,32 +88,32 @@ msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" msgstr "" -"配置变量 'diff.dirstat' 出错:\n" +"发现配置变量 'diff.dirstat' 中的错误:\n" "%s" -#: diff.c:1336 +#: diff.c:1400 msgid " 0 files changed\n" -msgstr "0 个文件被修改\n" +msgstr " 0 个文件被修改\n" -#: diff.c:1340 +#: diff.c:1404 #, c-format msgid " %d file changed" msgid_plural " %d files changed" msgstr[0] " %d 个文件被修改" -#: diff.c:1357 +#: diff.c:1421 #, c-format msgid ", %d insertion(+)" msgid_plural ", %d insertions(+)" msgstr[0] ",插入 %d 行(+)" -#: diff.c:1368 +#: diff.c:1432 #, c-format msgid ", %d deletion(-)" msgid_plural ", %d deletions(-)" msgstr[0] ",删除 %d 行(-)" -#: diff.c:3424 +#: diff.c:3435 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -169,7 +169,7 @@ msgstr[0] "您的分支领先 '%s' 共 %d 个提交。\n" msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" -msgstr[0] "您的分支落后 '%s' 共 %d 个提交,且可以快进。\n" +msgstr[0] "您的分支落后 '%s' 共 %d 个提交,并且可以快进。\n" #: remote.c:1621 #, c-format @@ -187,13 +187,13 @@ msgstr[0] "" #: builtin/merge.c:1095 builtin/merge.c:1105 #, c-format msgid "Could not open '%s' for writing" -msgstr "无法打开 '%s' 以写入" +msgstr "不能为写入打开 '%s'" #: sequencer.c:122 builtin/merge.c:334 builtin/merge.c:867 #: builtin/merge.c:1097 builtin/merge.c:1110 #, c-format msgid "Could not write to '%s'" -msgstr "无法写入 '%s'" +msgstr "不能写入 '%s'" #: sequencer.c:143 msgid "" @@ -238,11 +238,11 @@ msgstr "提交您的修改或保存进度后再继续。" #: sequencer.c:232 #, c-format msgid "%s: Unable to write new index file" -msgstr "%s:无法写入新暂存区文件" +msgstr "%s:无法写入新索引文件" #: sequencer.c:298 msgid "Your index file is unmerged." -msgstr "您的暂存区文件未完成合并。" +msgstr "您的索引文件未完成合并。" #: sequencer.c:301 msgid "You do not have a valid HEAD" @@ -261,7 +261,7 @@ msgstr "提交 %s 没有父提交 %d" #: sequencer.c:328 #, c-format msgid "Mainline was specified but commit %s is not a merge." -msgstr "提供了主线但提交 %s 不是一个合并。" +msgstr "指定了主线但提交 %s 不是一个合并。" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 @@ -298,26 +298,26 @@ msgstr "提供了空的提交集" #: sequencer.c:461 #, c-format msgid "git %s: failed to read the index" -msgstr "git %s: 无法读取暂存区" +msgstr "git %s:无法读取索引" #: sequencer.c:466 #, c-format msgid "git %s: failed to refresh the index" -msgstr "git %s: 无法刷新暂存区" +msgstr "git %s:无法刷新索引" #: sequencer.c:551 #, c-format msgid "Cannot %s during a %s" -msgstr "无法 %s 在 %s 过程中" +msgstr "无法 %s 在一个 %s 过程中" #: sequencer.c:573 #, c-format msgid "Could not parse line %d." -msgstr "无法解析第 %d 行。" +msgstr "不能解析第 %d 行。" #: sequencer.c:578 msgid "No commits parsed." -msgstr "未有提交被解析。" +msgstr "没有提交被解析。" #: sequencer.c:591 #, c-format @@ -360,7 +360,7 @@ msgstr "尝试 \"git cherry-pick (--continue | --quit | --abort)\"" #: sequencer.c:671 #, c-format msgid "Could not create sequencer directory %s" -msgstr "无法创建序列目录 %s" +msgstr "不能创建序列目录 %s" #: sequencer.c:687 sequencer.c:772 #, c-format @@ -377,7 +377,7 @@ msgstr "不能解析 HEAD" #: sequencer.c:710 msgid "cannot abort from a branch yet to be born" -msgstr "不能从未初始分支终止" +msgstr "不能从尚未建立的分支终止" #: sequencer.c:732 #, c-format @@ -396,7 +396,7 @@ msgstr "未预期的文件结束" #: sequencer.c:742 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" -msgstr "保存预拣选提交的 HEAD 文件 '%s' 损坏" +msgstr "保存拣选提交前的 HEAD 文件 '%s' 损坏" #: sequencer.c:765 #, c-format @@ -415,18 +415,18 @@ msgstr "不能拣选到空分支" msgid "Unmerged paths:" msgstr "未合并的路径:" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:140 wt-status.c:157 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr " (使用 \"git reset %s <file>...\" 撤出暂存区)" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:142 wt-status.c:159 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr " (使用 \"git rm --cached <file>...\" 撤出暂存区)" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:143 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr " (酌情使用 \"git add/rm <file>...\" 标记解决方案)" @@ -437,25 +437,25 @@ msgstr "要提交的变更:" #: wt-status.c:169 msgid "Changes not staged for commit:" -msgstr "未暂存至提交的变更:" +msgstr "尚未暂存以备提交的变更:" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:173 msgid " (use \"git add <file>...\" to update what will be committed)" msgstr " (使用 \"git add <file>...\" 更新要提交的内容)" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:175 msgid " (use \"git add/rm <file>...\" to update what will be committed)" msgstr " (使用 \"git add/rm <file>...\" 更新要提交的内容)" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:176 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr " (使用 \"git checkout -- <file>...\" 丢弃工作区的改动)" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:178 msgid " (commit or discard the untracked or modified content in submodules)" msgstr " (提交或丢弃子模组中未跟踪或修改的内容)" @@ -465,11 +465,11 @@ msgstr " (提交或丢弃子模组中未跟踪或修改的内容)" msgid "%s files:" msgstr "%s文件:" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: wt-status.c:190 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" -msgstr " (使用 \"git %s <file>...\" 包含到提交列表)" +msgstr " (使用 \"git %s <file>...\" 以包含要提交的内容)" #: wt-status.c:207 msgid "bug" @@ -503,61 +503,64 @@ msgstr "双方添加:" msgid "both modified:" msgstr "双方修改:" +# 译者:末尾两个字节可能被删减,如果翻译为中文标点会出现半个汉字 #: wt-status.c:248 msgid "new commits, " msgstr "新提交, " +# 译者:末尾两个字节可能被删减,如果翻译为中文标点会出现半个汉字 #: wt-status.c:250 msgid "modified content, " msgstr "修改的内容, " +# 译者:末尾两个字节可能被删减,如果翻译为中文标点会出现半个汉字 #: wt-status.c:252 msgid "untracked content, " msgstr "未跟踪的内容, " -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:266 #, c-format msgid "new file: %s" msgstr "新文件: %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:269 #, c-format msgid "copied: %s -> %s" msgstr "拷贝: %s -> %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:272 #, c-format msgid "deleted: %s" msgstr "删除: %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:275 #, c-format msgid "modified: %s" msgstr "修改: %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:278 #, c-format msgid "renamed: %s -> %s" msgstr "重命名: %s -> %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:281 #, c-format msgid "typechange: %s" msgstr "类型变更: %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:284 #, c-format msgid "unknown: %s" msgstr "未知: %s" -# 为保证在输出中对齐,注意调整句中空格! +# 译者:为保证在输出中对齐,注意调整句中空格! #: wt-status.c:287 #, c-format msgid "unmerged: %s" @@ -566,7 +569,7 @@ msgstr "未合并: %s" #: wt-status.c:290 #, c-format msgid "bug: unhandled diff status %c" -msgstr "bug: 未处理的差异状态 %c" +msgstr "bug:未处理的差异状态 %c" #: wt-status.c:713 msgid "On branch " @@ -593,10 +596,10 @@ msgstr "忽略的" msgid "Untracked files not listed%s" msgstr "未跟踪的文件没有列出%s" -# 注意保持前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: wt-status.c:751 msgid " (use -u option to show untracked files)" -msgstr " (使用 -u 参数显示未跟踪的文件)" +msgstr "(使用 -u 参数显示未跟踪的文件)" #: wt-status.c:757 msgid "No changes" @@ -607,61 +610,61 @@ msgstr "没有修改" msgid "no changes added to commit%s\n" msgstr "修改尚未加入提交%s\n" -# 注意保持前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: wt-status.c:763 msgid " (use \"git add\" and/or \"git commit -a\")" -msgstr " (使用 \"git add\" 和/或 \"git commit -a\")" +msgstr "(使用 \"git add\" 和/或 \"git commit -a\")" #: wt-status.c:765 #, c-format msgid "nothing added to commit but untracked files present%s\n" msgstr "空提交但存在未跟踪文件%s\n" -# 注意保持前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: wt-status.c:767 msgid " (use \"git add\" to track)" -msgstr " (使用 \"git add\" 建立跟踪)" +msgstr "(使用 \"git add\" 建立跟踪)" #: wt-status.c:769 wt-status.c:772 wt-status.c:775 #, c-format msgid "nothing to commit%s\n" msgstr "无须提交%s\n" -# 注意保持前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: wt-status.c:770 msgid " (create/copy files and use \"git add\" to track)" -msgstr " (新建/拷贝的文件使用 \"git add\" 建立跟踪)" +msgstr "(新建/拷贝的文件使用 \"git add\" 建立跟踪)" -# 注意保持前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: wt-status.c:773 msgid " (use -u to show untracked files)" -msgstr " (使用 -u 显示未跟踪文件)" +msgstr "(使用 -u 显示未跟踪文件)" -# 注意保持前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: wt-status.c:776 msgid " (working directory clean)" -msgstr " (干净的工作区)" +msgstr "(干净的工作区)" #: wt-status.c:884 msgid "HEAD (no branch)" msgstr "HEAD(非分支)" -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: wt-status.c:890 msgid "Initial commit on " msgstr "初始提交于 " -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: wt-status.c:905 msgid "behind " msgstr "落后 " -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: wt-status.c:908 wt-status.c:911 msgid "ahead " msgstr "领先 " -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: wt-status.c:913 msgid ", behind " msgstr ",落后 " @@ -687,7 +690,7 @@ msgstr "路径 '%s' 属于模组 '%.*s'" #: builtin/add.c:192 msgid "Unstaged changes after refreshing the index:" -msgstr "刷新暂存区后未暂存的变更:" +msgstr "刷新索引之后尚未被暂存的变更:" #: builtin/add.c:195 builtin/add.c:456 builtin/rm.c:186 #, c-format @@ -701,21 +704,21 @@ msgstr "'%s' 位于符号链接中" #: builtin/add.c:276 msgid "Could not read the index" -msgstr "无法读取暂存区" +msgstr "不能读取索引" #: builtin/add.c:286 #, c-format msgid "Could not open '%s' for writing." -msgstr "无法打开 '%s' 以写入。" +msgstr "不能为写入打开 '%s'。" #: builtin/add.c:290 msgid "Could not write patch" -msgstr "无法写补丁" +msgstr "不能写补丁" #: builtin/add.c:295 #, c-format msgid "Could not stat '%s'" -msgstr "无法查看文件状态 '%s'" +msgstr "不能查看文件状态 '%s'" #: builtin/add.c:297 msgid "Empty patch. Aborted." @@ -724,7 +727,7 @@ msgstr "空补丁。异常终止。" #: builtin/add.c:303 #, c-format msgid "Could not apply '%s'" -msgstr "无法应用 '%s'" +msgstr "不能应用 '%s'" #: builtin/add.c:312 msgid "The following paths are ignored by one of your .gitignore files:\n" @@ -733,7 +736,7 @@ msgstr "下列路径被您的一个 .gitignore 文件所忽略:\n" #: builtin/add.c:352 #, c-format msgid "Use -f if you really want to add them.\n" -msgstr "使用 -f 参数如果你确实要添加它们。\n" +msgstr "使用 -f 参数如果您确实要添加它们。\n" #: builtin/add.c:353 msgid "no files added" @@ -754,7 +757,7 @@ msgstr "选项 --ignore-missing 只能和 --dry-run 共用" #: builtin/add.c:413 #, c-format msgid "Nothing specified, nothing added.\n" -msgstr "未提供参数,没有文件被添加。\n" +msgstr "没有指定文件,也没有文件被添加。\n" #: builtin/add.c:414 #, c-format @@ -764,33 +767,33 @@ msgstr "也许您想要执行 'git add .'?\n" #: builtin/add.c:420 builtin/clean.c:95 builtin/commit.c:358 builtin/mv.c:82 #: builtin/rm.c:162 msgid "index file corrupt" -msgstr "暂存区文件损坏" +msgstr "索引文件损坏" #: builtin/add.c:476 builtin/mv.c:229 builtin/rm.c:260 msgid "Unable to write new index file" -msgstr "无法写入新暂存区文件" +msgstr "无法写入新索引文件" #: builtin/archive.c:17 #, c-format msgid "could not create archive file '%s'" -msgstr "无法创建归档文件 '%s'" +msgstr "不能创建归档文件 '%s'" #: builtin/archive.c:20 msgid "could not redirect output" -msgstr "无法重定向输出" +msgstr "不能输出重定向" #: builtin/archive.c:37 msgid "git archive: Remote with no URL" -msgstr "git archive: 未提供远程URL" +msgstr "git archive:未提供远程URL" #: builtin/archive.c:58 msgid "git archive: expected ACK/NAK, got EOF" -msgstr "git archive: 期待ACK/NACK,却得到EOF" +msgstr "git archive:期待ACK/NACK,却得到EOF" #: builtin/archive.c:63 #, c-format msgid "git archive: NACK %s" -msgstr "git archive: NACK %s" +msgstr "git archive:NACK %s" #: builtin/archive.c:65 #, c-format @@ -799,13 +802,13 @@ msgstr "远程错误:%s" #: builtin/archive.c:66 msgid "git archive: protocol error" -msgstr "git archive: 协议错误" +msgstr "git archive:协议错误" #: builtin/archive.c:71 msgid "git archive: expected a flush" -msgstr "git archive: 预期一个刷新" +msgstr "git archive:预期一个刷新" -# 保持原换行格式,在输出时 %s 的替代内容会让字串变长 +# 译者:保持原换行格式,在输出时 %s 的替代内容会让字符串变长 #: builtin/branch.c:137 #, c-format msgid "" @@ -815,7 +818,7 @@ msgstr "" "将要删除的分支 '%s' 已经被合并到\n" " '%s',但未合并到 HEAD。" -# 保持原换行格式,在输出时 %s 的替代内容会让字串变长 +# 译者:保持原换行格式,在输出时 %s 的替代内容会让字符串变长 #: builtin/branch.c:141 #, c-format msgid "" @@ -825,7 +828,7 @@ msgstr "" "并未删除分支 '%s', 虽然它已经合并到 HEAD,\n" " 然而却尚未被合并到分支 '%s' 。" -# 汉字之间无空格,故删除尾部空格 +# 译者:汉字之间无空格,故删除尾部空格 #. TRANSLATORS: This is "remote " in "remote branch '%s' not found" #: builtin/branch.c:163 msgid "remote " @@ -866,7 +869,7 @@ msgstr "" #: builtin/branch.c:214 #, c-format msgid "Error deleting %sbranch '%s'" -msgstr "删除 %s分支 '%s' 时错误" +msgstr "删除 %s分支 '%s' 时出错" #: builtin/branch.c:219 #, c-format @@ -882,19 +885,19 @@ msgstr "无法更新 config 文件" msgid "branch '%s' does not point at a commit" msgstr "分支 '%s' 未指向一个提交" -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: builtin/branch.c:394 #, c-format msgid "behind %d] " msgstr "落后 %d] " -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: builtin/branch.c:396 #, c-format msgid "ahead %d] " msgstr "领先 %d] " -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #: builtin/branch.c:398 #, c-format msgid "ahead %d, behind %d] " @@ -906,11 +909,11 @@ msgstr "(非分支)" #: builtin/branch.c:566 msgid "some refs could not be read" -msgstr "一些引用无法读取" +msgstr "一些引用不能读取" #: builtin/branch.c:579 msgid "cannot rename the current branch while not on any." -msgstr "无法重命名不存在的当前分支。" +msgstr "无法重命名当前分支因为不处于任何分支上。" #: builtin/branch.c:589 #, c-format @@ -951,7 +954,7 @@ msgstr "无法将 HEAD 解析为有效引用。" #: builtin/branch.c:751 builtin/clone.c:558 msgid "HEAD not found below refs/heads!" -msgstr "未在 /refs/heads 下发现 HEAD!" +msgstr "HEAD 没有位于 /refs/heads 之下!" #: builtin/branch.c:809 msgid "-a and -r options to 'git branch' do not make sense with a branch name" @@ -964,11 +967,11 @@ msgstr "%s 可以\n" #: builtin/bundle.c:56 msgid "Need a repository to create a bundle." -msgstr "需要一个版本库来创建包" +msgstr "需要一个版本库来创建包。" #: builtin/bundle.c:60 msgid "Need a repository to unbundle." -msgstr "需要一个版本库来解包" +msgstr "需要一个版本库来解包。" #: builtin/checkout.c:113 builtin/checkout.c:146 #, c-format @@ -993,7 +996,7 @@ msgstr "路径 '%s' 没有必须的版本" #: builtin/checkout.c:192 #, c-format msgid "path '%s': cannot merge" -msgstr "path '%s': 无法合并" +msgstr "path '%s':无法合并" #: builtin/checkout.c:209 #, c-format @@ -1007,7 +1010,7 @@ msgstr "对路径 '%s' 的 make_cache_entry 操作失败" #: builtin/checkout.c:234 builtin/checkout.c:392 msgid "corrupt index file" -msgstr "冲突的暂存区文件" +msgstr "损坏的索引文件" #: builtin/checkout.c:264 builtin/checkout.c:271 #, c-format @@ -1017,7 +1020,7 @@ msgstr "路径 '%s' 未合并" #: builtin/checkout.c:302 builtin/checkout.c:498 builtin/clone.c:583 #: builtin/merge.c:811 msgid "unable to write new index file" -msgstr "无法写新的暂存区文件" +msgstr "无法写新的索引文件" #: builtin/checkout.c:319 builtin/diff.c:302 builtin/merge.c:408 msgid "diff_setup_done failed" @@ -1025,12 +1028,12 @@ msgstr "diff_setup_done 失败" #: builtin/checkout.c:414 msgid "you need to resolve your current index first" -msgstr "您需要先解决当前暂存区的冲突" +msgstr "您需要先解决当前索引的冲突" #: builtin/checkout.c:533 #, c-format msgid "Can not do reflog for '%s'\n" -msgstr "不能对 '%s' 保存引用日志\n" +msgstr "不能对 '%s' 执行 reflog 操作\n" #: builtin/checkout.c:565 msgid "HEAD is now at" @@ -1061,11 +1064,11 @@ msgstr "切换到一个新分支 '%s'\n" msgid "Switched to branch '%s'\n" msgstr "切换到分支 '%s'\n" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: builtin/checkout.c:639 #, c-format msgid " ... and %d more.\n" -msgstr " ... 及 %d 更多。\n" +msgstr " ... 及其它 %d 个。\n" #. The singular version #: builtin/checkout.c:645 @@ -1110,7 +1113,7 @@ msgstr "之前的 HEAD 位置是" #: builtin/checkout.c:722 msgid "You are on a branch yet to be born" -msgstr "您位于一个未初始化的分支" +msgstr "您位于一个尚未初始化的分支" #. case (1) #: builtin/checkout.c:853 @@ -1158,11 +1161,11 @@ msgstr "--orphan 不能和 -t 共用" #: builtin/checkout.c:1017 msgid "git checkout: -f and -m are incompatible" -msgstr "git checkout: -f 和 -m 不兼容" +msgstr "git checkout:-f 和 -m 不兼容" #: builtin/checkout.c:1051 msgid "invalid path specification" -msgstr "无效的路径" +msgstr "无效的路径规格" #: builtin/checkout.c:1059 #, c-format @@ -1170,24 +1173,23 @@ msgid "" "git checkout: updating paths is incompatible with switching branches.\n" "Did you intend to checkout '%s' which can not be resolved as commit?" msgstr "" -"git checkout: 更新路径和切换分支不兼容。\n" +"git checkout:更新路径和切换分支不兼容。\n" "您是想要检出 '%s' 但未能将其解析为提交么?" #: builtin/checkout.c:1061 msgid "git checkout: updating paths is incompatible with switching branches." -msgstr "git checkout: 更新路径和切换分支不兼容。" +msgstr "git checkout:更新路径和切换分支不兼容。" #: builtin/checkout.c:1066 msgid "git checkout: --detach does not take a path argument" -msgstr "git checkout: --detach 不跟路径参数" +msgstr "git checkout:--detach 不跟路径参数" #: builtin/checkout.c:1069 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." msgstr "" -"git checkout: --ours/--theirs, --force 和 --merge 不兼容当\n" -"检出暂存区时。" +"git checkout:在从索引检出时,--ours/--theirs、--force 和 --merge 不兼容。" #: builtin/checkout.c:1088 msgid "Cannot switch branch to a non-commit." @@ -1205,14 +1207,14 @@ msgstr "-x 和 -X 不能共用" msgid "" "clean.requireForce set to true and neither -n nor -f given; refusing to clean" msgstr "" -"clean.requireForce 设置为 true,若未提供 -n 或 -f 选项,拒绝执行清理动作" +"clean.requireForce 设置为 true 且未提供 -n 或 -f 选项,拒绝执行清理动作" #: builtin/clean.c:85 msgid "" "clean.requireForce defaults to true and neither -n nor -f given; refusing to " "clean" msgstr "" -"clean.requireForce 默认为 true,若未提供 -n 或 -f 选项,拒绝执行清理动作" +"clean.requireForce 默认为 true 且未提供 -n 或 -f 选项,拒绝执行清理动作" #: builtin/clean.c:155 builtin/clean.c:176 #, c-format @@ -1247,17 +1249,17 @@ msgstr "引用版本库 '%s' 不是一个本地目录。" #: builtin/clone.c:302 #, c-format msgid "failed to open '%s'" -msgstr "打开 '%s' 失败" +msgstr "无法打开 '%s'" #: builtin/clone.c:306 #, c-format msgid "failed to create directory '%s'" -msgstr "创建目录 '%s' 失败" +msgstr "无法创建目录 '%s'" #: builtin/clone.c:308 builtin/diff.c:75 #, c-format msgid "failed to stat '%s'" -msgstr "枚举 '%s' 状态失败" +msgstr "无法枚举 '%s' 状态" #: builtin/clone.c:310 #, c-format @@ -1267,22 +1269,22 @@ msgstr "%s 存在且不是一个目录" #: builtin/clone.c:324 #, c-format msgid "failed to stat %s\n" -msgstr "枚举 %s 状态失败\n" +msgstr "无法枚举 %s 状态\n" #: builtin/clone.c:341 #, c-format msgid "failed to unlink '%s'" -msgstr "删除 '%s' 失败" +msgstr "无法删除 '%s'" #: builtin/clone.c:346 #, c-format msgid "failed to create link '%s'" -msgstr "创建链接 '%s' 失败" +msgstr "无法创建链接 '%s'" #: builtin/clone.c:350 #, c-format msgid "failed to copy file to '%s'" -msgstr "拷贝文件至 '%s' 失败" +msgstr "无法拷贝文件至 '%s'" #: builtin/clone.c:373 #, c-format @@ -1292,7 +1294,7 @@ msgstr "完成。\n" #: builtin/clone.c:440 #, c-format msgid "Could not find remote branch %s to clone." -msgstr "无法发现要克隆的远程分支 %s。" +msgstr "不能发现要克隆的远程分支 %s。" #: builtin/clone.c:549 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" @@ -1304,7 +1306,7 @@ msgstr "太多参数。" #: builtin/clone.c:643 msgid "You must specify a repository to clone." -msgstr "你必须指定一个版本库来克隆" +msgstr "您必须指定一个版本库来克隆。" #: builtin/clone.c:654 #, c-format @@ -1323,7 +1325,7 @@ msgstr "--depth 在本地克隆被忽略,改为 file:// 协议试试。" #: builtin/clone.c:683 #, c-format msgid "destination path '%s' already exists and is not an empty directory." -msgstr "目标路径 '%s' 已经存在且不是一个空目录。" +msgstr "目标路径 '%s' 已经存在,并且不是一个空目录。" #: builtin/clone.c:693 #, c-format @@ -1333,12 +1335,12 @@ msgstr "工作区 '%s' 已经存在。" #: builtin/clone.c:706 builtin/clone.c:720 #, c-format msgid "could not create leading directories of '%s'" -msgstr "无法为 '%s' 创建目录" +msgstr "不能为 '%s' 创建先导目录" #: builtin/clone.c:709 #, c-format msgid "could not create work tree dir '%s'." -msgstr "无法为 '%s' 创建工作区目录。" +msgstr "不能为 '%s' 创建工作区目录。" #: builtin/clone.c:728 #, c-format @@ -1377,13 +1379,13 @@ msgid "" "\n" " git commit --amend --reset-author\n" msgstr "" -"您的姓名和邮件地址会基于您的用户名和主机地址自动配置。请检查它们\n" -"正确与否。您可通过下面命令对其显式声明以避免重复出现类似提示:\n" +"您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确\n" +"与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:\n" "\n" " git config --global user.name \"Your Name\"\n" " git config --global user.email you@example.com\n" "\n" -"设置完毕后,您可用下面命令来更改此次提交所使用的用户ID:\n" +"设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:\n" "\n" " git commit --amend --reset-author\n" @@ -1422,11 +1424,11 @@ msgstr "拣选" #: builtin/commit.c:325 msgid "failed to unpack HEAD tree object" -msgstr "解包 HEAD 树对象失败" +msgstr "无法解包 HEAD 树对象" #: builtin/commit.c:367 msgid "unable to create temporary index" -msgstr "不能创建临时暂存区" +msgstr "不能创建临时索引" #: builtin/commit.c:373 msgid "interactive add failed" @@ -1434,9 +1436,9 @@ msgstr "交互式添加失败" #: builtin/commit.c:406 builtin/commit.c:427 builtin/commit.c:473 msgid "unable to write new_index file" -msgstr "无法写入新暂存区文件" +msgstr "无法写 new_index 文件" -# %s若翻为中文,前后不需要空格 +# 译者:%s若翻为中文,前后不需要空格 #: builtin/commit.c:457 #, c-format msgid "cannot do a partial commit during a %s." @@ -1444,73 +1446,73 @@ msgstr "在%s过程中不能做部分提交。" #: builtin/commit.c:466 msgid "cannot read the index" -msgstr "无法读取暂存区" +msgstr "无法读取索引" #: builtin/commit.c:486 msgid "unable to write temporary index file" -msgstr "无法写临时暂存区文件" +msgstr "无法写临时索引文件" -#: builtin/commit.c:550 builtin/commit.c:556 +#: builtin/commit.c:561 builtin/commit.c:567 #, c-format msgid "invalid commit: %s" msgstr "无效的提交:%s" -#: builtin/commit.c:579 +#: builtin/commit.c:590 msgid "malformed --author parameter" msgstr "非法的 --author 参数" -#: builtin/commit.c:635 +#: builtin/commit.c:651 #, c-format msgid "Malformed ident string: '%s'" -msgstr "非法的识别字串:'%s'" +msgstr "非法的身份字符串:'%s'" -#: builtin/commit.c:670 builtin/commit.c:703 builtin/commit.c:1000 +#: builtin/commit.c:689 builtin/commit.c:722 builtin/commit.c:1033 #, c-format msgid "could not lookup commit %s" msgstr "不能查询提交 %s" -#: builtin/commit.c:682 builtin/shortlog.c:296 +#: builtin/commit.c:701 builtin/shortlog.c:296 #, c-format msgid "(reading log message from standard input)\n" -msgstr "(正从标准输入中读取说明信息)\n" +msgstr "(正从标准输入中读取日志信息)\n" -#: builtin/commit.c:684 +#: builtin/commit.c:703 msgid "could not read log from standard input" -msgstr "无法从标准输入中读取说明信息" +msgstr "不能从标准输入中读取日志信息" -#: builtin/commit.c:688 +#: builtin/commit.c:707 #, c-format msgid "could not read log file '%s'" -msgstr "无法读取说明文件 '%s'" +msgstr "不能读取日志文件 '%s'" -#: builtin/commit.c:694 +#: builtin/commit.c:713 msgid "commit has empty message" msgstr "提交说明为空" -#: builtin/commit.c:710 +#: builtin/commit.c:729 msgid "could not read MERGE_MSG" -msgstr "无法读取 MERGE_MSG" +msgstr "不能读取 MERGE_MSG" -#: builtin/commit.c:714 +#: builtin/commit.c:733 msgid "could not read SQUASH_MSG" -msgstr "无法读取 SQUASH_MSG" +msgstr "不能读取 SQUASH_MSG" -#: builtin/commit.c:718 +#: builtin/commit.c:737 #, c-format msgid "could not read '%s'" -msgstr "无法读取 '%s'" +msgstr "不能读取 '%s'" -#: builtin/commit.c:746 +#: builtin/commit.c:765 #, c-format msgid "could not open '%s'" -msgstr "无法打开 '%s'" +msgstr "不能打开 '%s'" -#: builtin/commit.c:770 +#: builtin/commit.c:789 msgid "could not write commit template" -msgstr "无法写提交模版" +msgstr "不能写提交模版" -# %s若翻为中文,前后不需要空格 -#: builtin/commit.c:783 +# 译者:%s若翻为中文,前后不需要空格 +#: builtin/commit.c:799 #, c-format msgid "" "\n" @@ -1525,12 +1527,12 @@ msgstr "" "\t%s\n" "然后重试。\n" -#: builtin/commit.c:796 +#: builtin/commit.c:812 msgid "Please enter the commit message for your changes." msgstr "请为您的修改输入提交说明。" -# 前导空格用于拼接英文字串,中文字串拼接无需空格 -#: builtin/commit.c:799 +# 译者:中文字符串拼接,可删除前导空格 +#: builtin/commit.c:815 msgid "" " Lines starting\n" "with '#' will be ignored, and an empty message aborts the commit.\n" @@ -1538,8 +1540,8 @@ msgstr "" "以 '#' 开头\n" "的行将被忽略,并且空的提交说明将会中止提交。\n" -# 前导空格用于拼接英文字串,中文字串拼接无需空格 -#: builtin/commit.c:804 +# 译者:中文字符串拼接,可删除前导空格 +#: builtin/commit.c:820 msgid "" " Lines starting\n" "with '#' will be kept; you may remove them yourself if you want to.\n" @@ -1549,161 +1551,166 @@ msgstr "" "的行将被保留,您可以删除它们如果您想这样做的话。空的提交说明将会\n" "中止提交。\n" -# 为保证在输出中对齐,注意调整句中空格! -#: builtin/commit.c:816 +# 译者:为保证在输出中对齐,注意调整句中空格! +#: builtin/commit.c:832 #, c-format msgid "%sAuthor: %s" msgstr "%s作者: %s" -# 为保证在输出中对齐,注意调整句中空格! -#: builtin/commit.c:823 +# 译者:为保证在输出中对齐,注意调整句中空格! +#: builtin/commit.c:839 #, c-format msgid "%sCommitter: %s" msgstr "%s提交者: %s" -#: builtin/commit.c:843 +#: builtin/commit.c:859 msgid "Cannot read index" -msgstr "无法读取暂存区" +msgstr "无法读取索引" -#: builtin/commit.c:880 +#: builtin/commit.c:896 msgid "Error building trees" msgstr "无法创建树对象" -#: builtin/commit.c:895 builtin/tag.c:357 +#: builtin/commit.c:911 builtin/tag.c:357 #, c-format msgid "Please supply the message using either -m or -F option.\n" -msgstr "请使用 -m 或者 -F 选项提供说明。\n" +msgstr "请使用 -m 或者 -F 选项提供提交说明。\n" -#: builtin/commit.c:975 +#: builtin/commit.c:1008 #, c-format msgid "No existing author found with '%s'" msgstr "没有找到匹配 '%s' 的作者" -#: builtin/commit.c:990 builtin/commit.c:1182 +#: builtin/commit.c:1023 builtin/commit.c:1217 #, c-format msgid "Invalid untracked files mode '%s'" -msgstr "无效的非追踪文件参数 '%s'" +msgstr "无效的未追踪文件参数 '%s'" -#: builtin/commit.c:1030 +#: builtin/commit.c:1063 msgid "Using both --reset-author and --author does not make sense" msgstr "同时使用 --reset-author 和 --author 没有意义" -#: builtin/commit.c:1041 +#: builtin/commit.c:1074 msgid "You have nothing to amend." -msgstr "您没有要修补。" +msgstr "您没有可修补的提交。" -# %s若翻为中文,前后不需要空格 -#: builtin/commit.c:1043 +# 译者:%s若翻为中文,前后不需要空格 +#: builtin/commit.c:1076 #, c-format msgid "You are in the middle of a %s -- cannot amend." -msgstr "您正处于一个%s过程中 -- 无法修补提交。" +msgstr "您正处于一个%s的过程中 -- 无法修补提交。" -#: builtin/commit.c:1045 +#: builtin/commit.c:1078 msgid "Options --squash and --fixup cannot be used together" msgstr "选项 --squash 和 --fixup 不能共用" -#: builtin/commit.c:1055 +#: builtin/commit.c:1088 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "只能用一个 -c/-C/-F/--fixup 选项。" -#: builtin/commit.c:1057 +#: builtin/commit.c:1090 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "选项 -m 不能和 -c/-C/-F/--fixup 共用。" -#: builtin/commit.c:1063 +#: builtin/commit.c:1098 msgid "--reset-author can be used only with -C, -c or --amend." -msgstr "--reset-author 只能和 -C, -c 或 --amend 共用。" +msgstr "--reset-author 只能和 -C、-c 或 --amend 共用。" -#: builtin/commit.c:1080 +#: builtin/commit.c:1115 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "只能用一个 --include/--only/--all/--interactive/--patch 选项。" -#: builtin/commit.c:1082 +#: builtin/commit.c:1117 msgid "No paths with --include/--only does not make sense." msgstr "参数 --include/--only 不跟路径没有意义。" -#: builtin/commit.c:1084 +#: builtin/commit.c:1119 msgid "Clever... amending the last one with dirty index." -msgstr "聪明... 在暂存区不干净下修补最后的提交。" +msgstr "聪明... 在索引不干净下修补最后的提交。" -#: builtin/commit.c:1086 +#: builtin/commit.c:1121 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." -msgstr "没有用 -i 或 -o 选项而显式地提供路径,认为是 --only paths..." +msgstr "指定了明确的路径而没有使用 -i 或 -o 选项;认为是 --only paths..." -#: builtin/commit.c:1096 builtin/tag.c:556 +#: builtin/commit.c:1131 builtin/tag.c:556 #, c-format msgid "Invalid cleanup mode %s" msgstr "无效的清理模式 %s" -#: builtin/commit.c:1101 +#: builtin/commit.c:1136 msgid "Paths with -a does not make sense." msgstr "路径和 -a 选项共用没有意义。" -#: builtin/commit.c:1280 +#: builtin/commit.c:1315 msgid "couldn't look up newly created commit" msgstr "无法找到新创建的提交" -#: builtin/commit.c:1282 +#: builtin/commit.c:1317 msgid "could not parse newly created commit" -msgstr "无法解析新创建的提交" +msgstr "不能解析新创建的提交" -#: builtin/commit.c:1323 +#: builtin/commit.c:1358 msgid "detached HEAD" msgstr "分离头指针" -# 注意保持前导空格 -#: builtin/commit.c:1325 +# 译者:中文字符串拼接,可删除前导空格 +#: builtin/commit.c:1360 msgid " (root-commit)" -msgstr " (根提交)" +msgstr "(根提交)" -#: builtin/commit.c:1415 +#: builtin/commit.c:1450 msgid "could not parse HEAD commit" -msgstr "无法解析 HEAD 提交" +msgstr "不能解析 HEAD 提交" -#: builtin/commit.c:1452 builtin/merge.c:509 +#: builtin/commit.c:1487 builtin/merge.c:509 #, c-format msgid "could not open '%s' for reading" -msgstr "无法打开 '%s' 读取" +msgstr "不能为读入打开 '%s'" -#: builtin/commit.c:1459 +#: builtin/commit.c:1494 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" -msgstr "损坏的 MERGE_HEAD 文件 (%s)" +msgstr "损坏的 MERGE_HEAD 文件(%s)" -#: builtin/commit.c:1466 +#: builtin/commit.c:1501 msgid "could not read MERGE_MODE" -msgstr "无法读取 MERGE_MODE" +msgstr "不能读取 MERGE_MODE" -#: builtin/commit.c:1485 +#: builtin/commit.c:1520 #, c-format msgid "could not read commit message: %s" -msgstr "无法读取提交说明:%s" +msgstr "不能读取提交说明:%s" + +#: builtin/commit.c:1534 +#, c-format +msgid "Aborting commit; you did not edit the message.\n" +msgstr "终止提交;您未更改来自模版的提交说明。\n" -#: builtin/commit.c:1499 +#: builtin/commit.c:1539 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "终止提交因为提交说明为空。\n" -#: builtin/commit.c:1514 builtin/merge.c:935 builtin/merge.c:968 +#: builtin/commit.c:1554 builtin/merge.c:935 builtin/merge.c:968 msgid "failed to write commit object" -msgstr "写提交对象失败" +msgstr "无法写提交对象" -#: builtin/commit.c:1535 +#: builtin/commit.c:1575 msgid "cannot lock HEAD ref" msgstr "无法锁定 HEAD 引用" -#: builtin/commit.c:1539 +#: builtin/commit.c:1579 msgid "cannot update HEAD ref" msgstr "无法更新 HEAD 引用" -#: builtin/commit.c:1550 +#: builtin/commit.c:1590 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" "not exceeded, and then \"git reset HEAD\" to recover." msgstr "" -"版本库已被更新,但无法写入新暂存区文件。检查是否磁盘\n" -"已满或磁盘配额耗尽,然后执行 \"git reset HEAD\" 恢复。" +"版本库已更新,但无法写 new_index 文件。检查是否磁盘已满\n" +"或磁盘配额已耗尽,然后执行 \"git reset HEAD\" 恢复。" #: builtin/describe.c:234 #, c-format @@ -1718,7 +1725,7 @@ msgstr "注释 tag %s 没有嵌入名称" #: builtin/describe.c:240 #, c-format msgid "tag '%s' is really '%s' here" -msgstr "tag '%s' 确是在 '%s'" +msgstr "tag '%s' 的确是在 '%s'" #: builtin/describe.c:267 #, c-format @@ -1761,7 +1768,7 @@ msgid "" "Try --always, or create some tags." msgstr "" "没有注释 tag 能描述 '%s'。\n" -"尝试 --always,或创建一些 tag。" +"尝试 --always,或者创建一些 tag。" #: builtin/describe.c:378 #, c-format @@ -1774,8 +1781,8 @@ msgid "" "more than %i tags found; listed %i most recent\n" "gave up search at %s\n" msgstr "" -"发现多于 %i 个 tag;列出最近的 %i 个\n" -"放弃搜索 %s\n" +"发现多于 %i 个 tag,列出最近的 %i 个\n" +"在 %s 放弃搜索\n" #: builtin/describe.c:436 msgid "--long is incompatible with --abbrev=0" @@ -1783,7 +1790,7 @@ msgstr "--long 与 --abbrev=0 不兼容" #: builtin/describe.c:462 msgid "No names found, cannot describe anything." -msgstr "没有发现名称,无法描述任何东西" +msgstr "没有发现名称,无法描述任何东西。" #: builtin/describe.c:482 msgid "--dirty is incompatible with committishes" @@ -1849,7 +1856,7 @@ msgstr "[已拒绝]" msgid "[tag update]" msgstr "[tag更新]" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: builtin/fetch.c:286 builtin/fetch.c:313 builtin/fetch.c:331 msgid " (unable to update local ref)" msgstr " (不能更新本地引用)" @@ -1872,7 +1879,7 @@ msgstr "强制更新" #: builtin/fetch.c:353 msgid "(non-fast-forward)" -msgstr "(非快进式推送)" +msgstr "(非快进式)" #: builtin/fetch.c:384 builtin/fetch.c:676 #, c-format @@ -1898,13 +1905,13 @@ msgstr "" "一些本地引用不能被更新;尝试运行\n" " 'git remote prune %s' 来删除旧的、有冲突的分支" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: builtin/fetch.c:540 #, c-format msgid " (%s will become dangling)\n" msgstr " (%s 将成为悬空状态)\n" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: builtin/fetch.c:541 #, c-format msgid " (%s has become dangling)\n" @@ -1952,11 +1959,11 @@ msgstr "不能获取 %s" msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." -msgstr "未提供远程版本库。请提供一个URL或远程版本库名,用于获取新版本。" +msgstr "未指定远程版本库。请通过一个URL或远程版本库名指定,用以获取新提交。" #: builtin/fetch.c:918 msgid "You need to specify a tag name." -msgstr "你需要提供一个 tag 名称" +msgstr "您需要指定一个 tag 名称。" #: builtin/fetch.c:970 msgid "fetch --all does not take a repository argument" @@ -1973,7 +1980,7 @@ msgstr "没有这样的远程或远程组:%s" #: builtin/fetch.c:991 msgid "Fetching a group and specifying refspecs does not make sense" -msgstr "获取组并提供引用表达式没有意义" +msgstr "获取组并指定引用表达式没有意义" #: builtin/gc.c:63 #, c-format @@ -1982,7 +1989,7 @@ msgstr "无效的 %s:'%s'" #: builtin/gc.c:78 msgid "Too many options specified" -msgstr "提供了太多的选项" +msgstr "指定了太多的选项" #: builtin/gc.c:103 #, c-format @@ -2000,18 +2007,18 @@ msgid "" "Auto packing the repository for optimum performance. You may also\n" "run \"git gc\" manually. See \"git help gc\" for more information.\n" msgstr "" -"自动打包版本库以求最佳性能。你还可以\n" -"手动运行 \"git gc\"。 参见 \"git help gc\" 获取更多信息。\n" +"自动打包版本库以求最佳性能。您还可以手动运行 \"git gc\"。\n" +"参见 \"git help gc\" 以获取更多信息。\n" #: builtin/gc.c:256 msgid "" "There are too many unreachable loose objects; run 'git prune' to remove them." -msgstr "有太多无指向的松散对象,运行 'git prune' 删除它们。" +msgstr "有太多不可达的松散对象,运行 'git prune' 删除它们。" #: builtin/grep.c:216 #, c-format msgid "grep: failed to create thread: %s" -msgstr "grep: 无法创建线程:%s" +msgstr "grep:无法创建线程:%s" #: builtin/grep.c:402 #, c-format @@ -2021,7 +2028,7 @@ msgstr "无法切换目录:%s" #: builtin/grep.c:478 builtin/grep.c:512 #, c-format msgid "unable to read tree (%s)" -msgstr "无法读取代码树(%s)" +msgstr "无法读取树(%s)" #: builtin/grep.c:526 #, c-format @@ -2053,7 +2060,7 @@ msgstr "--open-files-in-pager 仅用于工作区" #: builtin/grep.c:966 msgid "--cached or --untracked cannot be used with --no-index." -msgstr "--cached 或 --untracked 不能与 --no-index 共用" +msgstr "--cached 或 --untracked 不能与 --no-index 共用。" #: builtin/grep.c:971 msgid "--no-index or --untracked cannot be used with revs." @@ -2061,7 +2068,7 @@ msgstr "--no-index 或 --untracked 不能和版本共用。" #: builtin/grep.c:974 msgid "--[no-]exclude-standard cannot be used for tracked contents." -msgstr "--[no-]exclude-standard 不能用于跟踪内容。" +msgstr "--[no-]exclude-standard 不能用于已跟踪内容。" #: builtin/grep.c:982 msgid "both --cached and trees are given." @@ -2105,7 +2112,7 @@ msgstr "太长的符号链接 %s" #: builtin/init-db.c:102 #, c-format msgid "cannot symlink '%s' '%s'" -msgstr "不能创建符号链接 '%s' 到 '%s'" +msgstr "不能自 '%s' 到 '%s' 创建符号链接" #: builtin/init-db.c:106 #, c-format @@ -2175,10 +2182,10 @@ msgstr "重新初始化现存的" msgid "Initialized empty" msgstr "初始化空的" -# 汉字字串合并,之间无空格,故删除前导空格 +# 译者:中文字符串拼接,可删除前导空格 #: builtin/init-db.c:421 msgid " shared" -msgstr "共享的" +msgstr "共享" #: builtin/init-db.c:440 msgid "cannot tell cwd" @@ -2200,7 +2207,8 @@ msgid "" "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-" "dir=<directory>)" msgstr "" -"不允许 %s(或 --work-tree=<directory>)而没有 %s(或 --git-dir=<directory>)" +"不允许 %s(或 --work-tree=<directory>)而没有指定 %s(或 --git-" +"dir=<directory>)" #: builtin/init-db.c:578 msgid "Cannot access current working directory" @@ -2219,7 +2227,7 @@ msgstr "最终输出:%d %s\n" #: builtin/log.c:395 builtin/log.c:483 #, c-format msgid "Could not read object %s" -msgstr "无法读取对象 %s" +msgstr "不能读取对象 %s" #: builtin/log.c:507 #, c-format @@ -2249,7 +2257,7 @@ msgstr "不是一个范围。" #: builtin/log.c:739 msgid "Could not extract email from committer identity." -msgstr "无法从提交者身份中提取邮件地址。" +msgstr "不能从提交者身份中提取邮件地址。" #: builtin/log.c:785 msgid "Cover letter needs email format" @@ -2301,7 +2309,7 @@ msgstr "标准输出或目录,哪一个?" #: builtin/log.c:1257 #, c-format msgid "Could not create directory '%s'" -msgstr "无法创建目录 '%s'" +msgstr "不能创建目录 '%s'" #: builtin/log.c:1410 msgid "Failed to create output files" @@ -2311,7 +2319,7 @@ msgstr "无法创建输出文件" #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" -msgstr "无法找到跟踪的远程分支,请手工提供 <upstream>。\n" +msgstr "不能找到跟踪的远程分支,请手工指定 <upstream>。\n" #: builtin/log.c:1530 builtin/log.c:1532 builtin/log.c:1544 #, c-format @@ -2325,7 +2333,7 @@ msgstr "开关 `m' 需要一个值" #: builtin/merge.c:128 #, c-format msgid "Could not find merge strategy '%s'.\n" -msgstr "无法找到合并策略 '%s'。\n" +msgstr "不能找到合并策略 '%s'。\n" #: builtin/merge.c:129 #, c-format @@ -2354,7 +2362,7 @@ msgstr "不是一个有效对象:%s" msgid "read-tree failed" msgstr "读取树失败" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: builtin/merge.c:317 msgid " (nothing to squash)" msgstr " (无可压缩)" @@ -2385,7 +2393,7 @@ msgstr "'%s' 没有指向一个提交" #: builtin/merge.c:536 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" -msgstr "错的 branch.%s.mergeoptions 字串:%s" +msgstr "坏的 branch.%s.mergeoptions 字符串:%s" #: builtin/merge.c:629 msgid "git write-tree failed to write a tree" @@ -2397,7 +2405,7 @@ msgstr "无法读取缓存" #: builtin/merge.c:696 msgid "Unable to write index." -msgstr "不能写暂存区。" +msgstr "不能写索引。" #: builtin/merge.c:709 msgid "Not handling anything other than two heads merge." @@ -2457,15 +2465,15 @@ msgstr "'%s' 不是一个提交" #: builtin/merge.c:1057 msgid "No current branch." -msgstr "当前不在分支上。" +msgstr "没有当前分支。" #: builtin/merge.c:1059 msgid "No remote for the current branch." -msgstr "当前分支没有远程版本库。" +msgstr "当前分支没有对应的远程版本库。" #: builtin/merge.c:1061 msgid "No default upstream defined for the current branch." -msgstr "当前分支未定义默认上游分支。" +msgstr "当前分支没有定义默认的上游分支。" #: builtin/merge.c:1066 #, c-format @@ -2474,7 +2482,7 @@ msgstr "%s 没有来自 %s 的远程跟踪分支" #: builtin/merge.c:1188 msgid "There is no merge to abort (MERGE_HEAD missing)." -msgstr "没有要终止的合并(MERGE_HEAD 丢失)" +msgstr "没有要终止的合并(MERGE_HEAD 丢失)。" #: builtin/merge.c:1204 git-pull.sh:31 msgid "" @@ -2482,7 +2490,7 @@ msgid "" "Please, commit your changes before you can merge." msgstr "" "您尚未结束您的合并(存在 MERGE_HEAD)。\n" -"请先提交您的修改,您才能合并。" +"请在合并前先提交您的修改。" #: builtin/merge.c:1207 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." @@ -2494,7 +2502,7 @@ msgid "" "Please, commit your changes before you can merge." msgstr "" "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。\n" -"请先提交您的修改,您才能合并。" +"请在合并前先提交您的修改。" #: builtin/merge.c:1214 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." @@ -2510,11 +2518,11 @@ msgstr "您不能将 --no-ff 与 --ff-only 共用。" #: builtin/merge.c:1235 msgid "No commit specified and merge.defaultToUpstream not set." -msgstr "未指出提交并且 merge.defaultToUpstream 未设置。" +msgstr "未指定提交并且 merge.defaultToUpstream 未设置。" #: builtin/merge.c:1266 msgid "Can merge only exactly one commit into empty head" -msgstr "只可将一个提交合并到空分支上" +msgstr "只能将一个提交合并到空分支上" #: builtin/merge.c:1269 msgid "Squash commit into empty head not supported yet" @@ -2529,51 +2537,51 @@ msgstr "到空分支的非快进式提交没有意义" msgid "%s - not something we can merge" msgstr "%s - 不能被合并" -#: builtin/merge.c:1385 +#: builtin/merge.c:1382 #, c-format msgid "Updating %s..%s\n" msgstr "更新 %s..%s\n" -#: builtin/merge.c:1423 +#: builtin/merge.c:1420 #, c-format msgid "Trying really trivial in-index merge...\n" -msgstr "尝试非常小的暂存区内合并...\n" +msgstr "尝试非常小的索引内合并...\n" -#: builtin/merge.c:1430 +#: builtin/merge.c:1427 #, c-format msgid "Nope.\n" msgstr "无。\n" -#: builtin/merge.c:1462 +#: builtin/merge.c:1459 msgid "Not possible to fast-forward, aborting." msgstr "无法快进,终止。" -#: builtin/merge.c:1485 builtin/merge.c:1562 +#: builtin/merge.c:1482 builtin/merge.c:1559 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "将树回滚至原始状态...\n" -#: builtin/merge.c:1489 +#: builtin/merge.c:1486 #, c-format msgid "Trying merge strategy %s...\n" msgstr "尝试合并策略 %s...\n" -#: builtin/merge.c:1553 +#: builtin/merge.c:1550 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "没有合并策略处理此合并。\n" -#: builtin/merge.c:1555 +#: builtin/merge.c:1552 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "使用策略 %s 合并失败。\n" -#: builtin/merge.c:1564 +#: builtin/merge.c:1561 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "使用 %s 以准备手工解决。\n" -#: builtin/merge.c:1575 +#: builtin/merge.c:1572 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "自动合并进展顺利,按要求在提交前停止\n" @@ -2598,7 +2606,7 @@ msgstr "不能将目录移动到文件" #: builtin/mv.c:128 #, c-format msgid "Huh? %.*s is in index?" -msgstr "嗯?%.*s 在暂存区中?" +msgstr "嗯?%.*s 在索引中?" #: builtin/mv.c:140 msgid "source directory is empty" @@ -2698,7 +2706,7 @@ msgstr "不能打开或读取 '%s'" #: builtin/notes.c:968 builtin/reset.c:293 builtin/tag.c:537 #, c-format msgid "Failed to resolve '%s' as a valid ref." -msgstr "无法解析 '%s' 为一个有效引用" +msgstr "无法解析 '%s' 为一个有效引用。" #: builtin/notes.c:275 #, c-format @@ -2712,7 +2720,7 @@ msgstr "不能提交未初始化/未引用的注解树" #: builtin/notes.c:340 #, c-format msgid "Bad notes.rewriteMode value: '%s'" -msgstr "错误的 notes.rewriteMode 值:'%s'" +msgstr "坏的 notes.rewriteMode 值:'%s'" #: builtin/notes.c:350 #, c-format @@ -2724,7 +2732,7 @@ msgstr "拒绝向 %s(在 refs/notes/ 之外)写入注解" #: builtin/notes.c:377 #, c-format msgid "Bad %s value: '%s'" -msgstr "错误的 %s 值:'%s'" +msgstr "坏的 %s 值:'%s'" #: builtin/notes.c:441 #, c-format @@ -2734,7 +2742,7 @@ msgstr "非法的输入行:'%s'。" #: builtin/notes.c:456 #, c-format msgid "Failed to copy notes from '%s' to '%s'" -msgstr "无法从 '%s' 拷贝注解到 '%s'" +msgstr "无法从 '%s' 到 '%s' 拷贝注解" #: builtin/notes.c:500 builtin/notes.c:554 builtin/notes.c:627 #: builtin/notes.c:639 builtin/notes.c:712 builtin/notes.c:759 @@ -2781,7 +2789,7 @@ msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" "Please use 'git notes add -f -m/-F/-c/-C' instead.\n" msgstr "" -"选项 -m/-F/-c/-C 已为 'edit' 子命令废弃。\n" +"子命令 'edit' 的选项 -m/-F/-c/-C 已弃用。\n" "请换用 'git notes add -f -m/-F/-c/-C'。\n" #: builtin/notes.c:971 @@ -2797,17 +2805,17 @@ msgstr "未知子命令:%s" #: builtin/pack-objects.c:2310 #, c-format msgid "unsupported index version %s" -msgstr "不支持的暂存区版本 %s" +msgstr "不支持的索引版本 %s" #: builtin/pack-objects.c:2314 #, c-format msgid "bad index version '%s'" -msgstr "错误的暂存区版本 '%s'" +msgstr "坏的索引版本 '%s'" #: builtin/pack-objects.c:2322 #, c-format msgid "option %s does not accept negative form" -msgstr "选项 '%s' 不接受否定格式" +msgstr "选项 %s 不接受否定格式" #: builtin/pack-objects.c:2326 #, c-format @@ -2820,9 +2828,9 @@ msgstr "tag 简写没有跟 <tag> 参数" #: builtin/push.c:63 msgid "--delete only accepts plain target ref names" -msgstr "--delete 只接受简单的引用名称" +msgstr "--delete 只接受简单的目标引用名" -#: builtin/push.c:73 +#: builtin/push.c:83 #, c-format msgid "" "You are not currently on a branch.\n" @@ -2832,11 +2840,11 @@ msgid "" " git push %s HEAD:<name-of-remote-branch>\n" msgstr "" "您当前不在一个分支上。\n" -"现在为推送当前历史(分离头指针),使用\n" +"现在为推送当前(分离头指针)的历史,使用\n" "\n" " git push %s HEAD:<name-of-remote-branch>\n" -#: builtin/push.c:80 +#: builtin/push.c:90 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -2849,43 +2857,53 @@ msgstr "" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:88 +#: builtin/push.c:98 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "当前分支 %s 有多个上游分支,拒绝推送。" -#: builtin/push.c:111 +#: builtin/push.c:101 +#, c-format +msgid "" +"You are pushing to remote '%s', which is not the upstream of\n" +"your current branch '%s', without telling me what to push\n" +"to update which remote branch." +msgstr "" +"您正推送至远程 '%s'(其并非当前分支 '%s' 的上游),\n" +"而没有告诉我要推送什么、更新哪个远程分支。" + +#: builtin/push.c:127 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." -msgstr "您没有为推送提供任何引用表达式,并且 push.default 为 \"nothing\"。" +msgstr "您没有为推送指定任何引用表达式,并且 push.default 为 \"nothing\"。" -#: builtin/push.c:131 +#: builtin/push.c:147 #, c-format msgid "Pushing to %s\n" msgstr "推送到 %s\n" -#: builtin/push.c:135 +#: builtin/push.c:151 #, c-format msgid "failed to push some refs to '%s'" msgstr "无法推送一些引用到 '%s'" -#: builtin/push.c:143 +#: builtin/push.c:159 #, c-format msgid "" "To prevent you from losing history, non-fast-forward updates were rejected\n" "Merge the remote changes (e.g. 'git pull') before pushing again. See the\n" "'Note about fast-forwards' section of 'git push --help' for details.\n" msgstr "" -"为防止您丢失提交历史,禁止非快进式推送。\n" +"为了防止您丢失提交历史,非快进式更新被拒绝。\n" "再次推送前先与远程变更合并(如 'git pull')。详见\n" "'git push --help' 中的 'Note about fast-forwards' 小节。\n" -#: builtin/push.c:160 +#: builtin/push.c:176 #, c-format msgid "bad repository '%s'" -msgstr "错误的版本库 '%s'" +msgstr "坏的版本库 '%s'" -#: builtin/push.c:161 +#: builtin/push.c:177 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -2897,8 +2915,8 @@ msgid "" "\n" " git push <name>\n" msgstr "" -"未配置推送目标。\n" -"或者通过命令行提供URL,或者用下面命令配置一个远程版本库\n" +"没有配置推送目标。\n" +"或者通过命令行指定URL,或者用下面命令配置一个远程版本库\n" "\n" " git remote add <name> <url>\n" "\n" @@ -2906,31 +2924,31 @@ msgstr "" "\n" " git push <name>\n" -#: builtin/push.c:176 +#: builtin/push.c:192 msgid "--all and --tags are incompatible" msgstr "--all 和 --tags 不兼容" -#: builtin/push.c:177 +#: builtin/push.c:193 msgid "--all can't be combined with refspecs" msgstr "--all 不能和引用表达式共用" -#: builtin/push.c:182 +#: builtin/push.c:198 msgid "--mirror and --tags are incompatible" msgstr "--mirror 和 --tags 不兼容" -#: builtin/push.c:183 +#: builtin/push.c:199 msgid "--mirror can't be combined with refspecs" msgstr "--mirror 不能和引用表达式共用" -#: builtin/push.c:188 +#: builtin/push.c:204 msgid "--all and --mirror are incompatible" msgstr "--all 和 --mirror 不兼容" -#: builtin/push.c:274 +#: builtin/push.c:284 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "--delete 与 --all、--mirror 及 --tags 不兼容" -#: builtin/push.c:276 +#: builtin/push.c:286 msgid "--delete doesn't make sense without any refs" msgstr "--delete 未接任何引用没有意义" @@ -2965,7 +2983,7 @@ msgstr "无法找到 %s 指向的树。" #: builtin/reset.c:96 msgid "Could not write new index file." -msgstr "无法写入新的暂存区文件。" +msgstr "不能写入新的索引文件。" #: builtin/reset.c:106 #, c-format @@ -2974,13 +2992,13 @@ msgstr "HEAD 现在位于 %s" #: builtin/reset.c:130 msgid "Could not read index" -msgstr "不能读取暂存区" +msgstr "不能读取索引" #: builtin/reset.c:133 msgid "Unstaged changes after reset:" -msgstr "重置后变更撤出暂存区:" +msgstr "重置后撤出暂存区的变更:" -# 汉字之间无空格,故删除%s前后空格 +# 译者:汉字之间无空格,故删除%s前后空格 #: builtin/reset.c:223 #, c-format msgid "Cannot do a %s reset in the middle of a merge." @@ -2999,13 +3017,13 @@ msgstr "--patch 与 --{hard,mixed,soft} 不兼容" msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "--mixed 带路径已弃用,代之以 'git reset -- <paths>'。" -# 汉字之间无空格,故删除%s前后空格 +# 译者:汉字之间无空格,故删除%s前后空格 #: builtin/reset.c:313 #, c-format msgid "Cannot do %s reset with paths." msgstr "不能带路径进行%s重置。" -# 汉字之间无空格,故删除%s前后空格 +# 译者:汉字之间无空格,故删除%s前后空格 #: builtin/reset.c:325 #, c-format msgid "%s reset is not allowed in a bare repository" @@ -3014,12 +3032,12 @@ msgstr "不能对裸版本库进行%s重置" #: builtin/reset.c:341 #, c-format msgid "Could not reset index file to revision '%s'." -msgstr "不能重置暂存区至版本 '%s'。" +msgstr "不能重置索引文件至版本 '%s'。" #: builtin/revert.c:70 builtin/revert.c:91 #, c-format msgid "%s: %s cannot be used with %s" -msgstr "%s: %s 不能和 %s 共用" +msgstr "%s:%s 不能和 %s 共用" #: builtin/revert.c:126 msgid "program error" @@ -3039,7 +3057,7 @@ msgid "" "'%s' has staged content different from both the file and the HEAD\n" "(use -f to force removal)" msgstr "" -"'%s' 暂存的内容和工作区文件及 HEAD 中的都不一样\n" +"'%s' 暂存的内容和工作区及 HEAD 中的都不一样\n" "(使用 -f 强制删除)" #: builtin/rm.c:115 @@ -3048,7 +3066,7 @@ msgid "" "'%s' has changes staged in the index\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"'%s' 有变更已加入暂存区中\n" +"'%s' 有变更已暂存至索引中\n" "(使用 --cached 保存文件,或用 -f 强制删除)" #: builtin/rm.c:119 @@ -3139,11 +3157,11 @@ msgstr "无法写 tag 文件" #: builtin/tag.c:321 msgid "bad object type." -msgstr "无效的对象类型" +msgstr "坏的对象类型。" #: builtin/tag.c:334 msgid "tag header too big." -msgstr "tag 头信息太大" +msgstr "tag 头信息太大。" #: builtin/tag.c:366 msgid "no tag message?" @@ -3186,7 +3204,7 @@ msgstr "太多参数" #: builtin/tag.c:540 #, c-format msgid "'%s' is not a valid tag name." -msgstr "'%s' 不是一个有效的tag名称" +msgstr "'%s' 不是一个有效的tag名称。" #: builtin/tag.c:545 #, c-format @@ -3222,11 +3240,11 @@ msgid "" "It does not apply to blobs recorded in its index." msgstr "" "您是否曾手动编辑过您的补丁?\n" -"无法应用补丁到暂存区的数据中。" +"无法应用补丁到索引中的数据上。" #: git-am.sh:156 msgid "Falling back to patching base and 3-way merge..." -msgstr "转而使用补丁应用的基础版本和三路合并..." +msgstr "回退到补丁基础版本并使用三路合并..." #: git-am.sh:268 msgid "Only one StGIT patch series can be applied at once" @@ -3241,54 +3259,54 @@ msgstr "不支持 $patch_format 补丁格式。" msgid "Patch format detection failed." msgstr "补丁格式检测失败。" -#: git-am.sh:409 +#: git-am.sh:411 msgid "-d option is no longer supported. Do not use." msgstr "不再支持 -d 选项。不要使用。" -#: git-am.sh:472 +#: git-am.sh:474 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "之前的变基目录 $dotest 仍然存在但给出了mbox。" -#: git-am.sh:477 +#: git-am.sh:479 msgid "Please make up your mind. --skip or --abort?" msgstr "请下决心。--skip 或是 --abort ?" -#: git-am.sh:504 +#: git-am.sh:506 msgid "Resolve operation not in progress, we are not resuming." msgstr "解决操作未进行,我们不会继续。" -#: git-am.sh:570 +#: git-am.sh:572 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" -msgstr "脏的暂存区:不能应用补丁(脏文件:$files)" +msgstr "脏的索引:不能应用补丁(脏文件:$files)" -#: git-am.sh:746 +#: git-am.sh:748 msgid "cannot be interactive without stdin connected to a terminal." -msgstr "没有和终端关联的标准输入不能进行交互式操作。" +msgstr "标准输入没有和终端关联,不能进行交互式操作。" -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:757 +#: git-am.sh:759 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "应用?[y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " -#: git-am.sh:793 +#: git-am.sh:795 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "正应用:$FIRSTLINE" -#: git-am.sh:838 +#: git-am.sh:840 msgid "No changes -- Patch already applied." msgstr "没有变更 -- 补丁已经应用过。" -#: git-am.sh:864 +#: git-am.sh:866 msgid "applying to an empty history" msgstr "正应用到一个空历史上" -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #. TRANSLATORS: Make sure to include [Y] and [n] in your #. translation. The program will only accept English input #. at this point. @@ -3322,17 +3340,17 @@ msgstr "不会在已查找过的树上二分查找" #: git-bisect.sh:144 msgid "Bad HEAD - strange symbolic ref" -msgstr "错误的 HEAD - 奇怪的符号引用" +msgstr "坏的 HEAD - 奇怪的符号引用" #: git-bisect.sh:189 #, sh-format msgid "Bad bisect_write argument: $state" -msgstr "错误的bisect_write参数:$state" +msgstr "坏的 bisect_write 参数:$state" #: git-bisect.sh:218 #, sh-format msgid "Bad rev input: $arg" -msgstr "输入错误版本:$arg" +msgstr "输入坏的版本:$arg" #: git-bisect.sh:232 msgid "Please call 'bisect_state' with at least one argument." @@ -3347,7 +3365,7 @@ msgstr "输入坏的版本:$rev" msgid "'git bisect bad' can take only one argument." msgstr "'git bisect bad' 只能带一个参数。" -# 注意保持句尾空格 +# 译者:注意保持句尾空格 #. TRANSLATORS: Make sure to include [Y] and [n] in your #. translation. The program will only accept English input #. at this point. @@ -3384,7 +3402,7 @@ msgstr "?? 您在说什么?" #: git-bisect.sh:474 msgid "We are not bisecting." -msgstr "我们没有进行二分查找。" +msgstr "我们没有在二分查找。" #: git-pull.sh:21 msgid "" @@ -3392,17 +3410,17 @@ msgid "" "Please, fix them up in the work tree, and then use 'git add/rm <file>'\n" "as appropriate to mark resolution, or use 'git commit -a'." msgstr "" -"Pull 不可用,因为你尚有未合并的文件。请先在工作区改正文件,\n" +"Pull 不可用,因为您尚有未合并的文件。请先在工作区改正文件,\n" "然后酌情使用 'git add/rm <file>' 标记解决方案,\n" -"或使用 'git commit -a'。" +"或者使用 'git commit -a'。" #: git-pull.sh:25 msgid "Pull is not possible because you have unmerged files." -msgstr "Pull 不可用,因为你尚有未合并的文件。" +msgstr "Pull 不可用,因为您尚有未合并的文件。" #: git-pull.sh:197 msgid "updating an unborn branch with changes added to the index" -msgstr "更新尚未诞生的分支,变更添加至暂存区" +msgstr "更新尚未诞生的分支,变更添加至索引" #: git-pull.sh:253 msgid "Cannot merge multiple branches into empty head" @@ -3422,7 +3440,7 @@ msgstr "您尚未建立初始提交" #: git-stash.sh:89 msgid "Cannot save the current index state" -msgstr "无法保存当前暂存区状态" +msgstr "无法保存当前索引状态" #: git-stash.sh:123 git-stash.sh:136 msgid "Cannot save the current worktree state" @@ -3430,11 +3448,11 @@ msgstr "无法保存当前工作区状态" #: git-stash.sh:140 msgid "No changes selected" -msgstr "没有修改被选择" +msgstr "没有选择变更" #: git-stash.sh:143 msgid "Cannot remove temporary index (can't happen)" -msgstr "无法删除临时暂存区(不应发生)" +msgstr "无法删除临时索引(不应发生)" #: git-stash.sh:156 msgid "Cannot record working tree state" @@ -3446,7 +3464,7 @@ msgstr "没有要保存的本地修改" #: git-stash.sh:227 msgid "Cannot initialize stash" -msgstr "无法初始化stash" +msgstr "无法初始化 stash" #: git-stash.sh:235 msgid "Cannot save the current status" @@ -3458,12 +3476,12 @@ msgstr "无法删除工作区变更" #: git-stash.sh:352 msgid "No stash found." -msgstr "未发现stash。" +msgstr "未发现 stash。" #: git-stash.sh:359 #, sh-format msgid "Too many revisions specified: $REV" -msgstr "提供太多的版本:$REV" +msgstr "指定了太多的版本:$REV" #: git-stash.sh:365 #, sh-format @@ -3473,16 +3491,16 @@ msgstr "$reference 不是有效的引用" #: git-stash.sh:393 #, sh-format msgid "'$args' is not a stash-like commit" -msgstr "'$args' 不是stash样提交" +msgstr "'$args' 不是 stash 样提交" #: git-stash.sh:404 #, sh-format msgid "'$args' is not a stash reference" -msgstr "'$args' 不是一个stash引用" +msgstr "'$args' 不是一个 stash 引用" #: git-stash.sh:412 msgid "unable to refresh index" -msgstr "无法刷新暂存区" +msgstr "无法刷新索引" #: git-stash.sh:416 msgid "Cannot apply a stash in the middle of a merge" @@ -3490,11 +3508,11 @@ msgstr "无法在合并过程中恢复进度" #: git-stash.sh:424 msgid "Conflicts in index. Try without --index." -msgstr "暂存区冲突。尝试不用 --index。" +msgstr "索引中有冲突。尝试不使用 --index。" #: git-stash.sh:426 msgid "Could not save index tree" -msgstr "无法保存暂存区" +msgstr "不能保存索引树" #: git-stash.sh:460 msgid "Cannot unstage modified files" @@ -3508,7 +3526,7 @@ msgstr "丢弃了 ${REV} ($s)" #: git-stash.sh:492 #, sh-format msgid "${REV}: Could not drop stash entry" -msgstr "${REV}: 无法丢弃进度条目" +msgstr "${REV}:不能丢弃进度条目" #: git-stash.sh:499 msgid "No branch name specified" @@ -3528,10 +3546,15 @@ msgstr "无法从 url '$remoteurl' 剥离一个组件" msgid "No submodule mapping found in .gitmodules for path '$path'" msgstr "未在 .gitmodules 中发现路径 '$path' 的子模组映射" -#: git-submodule.sh:173 +#: git-submodule.sh:149 #, sh-format msgid "Clone of '$url' into submodule path '$path' failed" -msgstr "克隆 '$url' 到子模组路径 '$path' 失败" +msgstr "无法克隆 '$url' 到子模组路径 '$path'" + +#: git-submodule.sh:159 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Gitdir '$a' 在子模组路径 '$b' 之下或者相反" #: git-submodule.sh:247 #, sh-format @@ -3541,7 +3564,7 @@ msgstr "版本库URL:'$repo' 必须是绝对路径或以 ./|../ 起始" #: git-submodule.sh:264 #, sh-format msgid "'$path' already exists in the index" -msgstr "'$path' 已经存在于暂存区中" +msgstr "'$path' 已经存在于索引中" #: git-submodule.sh:281 #, sh-format @@ -3576,7 +3599,7 @@ msgstr "停止于 '$path',脚本返回非零值。" #: git-submodule.sh:401 #, sh-format msgid "No url found for submodule path '$path' in .gitmodules" -msgstr "在 .gitmodules 中未找到子模组路径 '$path' 的url" +msgstr "在 .gitmodules 中未找到子模组路径 '$path' 的 url" #: git-submodule.sh:410 #, sh-format @@ -3600,7 +3623,7 @@ msgid "" "Maybe you want to use 'update --init'?" msgstr "" "子模组路径 '$path' 没有初始化\n" -"也许你想用 'update --init'?" +"也许您想用 'update --init'?" #: git-submodule.sh:532 #, sh-format @@ -3651,19 +3674,19 @@ msgstr "无法递归进子模组路径 '$path'" msgid "--" msgstr "--" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: git-submodule.sh:766 #, sh-format msgid " Warn: $name doesn't contain commit $sha1_src" msgstr " 警告:$name 未包含提交 $sha1_src" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: git-submodule.sh:769 #, sh-format msgid " Warn: $name doesn't contain commit $sha1_dst" msgstr " 警告:$name 未包含提交 $sha1_dst" -# 注意保持前导空格 +# 译者:注意保持前导空格 #: git-submodule.sh:772 #, sh-format msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" @@ -3680,4 +3703,4 @@ msgstr "子模组" #: git-submodule.sh:969 #, sh-format msgid "Synchronizing submodule url for '$name'" -msgstr "为 '$name' 同步子模组url" +msgstr "为 '$name' 同步子模组 url" @@ -531,41 +531,24 @@ static size_t format_person_part(struct strbuf *sb, char part, { /* currently all placeholders have same length */ const int placeholder_len = 2; - int start, end, tz = 0; + int tz; unsigned long date = 0; - char *ep; - const char *name_start, *name_end, *mail_start, *mail_end, *msg_end = msg+len; char person_name[1024]; char person_mail[1024]; + struct ident_split s; + const char *name_start, *name_end, *mail_start, *mail_end; - /* advance 'end' to point to email start delimiter */ - for (end = 0; end < len && msg[end] != '<'; end++) - ; /* do nothing */ - - /* - * When end points at the '<' that we found, it should have - * matching '>' later, which means 'end' must be strictly - * below len - 1. - */ - if (end >= len - 2) + if (split_ident_line(&s, msg, len) < 0) goto skip; - /* Seek for both name and email part */ - name_start = msg; - name_end = msg+end; - while (name_end > name_start && isspace(*(name_end-1))) - name_end--; - mail_start = msg+end+1; - mail_end = mail_start; - while (mail_end < msg_end && *mail_end != '>') - mail_end++; - if (mail_end == msg_end) - goto skip; - end = mail_end-msg; + name_start = s.name_begin; + name_end = s.name_end; + mail_start = s.mail_begin; + mail_end = s.mail_end; if (part == 'N' || part == 'E') { /* mailmap lookup */ - strlcpy(person_name, name_start, name_end-name_start+1); - strlcpy(person_mail, mail_start, mail_end-mail_start+1); + strlcpy(person_name, name_start, name_end - name_start + 1); + strlcpy(person_mail, mail_start, mail_end - mail_start + 1); mailmap_name(person_mail, sizeof(person_mail), person_name, sizeof(person_name)); name_start = person_name; name_end = name_start + strlen(person_name); @@ -581,28 +564,20 @@ static size_t format_person_part(struct strbuf *sb, char part, return placeholder_len; } - /* advance 'start' to point to date start delimiter */ - for (start = end + 1; start < len && isspace(msg[start]); start++) - ; /* do nothing */ - if (start >= len) - goto skip; - date = strtoul(msg + start, &ep, 10); - if (msg + start == ep) + if (!s.date_begin) goto skip; + date = strtoul(s.date_begin, NULL, 10); + if (part == 't') { /* date, UNIX timestamp */ - strbuf_add(sb, msg + start, ep - (msg + start)); + strbuf_add(sb, s.date_begin, s.date_end - s.date_begin); return placeholder_len; } /* parse tz */ - for (start = ep - msg + 1; start < len && isspace(msg[start]); start++) - ; /* do nothing */ - if (start + 1 < len) { - tz = strtoul(msg + start + 1, NULL, 10); - if (msg[start] == '-') - tz = -tz; - } + tz = strtoul(s.tz_begin + 1, NULL, 10); + if (*s.tz_begin == '-') + tz = -tz; switch (part) { case 'd': /* date */ @@ -621,8 +596,9 @@ static size_t format_person_part(struct strbuf *sb, char part, skip: /* - * bogus commit, 'sb' cannot be updated, but we still need to - * compute a valid return value. + * reading from either a bogus commit, or a reflog entry with + * %gn, %ge, etc.; 'sb' cannot be updated, but we still need + * to compute a valid return value. */ if (part == 'n' || part == 'e' || part == 't' || part == 'd' || part == 'D' || part == 'r' || part == 'i') diff --git a/read-cache.c b/read-cache.c index 274e54b4f3..6c8f395836 100644 --- a/read-cache.c +++ b/read-cache.c @@ -157,16 +157,6 @@ static int ce_modified_check_fs(struct cache_entry *ce, struct stat *st) return 0; } -static int is_empty_blob_sha1(const unsigned char *sha1) -{ - static const unsigned char empty_blob_sha1[20] = { - 0xe6,0x9d,0xe2,0x9b,0xb2,0xd1,0xd6,0x43,0x4b,0x8b, - 0x29,0xae,0x77,0x5a,0xd8,0xc2,0xe4,0x8c,0x53,0x91 - }; - - return !hashcmp(sha1, empty_blob_sha1); -} - static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st) { unsigned int changed = 0; diff --git a/remote-curl.c b/remote-curl.c index d159fe7f34..04a9d6277d 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -290,6 +290,7 @@ static void output_refs(struct ref *refs) struct rpc_state { const char *service_name; const char **argv; + struct strbuf *stdin_preamble; char *service_url; char *hdr_content_type; char *hdr_accept; @@ -535,6 +536,7 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads) { const char *svc = rpc->service_name; struct strbuf buf = STRBUF_INIT; + struct strbuf *preamble = rpc->stdin_preamble; struct child_process client; int err = 0; @@ -545,6 +547,8 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads) client.argv = rpc->argv; if (start_command(&client)) exit(1); + if (preamble) + write_or_die(client.in, preamble->buf, preamble->len); if (heads) write_or_die(client.in, heads->buf, heads->len); @@ -626,13 +630,14 @@ static int fetch_git(struct discovery *heads, int nr_heads, struct ref **to_fetch) { struct rpc_state rpc; + struct strbuf preamble = STRBUF_INIT; char *depth_arg = NULL; - const char **argv; int argc = 0, i, err; + const char *argv[15]; - argv = xmalloc((15 + nr_heads) * sizeof(char*)); argv[argc++] = "fetch-pack"; argv[argc++] = "--stateless-rpc"; + argv[argc++] = "--stdin"; argv[argc++] = "--lock-pack"; if (options.followtags) argv[argc++] = "--include-tag"; @@ -651,24 +656,27 @@ static int fetch_git(struct discovery *heads, argv[argc++] = depth_arg; } argv[argc++] = url; + argv[argc++] = NULL; + for (i = 0; i < nr_heads; i++) { struct ref *ref = to_fetch[i]; if (!ref->name || !*ref->name) die("cannot fetch by sha1 over smart http"); - argv[argc++] = ref->name; + packet_buf_write(&preamble, "%s\n", ref->name); } - argv[argc++] = NULL; + packet_buf_flush(&preamble); memset(&rpc, 0, sizeof(rpc)); rpc.service_name = "git-upload-pack", rpc.argv = argv; + rpc.stdin_preamble = &preamble; rpc.gzip_request = 1; err = rpc_service(&rpc, heads); if (rpc.result.len) safe_write(1, rpc.result.buf, rpc.result.len); strbuf_release(&rpc.result); - free(argv); + strbuf_release(&preamble); free(depth_arg); return err; } @@ -774,6 +782,7 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) argv[argc++] = "--quiet"; else if (options.verbosity > 1) argv[argc++] = "--verbose"; + argv[argc++] = options.progress ? "--progress" : "--no-progress"; argv[argc++] = url; for (i = 0; i < nr_spec; i++) argv[argc++] = specs[i]; diff --git a/revision.c b/revision.c index b3554ed11b..9a0d9c7de2 100644 --- a/revision.c +++ b/revision.c @@ -1715,17 +1715,21 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s submodule = opt->submodule; /* First, search for "--" */ - seen_dashdash = 0; - for (i = 1; i < argc; i++) { - const char *arg = argv[i]; - if (strcmp(arg, "--")) - continue; - argv[i] = NULL; - argc = i; - if (argv[i + 1]) - append_prune_data(&prune_data, argv + i + 1); + if (opt && opt->assume_dashdash) { seen_dashdash = 1; - break; + } else { + seen_dashdash = 0; + for (i = 1; i < argc; i++) { + const char *arg = argv[i]; + if (strcmp(arg, "--")) + continue; + argv[i] = NULL; + argc = i; + if (argv[i + 1]) + append_prune_data(&prune_data, argv + i + 1); + seen_dashdash = 1; + break; + } } /* Second, deal with arguments and options */ diff --git a/revision.h b/revision.h index b8e9223954..1a0838473f 100644 --- a/revision.h +++ b/revision.h @@ -183,6 +183,7 @@ struct setup_revision_opt { const char *def; void (*tweak)(struct rev_info *, struct setup_revision_opt *); const char *submodule; + int assume_dashdash; }; extern void init_revisions(struct rev_info *revs, const char *prefix); diff --git a/run-command.c b/run-command.c index 1db8abf984..9c5a564ece 100644 --- a/run-command.c +++ b/run-command.c @@ -76,6 +76,68 @@ static inline void dup_devnull(int to) } #endif +static char *locate_in_PATH(const char *file) +{ + const char *p = getenv("PATH"); + struct strbuf buf = STRBUF_INIT; + + if (!p || !*p) + return NULL; + + while (1) { + const char *end = strchrnul(p, ':'); + + strbuf_reset(&buf); + + /* POSIX specifies an empty entry as the current directory. */ + if (end != p) { + strbuf_add(&buf, p, end - p); + strbuf_addch(&buf, '/'); + } + strbuf_addstr(&buf, file); + + if (!access(buf.buf, F_OK)) + return strbuf_detach(&buf, NULL); + + if (!*end) + break; + p = end + 1; + } + + strbuf_release(&buf); + return NULL; +} + +static int exists_in_PATH(const char *file) +{ + char *r = locate_in_PATH(file); + free(r); + return r != NULL; +} + +int sane_execvp(const char *file, char * const argv[]) +{ + if (!execvp(file, argv)) + return 0; /* cannot happen ;-) */ + + /* + * When a command can't be found because one of the directories + * listed in $PATH is unsearchable, execvp reports EACCES, but + * careful usability testing (read: analysis of occasional bug + * reports) reveals that "No such file or directory" is more + * intuitive. + * + * We avoid commands with "/", because execvp will not do $PATH + * lookups in that case. + * + * The reassignment of EACCES to errno looks like a no-op below, + * but we need to protect against exists_in_PATH overwriting errno. + */ + if (errno == EACCES && !strchr(file, '/')) + errno = exists_in_PATH(file) ? EACCES : ENOENT; + return -1; +} + static const char **prepare_shell_cmd(const char **argv) { int argc, nargc = 0; @@ -114,7 +176,7 @@ static int execv_shell_cmd(const char **argv) { const char **nargv = prepare_shell_cmd(argv); trace_argv_printf(nargv, "trace: exec:"); - execvp(nargv[0], (char **)nargv); + sane_execvp(nargv[0], (char **)nargv); free(nargv); return -1; } @@ -339,7 +401,7 @@ fail_pipe: } else if (cmd->use_shell) { execv_shell_cmd(cmd->argv); } else { - execvp(cmd->argv[0], (char *const*) cmd->argv); + sane_execvp(cmd->argv[0], (char *const*) cmd->argv); } if (errno == ENOENT) { if (!cmd->silent_exec_failure) diff --git a/sequencer.c b/sequencer.c index a37846a594..cd11e340dd 100644 --- a/sequencer.c +++ b/sequencer.c @@ -164,7 +164,7 @@ static void write_message(struct strbuf *msgbuf, const char *filename) static struct tree *empty_tree(void) { - return lookup_tree((const unsigned char *)EMPTY_TREE_SHA1_BIN); + return lookup_tree(EMPTY_TREE_SHA1_BIN); } static int error_dirty_index(struct replay_opts *opts) @@ -234,7 +234,7 @@ static int do_recursive_merge(struct commit *base, struct commit *next, if (!clean) { int i; - strbuf_addstr(msgbuf, "\nConflicts:\n\n"); + strbuf_addstr(msgbuf, "\nConflicts:\n"); for (i = 0; i < active_nr;) { struct cache_entry *ce = active_cache[i++]; if (ce_stage(ce)) { @@ -569,13 +569,15 @@ static const char *setup_nongit(const char *cwd, int *nongit_ok) return NULL; } -static dev_t get_device_or_die(const char *path, const char *prefix) +static dev_t get_device_or_die(const char *path, const char *prefix, int prefix_len) { struct stat buf; - if (stat(path, &buf)) - die_errno("failed to stat '%s%s%s'", + if (stat(path, &buf)) { + die_errno("failed to stat '%*s%s%s'", + prefix_len, prefix ? prefix : "", prefix ? "/" : "", path); + } return buf.st_dev; } @@ -589,7 +591,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) static char cwd[PATH_MAX+1]; const char *gitdirenv, *ret; char *gitfile; - int len, offset, ceil_offset; + int len, offset, offset_parent, ceil_offset; dev_t current_device = 0; int one_filesystem = 1; @@ -631,7 +633,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) */ one_filesystem = !git_env_bool("GIT_DISCOVERY_ACROSS_FILESYSTEM", 0); if (one_filesystem) - current_device = get_device_or_die(".", NULL); + current_device = get_device_or_die(".", NULL, 0); for (;;) { gitfile = (char*)read_gitfile(DEFAULT_GIT_DIR_ENVIRONMENT); if (gitfile) @@ -653,11 +655,12 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) if (is_git_directory(".")) return setup_bare_git_dir(cwd, offset, len, nongit_ok); - while (--offset > ceil_offset && cwd[offset] != '/'); - if (offset <= ceil_offset) + offset_parent = offset; + while (--offset_parent > ceil_offset && cwd[offset_parent] != '/'); + if (offset_parent <= ceil_offset) return setup_nongit(cwd, nongit_ok); if (one_filesystem) { - dev_t parent_device = get_device_or_die("..", cwd); + dev_t parent_device = get_device_or_die("..", cwd, offset); if (parent_device != current_device) { if (nongit_ok) { if (chdir(cwd)) @@ -666,7 +669,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) return NULL; } cwd[offset] = '\0'; - die("Not a git repository (or any parent up to mount parent %s)\n" + die("Not a git repository (or any parent up to mount point %s)\n" "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).", cwd); } } @@ -674,6 +677,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) cwd[offset] = '\0'; die_errno("Cannot change to '%s/..'", cwd); } + offset = offset_parent; } } diff --git a/submodule.h b/submodule.h index 80e04f3c8c..9c5e5c0c30 100644 --- a/submodule.h +++ b/submodule.h @@ -13,7 +13,7 @@ enum { void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt, const char *path); int submodule_config(const char *var, const char *value, void *cb); -void gitmodules_config(); +void gitmodules_config(void); int parse_submodule_config_option(const char *var, const char *value); void handle_ignore_submodules_arg(struct diff_options *diffopt, const char *); int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg); diff --git a/t/gitweb-lib.sh b/t/gitweb-lib.sh index 21d11d6c2d..ae2dc4604f 100644 --- a/t/gitweb-lib.sh +++ b/t/gitweb-lib.sh @@ -69,7 +69,7 @@ gitweb_run () { # written to web server logs, so we are not interested in that: # we are interested only in properly formatted errors/warnings rm -f gitweb.log && - perl -- "$SCRIPT_NAME" \ + "$PERL_PATH" -- "$SCRIPT_NAME" \ >gitweb.output 2>gitweb.log && perl -w -e ' open O, ">gitweb.headers"; diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh index ef2d01f369..87f0ad8f41 100644 --- a/t/lib-git-daemon.sh +++ b/t/lib-git-daemon.sh @@ -31,19 +31,19 @@ start_git_daemon() { >&3 2>git_daemon_output & GIT_DAEMON_PID=$! { - read line + read line <&7 echo >&4 "$line" - cat >&4 & + cat <&7 >&4 & + } 7<git_daemon_output && - # Check expected output - if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble" - then - kill "$GIT_DAEMON_PID" - wait "$GIT_DAEMON_PID" - trap 'die' EXIT - error "git daemon failed to start" - fi - } <git_daemon_output + # Check expected output + if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble" + then + kill "$GIT_DAEMON_PID" + wait "$GIT_DAEMON_PID" + trap 'die' EXIT + error "git daemon failed to start" + fi } stop_git_daemon() { diff --git a/t/t0061-run-command.sh b/t/t0061-run-command.sh index 8d4938f019..17e969df60 100755 --- a/t/t0061-run-command.sh +++ b/t/t0061-run-command.sh @@ -34,4 +34,17 @@ test_expect_success POSIXPERM 'run_command reports EACCES' ' grep "fatal: cannot exec.*hello.sh" err ' +test_expect_success POSIXPERM 'unreadable directory in PATH' ' + mkdir local-command && + test_when_finished "chmod u+rwx local-command && rm -fr local-command" && + git config alias.nitfol "!echo frotz" && + chmod a-rx local-command && + ( + PATH=./local-command:$PATH && + git nitfol >actual + ) && + echo frotz >expect && + test_cmp expect actual +' + test_done diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 36e227b3bb..a477453e2e 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -550,6 +550,14 @@ EOF test_expect_success "rename succeeded" "test_cmp expect .git/config" +test_expect_success 'renaming empty section name is rejected' ' + test_must_fail git config --rename-section branch.zwei "" +' + +test_expect_success 'renaming to bogus section is rejected' ' + test_must_fail git config --rename-section branch.zwei "bogus name" +' + cat >> .git/config << EOF [branch "zwei"] a = 1 [branch "vier"] EOF diff --git a/t/t3310-notes-merge-manual-resolve.sh b/t/t3310-notes-merge-manual-resolve.sh index 4367197953..195bb97f85 100755 --- a/t/t3310-notes-merge-manual-resolve.sh +++ b/t/t3310-notes-merge-manual-resolve.sh @@ -324,7 +324,7 @@ y and z notes on 4th commit EOF git notes merge --commit && # No .git/NOTES_MERGE_* files left - test_must_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && + test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && test_cmp /dev/null output && # Merge commit has pre-merge y and pre-merge z as parents test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" && @@ -386,7 +386,7 @@ test_expect_success 'redo merge of z into m (== y) with default ("manual") resol test_expect_success 'abort notes merge' ' git notes merge --abort && # No .git/NOTES_MERGE_* files left - test_must_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && + test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && test_cmp /dev/null output && # m has not moved (still == y) test "$(git rev-parse refs/notes/m)" = "$(cat pre_merge_y)" && @@ -453,7 +453,7 @@ EOF # Finalize merge git notes merge --commit && # No .git/NOTES_MERGE_* files left - test_must_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && + test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && test_cmp /dev/null output && # Merge commit has pre-merge y and pre-merge z as parents test "$(git rev-parse refs/notes/m^1)" = "$(cat pre_merge_y)" && @@ -542,7 +542,7 @@ EOF test_expect_success 'resolve situation by aborting the notes merge' ' git notes merge --abort && # No .git/NOTES_MERGE_* files left - test_must_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && + test_might_fail ls .git/NOTES_MERGE_* >output 2>/dev/null && test_cmp /dev/null output && # m has not moved (still == w) test "$(git rev-parse refs/notes/m)" = "$(git rev-parse refs/notes/w)" && @@ -553,4 +553,23 @@ test_expect_success 'resolve situation by aborting the notes merge' ' verify_notes z ' +cat >expect_notes <<EOF +foo +bar +EOF + +test_expect_success 'switch cwd before committing notes merge' ' + git notes add -m foo HEAD && + git notes --ref=other add -m bar HEAD && + test_must_fail git notes merge refs/notes/other && + ( + cd .git/NOTES_MERGE_WORKTREE && + echo "foo" > $(git rev-parse HEAD) && + echo "bar" >> $(git rev-parse HEAD) && + git notes merge --commit + ) && + git notes show HEAD > actual_notes && + test_cmp expect_notes actual_notes +' + test_done diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index b981572d73..7fd2127625 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -624,8 +624,38 @@ test_expect_success 'submodule rebase -i' ' FAKE_LINES="1 squash 2 3" git rebase -i A ' +test_expect_success 'submodule conflict setup' ' + git tag submodule-base && + git checkout HEAD^ && + ( + cd sub && git checkout HEAD^ && echo 4 >elif && + git add elif && git commit -m "submodule conflict" + ) && + git add sub && + test_tick && + git commit -m "Conflict in submodule" && + git tag submodule-topic +' + +test_expect_success 'rebase -i continue with only submodule staged' ' + test_must_fail git rebase -i submodule-base && + git add sub && + git rebase --continue && + test $(git rev-parse submodule-base) != $(git rev-parse HEAD) +' + +test_expect_success 'rebase -i continue with unstaged submodule' ' + git checkout submodule-topic && + git reset --hard && + test_must_fail git rebase -i submodule-base && + git reset && + git rebase --continue && + test $(git rev-parse submodule-base) = $(git rev-parse HEAD) +' + test_expect_success 'avoid unnecessary reset' ' git checkout master && + git reset --hard && test-chmtime =123456789 file3 && git update-index --refresh && HEAD=$(git rev-parse HEAD) && diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh index 9e236f9cc0..098a6ae4a0 100755 --- a/t/t3701-add-interactive.sh +++ b/t/t3701-add-interactive.sh @@ -330,4 +330,30 @@ test_expect_success PERL 'split hunk "add -p (edit)"' ' ! grep "^+15" actual ' +test_expect_success 'patch mode ignores unmerged entries' ' + git reset --hard && + test_commit conflict && + test_commit non-conflict && + git checkout -b side && + test_commit side conflict.t && + git checkout master && + test_commit master conflict.t && + test_must_fail git merge side && + echo changed >non-conflict.t && + echo y | git add -p >output && + ! grep a/conflict.t output && + cat >expected <<-\EOF && + * Unmerged path conflict.t + diff --git a/non-conflict.t b/non-conflict.t + index f766221..5ea2ed4 100644 + --- a/non-conflict.t + +++ b/non-conflict.t + @@ -1 +1 @@ + -non-conflict + +changed + EOF + git diff --cached >diff && + test_cmp expected diff +' + test_done diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh index 5c2012111c..30d42cb3bf 100755 --- a/t/t4034-diff-words.sh +++ b/t/t4034-diff-words.sh @@ -3,6 +3,7 @@ test_description='word diff colors' . ./test-lib.sh +. "$TEST_DIRECTORY"/diff-lib.sh cat >pre.simple <<-\EOF h(4) @@ -293,6 +294,10 @@ test_expect_success '--word-diff=none' ' word_diff --word-diff=plain --word-diff=none ' +test_expect_success 'unset default driver' ' + test_unconfig diff.wordregex +' + test_language_driver bibtex test_language_driver cpp test_language_driver csharp @@ -348,4 +353,35 @@ test_expect_success 'word-diff with no newline at EOF' ' word_diff --word-diff=plain ' +test_expect_success 'setup history with two files' ' + echo "a b; c" >a.tex && + echo "a b; c" >z.txt && + git add a.tex z.txt && + git commit -minitial && + + # modify both + echo "a bx; c" >a.tex && + echo "a bx; c" >z.txt && + git commit -mmodified -a +' + +test_expect_success 'wordRegex for the first file does not apply to the second' ' + echo "*.tex diff=tex" >.gitattributes && + git config diff.tex.wordRegex "[a-z]+|." && + cat >expect <<-\EOF && + diff --git a/a.tex b/a.tex + --- a/a.tex + +++ b/a.tex + @@ -1 +1 @@ + a [-b-]{+bx+}; c + diff --git a/z.txt b/z.txt + --- a/z.txt + +++ b/z.txt + @@ -1 +1 @@ + a [-b;-]{+bx;+} c + EOF + git diff --word-diff HEAD~ >actual && + compare_diff_patch expect actual +' + test_done diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh index 328aa8f398..ddd94976c2 100755 --- a/t/t4052-stat-output.sh +++ b/t/t4052-stat-output.sh @@ -82,11 +82,15 @@ test_expect_success 'preparation for big change tests' ' cat >expect80 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF - +cat >expect80-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF cat >expect200 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF - +cat >expect200-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF while read verb expect cmd args do test_expect_success "$cmd $verb COLUMNS (big change)" ' @@ -94,6 +98,14 @@ do grep " | " output >actual && test_cmp "$expect" actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb COLUMNS (big change)" ' + COLUMNS=200 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' done <<\EOF ignores expect80 format-patch -1 --stdout respects expect200 diff HEAD^ HEAD --stat @@ -104,7 +116,9 @@ EOF cat >expect40 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++ EOF - +cat >expect40-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++ +EOF while read verb expect cmd args do test_expect_success "$cmd $verb not enough COLUMNS (big change)" ' @@ -113,11 +127,41 @@ do test_cmp "$expect" actual ' + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb not enough COLUMNS (big change)" ' + COLUMNS=40 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' +done <<\EOF +ignores expect80 format-patch -1 --stdout +respects expect40 diff HEAD^ HEAD --stat +respects expect40 show --stat +respects expect40 log -1 --stat +EOF + +cat >expect40 <<'EOF' + abcd | 1000 ++++++++++++++++++++++++++ +EOF +cat >expect40-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++ +EOF +while read verb expect cmd args +do test_expect_success "$cmd $verb statGraphWidth config" ' git -c diff.statGraphWidth=26 $cmd $args >output grep " | " output >actual && test_cmp "$expect" actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb statGraphWidth config" ' + git -c diff.statGraphWidth=26 $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' done <<\EOF ignores expect80 format-patch -1 --stdout respects expect40 diff HEAD^ HEAD --stat @@ -129,6 +173,9 @@ EOF cat >expect <<'EOF' abcd | 1000 ++++++++++++++++++++++++++ EOF +cat >expect-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++ +EOF while read cmd args do test_expect_success "$cmd --stat=width with big change" ' @@ -143,11 +190,25 @@ do test_cmp expect actual ' - test_expect_success "$cmd --stat-graph--width with big change" ' + test_expect_success "$cmd --stat-graph-width with big change" ' git $cmd $args --stat-graph-width=26 >output grep " | " output >actual && test_cmp expect actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --stat-width=width --graph with big change" ' + git $cmd $args --stat-width=40 --graph >output + grep " | " output >actual && + test_cmp expect-graph actual + ' + + test_expect_success "$cmd --stat-graph-width --graph with big change" ' + git $cmd $args --stat-graph-width=26 --graph >output + grep " | " output >actual && + test_cmp expect-graph actual + ' done <<\EOF format-patch -1 --stdout diff HEAD^ HEAD --stat @@ -164,6 +225,9 @@ test_expect_success 'preparation for long filename tests' ' cat >expect <<'EOF' ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++ EOF +cat >expect-graph <<'EOF' +| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++ +EOF while read cmd args do test_expect_success "$cmd --stat=width with big change is more balanced" ' @@ -171,6 +235,14 @@ do grep " | " output >actual && test_cmp expect actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --stat=width --graph with big change is balanced" ' + git $cmd $args --stat-width=60 --graph >output && + grep " | " output >actual && + test_cmp expect-graph actual + ' done <<\EOF format-patch -1 --stdout diff HEAD^ HEAD --stat @@ -181,9 +253,15 @@ EOF cat >expect80 <<'EOF' ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++ EOF +cat >expect80-graph <<'EOF' +| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++ +EOF cat >expect200 <<'EOF' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF +cat >expect200-graph <<'EOF' +| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF while read verb expect cmd args do test_expect_success "$cmd $verb COLUMNS (long filename)" ' @@ -191,6 +269,14 @@ do grep " | " output >actual && test_cmp "$expect" actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb COLUMNS (long filename)" ' + COLUMNS=200 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' done <<\EOF ignores expect80 format-patch -1 --stdout respects expect200 diff HEAD^ HEAD --stat @@ -198,6 +284,36 @@ respects expect200 show --stat respects expect200 log -1 --stat EOF +cat >expect1 <<'EOF' + ...aaaaaaa | 1000 ++++++ +EOF +cat >expect1-graph <<'EOF' +| ...aaaaaaa | 1000 ++++++ +EOF +while read verb expect cmd args +do + test_expect_success COLUMNS_CAN_BE_1 \ + "$cmd $verb prefix greater than COLUMNS (big change)" ' + COLUMNS=1 git $cmd $args >output + grep " | " output >actual && + test_cmp "$expect" actual + ' + + test "$cmd" != diff || continue + + test_expect_success COLUMNS_CAN_BE_1 \ + "$cmd --graph $verb prefix greater than COLUMNS (big change)" ' + COLUMNS=1 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' +done <<\EOF +ignores expect80 format-patch -1 --stdout +respects expect1 diff HEAD^ HEAD --stat +respects expect1 show --stat +respects expect1 log -1 --stat +EOF + cat >expect <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF diff --git a/t/t4202-log.sh b/t/t4202-log.sh index 222f7559e9..32cf0bd218 100755 --- a/t/t4202-log.sh +++ b/t/t4202-log.sh @@ -516,4 +516,294 @@ test_expect_success 'show added path under "--follow -M"' ' ) ' +cat >expect <<\EOF +* commit COMMIT_OBJECT_NAME +|\ Merge: MERGE_PARENTS +| | Author: A U Thor <author@example.com> +| | +| | Merge HEADS DESCRIPTION +| | +| * commit COMMIT_OBJECT_NAME +| | Author: A U Thor <author@example.com> +| | +| | reach +| | --- +| | reach.t | 1 + +| | 1 file changed, 1 insertion(+) +| | +| | diff --git a/reach.t b/reach.t +| | new file mode 100644 +| | index 0000000..10c9591 +| | --- /dev/null +| | +++ b/reach.t +| | @@ -0,0 +1 @@ +| | +reach +| | +| \ +*-. \ commit COMMIT_OBJECT_NAME +|\ \ \ Merge: MERGE_PARENTS +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | Merge HEADS DESCRIPTION +| | | | +| | * | commit COMMIT_OBJECT_NAME +| | |/ Author: A U Thor <author@example.com> +| | | +| | | octopus-b +| | | --- +| | | octopus-b.t | 1 + +| | | 1 file changed, 1 insertion(+) +| | | +| | | diff --git a/octopus-b.t b/octopus-b.t +| | | new file mode 100644 +| | | index 0000000..d5fcad0 +| | | --- /dev/null +| | | +++ b/octopus-b.t +| | | @@ -0,0 +1 @@ +| | | +octopus-b +| | | +| * | commit COMMIT_OBJECT_NAME +| |/ Author: A U Thor <author@example.com> +| | +| | octopus-a +| | --- +| | octopus-a.t | 1 + +| | 1 file changed, 1 insertion(+) +| | +| | diff --git a/octopus-a.t b/octopus-a.t +| | new file mode 100644 +| | index 0000000..11ee015 +| | --- /dev/null +| | +++ b/octopus-a.t +| | @@ -0,0 +1 @@ +| | +octopus-a +| | +* | commit COMMIT_OBJECT_NAME +|/ Author: A U Thor <author@example.com> +| +| seventh +| --- +| seventh.t | 1 + +| 1 file changed, 1 insertion(+) +| +| diff --git a/seventh.t b/seventh.t +| new file mode 100644 +| index 0000000..9744ffc +| --- /dev/null +| +++ b/seventh.t +| @@ -0,0 +1 @@ +| +seventh +| +* commit COMMIT_OBJECT_NAME +|\ Merge: MERGE_PARENTS +| | Author: A U Thor <author@example.com> +| | +| | Merge branch 'tangle' +| | +| * commit COMMIT_OBJECT_NAME +| |\ Merge: MERGE_PARENTS +| | | Author: A U Thor <author@example.com> +| | | +| | | Merge branch 'side' (early part) into tangle +| | | +| * | commit COMMIT_OBJECT_NAME +| |\ \ Merge: MERGE_PARENTS +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | Merge branch 'master' (early part) into tangle +| | | | +| * | | commit COMMIT_OBJECT_NAME +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | tangle-a +| | | | --- +| | | | tangle-a | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/tangle-a b/tangle-a +| | | | new file mode 100644 +| | | | index 0000000..7898192 +| | | | --- /dev/null +| | | | +++ b/tangle-a +| | | | @@ -0,0 +1 @@ +| | | | +a +| | | | +* | | | commit COMMIT_OBJECT_NAME +|\ \ \ \ Merge: MERGE_PARENTS +| | | | | Author: A U Thor <author@example.com> +| | | | | +| | | | | Merge branch 'side' +| | | | | +| * | | | commit COMMIT_OBJECT_NAME +| | |_|/ Author: A U Thor <author@example.com> +| |/| | +| | | | side-2 +| | | | --- +| | | | 2 | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/2 b/2 +| | | | new file mode 100644 +| | | | index 0000000..0cfbf08 +| | | | --- /dev/null +| | | | +++ b/2 +| | | | @@ -0,0 +1 @@ +| | | | +2 +| | | | +| * | | commit COMMIT_OBJECT_NAME +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | side-1 +| | | | --- +| | | | 1 | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/1 b/1 +| | | | new file mode 100644 +| | | | index 0000000..d00491f +| | | | --- /dev/null +| | | | +++ b/1 +| | | | @@ -0,0 +1 @@ +| | | | +1 +| | | | +* | | | commit COMMIT_OBJECT_NAME +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | Second +| | | | --- +| | | | one | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/one b/one +| | | | new file mode 100644 +| | | | index 0000000..9a33383 +| | | | --- /dev/null +| | | | +++ b/one +| | | | @@ -0,0 +1 @@ +| | | | +case +| | | | +* | | | commit COMMIT_OBJECT_NAME +| |_|/ Author: A U Thor <author@example.com> +|/| | +| | | sixth +| | | --- +| | | a/two | 1 - +| | | 1 file changed, 1 deletion(-) +| | | +| | | diff --git a/a/two b/a/two +| | | deleted file mode 100644 +| | | index 9245af5..0000000 +| | | --- a/a/two +| | | +++ /dev/null +| | | @@ -1 +0,0 @@ +| | | -ni +| | | +* | | commit COMMIT_OBJECT_NAME +| | | Author: A U Thor <author@example.com> +| | | +| | | fifth +| | | --- +| | | a/two | 1 + +| | | 1 file changed, 1 insertion(+) +| | | +| | | diff --git a/a/two b/a/two +| | | new file mode 100644 +| | | index 0000000..9245af5 +| | | --- /dev/null +| | | +++ b/a/two +| | | @@ -0,0 +1 @@ +| | | +ni +| | | +* | | commit COMMIT_OBJECT_NAME +|/ / Author: A U Thor <author@example.com> +| | +| | fourth +| | --- +| | ein | 1 + +| | 1 file changed, 1 insertion(+) +| | +| | diff --git a/ein b/ein +| | new file mode 100644 +| | index 0000000..9d7e69f +| | --- /dev/null +| | +++ b/ein +| | @@ -0,0 +1 @@ +| | +ichi +| | +* | commit COMMIT_OBJECT_NAME +|/ Author: A U Thor <author@example.com> +| +| third +| --- +| ichi | 1 + +| one | 1 - +| 2 files changed, 1 insertion(+), 1 deletion(-) +| +| diff --git a/ichi b/ichi +| new file mode 100644 +| index 0000000..9d7e69f +| --- /dev/null +| +++ b/ichi +| @@ -0,0 +1 @@ +| +ichi +| diff --git a/one b/one +| deleted file mode 100644 +| index 9d7e69f..0000000 +| --- a/one +| +++ /dev/null +| @@ -1 +0,0 @@ +| -ichi +| +* commit COMMIT_OBJECT_NAME +| Author: A U Thor <author@example.com> +| +| second +| --- +| one | 2 +- +| 1 file changed, 1 insertion(+), 1 deletion(-) +| +| diff --git a/one b/one +| index 5626abf..9d7e69f 100644 +| --- a/one +| +++ b/one +| @@ -1 +1 @@ +| -one +| +ichi +| +* commit COMMIT_OBJECT_NAME + Author: A U Thor <author@example.com> + + initial + --- + one | 1 + + 1 file changed, 1 insertion(+) + + diff --git a/one b/one + new file mode 100644 + index 0000000..5626abf + --- /dev/null + +++ b/one + @@ -0,0 +1 @@ + +one +EOF + +sanitize_output () { + sed -e 's/ *$//' \ + -e 's/commit [0-9a-f]*$/commit COMMIT_OBJECT_NAME/' \ + -e 's/Merge: [ 0-9a-f]*$/Merge: MERGE_PARENTS/' \ + -e 's/Merge tag.*/Merge HEADS DESCRIPTION/' \ + -e 's/Merge commit.*/Merge HEADS DESCRIPTION/' \ + -e 's/, 0 deletions(-)//' \ + -e 's/, 0 insertions(+)//' \ + -e 's/ 1 files changed, / 1 file changed, /' \ + -e 's/, 1 deletions(-)/, 1 deletion(-)/' \ + -e 's/, 1 insertions(+)/, 1 insertion(+)/' +} + +test_expect_success 'log --graph with diff and stats' ' + git log --graph --pretty=short --stat -p >actual && + sanitize_output >actual.sanitized <actual && + test_cmp expect actual.sanitized +' + test_done diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index ce51692bb2..1d1ca98588 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -326,4 +326,70 @@ EOF test_cmp count7.expected count7.actual ' +test_expect_success 'setup tests for the --stdin parameter' ' + for head in C D E F + do + add $head + done && + for head in A B C D E F + do + git tag $head $head + done && + cat >input <<-\EOF + refs/heads/C + refs/heads/A + refs/heads/D + refs/tags/C + refs/heads/B + refs/tags/A + refs/heads/E + refs/tags/B + refs/tags/E + refs/tags/D + EOF + sort <input >expect && + ( + echo refs/heads/E && + echo refs/tags/E && + cat input + ) >input.dup +' + +test_expect_success 'fetch refs from cmdline' ' + ( + cd client && + git fetch-pack --no-progress .. $(cat ../input) + ) >output && + cut -d " " -f 2 <output | sort >actual && + test_cmp expect actual +' + +test_expect_success 'fetch refs from stdin' ' + ( + cd client && + git fetch-pack --stdin --no-progress .. <../input + ) >output && + cut -d " " -f 2 <output | sort >actual && + test_cmp expect actual +' + +test_expect_success 'fetch mixed refs from cmdline and stdin' ' + ( + cd client && + tail -n +5 ../input | + git fetch-pack --stdin --no-progress .. $(head -n 4 ../input) + ) >output && + cut -d " " -f 2 <output | sort >actual && + test_cmp expect actual +' + +test_expect_success 'test duplicate refs from stdin' ' + ( + cd client && + test_must_fail git fetch-pack --stdin --no-progress .. <../input.dup + ) >output && + cut -d " " -f 2 <output | sort >actual && + test_cmp expect actual +' + test_done diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 308c02ea75..d7a19a1829 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -162,6 +162,36 @@ test_expect_success 'fetch following tags' ' ' +test_expect_success 'fetch uses remote ref names to describe new refs' ' + cd "$D" && + git init descriptive && + ( + cd descriptive && + git config remote.o.url .. && + git config remote.o.fetch "refs/heads/*:refs/crazyheads/*" && + git config --add remote.o.fetch "refs/others/*:refs/heads/*" && + git fetch o + ) && + git tag -a -m "Descriptive tag" descriptive-tag && + git branch descriptive-branch && + git checkout descriptive-branch && + echo "Nuts" >crazy && + git add crazy && + git commit -a -m "descriptive commit" && + git update-ref refs/others/crazy HEAD && + ( + cd descriptive && + git fetch o 2>actual && + grep " -> refs/crazyheads/descriptive-branch$" actual | + test_i18ngrep "new branch" && + grep " -> descriptive-tag$" actual | + test_i18ngrep "new tag" && + grep " -> crazy$" actual | + test_i18ngrep "new ref" + ) && + git checkout master +' + test_expect_success 'fetch must not resolve short tag name' ' cd "$D" && diff --git a/t/t5528-push-default.sh b/t/t5528-push-default.sh new file mode 100755 index 0000000000..c334c51a07 --- /dev/null +++ b/t/t5528-push-default.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +test_description='check various push.default settings' +. ./test-lib.sh + +test_expect_success 'setup bare remotes' ' + git init --bare repo1 && + git remote add parent1 repo1 && + git init --bare repo2 && + git remote add parent2 repo2 && + test_commit one && + git push parent1 HEAD && + git push parent2 HEAD +' + +test_expect_success '"upstream" pushes to configured upstream' ' + git checkout master && + test_config branch.master.remote parent1 && + test_config branch.master.merge refs/heads/foo && + test_config push.default upstream && + test_commit two && + git push && + echo two >expect && + git --git-dir=repo1 log -1 --format=%s foo >actual && + test_cmp expect actual +' + +test_expect_success '"upstream" does not push on unconfigured remote' ' + git checkout master && + test_unconfig branch.master.remote && + test_config push.default upstream && + test_commit three && + test_must_fail git push +' + +test_expect_success '"upstream" does not push on unconfigured branch' ' + git checkout master && + test_config branch.master.remote parent1 && + test_unconfig branch.master.merge && + test_config push.default upstream + test_commit four && + test_must_fail git push +' + +test_expect_success '"upstream" does not push when remotes do not match' ' + git checkout master && + test_config branch.master.remote parent1 && + test_config branch.master.merge refs/heads/foo && + test_config push.default upstream && + test_commit five && + test_must_fail git push parent2 +' + +test_done diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh index cc6f081711..c07973ed8d 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -215,12 +215,35 @@ test_expect_success 'push --mirror to repo with alternates' ' git push --mirror "$HTTPD_URL"/smart/alternates-mirror.git ' -test_expect_success TTY 'quiet push' ' +test_expect_success TTY 'push shows progress when stderr is a tty' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit noisy && + test_terminal git push >output 2>&1 && + grep "^Writing objects" output +' + +test_expect_success TTY 'push --quiet silences status and progress' ' cd "$ROOT_PATH"/test_repo_clone && test_commit quiet && - test_terminal git push --quiet --no-progress 2>&1 | tee output && + test_terminal git push --quiet >output 2>&1 && test_cmp /dev/null output ' +test_expect_success TTY 'push --no-progress silences progress but not status' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit no-progress && + test_terminal git push --no-progress >output 2>&1 && + grep "^To http" output && + ! grep "^Writing objects" +' + +test_expect_success 'push --progress shows progress to non-tty' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit progress && + git push --progress >output 2>&1 && + grep "^To http" output && + grep "^Writing objects" output +' + stop_httpd test_done diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index e5e6b8f643..b06f817af3 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -13,17 +13,22 @@ LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'} start_httpd test_expect_success 'setup repository' ' - echo content >file && + echo content1 >file && git add file && git commit -m one + echo content2 >file && + git add file && + git commit -m two ' -test_expect_success 'create http-accessible bare repository' ' - mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && +test_expect_success 'create http-accessible bare repository with loose objects' ' + cp -a .git "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - git --bare init && + git config core.bare true && + mkdir -p hooks && echo "exec git update-server-info" >hooks/post-update && - chmod +x hooks/post-update + chmod +x hooks/post-update && + hooks/post-update ) && git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && git push public master:master diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh index 26d355725f..be6094be77 100755 --- a/t/t5551-http-fetch.sh +++ b/t/t5551-http-fetch.sh @@ -109,5 +109,36 @@ test_expect_success 'follow redirects (302)' ' git clone $HTTPD_URL/smart-redir-temp/repo.git --quiet repo-t ' +test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE + +test_expect_success EXPENSIVE 'create 50,000 tags in the repo' ' + ( + cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + for i in `seq 50000` + do + echo "commit refs/heads/too-many-refs" + echo "mark :$i" + echo "committer git <git@example.com> $i +0000" + echo "data 0" + echo "M 644 inline bla.txt" + echo "data 4" + echo "bla" + # make every commit dangling by always + # rewinding the branch after each commit + echo "reset refs/heads/too-many-refs" + echo "from :1" + done | git fast-import --export-marks=marks && + + # now assign tags to all the dangling commits we created above + tag=$(perl -e "print \"bla\" x 30") && + sed -e "s/^:\(.\+\) \(.\+\)$/\2 refs\/tags\/$tag-\1/" <marks >>packed-refs + ) +' + +test_expect_success EXPENSIVE 'clone the 50,000 tag repo to check OS command line overflow' ' + git clone $HTTPD_URL/smart/repo.git too-many-refs 2>err && + test_line_count = 0 err +' + stop_httpd test_done diff --git a/t/t5800-remote-helpers.sh b/t/t5800-remote-helpers.sh index 1c62001fce..5702334510 100755 --- a/t/t5800-remote-helpers.sh +++ b/t/t5800-remote-helpers.sh @@ -72,6 +72,19 @@ test_expect_success 'pushing to local repo' ' compare_refs localclone HEAD server HEAD ' +# Generally, skip this test. It demonstrates a now-fixed race in +# git-remote-testgit, but is too slow to leave in for general use. +: test_expect_success 'racily pushing to local repo' ' + test_when_finished "rm -rf server2 localclone2" && + cp -a server server2 && + git clone "testgit::${PWD}/server2" localclone2 && + (cd localclone2 && + echo content >>file && + git commit -a -m three && + GIT_REMOTE_TESTGIT_SLEEPY=2 git push) && + compare_refs localclone2 HEAD server2 HEAD +' + test_expect_success 'synch with changes from localclone' ' (cd clone && git pull) diff --git a/t/t6022-merge-rename.sh b/t/t6022-merge-rename.sh index 9d8584e957..1104249182 100755 --- a/t/t6022-merge-rename.sh +++ b/t/t6022-merge-rename.sh @@ -884,4 +884,20 @@ test_expect_success 'no spurious "refusing to lose untracked" message' ' ! grep "refusing to lose untracked file" errors.txt ' +test_expect_success 'do not follow renames for empty files' ' + git checkout -f -b empty-base && + >empty1 && + git add empty1 && + git commit -m base && + echo content >empty1 && + git add empty1 && + git commit -m fill && + git checkout -b empty-topic HEAD^ && + git mv empty1 empty2 && + git commit -m rename && + test_must_fail git merge empty-base && + >expect && + test_cmp expect empty2 +' + test_done diff --git a/t/t6028-merge-up-to-date.sh b/t/t6028-merge-up-to-date.sh index a91644e3b2..c518e9c30c 100755 --- a/t/t6028-merge-up-to-date.sh +++ b/t/t6028-merge-up-to-date.sh @@ -16,7 +16,12 @@ test_expect_success setup ' test_tick && git commit -m second && git tag c1 && - git branch test + git branch test && + echo third >file && + git add file && + test_tick && + git commit -m third && + git tag c2 ' test_expect_success 'merge -s recursive up-to-date' ' @@ -74,4 +79,14 @@ test_expect_success 'merge -s subtree up-to-date' ' ' +test_expect_success 'merge fast-forward octopus' ' + + git reset --hard c0 && + test_tick && + git merge c1 c2 + expect=$(git rev-parse c2) && + current=$(git rev-parse HEAD) && + test "$expect" = "$current" +' + test_done diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh index 800b5368a5..ccfb54de7a 100755 --- a/t/t7300-clean.sh +++ b/t/t7300-clean.sh @@ -399,8 +399,8 @@ test_expect_success SANITY 'removal failure' ' ' test_expect_success 'nested git work tree' ' - rm -fr foo bar && - mkdir foo bar && + rm -fr foo bar baz && + mkdir -p foo bar baz/boo && ( cd foo && git init && @@ -412,15 +412,24 @@ test_expect_success 'nested git work tree' ' cd bar && >goodbye.people ) && + ( + cd baz/boo && + git init && + >deeper.world + git add . && + git commit -a -m deeply.nested + ) && git clean -f -d && test -f foo/.git/index && test -f foo/hello.world && + test -f baz/boo/.git/index && + test -f baz/boo/deeper.world && ! test -d bar ' test_expect_success 'force removal of nested git work tree' ' - rm -fr foo bar && - mkdir foo bar && + rm -fr foo bar baz && + mkdir -p foo bar baz/boo && ( cd foo && git init && @@ -432,9 +441,17 @@ test_expect_success 'force removal of nested git work tree' ' cd bar && >goodbye.people ) && + ( + cd baz/boo && + git init && + >deeper.world + git add . && + git commit -a -m deeply.nested + ) && git clean -f -f -d && ! test -d foo && - ! test -d bar + ! test -d bar && + ! test -d baz ' test_expect_success 'git clean -e' ' diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh index 8bb38337a9..b20ca0eace 100755 --- a/t/t7501-commit.sh +++ b/t/t7501-commit.sh @@ -30,10 +30,12 @@ test_expect_success 'setup: initial commit' ' ' test_expect_success '-m and -F do not mix' ' + git checkout HEAD file && echo >>file && git add file && test_must_fail git commit -m foo -m bar -F file ' test_expect_success '-m and -C do not mix' ' + git checkout HEAD file && echo >>file && git add file && test_must_fail git commit -C HEAD -m illegal ' @@ -79,7 +81,19 @@ test_expect_success 'empty commit message' ' test_must_fail git commit -F msg -a ' +test_expect_success 'template "emptyness" check does not kick in with -F' ' + git checkout HEAD file && echo >>file && git add file && + git commit -t file -F file +' + +test_expect_success 'template "emptyness" check' ' + git checkout HEAD file && echo >>file && git add file && + test_must_fail git commit -t file 2>err && + test_i18ngrep "did not edit" err +' + test_expect_success 'setup: commit message from file' ' + git checkout HEAD file && echo >>file && git add file && echo this is the commit message, coming from a file >msg && git commit -F msg -a ' diff --git a/t/t7503-pre-commit-hook.sh b/t/t7503-pre-commit-hook.sh index ee7f0cd459..984889b39d 100755 --- a/t/t7503-pre-commit-hook.sh +++ b/t/t7503-pre-commit-hook.sh @@ -118,4 +118,22 @@ test_expect_success 'with failing hook requiring GIT_PREFIX' ' git checkout -- file ' +test_expect_success 'check the author in hook' ' + write_script "$HOOK" <<-\EOF && + test "$GIT_AUTHOR_NAME" = "New Author" && + test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com" + EOF + test_must_fail git commit --allow-empty -m "by a.u.thor" && + ( + GIT_AUTHOR_NAME="New Author" && + GIT_AUTHOR_EMAIL="newauthor@example.com" && + export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL && + git commit --allow-empty -m "by new.author via env" && + git show -s + ) && + git commit --author="New Author <newauthor@example.com>" \ + --allow-empty -m "by new.author via command line" && + git show -s +' + test_done diff --git a/t/t7602-merge-octopus-many.sh b/t/t7602-merge-octopus-many.sh index 5783ebf3ab..7117b57ccc 100755 --- a/t/t7602-merge-octopus-many.sh +++ b/t/t7602-merge-octopus-many.sh @@ -70,17 +70,15 @@ test_expect_success 'merge output uses pretty names' ' ' cat >expected <<\EOF -Already up-to-date with c4 -Trying simple merge with c5 -Merge made by the 'octopus' strategy. +Merge made by the 'recursive' strategy. c5.c | 1 + 1 file changed, 1 insertion(+) create mode 100644 c5.c EOF -test_expect_success 'merge up-to-date output uses pretty names' ' - git merge c4 c5 >actual && - test_cmp actual expected +test_expect_success 'merge reduces irrelevant remote heads' ' + GIT_MERGE_VERBOSITY=0 git merge c4 c5 >actual && + test_cmp expected actual ' cat >expected <<\EOF diff --git a/t/t7603-merge-reduce-heads.sh b/t/t7603-merge-reduce-heads.sh index 7e17eb490d..98948955ae 100755 --- a/t/t7603-merge-reduce-heads.sh +++ b/t/t7603-merge-reduce-heads.sh @@ -57,7 +57,36 @@ test_expect_success 'merge c1 with c2, c3, c4, c5' ' test -f c2.c && test -f c3.c && test -f c4.c && - test -f c5.c + test -f c5.c && + git show --format=%s -s >actual && + ! grep c1 actual && + grep c2 actual && + grep c3 actual && + ! grep c4 actual && + grep c5 actual +' + +test_expect_success 'pull c2, c3, c4, c5 into c1' ' + git reset --hard c1 && + git pull . c2 c3 c4 c5 && + test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" && + test "$(git rev-parse c1)" = "$(git rev-parse HEAD^1)" && + test "$(git rev-parse c2)" = "$(git rev-parse HEAD^2)" && + test "$(git rev-parse c3)" = "$(git rev-parse HEAD^3)" && + test "$(git rev-parse c5)" = "$(git rev-parse HEAD^4)" && + git diff --exit-code && + test -f c0.c && + test -f c1.c && + test -f c2.c && + test -f c3.c && + test -f c4.c && + test -f c5.c && + git show --format=%s -s >actual && + ! grep c1 actual && + grep c2 actual && + grep c3 actual && + ! grep c4 actual && + grep c5 actual ' test_expect_success 'setup' ' @@ -113,4 +142,23 @@ test_expect_success 'verify merge result' ' test $(git rev-parse HEAD^1) = $(git rev-parse E2) && test $(git rev-parse HEAD^2) = $(git rev-parse I2) ' + +test_expect_success 'fast-forward to redundant refs' ' + git reset --hard c0 && + git merge c4 c5 +' + +test_expect_success 'verify merge result' ' + test $(git rev-parse HEAD) = $(git rev-parse c5) +' + +test_expect_success 'merge up-to-date redundant refs' ' + git reset --hard c5 && + git merge c0 c4 +' + +test_expect_success 'verify merge result' ' + test $(git rev-parse HEAD) = $(git rev-parse c5) +' + test_done diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 438aaf6b14..924c884860 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -1307,6 +1307,45 @@ test_expect_success \ INPUT_END' test_expect_success \ + 'N: reject foo/ syntax in copy source' \ + 'test_must_fail git fast-import <<-INPUT_END + commit refs/heads/N5C + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + copy with invalid syntax + COMMIT + + from refs/heads/branch^0 + C file2/ file3 + INPUT_END' + +test_expect_success \ + 'N: reject foo/ syntax in rename source' \ + 'test_must_fail git fast-import <<-INPUT_END + commit refs/heads/N5D + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + rename with invalid syntax + COMMIT + + from refs/heads/branch^0 + R file2/ file3 + INPUT_END' + +test_expect_success \ + 'N: reject foo/ syntax in ls argument' \ + 'test_must_fail git fast-import <<-INPUT_END + commit refs/heads/N5E + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + copy with invalid syntax + COMMIT + + from refs/heads/branch^0 + ls "file2/" + INPUT_END' + +test_expect_success \ 'N: copy to root by id and modify' \ 'echo "hello, world" >expect.foo && echo hello >expect.bar && @@ -2596,4 +2635,291 @@ test_expect_success \ 'n=$(grep $a verify | wc -l) && test 1 = $n' +### +### series S +### +# +# Make sure missing spaces and EOLs after mark references +# cause errors. +# +# Setup: +# +# 1--2--4 +# \ / +# -3- +# +# commit marks: 301, 302, 303, 304 +# blob marks: 403, 404, resp. +# note mark: 202 +# +# The error message when a space is missing not at the +# end of the line is: +# +# Missing space after .. +# +# or when extra characters come after the mark at the end +# of the line: +# +# Garbage after .. +# +# or when the dataref is neither "inline " or a known SHA1, +# +# Invalid dataref .. +# +test_tick + +cat >input <<INPUT_END +commit refs/heads/S +mark :301 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +commit 1 +COMMIT +M 100644 inline hello.c +data <<BLOB +blob 1 +BLOB + +commit refs/heads/S +mark :302 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +commit 2 +COMMIT +from :301 +M 100644 inline hello.c +data <<BLOB +blob 2 +BLOB + +blob +mark :403 +data <<BLOB +blob 3 +BLOB + +blob +mark :202 +data <<BLOB +note 2 +BLOB +INPUT_END + +test_expect_success 'S: initialize for S tests' ' + git fast-import --export-marks=marks <input +' + +# +# filemodify, three datarefs +# +test_expect_success 'S: filemodify with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit N + COMMIT + M 100644 :403x hello.c + EOF + cat err && + test_i18ngrep "space after mark" err +' + +# inline is misspelled; fast-import thinks it is some unknown dataref +test_expect_success 'S: filemodify with garbage after inline must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit N + COMMIT + M 100644 inlineX hello.c + data <<BLOB + inline + BLOB + EOF + cat err && + test_i18ngrep "nvalid dataref" err +' + +test_expect_success 'S: filemodify with garbage after sha1 must fail' ' + sha1=$(grep :403 marks | cut -d\ -f2) && + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit N + COMMIT + M 100644 ${sha1}x hello.c + EOF + cat err && + test_i18ngrep "space after SHA1" err +' + +# +# notemodify, three ways to say dataref +# +test_expect_success 'S: notemodify with garabge after mark dataref must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note dataref markref + COMMIT + N :202x :302 + EOF + cat err && + test_i18ngrep "space after mark" err +' + +test_expect_success 'S: notemodify with garbage after inline dataref must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note dataref inline + COMMIT + N inlineX :302 + data <<BLOB + note blob + BLOB + EOF + cat err && + test_i18ngrep "nvalid dataref" err +' + +test_expect_success 'S: notemodify with garbage after sha1 dataref must fail' ' + sha1=$(grep :202 marks | cut -d\ -f2) && + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note dataref sha1 + COMMIT + N ${sha1}x :302 + EOF + cat err && + test_i18ngrep "space after SHA1" err +' + +# +# notemodify, mark in committish +# +test_expect_success 'S: notemodify with garbarge after mark committish must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/Snotes + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note committish + COMMIT + N :202 :302x + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# from +# +test_expect_success 'S: from with garbage after mark must fail' ' + # no && + git fast-import --import-marks=marks --export-marks=marks <<-EOF 2>err + commit refs/heads/S2 + mark :303 + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit 3 + COMMIT + from :301x + M 100644 :403 hello.c + EOF + + ret=$? && + echo returned $ret && + test $ret -ne 0 && # failed, but it created the commit + + # go create the commit, need it for merge test + git fast-import --import-marks=marks --export-marks=marks <<-EOF && + commit refs/heads/S2 + mark :303 + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit 3 + COMMIT + from :301 + M 100644 :403 hello.c + EOF + + # now evaluate the error + cat err && + test_i18ngrep "after mark" err +' + + +# +# merge +# +test_expect_success 'S: merge with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + mark :304 + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + merge 4 + COMMIT + from :302 + merge :303x + M 100644 :403 hello.c + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# tag, from markref +# +test_expect_success 'S: tag with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + tag refs/tags/Stag + from :302x + tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<TAG + tag S + TAG + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# cat-blob markref +# +test_expect_success 'S: cat-blob with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + cat-blob :403x + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# ls markref +# +test_expect_success 'S: ls with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + ls :302x hello.c + EOF + cat err && + test_i18ngrep "space after mark" err +' + +test_expect_success 'S: ls with garbage after sha1 must fail' ' + sha1=$(grep :302 marks | cut -d\ -f2) && + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + ls ${sha1}x hello.c + EOF + cat err && + test_i18ngrep "space after tree-ish" err +' + test_done diff --git a/t/test-lib.sh b/t/test-lib.sh index 30ed4d74bb..9e2b71132a 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -46,7 +46,7 @@ EDITOR=: # /usr/xpg4/bin/sh and /bin/ksh to bail out. So keep the unsets # deriving from the command substitution clustered with the other # ones. -unset VISUAL EMAIL LANGUAGE $(perl -e ' +unset VISUAL EMAIL LANGUAGE COLUMNS $(perl -e ' my @env = keys %ENV; my $ok = join("|", qw( TRACE @@ -615,6 +615,7 @@ case $(uname -s) in ;; esac +( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1 test -z "$NO_PERL" && test_set_prereq PERL test -z "$NO_PYTHON" && test_set_prereq PYTHON test -n "$USE_LIBPCRE" && test_set_prereq LIBPCRE diff --git a/test-subprocess.c b/test-subprocess.c index 8926bc52a9..f2d4c0d22b 100644 --- a/test-subprocess.c +++ b/test-subprocess.c @@ -1,7 +1,7 @@ #include "cache.h" #include "run-command.h" -int main(int argc, char **argv) +int main(int argc, const char **argv) { struct child_process cp; int nogit = 0; @@ -9,12 +9,12 @@ int main(int argc, char **argv) setup_git_directory_gently(&nogit); if (nogit) die("No git repo found"); - if (!strcmp(argv[1], "--setup-work-tree")) { + if (argc > 1 && !strcmp(argv[1], "--setup-work-tree")) { setup_work_tree(); argv++; } memset(&cp, 0, sizeof(cp)); cp.git_cmd = 1; - cp.argv = (const char **)argv+1; + cp.argv = argv + 1; return run_command(&cp); } diff --git a/transport.c b/transport.c index 181f8f24d1..ea9dcb6612 100644 --- a/transport.c +++ b/transport.c @@ -1154,7 +1154,7 @@ int transport_disconnect(struct transport *transport) } /* - * Strip username (and password) from an url and return + * Strip username (and password) from a URL and return * it in a newly allocated string. */ char *transport_anonymize_url(const char *url) |