diff options
74 files changed, 9671 insertions, 668 deletions
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.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.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-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-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.txt b/Documentation/git.txt index ca85d1d210..8527775988 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -44,14 +44,16 @@ 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.10/git.html[documentation for release 1.7.10] +* 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.6/git.html[documentation for release 1.7.9.6] +* 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], @@ -60,9 +62,10 @@ Documentation for older releases are available here: link:RelNotes/1.7.9.1.txt[1.7.9.1], link:RelNotes/1.7.9.txt[1.7.9]. -* link:v1.7.8.5/git.html[documentation for release 1.7.8.5] +* 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], @@ -70,9 +73,10 @@ Documentation for older releases are available here: 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], diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 1f55d3e900..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 +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.1.txt
\ No newline at end of file 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/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 08e01e8a60..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,19 +1337,16 @@ 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) && @@ -1333,7 +1359,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix) 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); @@ -1346,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; @@ -1358,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. @@ -1399,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) @@ -1421,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")); @@ -1492,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; /* @@ -1534,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; } @@ -1560,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) @@ -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) 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); @@ -2061,20 +2125,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 +2150,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 +2336,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 +3146,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 +3517,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 +4414,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) 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 a85275dc68..eed97c8fa9 100644 --- a/fast-import.c +++ b/fast-import.c @@ -2207,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; @@ -2235,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)) { @@ -2407,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); @@ -2430,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); @@ -2537,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); @@ -2572,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); @@ -2735,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); @@ -2867,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); @@ -2944,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; } 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 5812222eb9..454674976e 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-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 ;; *) @@ -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; } @@ -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; } @@ -1,6 +1,14 @@ 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> 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 566c7fdda6..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-16 20:18+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 "" diff --git a/po/pt_PT.po b/po/pt_PT.po index a0e9b0cf40..d28c568c73 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -9,7 +9,7 @@ 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-01 11:26+0100\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" @@ -48,11 +48,11 @@ msgstr "%s %s não é um commit!" #: compat/obstack.c:406 #: compat/obstack.c:408 msgid "memory exhausted" -msgstr "memoria exausta" +msgstr "memória esgotada" #: connected.c:39 msgid "Could not run 'git rev-list'" -msgstr "" +msgstr "Não foi possível executar 'git rev-list'" #: connected.c:48 #, c-format @@ -151,8 +151,8 @@ msgstr "" #, 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] "" +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 @@ -188,7 +188,7 @@ msgstr "" #: builtin/merge.c:1110 #, c-format msgid "Could not write to '%s'" -msgstr "" +msgstr "Não foi possível escrever para '%s'" #: sequencer.c:143 msgid "" @@ -208,7 +208,7 @@ msgstr "" #: sequencer.c:768 #, c-format msgid "Could not write to %s" -msgstr "" +msgstr "Não foi possível gravar para %s" #: sequencer.c:162 #, c-format @@ -235,11 +235,11 @@ msgstr "" #: sequencer.c:298 msgid "Your index file is unmerged." -msgstr "" +msgstr "O seu ficheiro de índice é não fundido." #: sequencer.c:301 msgid "You do not have a valid HEAD" -msgstr "" +msgstr "Você não tem uma HEAD válida" #: sequencer.c:316 #, c-format @@ -266,7 +266,7 @@ msgstr "" #: sequencer.c:343 #, c-format msgid "Cannot get commit message for %s" -msgstr "" +msgstr "Não é possível obter mensagem commit para %s" #: sequencer.c:427 #, c-format @@ -291,7 +291,7 @@ msgstr "" #: sequencer.c:453 msgid "empty commit set passed" -msgstr "" +msgstr "passado commit com o set vazio" #: sequencer.c:461 #, c-format @@ -306,12 +306,12 @@ msgstr "" #: sequencer.c:551 #, c-format msgid "Cannot %s during a %s" -msgstr "" +msgstr "Não foi possível abrir %s durante um %s" #: sequencer.c:573 #, c-format msgid "Could not parse line %d." -msgstr "" +msgstr "Não foi possível parsear linha %d." #: sequencer.c:578 msgid "No commits parsed." @@ -320,12 +320,12 @@ msgstr "Nenhum commit parseado." #: sequencer.c:591 #, c-format msgid "Could not open %s" -msgstr "" +msgstr "Não foi possível abrir %s" #: sequencer.c:595 #, c-format msgid "Could not read %s." -msgstr "" +msgstr "Não foi possível ler %s." #: sequencer.c:602 #, c-format @@ -382,12 +382,12 @@ msgstr "" #: sequencer.c:732 #, c-format msgid "cannot open %s: %s" -msgstr "" +msgstr "não foi possível abrir %s: %s" #: sequencer.c:735 #, c-format msgid "cannot read %s: %s" -msgstr "" +msgstr "não foi possível ler %s: %s" #: sequencer.c:736 msgid "unexpected end of file" @@ -401,7 +401,7 @@ msgstr "" #: sequencer.c:765 #, c-format msgid "Could not format %s." -msgstr "" +msgstr "Não foi possível formatear %s." #: sequencer.c:927 msgid "Can't revert as initial commit" @@ -413,7 +413,7 @@ msgstr "" #: wt-status.c:134 msgid "Unmerged paths:" -msgstr "" +msgstr "caminhos não fundidos:" #: wt-status.c:140 #: wt-status.c:157 @@ -470,31 +470,31 @@ msgstr "erro" #: wt-status.c:212 msgid "both deleted:" -msgstr "" +msgstr "eliminados em ambos:" #: wt-status.c:213 msgid "added by us:" -msgstr "" +msgstr "adicionado por nós:" #: wt-status.c:214 msgid "deleted by them:" -msgstr "" +msgstr "eliminados por eles:" #: wt-status.c:215 msgid "added by them:" -msgstr "" +msgstr "adicionados por eles:" #: wt-status.c:216 msgid "deleted by us:" -msgstr "" +msgstr "eliminados por nós:" #: wt-status.c:217 msgid "both added:" -msgstr "" +msgstr "adicionados em ambos:" #: wt-status.c:218 msgid "both modified:" -msgstr "" +msgstr "modificados em ambos:" #: wt-status.c:248 msgid "new commits, " @@ -502,11 +502,11 @@ msgstr "novos commits, " #: wt-status.c:250 msgid "modified content, " -msgstr "" +msgstr "conteúdo modificado, " #: wt-status.c:252 msgid "untracked content, " -msgstr "" +msgstr "conteúdo não seguido" #: wt-status.c:266 #, c-format @@ -546,7 +546,7 @@ msgstr "desconhecido: %s" #: wt-status.c:287 #, c-format msgid "unmerged: %s" -msgstr "" +msgstr "não fundidos: %s" #: wt-status.c:290 #, c-format @@ -559,7 +559,7 @@ msgstr "Na rama" #: wt-status.c:720 msgid "Not currently on any branch." -msgstr "" +msgstr "Não está em nenhuma rama." #: wt-status.c:731 msgid "Initial commit" @@ -567,7 +567,7 @@ msgstr "Commit inicial" #: wt-status.c:745 msgid "Untracked" -msgstr "" +msgstr "Não seguido" #: wt-status.c:747 msgid "Ignored" @@ -589,7 +589,7 @@ msgstr "Sem mudanças" #: wt-status.c:761 #, c-format msgid "no changes added to commit%s\n" -msgstr "" +msgstr "nenhuma alteração adicionado ao commit%s\n" #: wt-status.c:763 msgid " (use \"git add\" and/or \"git commit -a\")" @@ -652,7 +652,7 @@ msgstr "" #: builtin/add.c:67 #: builtin/commit.c:298 msgid "updating files failed" -msgstr "" +msgstr "Falou a atualização dos ficheiros" #: builtin/add.c:77 #, c-format @@ -682,16 +682,16 @@ msgstr "" #: builtin/add.c:276 msgid "Could not read the index" -msgstr "" +msgstr "Não foi possível ler o indíce" #: builtin/add.c:286 #, c-format msgid "Could not open '%s' for writing." -msgstr "" +msgstr "Não foi possível abrir '%s' para escrever." #: builtin/add.c:290 msgid "Could not write patch" -msgstr "" +msgstr "Não consegue escrever patch" #: builtin/add.c:295 #, c-format @@ -700,12 +700,12 @@ msgstr "" #: builtin/add.c:297 msgid "Empty patch. Aborted." -msgstr "" +msgstr "Patch vazio. Aborted." #: builtin/add.c:303 #, c-format msgid "Could not apply '%s'" -msgstr "" +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" @@ -722,7 +722,7 @@ msgstr "nenhum ficheiros adicionado" #: builtin/add.c:359 msgid "adding files failed" -msgstr "" +msgstr "falhou a adicionar ficheiros" #: builtin/add.c:391 msgid "-A and -u are mutually incompatible" @@ -748,7 +748,7 @@ msgstr "" #: builtin/mv.c:82 #: builtin/rm.c:162 msgid "index file corrupt" -msgstr "" +msgstr "ficheiro index corrupto" #: builtin/add.c:476 #: builtin/mv.c:229 @@ -781,7 +781,7 @@ msgstr "" #: builtin/archive.c:65 #, c-format msgid "remote error: %s" -msgstr "" +msgstr "erro remoto: %s" #: builtin/archive.c:66 msgid "git archive: protocol error" @@ -812,7 +812,7 @@ msgstr "remota" #: builtin/branch.c:171 msgid "cannot use -a with -d" -msgstr "" +msgstr "Não é possível usar -a com um -d" #: builtin/branch.c:177 msgid "Couldn't look up commit object for HEAD" @@ -826,7 +826,7 @@ msgstr "" #: builtin/branch.c:192 #, c-format msgid "%sbranch '%s' not found." -msgstr "" +msgstr "%sbranch '%s' não encontrado." #: builtin/branch.c:200 #, c-format @@ -862,17 +862,17 @@ msgstr "" #: builtin/branch.c:394 #, c-format msgid "behind %d] " -msgstr "" +msgstr "atrás %d] " #: builtin/branch.c:396 #, c-format msgid "ahead %d] " -msgstr "" +msgstr "a frente %d] " #: builtin/branch.c:398 #, c-format msgid "ahead %d, behind %d] " -msgstr "" +msgstr "a frente %d, atrás %d] " #: builtin/branch.c:501 msgid "(no branch)" @@ -889,16 +889,16 @@ msgstr "" #: builtin/branch.c:589 #, c-format msgid "Invalid branch name: '%s'" -msgstr "" +msgstr "Nome da rama inválida: '%s'" #: builtin/branch.c:604 msgid "Branch rename failed" -msgstr "" +msgstr "Falhou renomeação da rama" #: builtin/branch.c:608 #, c-format msgid "Renamed a misnamed branch '%s' away" -msgstr "" +msgstr "Renomeado uma rama erronea '%s'" #: builtin/branch.c:612 #, c-format @@ -986,7 +986,7 @@ msgstr "" #: builtin/checkout.c:234 #: builtin/checkout.c:392 msgid "corrupt index file" -msgstr "" +msgstr "ficheiro index corrupto" #: builtin/checkout.c:264 #: builtin/checkout.c:271 @@ -1038,17 +1038,17 @@ msgstr "" #: builtin/checkout.c:581 #, c-format msgid "Switched to a new branch '%s'\n" -msgstr "" +msgstr "Mudado para a nova rama '%s'\n" #: builtin/checkout.c:583 #, c-format msgid "Switched to branch '%s'\n" -msgstr "" +msgstr "Mudado para a rama '%s'\n" #: builtin/checkout.c:639 #, c-format msgid " ... and %d more.\n" -msgstr "" +msgstr " ... e %d mais.\n" #. The singular version #: builtin/checkout.c:645 @@ -1191,7 +1191,7 @@ msgstr "" #: builtin/clean.c:179 #, c-format msgid "Removing %s\n" -msgstr "" +msgstr "Eliminando %s\n" #: builtin/clean.c:162 #: builtin/clean.c:182 @@ -1271,7 +1271,7 @@ msgstr "" #: builtin/clone.c:639 msgid "Too many arguments." -msgstr "" +msgstr "Demasiados parametros." #: builtin/clone.c:643 msgid "You must specify a repository to clone." @@ -1315,17 +1315,17 @@ msgstr "" #: builtin/clone.c:728 #, c-format msgid "Cloning into bare repository '%s'...\n" -msgstr "" +msgstr "Clonando em um repositorio nu (bare) '%s'...\n" #: builtin/clone.c:730 #, c-format msgid "Cloning into '%s'...\n" -msgstr "" +msgstr "Clonar em '%s'...\n" #: builtin/clone.c:786 #, c-format msgid "Don't know how to clone %s" -msgstr "" +msgstr "Não sei como clonar %s" #: builtin/clone.c:835 #, c-format @@ -1349,6 +1349,16 @@ msgid "" "\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 "" @@ -1386,7 +1396,7 @@ msgstr "" #: builtin/commit.c:373 msgid "interactive add failed" -msgstr "" +msgstr "falhou adicionar interativo" #: builtin/commit.c:406 #: builtin/commit.c:427 @@ -1401,7 +1411,7 @@ msgstr "" #: builtin/commit.c:466 msgid "cannot read the index" -msgstr "" +msgstr "não foi possível ler o indíce" #: builtin/commit.c:486 msgid "unable to write temporary index file" @@ -1442,29 +1452,29 @@ msgstr "" #: builtin/commit.c:688 #, c-format msgid "could not read log file '%s'" -msgstr "" +msgstr "não é possivel ler o ficheiro de log '%s'" #: builtin/commit.c:694 msgid "commit has empty message" -msgstr "" +msgstr "a mensagem do commit está vazia" #: builtin/commit.c:710 msgid "could not read MERGE_MSG" -msgstr "" +msgstr "não é possivel ler MERGE_MSG" #: builtin/commit.c:714 msgid "could not read SQUASH_MSG" -msgstr "" +msgstr "não é possivel ler SQUASH_MSG" #: builtin/commit.c:718 #, c-format msgid "could not read '%s'" -msgstr "" +msgstr "não é possivel ler '%s'" #: builtin/commit.c:746 #, c-format msgid "could not open '%s'" -msgstr "" +msgstr "não é possivel abrir '%s'" #: builtin/commit.c:770 msgid "could not write commit template" @@ -1482,7 +1492,7 @@ msgstr "" #: builtin/commit.c:796 msgid "Please enter the commit message for your changes." -msgstr "" +msgstr "Por favor insira a mensagem de commit das suas alterações." #: builtin/commit.c:799 msgid "" @@ -1538,7 +1548,7 @@ msgstr "" #: builtin/commit.c:1041 msgid "You have nothing to amend." -msgstr "" +msgstr "Você não tem nada a corregir." #: builtin/commit.c:1043 #, c-format @@ -1725,7 +1735,7 @@ msgstr "" #: builtin/describe.c:462 msgid "No names found, cannot describe anything." -msgstr "" +msgstr "Nenhum nome encontrado, não descreve nada." #: builtin/describe.c:482 msgid "--dirty is incompatible with committishes" @@ -1882,7 +1892,7 @@ msgstr "" #: builtin/fetch.c:879 #, c-format msgid "Fetching %s\n" -msgstr "" +msgstr "Baixando %s\n" #: builtin/fetch.c:881 #, c-format @@ -1894,10 +1904,12 @@ 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 "" +msgstr "Você precisa especificar um nome da etiqueta." #: builtin/fetch.c:970 msgid "fetch --all does not take a repository argument" @@ -1919,11 +1931,11 @@ msgstr "" #: builtin/gc.c:63 #, c-format msgid "Invalid %s: '%s'" -msgstr "" +msgstr "Inválido %s: '%s'" #: builtin/gc.c:78 msgid "Too many options specified" -msgstr "" +msgstr "Demasiadas opções especificadas" #: builtin/gc.c:103 #, c-format @@ -2162,7 +2174,7 @@ msgstr "" #: builtin/log.c:507 #, c-format msgid "Unknown type: %d" -msgstr "" +msgstr "Tipo desconhecido: %d" #: builtin/log.c:596 msgid "format.headers without value" @@ -2170,28 +2182,28 @@ msgstr "" #: builtin/log.c:669 msgid "name of output directory is too long" -msgstr "" +msgstr "nome do diretório de saída é demasiado longo" #: builtin/log.c:680 #, c-format msgid "Cannot open patch file %s" -msgstr "" +msgstr "Não é possivel abrir o ficheiro patch %s" #: builtin/log.c:694 msgid "Need exactly one range." -msgstr "" +msgstr "Necessita de exatamente um intervalo." #: builtin/log.c:702 msgid "Not a range." -msgstr "" +msgstr "Não é um intervalo." #: builtin/log.c:739 msgid "Could not extract email from committer identity." -msgstr "" +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 "" +msgstr "Carta de apresentação necessita um modelo de e-mail" #: builtin/log.c:879 #, c-format @@ -2200,7 +2212,7 @@ msgstr "" #: builtin/log.c:952 msgid "Two output directories?" -msgstr "" +msgstr "Dois diretórios de saída?" #: builtin/log.c:1173 #, c-format @@ -2219,7 +2231,7 @@ msgstr "" #: builtin/shortlog.c:284 #, c-format msgid "unrecognized argument: %s" -msgstr "" +msgstr "argumento não reconhecido: %s" #: builtin/log.c:1228 msgid "--name-only does not make sense" @@ -2235,7 +2247,7 @@ msgstr "" #: builtin/log.c:1255 msgid "standard output, or directory, which one?" -msgstr "" +msgstr "saída padrão, ou diretório, qual deles?" #: builtin/log.c:1257 #, c-format @@ -2244,7 +2256,7 @@ msgstr "" #: builtin/log.c:1410 msgid "Failed to create output files" -msgstr "" +msgstr "Falhou ao criar ficheiros de saída" #: builtin/log.c:1514 #, c-format @@ -2270,12 +2282,12 @@ msgstr "" #: builtin/merge.c:129 #, c-format msgid "Available strategies are:" -msgstr "" +msgstr "As estratégias disponíveis são:" #: builtin/merge.c:134 #, c-format msgid "Available custom strategies are:" -msgstr "" +msgstr "Estratégias personalizadas disponíveis são:" #: builtin/merge.c:241 msgid "could not run stash." @@ -2361,7 +2373,7 @@ msgstr "" #: builtin/merge.c:885 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" -msgstr "" +msgstr "Não commitando um merge; usa 'git commit' para completar o merge.\n" #: builtin/merge.c:891 msgid "" @@ -2374,7 +2386,7 @@ msgstr "" #: builtin/merge.c:915 msgid "Empty commit message." -msgstr "" +msgstr "Mensagem de commit vazia." #: builtin/merge.c:927 #, c-format @@ -2502,7 +2514,7 @@ msgstr "" #: builtin/merge.c:1555 #, c-format msgid "Merge with strategy %s failed.\n" -msgstr "" +msgstr "Fundir com a estratégia %s falhou.\n" #: builtin/merge.c:1564 #, c-format @@ -2538,15 +2550,15 @@ msgstr "" #: builtin/mv.c:140 msgid "source directory is empty" -msgstr "" +msgstr "o directorio fonte está vazio" #: builtin/mv.c:171 msgid "not under version control" -msgstr "" +msgstr "não está no controlo de versões" #: builtin/mv.c:173 msgid "destination exists" -msgstr "" +msgstr "existe destino" #: builtin/mv.c:181 #, c-format @@ -2559,7 +2571,7 @@ msgstr "Não consegue subscrever" #: builtin/mv.c:187 msgid "multiple sources for the same target" -msgstr "" +msgstr "múltiplas fontes para o mesmo alvo" #: builtin/mv.c:202 #, c-format @@ -2569,12 +2581,12 @@ msgstr "" #: builtin/mv.c:212 #, c-format msgid "Renaming %s to %s\n" -msgstr "" +msgstr "Mudar de nome %s para %s\n" #: builtin/mv.c:215 #, c-format msgid "renaming '%s' failed" -msgstr "" +msgstr "mudar de nome '%s' falhou" #: builtin/notes.c:139 #, c-format @@ -2672,7 +2684,7 @@ msgstr "" #: builtin/notes.c:377 #, c-format msgid "Bad %s value: '%s'" -msgstr "" +msgstr "Inválido %s valor: '%s'" #: builtin/notes.c:441 #, c-format @@ -2692,13 +2704,13 @@ msgstr "" #: builtin/notes.c:759 #: builtin/notes.c:1033 msgid "too many parameters" -msgstr "" +msgstr "demasiado parametros" #: builtin/notes.c:513 #: builtin/notes.c:772 #, c-format msgid "No note found for object %s." -msgstr "" +msgstr "Nenhuma nota encontrada para o objecto %s." #: builtin/notes.c:580 #, c-format @@ -2755,7 +2767,7 @@ msgstr "" #: builtin/pack-objects.c:2322 #, c-format msgid "option %s does not accept negative form" -msgstr "" +msgstr "opção %s não aceita formato negativo" #: builtin/pack-objects.c:2326 #, c-format @@ -2768,7 +2780,7 @@ msgstr "" #: builtin/push.c:63 msgid "--delete only accepts plain target ref names" -msgstr "" +msgstr "--delete só aceita nomes simples para o ref de destino" #: builtin/push.c:73 #, c-format @@ -2835,7 +2847,7 @@ msgstr "" #: builtin/push.c:176 msgid "--all and --tags are incompatible" -msgstr "" +msgstr "--all e --tags are são incompatíveis" #: builtin/push.c:177 msgid "--all can't be combined with refspecs" @@ -2879,7 +2891,7 @@ msgstr "manter" #: builtin/reset.c:77 msgid "You do not have a valid HEAD." -msgstr "" +msgstr "Não tens a HEAD válida." #: builtin/reset.c:79 msgid "Failed to find tree of HEAD." @@ -2915,7 +2927,7 @@ msgstr "" #: builtin/reset.c:297 #, c-format msgid "Could not parse object '%s'." -msgstr "" +msgstr "Não foi possível analisar objeto '%s'." #: builtin/reset.c:302 msgid "--patch is incompatible with --{hard,mixed,soft}" @@ -3055,7 +3067,7 @@ msgstr "" #: builtin/tag.c:366 msgid "no tag message?" -msgstr "" +msgstr "nenhuma mensaje para a etiqueta?" #: builtin/tag.c:372 #, c-format @@ -3099,7 +3111,7 @@ msgstr "" #: builtin/tag.c:545 #, c-format msgid "tag '%s' already exists" -msgstr "" +msgstr "etiqueta '%s' já existe" #: builtin/tag.c:563 #, c-format @@ -3118,7 +3130,7 @@ msgstr "" #: git-am.sh:49 msgid "You need to set your committer info first" -msgstr "" +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." @@ -3145,7 +3157,7 @@ msgstr "" #: git-am.sh:357 msgid "Patch format detection failed." -msgstr "" +msgstr "Falhou a detecção do formato do patch." #: git-am.sh:411 msgid "-d option is no longer supported. Do not use." @@ -3187,7 +3199,7 @@ msgstr "Aplicando: $FIRSTLINE" #: git-am.sh:840 msgid "No changes -- Patch already applied." -msgstr "" +msgstr "Nenhuma mudança -- Já foi aplicado o patch." #: git-am.sh:866 msgid "applying to an empty history" @@ -3307,7 +3319,7 @@ msgstr "" #: git-pull.sh:257 msgid "Cannot rebase onto multiple branches" -msgstr "" +msgstr "Não é possível fazer rebase com várias ramas" #: git-stash.sh:51 msgid "git stash clear with parameters is unimplemented" @@ -3328,7 +3340,7 @@ msgstr "" #: git-stash.sh:140 msgid "No changes selected" -msgstr "" +msgstr "Não há alterações seleccionadas" #: git-stash.sh:143 msgid "Cannot remove temporary index (can't happen)" @@ -3340,11 +3352,11 @@ msgstr "" #: git-stash.sh:223 msgid "No local changes to save" -msgstr "" +msgstr "Sem alterações locais para guardar" #: git-stash.sh:227 msgid "Cannot initialize stash" -msgstr "" +msgstr "Não é possível inicializar o stash" #: git-stash.sh:235 msgid "Cannot save the current status" @@ -3401,7 +3413,7 @@ msgstr "" #: git-stash.sh:491 #, sh-format msgid "Dropped ${REV} ($s)" -msgstr "" +msgstr "Deixado cair ${REV} ($s)" #: git-stash.sh:492 #, sh-format @@ -3410,7 +3422,7 @@ msgstr "" #: git-stash.sh:499 msgid "No branch name specified" -msgstr "" +msgstr "Nenhum nome para a rama especificado" #: git-stash.sh:570 msgid "(To restore them type \"git stash apply\")" @@ -3469,7 +3481,7 @@ msgstr "" #: git-submodule.sh:347 #, sh-format msgid "Entering '$prefix$path'" -msgstr "" +msgstr "Entrando '$prefix$path'" #: git-submodule.sh:359 #, sh-format diff --git a/po/zh_CN.po b/po/zh_CN.po index 6474739480..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-16 20:18+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" @@ -91,29 +91,29 @@ msgstr "" "发现配置变量 'diff.dirstat' 中的错误:\n" "%s" -#: diff.c:1336 +#: diff.c:1400 msgid " 0 files changed\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" @@ -1452,67 +1452,67 @@ 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 "无效的提交:%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'" -#: 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" -#: 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 "不能读取日志文件 '%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" -#: builtin/commit.c:714 +#: builtin/commit.c:733 msgid "could not read SQUASH_MSG" msgstr "不能读取 SQUASH_MSG" -#: builtin/commit.c:718 +#: builtin/commit.c:737 #, c-format msgid "could not read '%s'" msgstr "不能读取 '%s'" -#: builtin/commit.c:746 +#: builtin/commit.c:765 #, c-format msgid "could not open '%s'" msgstr "不能打开 '%s'" -#: builtin/commit.c:770 +#: builtin/commit.c:789 msgid "could not write commit template" msgstr "不能写提交模版" # 译者:%s若翻为中文,前后不需要空格 -#: builtin/commit.c:783 +#: builtin/commit.c:799 #, c-format msgid "" "\n" @@ -1527,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" @@ -1541,7 +1541,7 @@ msgstr "" "的行将被忽略,并且空的提交说明将会中止提交。\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" @@ -1552,153 +1552,158 @@ msgstr "" "中止提交。\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 "无法读取索引" -#: 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" -#: 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'" -#: 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 "您没有可修补的提交。" # 译者:%s若翻为中文,前后不需要空格 -#: builtin/commit.c:1043 +#: builtin/commit.c:1076 #, c-format msgid "You are in the middle of a %s -- cannot amend." 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 共用。" -#: 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 "聪明... 在索引不干净下修补最后的提交。" -#: builtin/commit.c:1086 +#: builtin/commit.c:1121 msgid "Explicit paths specified without -i nor -o; assuming --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 "不能解析新创建的提交" -#: 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 "不能解析 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'" -#: builtin/commit.c:1459 +#: builtin/commit.c:1494 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "损坏的 MERGE_HEAD 文件(%s)" -#: builtin/commit.c:1466 +#: builtin/commit.c:1501 msgid "could not read MERGE_MODE" msgstr "不能读取 MERGE_MODE" -#: builtin/commit.c:1485 +#: builtin/commit.c:1520 #, c-format msgid "could not read commit message: %s" msgstr "不能读取提交说明:%s" -#: builtin/commit.c:1499 +#: builtin/commit.c:1534 +#, c-format +msgid "Aborting commit; you did not edit the message.\n" +msgstr "终止提交;您未更改来自模版的提交说明。\n" + +#: 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 "无法写提交对象" -#: 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" @@ -2202,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" @@ -2531,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" -#: 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" @@ -2824,7 +2830,7 @@ msgstr "tag 简写没有跟 <tag> 参数" msgid "--delete only accepts plain target ref names" msgstr "--delete 只接受简单的目标引用名" -#: builtin/push.c:73 +#: builtin/push.c:83 #, c-format msgid "" "You are not currently on a branch.\n" @@ -2838,7 +2844,7 @@ msgstr "" "\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" @@ -2851,27 +2857,37 @@ 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\"。" -#: 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" @@ -2882,12 +2898,12 @@ msgstr "" "再次推送前先与远程变更合并(如 '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'" -#: 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 " @@ -2908,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 未接任何引用没有意义" @@ -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..08962214db 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; } 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 f6e44b8be0..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) @@ -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/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/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/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/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/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 0f5b5e5964..924c884860 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -2635,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 |