diff options
115 files changed, 9738 insertions, 744 deletions
diff --git a/Documentation/RelNotes/1.7.10.1.txt b/Documentation/RelNotes/1.7.10.1.txt index 36b8deef19..806a965a1b 100644 --- a/Documentation/RelNotes/1.7.10.1.txt +++ b/Documentation/RelNotes/1.7.10.1.txt @@ -1,12 +1,22 @@ 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. @@ -36,6 +46,21 @@ Fixes since v1.7.10 * 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 @@ -47,4 +72,7 @@ Fixes since v1.7.10 $there using the upstream information to a remote unreleated to $there. + * Giving "--continue" to a conflicted "rebase -i" session skipped a + commit that only results in changes to submodules. + Also contains minor fixes and documentation updates. diff --git a/Documentation/RelNotes/1.7.10.2.txt b/Documentation/RelNotes/1.7.10.2.txt new file mode 100644 index 0000000000..7a7e9d6fd1 --- /dev/null +++ b/Documentation/RelNotes/1.7.10.2.txt @@ -0,0 +1,85 @@ +Git v1.7.10.2 Release Notes +=========================== + +Fixes since v1.7.10.1 +--------------------- + + * The test scaffolding for git-daemon was flaky. + + * The test scaffolding for fast-import was flaky. + + * The filesystem boundary was not correctly reported when .git directory + discovery stopped at a mount point. + + * HTTP transport that requires authentication did not work correctly when + multiple connections are used simultaneously. + + * Minor memory leak during unpack_trees (hence "merge" and "checkout" + to check out another branch) has been plugged. + + * In the older days, the header "Conflicts:" in "cherry-pick" and "merge" + was separated by a blank line from the list of paths that follow for + readability, but when "merge" was rewritten in C, we lost it by + mistake. Remove the newline from "cherry-pick" to make them match + again. + + * The command line parser choked "git cherry-pick $name" when $name can + be both revision name and a pathname, even though $name can never be a + path in the context of the command. + + * The "include.path" facility in the configuration mechanism added in + 1.7.10 forgot to interpret "~/path" and "~user/path" as it should. + + * "git config --rename-section" to rename an existing section into a + bogus one did not check the new name. + + * The "diff --no-index" codepath used limited-length buffers, risking + pathnames getting truncated. Update it to use the strbuf API. + + * The report from "git fetch" said "new branch" even for a non branch + ref. + + * The http-backend (the server side of the smart http transfer) used + to overwrite GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL with the + value obtained from REMOTE_USER unconditionally, making it + impossible for the server side site-specific customization to use + different identity sources to affect the names logged. It now uses + REMOTE_USER only as a fallback value. + + * "log --graph" was not very friendly with "--stat" option and its + output had line breaks at wrong places. + + * Octopus merge strategy did not reduce heads that are recorded in the + final commit correctly. + + * "git push" over smart-http lost progress output a few releases ago; + this release resurrects it. + + * The error and advice messages given by "git push" when it fails due + to non-ff were not very helpful to new users; it has been broken + into three cases, and each is given a separate advice message. + + * The insn sheet given by "rebase -i" did not make it clear that the + insn lines can be re-ordered to affect the order of the commits in + the resulting history. + + * "git repack" used to write out unreachable objects as loose objects + when repacking, even if such loose objects will immediately pruned + due to its age. + + * A contrib script "rerere-train" did not work out of the box unless + user futzed with her $PATH. + + * "git rev-parse --show-prefix" used to emit nothing when run at the + top-level of the working tree, but now it gives a blank line. + + * The i18n of error message "git stash save" was not properly done. + + * "git submodule" used a sed script that some platforms mishandled. + + * When using a Perl script on a system where "perl" found on user's + $PATH could be ancient or otherwise broken, we allow builders to + specify the path to a good copy of Perl with $PERL_PATH. The + gitweb test forgot to use that Perl when running its test. + +Also contains minor fixes and documentation updates. diff --git a/Documentation/config.txt b/Documentation/config.txt index b7d2757d0b..e533df655d 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -95,7 +95,9 @@ included file is expanded immediately, as if its contents had been found at the location of the include directive. If the value of the `include.path` variable is a relative path, the path is considered to be relative to the configuration file in which the include directive was -found. See below for examples. +found. The value of `include.path` is subject to tilde expansion: `{tilde}/` +is expanded to the value of `$HOME`, and `{tilde}user/` to the specified +user's home directory. See below for examples. Example ~~~~~~~ @@ -122,6 +124,7 @@ Example [include] path = /path/to/foo.inc ; include by absolute path path = foo ; expand "foo" relative to the current file + path = ~/foo ; expand "foo" in your $HOME directory Variables ~~~~~~~~~ @@ -138,8 +141,23 @@ advice.*:: + -- pushNonFastForward:: - Advice shown when linkgit:git-push[1] refuses - non-fast-forward refs. + Set this variable to 'false' if you want to disable + 'pushNonFFCurrent', 'pushNonFFDefault', and + 'pushNonFFMatching' simultaneously. + pushNonFFCurrent:: + Advice shown when linkgit:git-push[1] fails due to a + non-fast-forward update to the current branch. + pushNonFFDefault:: + Advice to set 'push.default' to 'upstream' or 'current' + when you ran linkgit:git-push[1] and pushed 'matching + refs' by default (i.e. you did not provide an explicit + refspec, and no 'push.default' configuration was set) + and it resulted in a non-fast-forward error. + pushNonFFMatching:: + Advice shown when you ran linkgit:git-push[1] and pushed + 'matching refs' explicitly (i.e. you used ':', or + specified a refspec that isn't your current branch) and + it resulted in a non-fast-forward error. statusHints:: Directions on how to stage/unstage/add shown in the output of linkgit:git-status[1] and the template shown diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 81b03982e3..3f5d216a09 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -44,11 +44,15 @@ a "true" or "false" string for bool), or '--path', which does some path expansion (see '--path' below). If no type specifier is passed, no checks or transformations are performed on the value. -The file-option can be one of '--system', '--global' or '--file' -which specify where the values will be read from or written to. -The default is to assume the config file of the current repository, -.git/config unless defined otherwise with GIT_DIR and GIT_CONFIG -(see <<FILES>>). +When reading, the values are read from the system, global and +repository local configuration files by default, and options +'--system', '--global', '--local' and '--file <filename>' can be +used to tell the command to read from only that location (see <<FILES>>). + +When writing, the new value is written to the repository local +configuration file by default, and options '--system', '--global', +'--file <filename>' can be used to tell the command to write to +that location (you can say '--local' but that is the default). This command will fail (with exit code ret) if: 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-submodule.txt b/Documentation/git-submodule.txt index c243ee552b..9e488c0aad 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -43,9 +43,9 @@ if you choose to go that route. Submodules are composed from a so-called `gitlink` tree entry in the main repository that refers to a particular commit object within the inner repository that is completely separate. -A record in the `.gitmodules` file at the root of the source -tree assigns a logical name to the submodule and describes -the default URL the submodule shall be cloned from. +A record in the `.gitmodules` (see linkgit:gitmodules[5]) file at the +root of the source tree assigns a logical name to the submodule and +describes the default URL the submodule shall be cloned from. The logical name can be used for overriding this URL within your local repository configuration (see 'submodule init'). @@ -140,7 +140,8 @@ update:: checkout the commit specified in the index of the containing repository. This will make the submodules HEAD be detached unless `--rebase` or `--merge` is specified or the key `submodule.$name.update` is set to - `rebase`, `merge` or `none`. + `rebase`, `merge` or `none`. `none` can be overriden by specifying + `--checkout`. + If the submodule is not yet initialized, and you just want to use the setting as stored in .gitmodules, you can automatically initialize the @@ -148,10 +149,6 @@ submodule with the `--init` option. + If `--recursive` is specified, this command will recurse into the registered submodules, and update any nested submodules within. -+ -If the configuration key `submodule.$name.update` is set to `none` the -submodule with name `$name` will not be updated by default. This can be -overriden by adding `--checkout` to the command. summary:: Show commit summary between the given commit (defaults to HEAD) and diff --git a/Documentation/git.txt b/Documentation/git.txt index c2b523c589..c543213126 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -44,9 +44,11 @@ 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.2/git.html[documentation for release 1.7.10.2] * release notes for + link:RelNotes/1.7.10.2.txt[1.7.10.2], + link:RelNotes/1.7.10.1.txt[1.7.10.1], link:RelNotes/1.7.10.txt[1.7.10]. * link:v1.7.9.7/git.html[documentation for release 1.7.9.7] diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt index 4e1fd52e7d..4effd78902 100644 --- a/Documentation/gitmodules.txt +++ b/Documentation/gitmodules.txt @@ -41,8 +41,11 @@ submodule.<name>.update:: the commit specified in the superproject. If 'merge', the commit specified in the superproject will be merged into the current branch in the submodule. + If 'none', the submodule with name `$name` will not be updated + by default. + This config option is overridden if 'git submodule update' is given - the '--merge' or '--rebase' options. + the '--merge', '--rebase' or '--checkout' options. submodule.<name>.fetchRecurseSubmodules:: This option can be used to control recursive fetching of this diff --git a/Documentation/technical/api-argv-array.txt b/Documentation/technical/api-argv-array.txt index 49b3d52952..1b7d8f140c 100644 --- a/Documentation/technical/api-argv-array.txt +++ b/Documentation/technical/api-argv-array.txt @@ -37,6 +37,11 @@ Functions `argv_array_push`:: Push a copy of a string onto the end of the array. +`argv_array_pushl`:: + Push a list of strings onto the end of the array. The arguments + should be a list of `const char *` strings, terminated by a NULL + argument. + `argv_array_pushf`:: Format a string and push it onto the end of the array. This is a convenience wrapper combining `strbuf_addf` and `argv_array_push`. diff --git a/Documentation/technical/pack-protocol.txt b/Documentation/technical/pack-protocol.txt index 546980c0a4..49cdc571cd 100644 --- a/Documentation/technical/pack-protocol.txt +++ b/Documentation/technical/pack-protocol.txt @@ -351,7 +351,7 @@ Then the server will start sending its packfile data. A simple clone may look like this (with no 'have' lines): ---- - C: 0054want 74730d410fcb6603ace96f1dc55ea6196122532d\0multi_ack \ + C: 0054want 74730d410fcb6603ace96f1dc55ea6196122532d multi_ack \ side-band-64k ofs-delta\n C: 0032want 7d1665144a3a975c05f1f43902ddaf084e784dbe\n C: 0032want 5a3f6be755bbb7deae50065988cbfa1ffa9ab68a\n @@ -367,7 +367,7 @@ A simple clone may look like this (with no 'have' lines): An incremental update (fetch) response might look like this: ---- - C: 0054want 74730d410fcb6603ace96f1dc55ea6196122532d\0multi_ack \ + C: 0054want 74730d410fcb6603ace96f1dc55ea6196122532d multi_ack \ side-band-64k ofs-delta\n C: 0032want 7d1665144a3a975c05f1f43902ddaf084e784dbe\n C: 0032want 5a3f6be755bbb7deae50065988cbfa1ffa9ab68a\n diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 1f55d3e900..1df7b0ff66 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.2 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.1.txt
\ No newline at end of file +Documentation/RelNotes/1.7.10.2.txt
\ No newline at end of file @@ -1,6 +1,9 @@ #include "cache.h" int advice_push_nonfastforward = 1; +int advice_push_non_ff_current = 1; +int advice_push_non_ff_default = 1; +int advice_push_non_ff_matching = 1; int advice_status_hints = 1; int advice_commit_before_merge = 1; int advice_resolve_conflict = 1; @@ -12,6 +15,9 @@ static struct { int *preference; } advice_config[] = { { "pushnonfastforward", &advice_push_nonfastforward }, + { "pushnonffcurrent", &advice_push_non_ff_current }, + { "pushnonffdefault", &advice_push_non_ff_default }, + { "pushnonffmatching", &advice_push_non_ff_matching }, { "statushints", &advice_status_hints }, { "commitbeforemerge", &advice_commit_before_merge }, { "resolveconflict", &advice_resolve_conflict }, @@ -4,6 +4,9 @@ #include "git-compat-util.h" extern int advice_push_nonfastforward; +extern int advice_push_non_ff_current; +extern int advice_push_non_ff_default; +extern int advice_push_non_ff_matching; extern int advice_status_hints; extern int advice_commit_before_merge; extern int advice_resolve_conflict; diff --git a/argv-array.c b/argv-array.c index a4e04201e6..0b5f8898a1 100644 --- a/argv-array.c +++ b/argv-array.c @@ -2,8 +2,7 @@ #include "argv-array.h" #include "strbuf.h" -static const char *empty_argv_storage = NULL; -const char **empty_argv = &empty_argv_storage; +const char *empty_argv[] = { NULL }; void argv_array_init(struct argv_array *array) { @@ -39,6 +38,17 @@ void argv_array_pushf(struct argv_array *array, const char *fmt, ...) argv_array_push_nodup(array, strbuf_detach(&v, NULL)); } +void argv_array_pushl(struct argv_array *array, ...) +{ + va_list ap; + const char *arg; + + va_start(ap, array); + while((arg = va_arg(ap, const char *))) + argv_array_push(array, arg); + va_end(ap); +} + void argv_array_clear(struct argv_array *array) { if (array->argv != empty_argv) { diff --git a/argv-array.h b/argv-array.h index 74dd2b1bc0..b93a69c36c 100644 --- a/argv-array.h +++ b/argv-array.h @@ -1,7 +1,7 @@ #ifndef ARGV_ARRAY_H #define ARGV_ARRAY_H -extern const char **empty_argv; +extern const char *empty_argv[]; struct argv_array { const char **argv; @@ -15,6 +15,7 @@ void argv_array_init(struct argv_array *); void argv_array_push(struct argv_array *, const char *); __attribute__((format (printf,2,3))) void argv_array_pushf(struct argv_array *, const char *fmt, ...); +void argv_array_pushl(struct argv_array *, ...); void argv_array_clear(struct argv_array *); #endif /* ARGV_ARRAY_H */ 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/checkout.c b/builtin/checkout.c index 6b9061f26f..c3647934c7 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -671,10 +671,10 @@ static void suggest_reattach(struct commit *commit, struct rev_info *revs) * HEAD. If it is not reachable from any ref, this is the last chance * for the user to do so without resorting to reflog. */ -static void orphaned_commit_warning(struct commit *commit) +static void orphaned_commit_warning(struct commit *old, struct commit *new) { struct rev_info revs; - struct object *object = &commit->object; + struct object *object = &old->object; struct object_array refs; init_revisions(&revs, NULL); @@ -684,16 +684,17 @@ static void orphaned_commit_warning(struct commit *commit) add_pending_object(&revs, object, sha1_to_hex(object->sha1)); for_each_ref(add_pending_uninteresting_ref, &revs); + add_pending_sha1(&revs, "HEAD", new->object.sha1, UNINTERESTING); refs = revs.pending; revs.leak_pending = 1; if (prepare_revision_walk(&revs)) die(_("internal error in revision walk")); - if (!(commit->object.flags & UNINTERESTING)) - suggest_reattach(commit, &revs); + if (!(old->object.flags & UNINTERESTING)) + suggest_reattach(old, &revs); else - describe_detached_head(_("Previous HEAD position was"), commit); + describe_detached_head(_("Previous HEAD position was"), old); clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS); free(refs.objects); @@ -730,7 +731,7 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new) } if (!opts->quiet && !old.path && old.commit && new->commit != old.commit) - orphaned_commit_warning(old.commit); + orphaned_commit_warning(old.commit, new->commit); update_refs_for_switch(opts, &old, new); @@ -1090,7 +1091,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) if (opts.writeout_stage) die(_("--ours/--theirs is incompatible with switching branches.")); - if (!new.commit) { + if (!new.commit && opts.new_branch) { unsigned char rev[20]; int flag; diff --git a/builtin/clone.c b/builtin/clone.c index bbd5c96237..a4d8d25ee3 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -569,7 +569,7 @@ static int checkout(void) opts.update = 1; opts.merge = 1; opts.fn = oneway_merge; - opts.verbose_update = (option_verbosity > 0); + opts.verbose_update = (option_verbosity >= 0); opts.src_index = &the_index; opts.dst_index = &the_index; 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/gc.c b/builtin/gc.c index 271376d82b..9b4232c8f3 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -14,6 +14,7 @@ #include "cache.h" #include "parse-options.h" #include "run-command.h" +#include "argv-array.h" #define FAILED_RUN "failed to run %s" @@ -28,12 +29,11 @@ static int gc_auto_threshold = 6700; static int gc_auto_pack_limit = 50; static const char *prune_expire = "2.weeks.ago"; -#define MAX_ADD 10 -static const char *argv_pack_refs[] = {"pack-refs", "--all", "--prune", NULL}; -static const char *argv_reflog[] = {"reflog", "expire", "--all", NULL}; -static const char *argv_repack[MAX_ADD] = {"repack", "-d", "-l", NULL}; -static const char *argv_prune[] = {"prune", "--expire", NULL, NULL, NULL}; -static const char *argv_rerere[] = {"rerere", "gc", NULL}; +static struct argv_array pack_refs_cmd = ARGV_ARRAY_INIT; +static struct argv_array reflog = ARGV_ARRAY_INIT; +static struct argv_array repack = ARGV_ARRAY_INIT; +static struct argv_array prune = ARGV_ARRAY_INIT; +static struct argv_array rerere = ARGV_ARRAY_INIT; static int gc_config(const char *var, const char *value, void *cb) { @@ -67,19 +67,6 @@ static int gc_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } -static void append_option(const char **cmd, const char *opt, int max_length) -{ - int i; - - for (i = 0; cmd[i]; i++) - ; - - if (i + 2 >= max_length) - die(_("Too many options specified")); - cmd[i++] = opt; - cmd[i] = NULL; -} - static int too_many_loose_objects(void) { /* @@ -144,6 +131,17 @@ static int too_many_packs(void) return gc_auto_pack_limit <= cnt; } +static void add_repack_all_option(void) +{ + if (prune_expire && !strcmp(prune_expire, "now")) + argv_array_push(&repack, "-a"); + else { + argv_array_push(&repack, "-A"); + if (prune_expire) + argv_array_pushf(&repack, "--unpack-unreachable=%s", prune_expire); + } +} + static int need_to_gc(void) { /* @@ -160,10 +158,7 @@ static int need_to_gc(void) * there is no need. */ if (too_many_packs()) - append_option(argv_repack, - prune_expire && !strcmp(prune_expire, "now") ? - "-a" : "-A", - MAX_ADD); + add_repack_all_option(); else if (!too_many_loose_objects()) return 0; @@ -177,7 +172,6 @@ int cmd_gc(int argc, const char **argv, const char *prefix) int aggressive = 0; int auto_gc = 0; int quiet = 0; - char buf[80]; struct option builtin_gc_options[] = { OPT__QUIET(&quiet, "suppress progress reporting"), @@ -192,6 +186,12 @@ int cmd_gc(int argc, const char **argv, const char *prefix) if (argc == 2 && !strcmp(argv[1], "-h")) usage_with_options(builtin_gc_usage, builtin_gc_options); + argv_array_pushl(&pack_refs_cmd, "pack-refs", "--all", "--prune", NULL); + argv_array_pushl(&reflog, "reflog", "expire", "--all", NULL); + argv_array_pushl(&repack, "repack", "-d", "-l", NULL); + argv_array_pushl(&prune, "prune", "--expire", NULL ); + argv_array_pushl(&rerere, "rerere", "gc", NULL); + git_config(gc_config, NULL); if (pack_refs < 0) @@ -203,15 +203,13 @@ int cmd_gc(int argc, const char **argv, const char *prefix) usage_with_options(builtin_gc_usage, builtin_gc_options); if (aggressive) { - append_option(argv_repack, "-f", MAX_ADD); - append_option(argv_repack, "--depth=250", MAX_ADD); - if (aggressive_window > 0) { - sprintf(buf, "--window=%d", aggressive_window); - append_option(argv_repack, buf, MAX_ADD); - } + argv_array_push(&repack, "-f"); + argv_array_push(&repack, "--depth=250"); + if (aggressive_window > 0) + argv_array_pushf(&repack, "--window=%d", aggressive_window); } if (quiet) - append_option(argv_repack, "-q", MAX_ADD); + argv_array_push(&repack, "-q"); if (auto_gc) { /* @@ -227,30 +225,27 @@ int cmd_gc(int argc, const char **argv, const char *prefix) "run \"git gc\" manually. See " "\"git help gc\" for more information.\n")); } else - append_option(argv_repack, - prune_expire && !strcmp(prune_expire, "now") - ? "-a" : "-A", - MAX_ADD); + add_repack_all_option(); - if (pack_refs && run_command_v_opt(argv_pack_refs, RUN_GIT_CMD)) - return error(FAILED_RUN, argv_pack_refs[0]); + if (pack_refs && run_command_v_opt(pack_refs_cmd.argv, RUN_GIT_CMD)) + return error(FAILED_RUN, pack_refs_cmd.argv[0]); - if (run_command_v_opt(argv_reflog, RUN_GIT_CMD)) - return error(FAILED_RUN, argv_reflog[0]); + if (run_command_v_opt(reflog.argv, RUN_GIT_CMD)) + return error(FAILED_RUN, reflog.argv[0]); - if (run_command_v_opt(argv_repack, RUN_GIT_CMD)) - return error(FAILED_RUN, argv_repack[0]); + if (run_command_v_opt(repack.argv, RUN_GIT_CMD)) + return error(FAILED_RUN, repack.argv[0]); if (prune_expire) { - argv_prune[2] = prune_expire; + argv_array_push(&prune, prune_expire); if (quiet) - argv_prune[3] = "--no-progress"; - if (run_command_v_opt(argv_prune, RUN_GIT_CMD)) - return error(FAILED_RUN, argv_prune[0]); + argv_array_push(&prune, "--no-progress"); + if (run_command_v_opt(prune.argv, RUN_GIT_CMD)) + return error(FAILED_RUN, prune.argv[0]); } - if (run_command_v_opt(argv_rerere, RUN_GIT_CMD)) - return error(FAILED_RUN, argv_rerere[0]); + if (run_command_v_opt(rerere.argv, RUN_GIT_CMD)) + return error(FAILED_RUN, rerere.argv[0]); if (auto_gc && too_many_loose_objects()) warning(_("There are too many unreachable loose objects; " 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/pack-objects.c b/builtin/pack-objects.c index 7b07c092cc..1861093e9d 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -63,6 +63,7 @@ static uint32_t nr_objects, nr_alloc, nr_result, nr_written; static int non_empty; static int reuse_delta = 1, reuse_object = 1; static int keep_unreachable, unpack_unreachable, include_tag; +static unsigned long unpack_unreachable_expiration; static int local; static int incremental; static int ignore_packed_keep; @@ -2249,6 +2250,10 @@ static void loosen_unused_packed_objects(struct rev_info *revs) if (!p->pack_local || p->pack_keep) continue; + if (unpack_unreachable_expiration && + p->mtime < unpack_unreachable_expiration) + continue; + if (open_pack_index(p)) die("cannot open pack index"); @@ -2315,6 +2320,21 @@ static int option_parse_index_version(const struct option *opt, return 0; } +static int option_parse_unpack_unreachable(const struct option *opt, + const char *arg, int unset) +{ + if (unset) { + unpack_unreachable = 0; + unpack_unreachable_expiration = 0; + } + else { + unpack_unreachable = 1; + if (arg) + unpack_unreachable_expiration = approxidate(arg); + } + return 0; +} + static int option_parse_ulong(const struct option *opt, const char *arg, int unset) { @@ -2392,8 +2412,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) "include tag objects that refer to objects to be packed"), OPT_BOOL(0, "keep-unreachable", &keep_unreachable, "keep unreachable objects"), - OPT_BOOL(0, "unpack-unreachable", &unpack_unreachable, - "unpack unreachable objects"), + { OPTION_CALLBACK, 0, "unpack-unreachable", NULL, "time", + "unpack unreachable objects newer than <time>", + PARSE_OPT_OPTARG, option_parse_unpack_unreachable }, OPT_BOOL(0, "thin", &thin, "create thin packs"), OPT_BOOL(0, "honor-pack-keep", &ignore_packed_keep, diff --git a/builtin/push.c b/builtin/push.c index b6c0fee4c6..693671315e 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -24,6 +24,7 @@ static int progress = -1; static const char **refspec; static int refspec_nr; static int refspec_alloc; +static int default_matching_used; static void add_refspec(const char *ref) { @@ -111,6 +112,9 @@ static void setup_default_push_refspecs(struct remote *remote) { switch (push_default) { default: + case PUSH_DEFAULT_UNSPECIFIED: + default_matching_used = 1; + /* fallthru */ case PUSH_DEFAULT_MATCHING: add_refspec(":"); break; @@ -130,6 +134,45 @@ static void setup_default_push_refspecs(struct remote *remote) } } +static const char message_advice_pull_before_push[] = + N_("Updates were rejected because the tip of your current branch is behind\n" + "its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" + "before pushing again.\n" + "See the 'Note about fast-forwards' in 'git push --help' for details."); + +static const char message_advice_use_upstream[] = + N_("Updates were rejected because a pushed branch tip is behind its remote\n" + "counterpart. If you did not intend to push that branch, you may want to\n" + "specify branches to push or set the 'push.default' configuration\n" + "variable to 'current' or 'upstream' to push only the current branch."); + +static const char message_advice_checkout_pull_push[] = + N_("Updates were rejected because a pushed branch tip is behind its remote\n" + "counterpart. Check out this branch and merge the remote changes\n" + "(e.g. 'git pull') before pushing again.\n" + "See the 'Note about fast-forwards' in 'git push --help' for details."); + +static void advise_pull_before_push(void) +{ + if (!advice_push_non_ff_current || !advice_push_nonfastforward) + return; + advise(_(message_advice_pull_before_push)); +} + +static void advise_use_upstream(void) +{ + if (!advice_push_non_ff_default || !advice_push_nonfastforward) + return; + advise(_(message_advice_use_upstream)); +} + +static void advise_checkout_pull_push(void) +{ + if (!advice_push_non_ff_matching || !advice_push_nonfastforward) + return; + advise(_(message_advice_checkout_pull_push)); +} + static int push_with_options(struct transport *transport, int flags) { int err; @@ -151,14 +194,21 @@ static int push_with_options(struct transport *transport, int flags) error(_("failed to push some refs to '%s'"), transport->url); err |= transport_disconnect(transport); - if (!err) return 0; - if (nonfastforward && advice_push_nonfastforward) { - fprintf(stderr, _("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")); + switch (nonfastforward) { + default: + break; + case NON_FF_HEAD: + advise_pull_before_push(); + break; + case NON_FF_OTHER: + if (default_matching_used) + advise_use_upstream(); + else + advise_checkout_pull_push(); + break; } return 1; diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 98d1cbecca..733f626f6c 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -634,6 +634,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) if (!strcmp(arg, "--show-prefix")) { if (prefix) puts(prefix); + else + putchar('\n'); continue; } if (!strcmp(arg, "--show-cdup")) { diff --git a/builtin/revert.c b/builtin/revert.c index e6840f23dc..5462e676e2 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -86,6 +86,7 @@ static void verify_opt_mutually_compatible(const char *me, ...) break; } } + va_end(ap); if (opt1 && opt2) die(_("%s: %s cannot be used with %s"), me, opt1, opt2); @@ -181,12 +182,15 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) if (opts->subcommand != REPLAY_NONE) { opts->revs = NULL; } else { + struct setup_revision_opt s_r_opt; opts->revs = xmalloc(sizeof(*opts->revs)); init_revisions(opts->revs, NULL); opts->revs->no_walk = 1; if (argc < 2) usage_with_options(usage_str, options); - argc = setup_revisions(argc, argv, opts->revs, NULL); + memset(&s_r_opt, 0, sizeof(s_r_opt)); + s_r_opt.assume_dashdash = 1; + argc = setup_revisions(argc, argv, opts->revs, &s_r_opt); } if (argc > 1) diff --git a/builtin/send-pack.c b/builtin/send-pack.c index 9df341c793..d5d7105ba2 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -410,6 +410,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) const char *receivepack = "git-receive-pack"; int flags; int nonfastforward = 0; + int progress = -1; argv++; for (i = 1; i < argc; i++, argv++) { @@ -452,6 +453,14 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) args.verbose = 1; continue; } + if (!strcmp(arg, "--progress")) { + progress = 1; + continue; + } + if (!strcmp(arg, "--no-progress")) { + progress = 0; + continue; + } if (!strcmp(arg, "--thin")) { args.use_thin_pack = 1; continue; @@ -492,6 +501,10 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) } } + if (progress == -1) + progress = !args.quiet && isatty(2); + args.progress = progress; + if (args.stateless_rpc) { conn = NULL; fd[0] = 0; @@ -625,7 +625,8 @@ enum push_default_type { PUSH_DEFAULT_NOTHING = 0, PUSH_DEFAULT_MATCHING, PUSH_DEFAULT_UPSTREAM, - PUSH_DEFAULT_CURRENT + PUSH_DEFAULT_CURRENT, + PUSH_DEFAULT_UNSPECIFIED }; extern enum branch_track git_branch_track; @@ -37,6 +37,11 @@ static int handle_path_include(const char *path, struct config_include_data *inc { int ret = 0; struct strbuf buf = STRBUF_INIT; + char *expanded = expand_user_path(path); + + if (!expanded) + return error("Could not expand include path '%s'", path); + path = expanded; /* * Use an absolute path as-is, but interpret relative paths @@ -63,6 +68,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc inc->depth--; } strbuf_release(&buf); + free(expanded); return ret; } @@ -1552,20 +1558,42 @@ static int section_name_match (const char *buf, const char *name) return 0; } +static int section_name_is_ok(const char *name) +{ + /* Empty section names are bogus. */ + if (!*name) + return 0; + + /* + * Before a dot, we must be alphanumeric or dash. After the first dot, + * anything goes, so we can stop checking. + */ + for (; *name && *name != '.'; name++) + if (*name != '-' && !isalnum(*name)) + return 0; + return 1; +} + /* if new_name == NULL, the section is removed instead */ int git_config_rename_section_in_file(const char *config_filename, const char *old_name, const char *new_name) { int ret = 0, remove = 0; char *filename_buf = NULL; - struct lock_file *lock = xcalloc(sizeof(struct lock_file), 1); + struct lock_file *lock; int out_fd; char buf[1024]; FILE *config_file; + if (new_name && !section_name_is_ok(new_name)) { + ret = error("invalid section name: %s", new_name); + goto out; + } + if (!config_filename) config_filename = filename_buf = git_pathdup("config"); + lock = xcalloc(sizeof(struct lock_file), 1); out_fd = hold_lock_file_for_update(lock, config_filename, 0); if (out_fd < 0) { ret = error("could not lock config file %s", config_filename); diff --git a/contrib/rerere-train.sh b/contrib/rerere-train.sh index 2cfe1b936b..36b6feebe0 100755 --- a/contrib/rerere-train.sh +++ b/contrib/rerere-train.sh @@ -7,7 +7,7 @@ USAGE="$me rev-list-args" SUBDIRECTORY_OK=Yes OPTIONS_SPEC= -. git-sh-setup +. $(git --exec-path)/git-sh-setup require_work_tree cd_to_toplevel diff --git a/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 { @@ -1509,7 +1509,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) */ if (options->stat_width == -1) - width = term_columns(); + width = term_columns() - options->output_prefix_length; else width = options->stat_width ? options->stat_width : 80; @@ -1537,8 +1537,12 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) * Adjust adjustable widths not to exceed maximum width */ if (name_width + number_width + 6 + graph_width > width) { - if (graph_width > width * 3/8 - number_width - 6) + if (graph_width > width * 3/8 - number_width - 6) { graph_width = width * 3/8 - number_width - 6; + if (graph_width < 6) + graph_width = 6; + } + if (options->stat_graph_width && graph_width > options->stat_graph_width) graph_width = options->stat_graph_width; @@ -3540,9 +3544,9 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) else if (!strcmp(arg, "--ignore-space-at-eol")) DIFF_XDL_SET(options, IGNORE_WHITESPACE_AT_EOL); else if (!strcmp(arg, "--patience")) - DIFF_XDL_SET(options, PATIENCE_DIFF); + options->xdl_opts = DIFF_WITH_ALG(options, PATIENCE_DIFF); else if (!strcmp(arg, "--histogram")) - DIFF_XDL_SET(options, HISTOGRAM_DIFF); + options->xdl_opts = DIFF_WITH_ALG(options, HISTOGRAM_DIFF); /* flags options */ else if (!strcmp(arg, "--binary")) { @@ -4414,6 +4418,12 @@ void diff_flush(struct diff_options *options) if (output_format & DIFF_FORMAT_PATCH) { if (separator) { + if (options->output_prefix) { + struct strbuf *msg = NULL; + msg = options->output_prefix(options, + options->output_prefix_data); + fwrite(msg->buf, msg->len, 1, stdout); + } putc(options->line_termination, options->file); if (options->stat_sep) { /* attach patch instead of inline */ @@ -91,6 +91,8 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data) #define DIFF_XDL_SET(opts, flag) ((opts)->xdl_opts |= XDF_##flag) #define DIFF_XDL_CLR(opts, flag) ((opts)->xdl_opts &= ~XDF_##flag) +#define DIFF_WITH_ALG(opts, flag) (((opts)->xdl_opts & ~XDF_DIFF_ALGORITHM_MASK) | XDF_##flag) + enum diff_words_type { DIFF_WORDS_NONE = 0, DIFF_WORDS_PORCELAIN, @@ -150,6 +152,7 @@ struct diff_options { diff_format_fn_t format_callback; void *format_callback_data; diff_prefix_fn_t output_prefix; + int output_prefix_length; void *output_prefix_data; }; diff --git a/environment.c b/environment.c index c93b8f44df..d7e6c65763 100644 --- a/environment.c +++ b/environment.c @@ -52,7 +52,7 @@ enum safe_crlf safe_crlf = SAFE_CRLF_WARN; unsigned whitespace_rule_cfg = WS_DEFAULT_RULE; enum branch_track git_branch_track = BRANCH_TRACK_REMOTE; enum rebase_setup_type autorebase = AUTOREBASE_NEVER; -enum push_default_type push_default = PUSH_DEFAULT_MATCHING; +enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED; #ifndef OBJECT_CREATION_MODE #define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS #endif 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-rebase--interactive.sh b/git-rebase--interactive.sh index 5812222eb9..2e1325824c 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -672,7 +672,7 @@ rearrange_squash () { case "$action" in continue) # do we have anything to commit? - if git diff-index --cached --quiet --ignore-submodules HEAD -- + if git diff-index --cached --quiet HEAD -- then : Nothing to commit -- skip this else @@ -846,6 +846,8 @@ cat >> "$todo" << EOF # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # +# These lines can be re-ordered; they are executed from top to bottom. +# # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # diff --git a/git-relink.perl b/git-relink.perl index e136732cea..f29285c411 100755 --- a/git-relink.perl +++ b/git-relink.perl @@ -1,4 +1,4 @@ -#!/usr/bin/env perl +#!/usr/bin/perl # Copyright 2005, Ryan Anderson <ryan@michonline.com> # Distribution permitted under the GPL v2, as distributed # by the Free Software Foundation. diff --git a/git-remote-testgit.py b/git-remote-testgit.py index 3dc4851cfc..5f3ebd244d 100644 --- a/git-remote-testgit.py +++ b/git-remote-testgit.py @@ -22,6 +22,7 @@ except ImportError: _digest = sha.new import sys import os +import time sys.path.insert(0, os.getenv("GITPYTHONLIB",".")) from git_remote_helpers.util import die, debug, warn @@ -204,6 +205,11 @@ def read_one_line(repo): """Reads and processes one command. """ + sleepy = os.environ.get("GIT_REMOTE_TESTGIT_SLEEPY") + if sleepy: + debug("Sleeping %d sec before readline" % int(sleepy)) + time.sleep(int(sleepy)) + line = sys.stdin.readline() cmdline = line @@ -258,6 +264,7 @@ def main(args): more = True + sys.stdin = os.fdopen(sys.stdin.fileno(), 'r', 0) while (more): more = read_one_line(repo) diff --git a/git-repack.sh b/git-repack.sh index 624feec26f..757933174e 100755 --- a/git-repack.sh +++ b/git-repack.sh @@ -15,6 +15,7 @@ F pass --no-reuse-object to git-pack-objects n do not run git-update-server-info q,quiet be quiet l pass --local to git-pack-objects +unpack-unreachable= with -A, do not loosen objects older than this Packing constraints window= size of the window used for delta compression window-memory= same as the above, but limit memory size instead of entries count @@ -33,6 +34,8 @@ do -a) all_into_one=t ;; -A) all_into_one=t unpack_unreachable=--unpack-unreachable ;; + --unpack-unreachable) + unpack_unreachable="--unpack-unreachable=$2"; shift ;; -d) remove_redundant=t ;; -q) GIT_QUIET=t ;; -f) no_reuse=--no-reuse-delta ;; @@ -76,7 +79,12 @@ case ",$all_into_one," in if test -n "$existing" -a -n "$unpack_unreachable" -a \ -n "$remove_redundant" then - args="$args $unpack_unreachable" + # This may have arbitrary user arguments, so we + # have to protect it against whitespace splitting + # when it gets run as "pack-objects $args" later. + # Fortunately, we know it's an approxidate, so we + # can just use dots instead. + args="$args $(echo "$unpack_unreachable" | tr ' ' .)" fi fi ;; diff --git a/git-stash.sh b/git-stash.sh index fe4ab28b2e..4e2c7f8331 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -199,8 +199,8 @@ save_stash () { # $ git stash save --blah-blah 2>&1 | head -n 2 # error: unknown option for 'stash save': --blah-blah # To provide a message, use git stash save -- '--blah-blah' - eval_gettextln "$("error: unknown option for 'stash save': \$option - To provide a message, use git stash save -- '\$option'")" + eval_gettextln "error: unknown option for 'stash save': \$option + To provide a message, use git stash save -- '\$option'" usage ;; *) diff --git a/git-submodule.sh b/git-submodule.sh index efc86ad4e0..3d94a14079 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -167,10 +167,11 @@ module_clone() a=${a%/} b=${b%/} - rel=$(echo $b | sed -e 's|[^/]*|..|g') + # Turn each leading "*/" component into "../" + rel=$(echo $b | sed -e 's|[^/][^/]*|..|g') echo "gitdir: $rel/$a" >"$path/.git" - rel=$(echo $a | sed -e 's|[^/]*|..|g') + rel=$(echo $a | sed -e 's|[^/][^/]*|..|g') (clear_local_git_env; cd "$path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b") } diff --git a/git-svn.perl b/git-svn.perl index 4334b95f70..ca038ec842 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -1,4 +1,4 @@ -#!/usr/bin/env perl +#!/usr/bin/perl # Copyright (C) 2006, Eric Wong <normalperson@yhbt.net> # License: GPL v2 or later use 5.008; @@ -194,8 +194,10 @@ static struct strbuf *diff_output_prefix_callback(struct diff_options *opt, void struct git_graph *graph = data; static struct strbuf msgbuf = STRBUF_INIT; + assert(opt); assert(graph); + opt->output_prefix_length = graph->width; strbuf_reset(&msgbuf); graph_padding_line(graph, &msgbuf); return &msgbuf; @@ -245,6 +247,7 @@ struct git_graph *graph_init(struct rev_info *opt) */ opt->diffopt.output_prefix = diff_output_prefix_callback; opt->diffopt.output_prefix_data = graph; + opt->diffopt.output_prefix_length = 0; return graph; } @@ -318,7 +318,7 @@ static struct grep_expr *prep_header_patterns(struct grep_opt *opt) if (!opt->header_list) return NULL; - p = opt->header_list; + for (p = opt->header_list; p; p = p->next) { if (p->token != GREP_PATTERN_HEAD) die("bug: a non-header pattern in grep header list."); diff --git a/http-backend.c b/http-backend.c index 869d515383..f50e77fb28 100644 --- a/http-backend.c +++ b/http-backend.c @@ -7,6 +7,7 @@ #include "run-command.h" #include "string-list.h" #include "url.h" +#include "argv-array.h" static const char content_type[] = "Content-Type"; static const char content_length[] = "Content-Length"; @@ -317,8 +318,7 @@ static void run_service(const char **argv) const char *encoding = getenv("HTTP_CONTENT_ENCODING"); const char *user = getenv("REMOTE_USER"); const char *host = getenv("REMOTE_ADDR"); - char *env[3]; - struct strbuf buf = STRBUF_INIT; + struct argv_array env = ARGV_ARRAY_INIT; int gzipped_request = 0; struct child_process cld; @@ -332,17 +332,15 @@ static void run_service(const char **argv) if (!host || !*host) host = "(none)"; - memset(&env, 0, sizeof(env)); - strbuf_addf(&buf, "GIT_COMMITTER_NAME=%s", user); - env[0] = strbuf_detach(&buf, NULL); - - strbuf_addf(&buf, "GIT_COMMITTER_EMAIL=%s@http.%s", user, host); - env[1] = strbuf_detach(&buf, NULL); - env[2] = NULL; + if (!getenv("GIT_COMMITTER_NAME")) + argv_array_pushf(&env, "GIT_COMMITTER_NAME=%s", user); + if (!getenv("GIT_COMMITTER_EMAIL")) + argv_array_pushf(&env, "GIT_COMMITTER_EMAIL=%s@http.%s", + user, host); memset(&cld, 0, sizeof(cld)); cld.argv = argv; - cld.env = (const char *const *)env; + cld.env = env.argv; if (gzipped_request) cld.in = -1; cld.git_cmd = 1; @@ -357,9 +355,7 @@ static void run_service(const char **argv) if (finish_command(&cld)) exit(1); - free(env[0]); - free(env[1]); - strbuf_release(&buf); + argv_array_clear(&env); } static int show_text_ref(const char *name, const unsigned char *sha1, @@ -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; } diff --git a/log-tree.c b/log-tree.c index cea8756866..44f0268372 100644 --- a/log-tree.c +++ b/log-tree.c @@ -682,7 +682,7 @@ void show_log(struct rev_info *opt) if (opt->use_terminator) { if (!opt->missing_newline) graph_show_padding(opt->graph); - putchar('\n'); + putchar(opt->diffopt.line_termination); } strbuf_release(&msgbuf); @@ -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 0fb174359a..680937c39e 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -2069,9 +2069,9 @@ int parse_merge_opt(struct merge_options *o, const char *s) else if (!prefixcmp(s, "subtree=")) o->subtree_shift = s + strlen("subtree="); else if (!strcmp(s, "patience")) - o->xdl_opts |= XDF_PATIENCE_DIFF; + o->xdl_opts = DIFF_WITH_ALG(o, PATIENCE_DIFF); else if (!strcmp(s, "histogram")) - o->xdl_opts |= XDF_HISTOGRAM_DIFF; + o->xdl_opts = DIFF_WITH_ALG(o, HISTOGRAM_DIFF); else if (!strcmp(s, "ignore-space-change")) o->xdl_opts |= XDF_IGNORE_WHITESPACE_CHANGE; else if (!strcmp(s, "ignore-all-space")) @@ -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 未接任何引用没有意义" diff --git a/remote-curl.c b/remote-curl.c index d159fe7f34..04a9d6277d 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -290,6 +290,7 @@ static void output_refs(struct ref *refs) struct rpc_state { const char *service_name; const char **argv; + struct strbuf *stdin_preamble; char *service_url; char *hdr_content_type; char *hdr_accept; @@ -535,6 +536,7 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads) { const char *svc = rpc->service_name; struct strbuf buf = STRBUF_INIT; + struct strbuf *preamble = rpc->stdin_preamble; struct child_process client; int err = 0; @@ -545,6 +547,8 @@ static int rpc_service(struct rpc_state *rpc, struct discovery *heads) client.argv = rpc->argv; if (start_command(&client)) exit(1); + if (preamble) + write_or_die(client.in, preamble->buf, preamble->len); if (heads) write_or_die(client.in, heads->buf, heads->len); @@ -626,13 +630,14 @@ static int fetch_git(struct discovery *heads, int nr_heads, struct ref **to_fetch) { struct rpc_state rpc; + struct strbuf preamble = STRBUF_INIT; char *depth_arg = NULL; - const char **argv; int argc = 0, i, err; + const char *argv[15]; - argv = xmalloc((15 + nr_heads) * sizeof(char*)); argv[argc++] = "fetch-pack"; argv[argc++] = "--stateless-rpc"; + argv[argc++] = "--stdin"; argv[argc++] = "--lock-pack"; if (options.followtags) argv[argc++] = "--include-tag"; @@ -651,24 +656,27 @@ static int fetch_git(struct discovery *heads, argv[argc++] = depth_arg; } argv[argc++] = url; + argv[argc++] = NULL; + for (i = 0; i < nr_heads; i++) { struct ref *ref = to_fetch[i]; if (!ref->name || !*ref->name) die("cannot fetch by sha1 over smart http"); - argv[argc++] = ref->name; + packet_buf_write(&preamble, "%s\n", ref->name); } - argv[argc++] = NULL; + packet_buf_flush(&preamble); memset(&rpc, 0, sizeof(rpc)); rpc.service_name = "git-upload-pack", rpc.argv = argv; + rpc.stdin_preamble = &preamble; rpc.gzip_request = 1; err = rpc_service(&rpc, heads); if (rpc.result.len) safe_write(1, rpc.result.buf, rpc.result.len); strbuf_release(&rpc.result); - free(argv); + strbuf_release(&preamble); free(depth_arg); return err; } @@ -774,6 +782,7 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) argv[argc++] = "--quiet"; else if (options.verbosity > 1) argv[argc++] = "--verbose"; + argv[argc++] = options.progress ? "--progress" : "--no-progress"; argv[argc++] = url; for (i = 0; i < nr_spec; i++) argv[argc++] = specs[i]; diff --git a/revision.c b/revision.c index b3554ed11b..9a0d9c7de2 100644 --- a/revision.c +++ b/revision.c @@ -1715,17 +1715,21 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s submodule = opt->submodule; /* First, search for "--" */ - seen_dashdash = 0; - for (i = 1; i < argc; i++) { - const char *arg = argv[i]; - if (strcmp(arg, "--")) - continue; - argv[i] = NULL; - argc = i; - if (argv[i + 1]) - append_prune_data(&prune_data, argv + i + 1); + if (opt && opt->assume_dashdash) { seen_dashdash = 1; - break; + } else { + seen_dashdash = 0; + for (i = 1; i < argc; i++) { + const char *arg = argv[i]; + if (strcmp(arg, "--")) + continue; + argv[i] = NULL; + argc = i; + if (argv[i + 1]) + append_prune_data(&prune_data, argv + i + 1); + seen_dashdash = 1; + break; + } } /* Second, deal with arguments and options */ diff --git a/revision.h b/revision.h index b8e9223954..1a0838473f 100644 --- a/revision.h +++ b/revision.h @@ -183,6 +183,7 @@ struct setup_revision_opt { const char *def; void (*tweak)(struct rev_info *, struct setup_revision_opt *); const char *submodule; + int assume_dashdash; }; extern void init_revisions(struct rev_info *revs, const char *prefix); diff --git a/sequencer.c b/sequencer.c index 4307364b26..cd11e340dd 100644 --- a/sequencer.c +++ b/sequencer.c @@ -234,7 +234,7 @@ static int do_recursive_merge(struct commit *base, struct commit *next, if (!clean) { int i; - strbuf_addstr(msgbuf, "\nConflicts:\n\n"); + strbuf_addstr(msgbuf, "\nConflicts:\n"); for (i = 0; i < active_nr;) { struct cache_entry *ce = active_cache[i++]; if (ce_stage(ce)) { @@ -569,13 +569,15 @@ static const char *setup_nongit(const char *cwd, int *nongit_ok) return NULL; } -static dev_t get_device_or_die(const char *path, const char *prefix) +static dev_t get_device_or_die(const char *path, const char *prefix, int prefix_len) { struct stat buf; - if (stat(path, &buf)) - die_errno("failed to stat '%s%s%s'", + if (stat(path, &buf)) { + die_errno("failed to stat '%*s%s%s'", + prefix_len, prefix ? prefix : "", prefix ? "/" : "", path); + } return buf.st_dev; } @@ -589,7 +591,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) static char cwd[PATH_MAX+1]; const char *gitdirenv, *ret; char *gitfile; - int len, offset, ceil_offset; + int len, offset, offset_parent, ceil_offset; dev_t current_device = 0; int one_filesystem = 1; @@ -631,7 +633,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) */ one_filesystem = !git_env_bool("GIT_DISCOVERY_ACROSS_FILESYSTEM", 0); if (one_filesystem) - current_device = get_device_or_die(".", NULL); + current_device = get_device_or_die(".", NULL, 0); for (;;) { gitfile = (char*)read_gitfile(DEFAULT_GIT_DIR_ENVIRONMENT); if (gitfile) @@ -653,11 +655,12 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) if (is_git_directory(".")) return setup_bare_git_dir(cwd, offset, len, nongit_ok); - while (--offset > ceil_offset && cwd[offset] != '/'); - if (offset <= ceil_offset) + offset_parent = offset; + while (--offset_parent > ceil_offset && cwd[offset_parent] != '/'); + if (offset_parent <= ceil_offset) return setup_nongit(cwd, nongit_ok); if (one_filesystem) { - dev_t parent_device = get_device_or_die("..", cwd); + dev_t parent_device = get_device_or_die("..", cwd, offset); if (parent_device != current_device) { if (nongit_ok) { if (chdir(cwd)) @@ -666,7 +669,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) return NULL; } cwd[offset] = '\0'; - die("Not a git repository (or any parent up to mount parent %s)\n" + die("Not a git repository (or any parent up to mount point %s)\n" "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).", cwd); } } @@ -674,6 +677,7 @@ static const char *setup_git_directory_gently_1(int *nongit_ok) cwd[offset] = '\0'; die_errno("Cannot change to '%s/..'", cwd); } + offset = offset_parent; } } diff --git a/t/gitweb-lib.sh b/t/gitweb-lib.sh index 21d11d6c2d..ae2dc4604f 100644 --- a/t/gitweb-lib.sh +++ b/t/gitweb-lib.sh @@ -69,7 +69,7 @@ gitweb_run () { # written to web server logs, so we are not interested in that: # we are interested only in properly formatted errors/warnings rm -f gitweb.log && - perl -- "$SCRIPT_NAME" \ + "$PERL_PATH" -- "$SCRIPT_NAME" \ >gitweb.output 2>gitweb.log && perl -w -e ' open O, ">gitweb.headers"; diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh index ef2d01f369..87f0ad8f41 100644 --- a/t/lib-git-daemon.sh +++ b/t/lib-git-daemon.sh @@ -31,19 +31,19 @@ start_git_daemon() { >&3 2>git_daemon_output & GIT_DAEMON_PID=$! { - read line + read line <&7 echo >&4 "$line" - cat >&4 & + cat <&7 >&4 & + } 7<git_daemon_output && - # Check expected output - if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble" - then - kill "$GIT_DAEMON_PID" - wait "$GIT_DAEMON_PID" - trap 'die' EXIT - error "git daemon failed to start" - fi - } <git_daemon_output + # Check expected output + if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble" + then + kill "$GIT_DAEMON_PID" + wait "$GIT_DAEMON_PID" + trap 'die' EXIT + error "git daemon failed to start" + fi } stop_git_daemon() { diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh index f7dc0781d5..094d490893 100644 --- a/t/lib-httpd.sh +++ b/t/lib-httpd.sh @@ -160,6 +160,6 @@ test_http_push_nonff() { ' test_expect_success 'non-fast-forward push shows help message' ' - test_i18ngrep "To prevent you from losing history, non-fast-forward updates were rejected" output + test_i18ngrep "Updates were rejected because" output ' } diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index 3c12b05d60..de3762e247 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -52,8 +52,15 @@ Alias /auth/ www/auth/ <Location /smart_noexport/> SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} </Location> +<Location /smart_custom_env/> + SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} + SetEnv GIT_HTTP_EXPORT_ALL + SetEnv GIT_COMMITTER_NAME "Custom User" + SetEnv GIT_COMMITTER_EMAIL custom@example.com +</Location> ScriptAlias /smart/ ${GIT_EXEC_PATH}/git-http-backend/ ScriptAlias /smart_noexport/ ${GIT_EXEC_PATH}/git-http-backend/ +ScriptAlias /smart_custom_env/ ${GIT_EXEC_PATH}/git-http-backend/ <Directory ${GIT_EXEC_PATH}> Options None </Directory> diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 36e227b3bb..a477453e2e 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -550,6 +550,14 @@ EOF test_expect_success "rename succeeded" "test_cmp expect .git/config" +test_expect_success 'renaming empty section name is rejected' ' + test_must_fail git config --rename-section branch.zwei "" +' + +test_expect_success 'renaming to bogus section is rejected' ' + test_must_fail git config --rename-section branch.zwei "bogus name" +' + cat >> .git/config << EOF [branch "zwei"] a = 1 [branch "vier"] EOF diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh index 4b1cbaa028..a70707620f 100755 --- a/t/t1305-config-include.sh +++ b/t/t1305-config-include.sh @@ -29,6 +29,14 @@ test_expect_success 'chained relative paths' ' test_cmp expect actual ' +test_expect_success 'include paths get tilde-expansion' ' + echo "[test]one = 1" >one && + echo "[include]path = ~/one" >.gitconfig && + echo 1 >expect && + git config test.one >actual && + test_cmp expect actual +' + test_expect_success 'include options can still be examined' ' echo "[test]one = 1" >one && echo "[include]path = one" >.gitconfig && diff --git a/t/t1410-reflog.sh b/t/t1410-reflog.sh index 252fc82837..236b13a3ab 100755 --- a/t/t1410-reflog.sh +++ b/t/t1410-reflog.sh @@ -100,8 +100,7 @@ test_expect_success setup ' check_fsck && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 4 + test_line_count = 4 .git/logs/refs/heads/master ' test_expect_success rewind ' @@ -117,8 +116,7 @@ test_expect_success rewind ' check_have A B C D E F G H I J K L && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 5 + test_line_count = 5 .git/logs/refs/heads/master ' test_expect_success 'corrupt and check' ' @@ -136,8 +134,7 @@ test_expect_success 'reflog expire --dry-run should not touch reflog' ' --stale-fix \ --all && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 5 && + test_line_count = 5 .git/logs/refs/heads/master && check_fsck "missing blob $F" ' @@ -150,8 +147,7 @@ test_expect_success 'reflog expire' ' --stale-fix \ --all && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 2 && + test_line_count = 2 .git/logs/refs/heads/master && check_fsck "dangling commit $K" ' @@ -217,9 +213,7 @@ test_expect_success 'delete' ' test_expect_success 'rewind2' ' test_tick && git reset --hard HEAD~2 && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 4 - + test_line_count = 4 .git/logs/refs/heads/master ' test_expect_success '--expire=never' ' @@ -228,9 +222,7 @@ test_expect_success '--expire=never' ' --expire=never \ --expire-unreachable=never \ --all && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 4 - + test_line_count = 4 .git/logs/refs/heads/master ' test_expect_success 'gc.reflogexpire=never' ' @@ -238,8 +230,7 @@ test_expect_success 'gc.reflogexpire=never' ' git config gc.reflogexpire never && git config gc.reflogexpireunreachable never && git reflog expire --verbose --all && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 4 + test_line_count = 4 .git/logs/refs/heads/master ' test_expect_success 'gc.reflogexpire=false' ' @@ -247,8 +238,7 @@ test_expect_success 'gc.reflogexpire=false' ' git config gc.reflogexpire false && git config gc.reflogexpireunreachable false && git reflog expire --verbose --all && - loglen=$(wc -l <.git/logs/refs/heads/master) && - test $loglen = 4 && + test_line_count = 4 .git/logs/refs/heads/master && git config --unset gc.reflogexpire && git config --unset gc.reflogexpireunreachable diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh index e661147c57..8f36aa9fc4 100755 --- a/t/t1501-worktree.sh +++ b/t/t1501-worktree.sh @@ -68,7 +68,7 @@ test_expect_success 'inside work tree' ' ) ' -test_expect_failure 'empty prefix is actually written out' ' +test_expect_success 'empty prefix is actually written out' ' echo >expected && ( cd work && diff --git a/t/t2004-checkout-cache-temp.sh b/t/t2004-checkout-cache-temp.sh index 36cca14d95..0f4b2896af 100755 --- a/t/t2004-checkout-cache-temp.sh +++ b/t/t2004-checkout-cache-temp.sh @@ -40,7 +40,7 @@ test_expect_success \ rm -f path* .merge_* out .git/index && git read-tree $t1 && git checkout-index --temp -- path1 >out && -test $(wc -l <out) = 1 && +test_line_count = 1 out && test $(cut "-d " -f2 out) = path1 && p=$(cut "-d " -f1 out) && test -f $p && @@ -51,7 +51,7 @@ test_expect_success \ rm -f path* .merge_* out .git/index && git read-tree $t1 && git checkout-index -a --temp >out && -test $(wc -l <out) = 5 && +test_line_count = 5 out && for f in path0 path1 path3 path4 asubdir/path5 do test $(grep $f out | cut "-d " -f2) = $f && @@ -69,7 +69,7 @@ test_expect_success \ 'checkout one stage 2 to temporary file' ' rm -f path* .merge_* out && git checkout-index --stage=2 --temp -- path1 >out && -test $(wc -l <out) = 1 && +test_line_count = 1 out && test $(cut "-d " -f2 out) = path1 && p=$(cut "-d " -f1 out) && test -f $p && @@ -79,7 +79,7 @@ test_expect_success \ 'checkout all stage 2 to temporary files' ' rm -f path* .merge_* out && git checkout-index --all --stage=2 --temp >out && -test $(wc -l <out) = 3 && +test_line_count = 3 out && for f in path1 path2 path4 do test $(grep $f out | cut "-d " -f2) = $f && @@ -92,13 +92,13 @@ test_expect_success \ 'checkout all stages/one file to nothing' ' rm -f path* .merge_* out && git checkout-index --stage=all --temp -- path0 >out && -test $(wc -l <out) = 0' +test_line_count = 0 out' test_expect_success \ 'checkout all stages/one file to temporary files' ' rm -f path* .merge_* out && git checkout-index --stage=all --temp -- path1 >out && -test $(wc -l <out) = 1 && +test_line_count = 1 out && test $(cut "-d " -f2 out) = path1 && cut "-d " -f1 out | (read s1 s2 s3 && test -f $s1 && @@ -112,7 +112,7 @@ test_expect_success \ 'checkout some stages/one file to temporary files' ' rm -f path* .merge_* out && git checkout-index --stage=all --temp -- path2 >out && -test $(wc -l <out) = 1 && +test_line_count = 1 out && test $(cut "-d " -f2 out) = path2 && cut "-d " -f1 out | (read s1 s2 s3 && test $s1 = . && @@ -125,7 +125,7 @@ test_expect_success \ 'checkout all stages/all files to temporary files' ' rm -f path* .merge_* out && git checkout-index -a --stage=all --temp >out && -test $(wc -l <out) = 5' +test_line_count = 5 out' test_expect_success \ '-- path0: no entry' ' @@ -185,7 +185,7 @@ test_expect_success \ 'checkout --temp within subdir' ' (cd asubdir && git checkout-index -a --stage=all >out && - test $(wc -l <out) = 1 && + test_line_count = 1 out && test $(grep path5 out | cut "-d " -f2) = path5 && grep path5 out | cut "-d " -f1 | (read s1 s2 s3 && test -f ../$s1 && @@ -203,7 +203,7 @@ t4=$(git write-tree) && rm -f .git/index && git read-tree $t4 && git checkout-index --temp -a >out && -test $(wc -l <out) = 1 && +test_line_count = 1 out && test $(cut "-d " -f2 out) = a && p=$(cut "-d " -f1 out) && test -f $p && diff --git a/t/t2015-checkout-unborn.sh b/t/t2015-checkout-unborn.sh index 6352b74e2e..37bdcedcc9 100755 --- a/t/t2015-checkout-unborn.sh +++ b/t/t2015-checkout-unborn.sh @@ -46,4 +46,15 @@ test_expect_success 'checking out another branch from unborn state' ' test_cmp expect actual ' +test_expect_success 'checking out in a newly created repo' ' + test_create_repo empty && + ( + cd empty && + git symbolic-ref HEAD >expect && + test_must_fail git checkout && + git symbolic-ref HEAD >actual && + test_cmp expect actual + ) +' + test_done diff --git a/t/t2020-checkout-detach.sh b/t/t2020-checkout-detach.sh index 068fba4c8e..f63333b64e 100755 --- a/t/t2020-checkout-detach.sh +++ b/t/t2020-checkout-detach.sh @@ -11,14 +11,13 @@ check_not_detached () { git symbolic-ref -q HEAD >/dev/null } -ORPHAN_WARNING='you are leaving .* commit.*behind' PREV_HEAD_DESC='Previous HEAD position was' check_orphan_warning() { - test_i18ngrep "$ORPHAN_WARNING" "$1" && + test_i18ngrep "you are leaving $2 behind" "$1" && test_i18ngrep ! "$PREV_HEAD_DESC" "$1" } check_no_orphan_warning() { - test_i18ngrep ! "$ORPHAN_WARNING" "$1" && + test_i18ngrep ! "you are leaving .* commit.*behind" "$1" && test_i18ngrep "$PREV_HEAD_DESC" "$1" } @@ -110,12 +109,24 @@ test_expect_success 'checkout warns on orphan commits' ' git checkout --detach two && echo content >orphan && git add orphan && - git commit -a -m orphan && + git commit -a -m orphan1 && + echo new content >orphan && + git commit -a -m orphan2 && + orphan2=$(git rev-parse HEAD) && git checkout master 2>stderr ' test_expect_success 'checkout warns on orphan commits: output' ' - check_orphan_warning stderr + check_orphan_warning stderr "2 commits" +' + +test_expect_success 'checkout warns orphaning 1 of 2 commits' ' + git checkout "$orphan2" && + git checkout HEAD^ 2>stderr +' + +test_expect_success 'checkout warns orphaning 1 of 2 commits: output' ' + check_orphan_warning stderr "1 commit" ' test_expect_success 'checkout does not warn leaving ref tip' ' diff --git a/t/t2030-unresolve-info.sh b/t/t2030-unresolve-info.sh index cb7effe0a3..f2620650ce 100755 --- a/t/t2030-unresolve-info.sh +++ b/t/t2030-unresolve-info.sh @@ -113,7 +113,7 @@ test_expect_success 'unmerge with plumbing' ' prime_resolve_undo && git update-index --unresolve fi/le && git ls-files -u >actual && - test $(wc -l <actual) = 3 + test_line_count = 3 actual ' test_expect_success 'rerere and rerere forget' ' 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/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh index b38be8e937..a1e86c4097 100755 --- a/t/t3415-rebase-autosquash.sh +++ b/t/t3415-rebase-autosquash.sh @@ -33,7 +33,7 @@ test_auto_fixup () { test_tick && git rebase $2 -i HEAD^^^ && git log --oneline >actual && - test 3 = $(wc -l <actual) && + test_line_count = 3 actual && git diff --exit-code $1 && test 1 = "$(git cat-file blob HEAD^:file1)" && test 1 = $(git cat-file commit HEAD^ | grep first | wc -l) @@ -62,7 +62,7 @@ test_auto_squash () { test_tick && git rebase $2 -i HEAD^^^ && git log --oneline >actual && - test 3 = $(wc -l <actual) && + test_line_count = 3 actual && git diff --exit-code $1 && test 1 = "$(git cat-file blob HEAD^:file1)" && test 2 = $(git cat-file commit HEAD^ | grep first | wc -l) @@ -90,7 +90,7 @@ test_expect_success 'misspelled auto squash' ' test_tick && git rebase --autosquash -i HEAD^^^ && git log --oneline >actual && - test 4 = $(wc -l <actual) && + test_line_count = 4 actual && git diff --exit-code final-missquash && test 0 = $(git rev-list final-missquash...HEAD | wc -l) ' @@ -109,7 +109,7 @@ test_expect_success 'auto squash that matches 2 commits' ' test_tick && git rebase --autosquash -i HEAD~4 && git log --oneline >actual && - test 4 = $(wc -l <actual) && + test_line_count = 4 actual && git diff --exit-code final-multisquash && test 1 = "$(git cat-file blob HEAD^^:file1)" && test 2 = $(git cat-file commit HEAD^^ | grep first | wc -l) && @@ -130,7 +130,7 @@ test_expect_success 'auto squash that matches a commit after the squash' ' test_tick && git rebase --autosquash -i HEAD~4 && git log --oneline >actual && - test 5 = $(wc -l <actual) && + test_line_count = 5 actual && git diff --exit-code final-presquash && test 0 = "$(git cat-file blob HEAD^^:file1)" && test 1 = "$(git cat-file blob HEAD^:file1)" && @@ -147,7 +147,7 @@ test_expect_success 'auto squash that matches a sha1' ' test_tick && git rebase --autosquash -i HEAD^^^ && git log --oneline >actual && - test 3 = $(wc -l <actual) && + test_line_count = 3 actual && git diff --exit-code final-shasquash && test 1 = "$(git cat-file blob HEAD^:file1)" && test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l) @@ -163,7 +163,7 @@ test_expect_success 'auto squash that matches longer sha1' ' test_tick && git rebase --autosquash -i HEAD^^^ && git log --oneline >actual && - test 3 = $(wc -l <actual) && + test_line_count = 3 actual && git diff --exit-code final-longshasquash && test 1 = "$(git cat-file blob HEAD^:file1)" && test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l) @@ -179,7 +179,7 @@ test_auto_commit_flags () { test_tick && git rebase --autosquash -i HEAD^^^ && git log --oneline >actual && - test 3 = $(wc -l <actual) && + test_line_count = 3 actual && git diff --exit-code final-commit-$1 && test 1 = "$(git cat-file blob HEAD^:file1)" && test $2 = $(git cat-file commit HEAD^ | grep first | wc -l) diff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh index d48a7c002d..37ddabba2d 100755 --- a/t/t3900-i18n-commit.sh +++ b/t/t3900-i18n-commit.sh @@ -160,7 +160,7 @@ test_commit_autosquash_flags () { git config --unset-all i18n.commitencoding && git rebase --autosquash -i HEAD^^^ && git log --oneline >actual && - test 3 = $(wc -l <actual) + test_line_count = 3 actual ' } diff --git a/t/t4035-diff-quiet.sh b/t/t4035-diff-quiet.sh index e747e84227..cdb9202f57 100755 --- a/t/t4035-diff-quiet.sh +++ b/t/t4035-diff-quiet.sh @@ -15,65 +15,65 @@ test_expect_success 'setup' ' test_expect_success 'git diff-tree HEAD^ HEAD' ' git diff-tree --quiet HEAD^ HEAD >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt ' test_expect_success 'git diff-tree HEAD^ HEAD -- a' ' git diff-tree --quiet HEAD^ HEAD -- a >cnt - test $? = 0 && test $(wc -l <cnt) = 0 + test $? = 0 && test_line_count = 0 cnt ' test_expect_success 'git diff-tree HEAD^ HEAD -- b' ' git diff-tree --quiet HEAD^ HEAD -- b >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt ' # this diff outputs one line: sha1 of the given head test_expect_success 'echo HEAD | git diff-tree --stdin' ' echo $(git rev-parse HEAD) | git diff-tree --quiet --stdin >cnt - test $? = 1 && test $(wc -l <cnt) = 1 + test $? = 1 && test_line_count = 1 cnt ' test_expect_success 'git diff-tree HEAD HEAD' ' git diff-tree --quiet HEAD HEAD >cnt - test $? = 0 && test $(wc -l <cnt) = 0 + test $? = 0 && test_line_count = 0 cnt ' test_expect_success 'git diff-files' ' git diff-files --quiet >cnt - test $? = 0 && test $(wc -l <cnt) = 0 + test $? = 0 && test_line_count = 0 cnt ' test_expect_success 'git diff-index --cached HEAD' ' git diff-index --quiet --cached HEAD >cnt - test $? = 0 && test $(wc -l <cnt) = 0 + test $? = 0 && test_line_count = 0 cnt ' test_expect_success 'git diff-index --cached HEAD^' ' git diff-index --quiet --cached HEAD^ >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt ' test_expect_success 'git diff-index --cached HEAD^' ' echo text >>b && echo 3 >c && git add . && { git diff-index --quiet --cached HEAD^ >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt } ' test_expect_success 'git diff-tree -Stext HEAD^ HEAD -- b' ' git commit -m "text in b" && { git diff-tree --quiet -Stext HEAD^ HEAD -- b >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt } ' test_expect_success 'git diff-tree -Snot-found HEAD^ HEAD -- b' ' git diff-tree --quiet -Snot-found HEAD^ HEAD -- b >cnt - test $? = 0 && test $(wc -l <cnt) = 0 + test $? = 0 && test_line_count = 0 cnt ' test_expect_success 'git diff-files' ' echo 3 >>c && { git diff-files --quiet >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt } ' test_expect_success 'git diff-index --cached HEAD' ' git update-index c && { git diff-index --quiet --cached HEAD >cnt - test $? = 1 && test $(wc -l <cnt) = 0 + test $? = 1 && test_line_count = 0 cnt } ' diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh index 328aa8f398..ddd94976c2 100755 --- a/t/t4052-stat-output.sh +++ b/t/t4052-stat-output.sh @@ -82,11 +82,15 @@ test_expect_success 'preparation for big change tests' ' cat >expect80 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF - +cat >expect80-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF cat >expect200 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF - +cat >expect200-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF while read verb expect cmd args do test_expect_success "$cmd $verb COLUMNS (big change)" ' @@ -94,6 +98,14 @@ do grep " | " output >actual && test_cmp "$expect" actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb COLUMNS (big change)" ' + COLUMNS=200 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' done <<\EOF ignores expect80 format-patch -1 --stdout respects expect200 diff HEAD^ HEAD --stat @@ -104,7 +116,9 @@ EOF cat >expect40 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++ EOF - +cat >expect40-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++ +EOF while read verb expect cmd args do test_expect_success "$cmd $verb not enough COLUMNS (big change)" ' @@ -113,11 +127,41 @@ do test_cmp "$expect" actual ' + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb not enough COLUMNS (big change)" ' + COLUMNS=40 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' +done <<\EOF +ignores expect80 format-patch -1 --stdout +respects expect40 diff HEAD^ HEAD --stat +respects expect40 show --stat +respects expect40 log -1 --stat +EOF + +cat >expect40 <<'EOF' + abcd | 1000 ++++++++++++++++++++++++++ +EOF +cat >expect40-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++ +EOF +while read verb expect cmd args +do test_expect_success "$cmd $verb statGraphWidth config" ' git -c diff.statGraphWidth=26 $cmd $args >output grep " | " output >actual && test_cmp "$expect" actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb statGraphWidth config" ' + git -c diff.statGraphWidth=26 $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' done <<\EOF ignores expect80 format-patch -1 --stdout respects expect40 diff HEAD^ HEAD --stat @@ -129,6 +173,9 @@ EOF cat >expect <<'EOF' abcd | 1000 ++++++++++++++++++++++++++ EOF +cat >expect-graph <<'EOF' +| abcd | 1000 ++++++++++++++++++++++++++ +EOF while read cmd args do test_expect_success "$cmd --stat=width with big change" ' @@ -143,11 +190,25 @@ do test_cmp expect actual ' - test_expect_success "$cmd --stat-graph--width with big change" ' + test_expect_success "$cmd --stat-graph-width with big change" ' git $cmd $args --stat-graph-width=26 >output grep " | " output >actual && test_cmp expect actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --stat-width=width --graph with big change" ' + git $cmd $args --stat-width=40 --graph >output + grep " | " output >actual && + test_cmp expect-graph actual + ' + + test_expect_success "$cmd --stat-graph-width --graph with big change" ' + git $cmd $args --stat-graph-width=26 --graph >output + grep " | " output >actual && + test_cmp expect-graph actual + ' done <<\EOF format-patch -1 --stdout diff HEAD^ HEAD --stat @@ -164,6 +225,9 @@ test_expect_success 'preparation for long filename tests' ' cat >expect <<'EOF' ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++ EOF +cat >expect-graph <<'EOF' +| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++ +EOF while read cmd args do test_expect_success "$cmd --stat=width with big change is more balanced" ' @@ -171,6 +235,14 @@ do grep " | " output >actual && test_cmp expect actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --stat=width --graph with big change is balanced" ' + git $cmd $args --stat-width=60 --graph >output && + grep " | " output >actual && + test_cmp expect-graph actual + ' done <<\EOF format-patch -1 --stdout diff HEAD^ HEAD --stat @@ -181,9 +253,15 @@ EOF cat >expect80 <<'EOF' ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++ EOF +cat >expect80-graph <<'EOF' +| ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 ++++++++++++++++++++ +EOF cat >expect200 <<'EOF' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF +cat >expect200-graph <<'EOF' +| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF while read verb expect cmd args do test_expect_success "$cmd $verb COLUMNS (long filename)" ' @@ -191,6 +269,14 @@ do grep " | " output >actual && test_cmp "$expect" actual ' + + test "$cmd" != diff || continue + + test_expect_success "$cmd --graph $verb COLUMNS (long filename)" ' + COLUMNS=200 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' done <<\EOF ignores expect80 format-patch -1 --stdout respects expect200 diff HEAD^ HEAD --stat @@ -198,6 +284,36 @@ respects expect200 show --stat respects expect200 log -1 --stat EOF +cat >expect1 <<'EOF' + ...aaaaaaa | 1000 ++++++ +EOF +cat >expect1-graph <<'EOF' +| ...aaaaaaa | 1000 ++++++ +EOF +while read verb expect cmd args +do + test_expect_success COLUMNS_CAN_BE_1 \ + "$cmd $verb prefix greater than COLUMNS (big change)" ' + COLUMNS=1 git $cmd $args >output + grep " | " output >actual && + test_cmp "$expect" actual + ' + + test "$cmd" != diff || continue + + test_expect_success COLUMNS_CAN_BE_1 \ + "$cmd --graph $verb prefix greater than COLUMNS (big change)" ' + COLUMNS=1 git $cmd $args --graph >output + grep " | " output >actual && + test_cmp "$expect-graph" actual + ' +done <<\EOF +ignores expect80 format-patch -1 --stdout +respects expect1 diff HEAD^ HEAD --stat +respects expect1 show --stat +respects expect1 log -1 --stat +EOF + cat >expect <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF diff --git a/t/t4202-log.sh b/t/t4202-log.sh index 222f7559e9..32cf0bd218 100755 --- a/t/t4202-log.sh +++ b/t/t4202-log.sh @@ -516,4 +516,294 @@ test_expect_success 'show added path under "--follow -M"' ' ) ' +cat >expect <<\EOF +* commit COMMIT_OBJECT_NAME +|\ Merge: MERGE_PARENTS +| | Author: A U Thor <author@example.com> +| | +| | Merge HEADS DESCRIPTION +| | +| * commit COMMIT_OBJECT_NAME +| | Author: A U Thor <author@example.com> +| | +| | reach +| | --- +| | reach.t | 1 + +| | 1 file changed, 1 insertion(+) +| | +| | diff --git a/reach.t b/reach.t +| | new file mode 100644 +| | index 0000000..10c9591 +| | --- /dev/null +| | +++ b/reach.t +| | @@ -0,0 +1 @@ +| | +reach +| | +| \ +*-. \ commit COMMIT_OBJECT_NAME +|\ \ \ Merge: MERGE_PARENTS +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | Merge HEADS DESCRIPTION +| | | | +| | * | commit COMMIT_OBJECT_NAME +| | |/ Author: A U Thor <author@example.com> +| | | +| | | octopus-b +| | | --- +| | | octopus-b.t | 1 + +| | | 1 file changed, 1 insertion(+) +| | | +| | | diff --git a/octopus-b.t b/octopus-b.t +| | | new file mode 100644 +| | | index 0000000..d5fcad0 +| | | --- /dev/null +| | | +++ b/octopus-b.t +| | | @@ -0,0 +1 @@ +| | | +octopus-b +| | | +| * | commit COMMIT_OBJECT_NAME +| |/ Author: A U Thor <author@example.com> +| | +| | octopus-a +| | --- +| | octopus-a.t | 1 + +| | 1 file changed, 1 insertion(+) +| | +| | diff --git a/octopus-a.t b/octopus-a.t +| | new file mode 100644 +| | index 0000000..11ee015 +| | --- /dev/null +| | +++ b/octopus-a.t +| | @@ -0,0 +1 @@ +| | +octopus-a +| | +* | commit COMMIT_OBJECT_NAME +|/ Author: A U Thor <author@example.com> +| +| seventh +| --- +| seventh.t | 1 + +| 1 file changed, 1 insertion(+) +| +| diff --git a/seventh.t b/seventh.t +| new file mode 100644 +| index 0000000..9744ffc +| --- /dev/null +| +++ b/seventh.t +| @@ -0,0 +1 @@ +| +seventh +| +* commit COMMIT_OBJECT_NAME +|\ Merge: MERGE_PARENTS +| | Author: A U Thor <author@example.com> +| | +| | Merge branch 'tangle' +| | +| * commit COMMIT_OBJECT_NAME +| |\ Merge: MERGE_PARENTS +| | | Author: A U Thor <author@example.com> +| | | +| | | Merge branch 'side' (early part) into tangle +| | | +| * | commit COMMIT_OBJECT_NAME +| |\ \ Merge: MERGE_PARENTS +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | Merge branch 'master' (early part) into tangle +| | | | +| * | | commit COMMIT_OBJECT_NAME +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | tangle-a +| | | | --- +| | | | tangle-a | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/tangle-a b/tangle-a +| | | | new file mode 100644 +| | | | index 0000000..7898192 +| | | | --- /dev/null +| | | | +++ b/tangle-a +| | | | @@ -0,0 +1 @@ +| | | | +a +| | | | +* | | | commit COMMIT_OBJECT_NAME +|\ \ \ \ Merge: MERGE_PARENTS +| | | | | Author: A U Thor <author@example.com> +| | | | | +| | | | | Merge branch 'side' +| | | | | +| * | | | commit COMMIT_OBJECT_NAME +| | |_|/ Author: A U Thor <author@example.com> +| |/| | +| | | | side-2 +| | | | --- +| | | | 2 | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/2 b/2 +| | | | new file mode 100644 +| | | | index 0000000..0cfbf08 +| | | | --- /dev/null +| | | | +++ b/2 +| | | | @@ -0,0 +1 @@ +| | | | +2 +| | | | +| * | | commit COMMIT_OBJECT_NAME +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | side-1 +| | | | --- +| | | | 1 | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/1 b/1 +| | | | new file mode 100644 +| | | | index 0000000..d00491f +| | | | --- /dev/null +| | | | +++ b/1 +| | | | @@ -0,0 +1 @@ +| | | | +1 +| | | | +* | | | commit COMMIT_OBJECT_NAME +| | | | Author: A U Thor <author@example.com> +| | | | +| | | | Second +| | | | --- +| | | | one | 1 + +| | | | 1 file changed, 1 insertion(+) +| | | | +| | | | diff --git a/one b/one +| | | | new file mode 100644 +| | | | index 0000000..9a33383 +| | | | --- /dev/null +| | | | +++ b/one +| | | | @@ -0,0 +1 @@ +| | | | +case +| | | | +* | | | commit COMMIT_OBJECT_NAME +| |_|/ Author: A U Thor <author@example.com> +|/| | +| | | sixth +| | | --- +| | | a/two | 1 - +| | | 1 file changed, 1 deletion(-) +| | | +| | | diff --git a/a/two b/a/two +| | | deleted file mode 100644 +| | | index 9245af5..0000000 +| | | --- a/a/two +| | | +++ /dev/null +| | | @@ -1 +0,0 @@ +| | | -ni +| | | +* | | commit COMMIT_OBJECT_NAME +| | | Author: A U Thor <author@example.com> +| | | +| | | fifth +| | | --- +| | | a/two | 1 + +| | | 1 file changed, 1 insertion(+) +| | | +| | | diff --git a/a/two b/a/two +| | | new file mode 100644 +| | | index 0000000..9245af5 +| | | --- /dev/null +| | | +++ b/a/two +| | | @@ -0,0 +1 @@ +| | | +ni +| | | +* | | commit COMMIT_OBJECT_NAME +|/ / Author: A U Thor <author@example.com> +| | +| | fourth +| | --- +| | ein | 1 + +| | 1 file changed, 1 insertion(+) +| | +| | diff --git a/ein b/ein +| | new file mode 100644 +| | index 0000000..9d7e69f +| | --- /dev/null +| | +++ b/ein +| | @@ -0,0 +1 @@ +| | +ichi +| | +* | commit COMMIT_OBJECT_NAME +|/ Author: A U Thor <author@example.com> +| +| third +| --- +| ichi | 1 + +| one | 1 - +| 2 files changed, 1 insertion(+), 1 deletion(-) +| +| diff --git a/ichi b/ichi +| new file mode 100644 +| index 0000000..9d7e69f +| --- /dev/null +| +++ b/ichi +| @@ -0,0 +1 @@ +| +ichi +| diff --git a/one b/one +| deleted file mode 100644 +| index 9d7e69f..0000000 +| --- a/one +| +++ /dev/null +| @@ -1 +0,0 @@ +| -ichi +| +* commit COMMIT_OBJECT_NAME +| Author: A U Thor <author@example.com> +| +| second +| --- +| one | 2 +- +| 1 file changed, 1 insertion(+), 1 deletion(-) +| +| diff --git a/one b/one +| index 5626abf..9d7e69f 100644 +| --- a/one +| +++ b/one +| @@ -1 +1 @@ +| -one +| +ichi +| +* commit COMMIT_OBJECT_NAME + Author: A U Thor <author@example.com> + + initial + --- + one | 1 + + 1 file changed, 1 insertion(+) + + diff --git a/one b/one + new file mode 100644 + index 0000000..5626abf + --- /dev/null + +++ b/one + @@ -0,0 +1 @@ + +one +EOF + +sanitize_output () { + sed -e 's/ *$//' \ + -e 's/commit [0-9a-f]*$/commit COMMIT_OBJECT_NAME/' \ + -e 's/Merge: [ 0-9a-f]*$/Merge: MERGE_PARENTS/' \ + -e 's/Merge tag.*/Merge HEADS DESCRIPTION/' \ + -e 's/Merge commit.*/Merge HEADS DESCRIPTION/' \ + -e 's/, 0 deletions(-)//' \ + -e 's/, 0 insertions(+)//' \ + -e 's/ 1 files changed, / 1 file changed, /' \ + -e 's/, 1 deletions(-)/, 1 deletion(-)/' \ + -e 's/, 1 insertions(+)/, 1 insertion(+)/' +} + +test_expect_success 'log --graph with diff and stats' ' + git log --graph --pretty=short --stat -p >actual && + sanitize_output >actual.sanitized <actual && + test_cmp expect actual.sanitized +' + test_done diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh index 2ae9faa8b3..4afd77815f 100755 --- a/t/t4205-log-pretty-formats.sh +++ b/t/t4205-log-pretty-formats.sh @@ -71,4 +71,32 @@ test_expect_success 'alias loop' ' test_must_fail git log --pretty=test-foo ' +test_expect_success 'NUL separation' ' + printf "add bar\0initial" >expected && + git log -z --pretty="format:%s" >actual && + test_cmp expected actual +' + +test_expect_success 'NUL termination' ' + printf "add bar\0initial\0" >expected && + git log -z --pretty="tformat:%s" >actual && + test_cmp expected actual +' + +test_expect_success 'NUL separation with --stat' ' + stat0_part=$(git diff --stat HEAD^ HEAD) && + stat1_part=$(git diff --stat --root HEAD^) && + printf "add bar\n$stat0_part\n\0initial\n$stat1_part\n" >expected && + git log -z --stat --pretty="format:%s" >actual && + test_cmp expected actual +' + +test_expect_failure 'NUL termination with --stat' ' + stat0_part=$(git diff --stat HEAD^ HEAD) && + stat1_part=$(git diff --stat --root HEAD^) && + printf "add bar\n$stat0_part\n\0initial\n$stat1_part\n\0" >expected && + git log -z --stat --pretty="tformat:%s" >actual && + test_cmp expected actual +' + test_done diff --git a/t/t5100-mailinfo.sh b/t/t5100-mailinfo.sh index ebc36c1758..81904d9ec8 100755 --- a/t/t5100-mailinfo.sh +++ b/t/t5100-mailinfo.sh @@ -65,7 +65,7 @@ test_expect_success 'respect NULs' ' git mailsplit -d3 -o. "$TEST_DIRECTORY"/t5100/nul-plain && test_cmp "$TEST_DIRECTORY"/t5100/nul-plain 001 && (cat 001 | git mailinfo msg patch) && - test 4 = $(wc -l < patch) + test_line_count = 4 patch ' 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/t5541-http-push.sh b/t/t5541-http-push.sh index cc6f081711..312e484090 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -30,6 +30,7 @@ test_expect_success 'setup remote repository' ' git clone --bare test_repo test_repo.git && cd test_repo.git && git config http.receivepack true && + git config core.logallrefupdates true && ORIG_HEAD=$(git rev-parse --verify HEAD) && cd - && mv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH" @@ -167,7 +168,7 @@ test_expect_success 'push fails for non-fast-forward refs unmatched by remote he ' test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper: our output' ' - test_i18ngrep "To prevent you from losing history, non-fast-forward updates were rejected" \ + test_i18ngrep "Updates were rejected because" \ output ' @@ -215,12 +216,55 @@ test_expect_success 'push --mirror to repo with alternates' ' git push --mirror "$HTTPD_URL"/smart/alternates-mirror.git ' -test_expect_success TTY 'quiet push' ' +test_expect_success TTY 'push shows progress when stderr is a tty' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit noisy && + test_terminal git push >output 2>&1 && + grep "^Writing objects" output +' + +test_expect_success TTY 'push --quiet silences status and progress' ' cd "$ROOT_PATH"/test_repo_clone && test_commit quiet && - test_terminal git push --quiet --no-progress 2>&1 | tee output && + test_terminal git push --quiet >output 2>&1 && test_cmp /dev/null output ' +test_expect_success TTY 'push --no-progress silences progress but not status' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit no-progress && + test_terminal git push --no-progress >output 2>&1 && + grep "^To http" output && + ! grep "^Writing objects" +' + +test_expect_success 'push --progress shows progress to non-tty' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit progress && + git push --progress >output 2>&1 && + grep "^To http" output && + grep "^Writing objects" output +' + +test_expect_success 'http push gives sane defaults to reflog' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit reflog-test && + git push "$HTTPD_URL"/smart/test_repo.git && + git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \ + log -g -1 --format="%gn <%ge>" >actual && + echo "anonymous <anonymous@http.127.0.0.1>" >expect && + test_cmp expect actual +' + +test_expect_success 'http push respects GIT_COMMITTER_* in reflog' ' + cd "$ROOT_PATH"/test_repo_clone && + test_commit custom-reflog-test && + git push "$HTTPD_URL"/smart_custom_env/test_repo.git && + git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \ + log -g -1 --format="%gn <%ge>" >actual && + echo "Custom User <custom@example.com>" >expect && + test_cmp expect actual +' + stop_httpd test_done diff --git a/t/t5550-http-fetch.sh b/t/t5550-http-fetch.sh index e5e6b8f643..b06f817af3 100755 --- a/t/t5550-http-fetch.sh +++ b/t/t5550-http-fetch.sh @@ -13,17 +13,22 @@ LIB_HTTPD_PORT=${LIB_HTTPD_PORT-'5550'} start_httpd test_expect_success 'setup repository' ' - echo content >file && + echo content1 >file && git add file && git commit -m one + echo content2 >file && + git add file && + git commit -m two ' -test_expect_success 'create http-accessible bare repository' ' - mkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && +test_expect_success 'create http-accessible bare repository with loose objects' ' + cp -a .git "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - git --bare init && + git config core.bare true && + mkdir -p hooks && echo "exec git update-server-info" >hooks/post-update && - chmod +x hooks/post-update + chmod +x hooks/post-update && + hooks/post-update ) && git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && git push public master:master diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh index 26d355725f..be6094be77 100755 --- a/t/t5551-http-fetch.sh +++ b/t/t5551-http-fetch.sh @@ -109,5 +109,36 @@ test_expect_success 'follow redirects (302)' ' git clone $HTTPD_URL/smart-redir-temp/repo.git --quiet repo-t ' +test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE + +test_expect_success EXPENSIVE 'create 50,000 tags in the repo' ' + ( + cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && + for i in `seq 50000` + do + echo "commit refs/heads/too-many-refs" + echo "mark :$i" + echo "committer git <git@example.com> $i +0000" + echo "data 0" + echo "M 644 inline bla.txt" + echo "data 4" + echo "bla" + # make every commit dangling by always + # rewinding the branch after each commit + echo "reset refs/heads/too-many-refs" + echo "from :1" + done | git fast-import --export-marks=marks && + + # now assign tags to all the dangling commits we created above + tag=$(perl -e "print \"bla\" x 30") && + sed -e "s/^:\(.\+\) \(.\+\)$/\2 refs\/tags\/$tag-\1/" <marks >>packed-refs + ) +' + +test_expect_success EXPENSIVE 'clone the 50,000 tag repo to check OS command line overflow' ' + git clone $HTTPD_URL/smart/repo.git too-many-refs 2>err && + test_line_count = 0 err +' + stop_httpd test_done diff --git a/t/t5700-clone-reference.sh b/t/t5700-clone-reference.sh index bbc4691bd7..c47d450cc3 100755 --- a/t/t5700-clone-reference.sh +++ b/t/t5700-clone-reference.sh @@ -34,7 +34,7 @@ test_expect_success 'cloning with reference (-l -s)' \ cd "$base_dir" test_expect_success 'existence of info/alternates' \ -'test `wc -l <C/.git/objects/info/alternates` = 2' +'test_line_count = 2 C/.git/objects/info/alternates' cd "$base_dir" @@ -63,7 +63,7 @@ test_expect_success 'fetched no objects' \ cd "$base_dir" test_expect_success 'existence of info/alternates' \ -'test `wc -l <D/.git/objects/info/alternates` = 1' +'test_line_count = 1 D/.git/objects/info/alternates' cd "$base_dir" diff --git a/t/t5710-info-alternate.sh b/t/t5710-info-alternate.sh index ef7127c1b3..aa045295de 100755 --- a/t/t5710-info-alternate.sh +++ b/t/t5710-info-alternate.sh @@ -18,7 +18,7 @@ reachable_via() { test_valid_repo() { git fsck --full > fsck.log && - test `wc -l < fsck.log` = 0 + test_line_count = 0 fsck.log } base_dir=`pwd` diff --git a/t/t5800-remote-helpers.sh b/t/t5800-remote-helpers.sh index 1c62001fce..5702334510 100755 --- a/t/t5800-remote-helpers.sh +++ b/t/t5800-remote-helpers.sh @@ -72,6 +72,19 @@ test_expect_success 'pushing to local repo' ' compare_refs localclone HEAD server HEAD ' +# Generally, skip this test. It demonstrates a now-fixed race in +# git-remote-testgit, but is too slow to leave in for general use. +: test_expect_success 'racily pushing to local repo' ' + test_when_finished "rm -rf server2 localclone2" && + cp -a server server2 && + git clone "testgit::${PWD}/server2" localclone2 && + (cd localclone2 && + echo content >>file && + git commit -a -m three && + GIT_REMOTE_TESTGIT_SLEEPY=2 git push) && + compare_refs localclone2 HEAD server2 HEAD +' + test_expect_success 'synch with changes from localclone' ' (cd clone && git pull) diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh index 444279077e..a01d244502 100755 --- a/t/t6006-rev-list-format.sh +++ b/t/t6006-rev-list-format.sh @@ -188,23 +188,23 @@ test_expect_success 'empty email' ' test_expect_success 'del LF before empty (1)' ' git show -s --pretty=format:"%s%n%-b%nThanks%n" HEAD^^ >actual && - test $(wc -l <actual) = 2 + test_line_count = 2 actual ' test_expect_success 'del LF before empty (2)' ' git show -s --pretty=format:"%s%n%-b%nThanks%n" HEAD >actual && - test $(wc -l <actual) = 6 && + test_line_count = 6 actual && grep "^$" actual ' test_expect_success 'add LF before non-empty (1)' ' git show -s --pretty=format:"%s%+b%nThanks%n" HEAD^^ >actual && - test $(wc -l <actual) = 2 + test_line_count = 2 actual ' test_expect_success 'add LF before non-empty (2)' ' git show -s --pretty=format:"%s%+b%nThanks%n" HEAD >actual && - test $(wc -l <actual) = 6 && + test_line_count = 6 actual && grep "^$" actual ' @@ -278,8 +278,9 @@ test_expect_success 'oneline with empty message' ' git commit -m "dummy" --allow-empty && git filter-branch --msg-filter "sed -e s/dummy//" HEAD^^.. && git rev-list --oneline HEAD >test.txt && - test $(git rev-list --oneline HEAD | wc -l) -eq 5 && - test $(git rev-list --oneline --graph HEAD | wc -l) -eq 5 + test_line_count = 5 test.txt && + git rev-list --oneline --graph HEAD >testg.txt && + test_line_count = 5 testg.txt ' 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/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh index 691e4a4481..72e28ee535 100755 --- a/t/t6030-bisect-porcelain.sh +++ b/t/t6030-bisect-porcelain.sh @@ -480,7 +480,7 @@ test_expect_success 'many merge bases creation' ' git merge -m "merge HASH7 and SIDE_HASH7" "$HASH7" && B_HASH=$(git rev-parse --verify HEAD) && git merge-base --all "$A_HASH" "$B_HASH" > merge_bases.txt && - test $(wc -l < merge_bases.txt) = "2" && + test_line_count = 2 merge_bases.txt && grep "$HASH5" merge_bases.txt && grep "$SIDE_HASH5" merge_bases.txt ' diff --git a/t/t6032-merge-large-rename.sh b/t/t6032-merge-large-rename.sh index 94f010be8a..15beecc3c6 100755 --- a/t/t6032-merge-large-rename.sh +++ b/t/t6032-merge-large-rename.sh @@ -97,7 +97,7 @@ test_expect_success 'setup large simple rename' ' test_expect_success 'massive simple rename does not spam added files' ' sane_unset GIT_MERGE_VERBOSITY && git merge --no-stat simple-rename | grep -v Removing >output && - test 5 -gt "$(wc -l < output)" + test_line_count -lt 5 output ' test_done diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh index 32591f9413..466fa3804b 100755 --- a/t/t6042-merge-rename-corner-cases.sh +++ b/t/t6042-merge-rename-corner-cases.sh @@ -104,7 +104,7 @@ test_expect_failure 'conflict caused if rename not detected' ' test 0 -eq $(git ls-files -u | wc -l) && test 0 -eq $(git ls-files -o | wc -l) && - test 6 -eq $(wc -l < c) && + test_line_count = 6 c && test $(git rev-parse HEAD:a) = $(git rev-parse B:a) && test $(git rev-parse HEAD:b) = $(git rev-parse A:b) ' diff --git a/t/t7201-co.sh b/t/t7201-co.sh index 07fb53adcb..be9672e5a0 100755 --- a/t/t7201-co.sh +++ b/t/t7201-co.sh @@ -229,7 +229,7 @@ test_expect_success 'checkout to detach HEAD (with advice declined)' ' git checkout -f renamer && git clean -f && git checkout renamer^ 2>messages && test_i18ngrep "HEAD is now at 7329388" messages && - test 1 -eq $(wc -l <messages) && + test_line_count = 1 messages && H=$(git rev-parse --verify HEAD) && M=$(git show-ref -s --verify refs/heads/master) && test "z$H" = "z$M" && @@ -247,7 +247,7 @@ test_expect_success 'checkout to detach HEAD' ' git checkout -f renamer && git clean -f && git checkout renamer^ 2>messages && test_i18ngrep "HEAD is now at 7329388" messages && - test 1 -lt $(wc -l <messages) && + test_line_count -gt 1 messages && H=$(git rev-parse --verify HEAD) && M=$(git show-ref -s --verify refs/heads/master) && test "z$H" = "z$M" && diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index b377a7af28..81827e696f 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -234,7 +234,7 @@ EOF test_expect_success 'status should only print one line' ' git submodule status >lines && - test $(wc -l <lines) = 1 + test_line_count = 1 lines ' test_expect_success 'setup - fetch commit name from submodule' ' diff --git a/t/t7408-submodule-reference.sh b/t/t7408-submodule-reference.sh index ab37c368d0..a45fadc58e 100755 --- a/t/t7408-submodule-reference.sh +++ b/t/t7408-submodule-reference.sh @@ -43,7 +43,7 @@ git commit -m B-super-added' cd "$base_dir" test_expect_success 'after add: existence of info/alternates' \ -'test `wc -l <super/.git/modules/sub/objects/info/alternates` = 1' +'test_line_count = 1 super/.git/modules/sub/objects/info/alternates' cd "$base_dir" @@ -66,7 +66,7 @@ test_expect_success 'update with reference' \ cd "$base_dir" test_expect_success 'after update: existence of info/alternates' \ -'test `wc -l <super-clone/.git/modules/sub/objects/info/alternates` = 1' +'test_line_count = 1 super-clone/.git/modules/sub/objects/info/alternates' cd "$base_dir" diff --git a/t/t7502-commit.sh b/t/t7502-commit.sh index 3f3adc31b9..181456aa9a 100755 --- a/t/t7502-commit.sh +++ b/t/t7502-commit.sh @@ -335,7 +335,7 @@ test_expect_success 'A single-liner subject with a token plus colon is not a foo git reset --hard && git commit -s -m "hello: kitty" --allow-empty && git cat-file commit HEAD | sed -e "1,/^$/d" >actual && - test $(wc -l <actual) = 3 + test_line_count = 3 actual ' 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/t7701-repack-unpack-unreachable.sh b/t/t7701-repack-unpack-unreachable.sh index 200ab61278..b8d4cdea8c 100755 --- a/t/t7701-repack-unpack-unreachable.sh +++ b/t/t7701-repack-unpack-unreachable.sh @@ -95,4 +95,18 @@ test_expect_success 'unpacked objects receive timestamp of pack file' ' compare_mtimes < mtimes ' +test_expect_success 'do not bother loosening old objects' ' + obj1=$(echo one | git hash-object -w --stdin) && + obj2=$(echo two | git hash-object -w --stdin) && + pack1=$(echo $obj1 | git pack-objects .git/objects/pack/pack) && + pack2=$(echo $obj2 | git pack-objects .git/objects/pack/pack) && + git prune-packed && + git cat-file -p $obj1 && + git cat-file -p $obj2 && + test-chmtime =-86400 .git/objects/pack/pack-$pack2.pack && + git repack -A -d --unpack-unreachable=1.hour.ago && + git cat-file -p $obj1 && + test_must_fail git cat-file -p $obj2 +' + test_done diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 0f5b5e5964..7da0e8da7b 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -24,6 +24,13 @@ head_c () { ' - "$1" } +verify_packs () { + for p in .git/objects/pack/*.pack + do + git verify-pack "$@" "$p" || return + done +} + file2_data='file2 second line of EOF' @@ -105,9 +112,10 @@ test_expect_success \ 'A: create pack from stdin' \ 'git fast-import --export-marks=marks.out <input && git whatchanged master' -test_expect_success \ - 'A: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'A: verify pack' ' + verify_packs +' cat >expect <<EOF author $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE @@ -252,9 +260,11 @@ test_expect_success \ 'A: verify marks import does not crash' \ 'git fast-import --import-marks=marks.out <input && git whatchanged verify--import-marks' -test_expect_success \ - 'A: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'A: verify pack' ' + verify_packs +' + cat >expect <<EOF :000000 100755 0000000000000000000000000000000000000000 7123f7f44e39be127c5eb701e5968176ee9d78b1 A copy-of-file2 EOF @@ -514,9 +524,11 @@ test_expect_success \ 'C: incremental import create pack from stdin' \ 'git fast-import <input && git whatchanged branch' -test_expect_success \ - 'C: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'C: verify pack' ' + verify_packs +' + test_expect_success \ 'C: validate reuse existing blob' \ 'test $newf = `git rev-parse --verify branch:file2/newf` && @@ -572,9 +584,10 @@ test_expect_success \ 'D: inline data in commit' \ 'git fast-import <input && git whatchanged branch' -test_expect_success \ - 'D: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'D: verify pack' ' + verify_packs +' cat >expect <<EOF :000000 100755 0000000000000000000000000000000000000000 35a59026a33beac1569b1c7f66f3090ce9c09afc A newdir/exec.sh @@ -618,9 +631,10 @@ test_expect_success 'E: rfc2822 date, --date-format=raw' ' test_expect_success \ 'E: rfc2822 date, --date-format=rfc2822' \ 'git fast-import --date-format=rfc2822 <input' -test_expect_success \ - 'E: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'E: verify pack' ' + verify_packs +' cat >expect <<EOF author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 1170778938 -0500 @@ -669,9 +683,10 @@ test_expect_success \ fi fi ' -test_expect_success \ - 'F: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'F: verify pack' ' + verify_packs +' cat >expect <<EOF tree `git rev-parse branch~1^{tree}` @@ -705,9 +720,11 @@ INPUT_END test_expect_success \ 'G: non-fast-forward update forced' \ 'git fast-import --force <input' -test_expect_success \ - 'G: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'G: verify pack' ' + verify_packs +' + test_expect_success \ 'G: branch changed, but logged' \ 'test $old_branch != `git rev-parse --verify branch^0` && @@ -742,9 +759,10 @@ test_expect_success \ 'H: deletall, add 1' \ 'git fast-import <input && git whatchanged H' -test_expect_success \ - 'H: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'H: verify pack' ' + verify_packs +' cat >expect <<EOF :100755 000000 f1fb5da718392694d0076d677d6d0e364c79b0bc 0000000000000000000000000000000000000000 D file2/newf @@ -1857,9 +1875,10 @@ test_expect_success \ 'Q: commit notes' \ 'git fast-import <input && git whatchanged notes-test' -test_expect_success \ - 'Q: verify pack' \ - 'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done' + +test_expect_success 'Q: verify pack' ' + verify_packs +' commit1=$(git rev-parse notes-test~2) commit2=$(git rev-parse notes-test^) @@ -2616,13 +2635,14 @@ test_expect_success \ 'R: blob bigger than threshold' \ 'test_create_repo R && git --git-dir=R/.git fast-import --big-file-threshold=1 <input' -test_expect_success \ - 'R: verify created pack' \ - ': >verify && - for p in R/.git/objects/pack/*.pack; - do - git verify-pack -v $p >>verify || exit; - done' + +test_expect_success 'R: verify created pack' ' + ( + cd R && + verify_packs -v > ../verify + ) +' + test_expect_success \ 'R: verify written objects' \ 'git --git-dir=R/.git cat-file blob big-file:big1 >actual && @@ -2635,4 +2655,291 @@ test_expect_success \ 'n=$(grep $a verify | wc -l) && test 1 = $n' +### +### series S +### +# +# Make sure missing spaces and EOLs after mark references +# cause errors. +# +# Setup: +# +# 1--2--4 +# \ / +# -3- +# +# commit marks: 301, 302, 303, 304 +# blob marks: 403, 404, resp. +# note mark: 202 +# +# The error message when a space is missing not at the +# end of the line is: +# +# Missing space after .. +# +# or when extra characters come after the mark at the end +# of the line: +# +# Garbage after .. +# +# or when the dataref is neither "inline " or a known SHA1, +# +# Invalid dataref .. +# +test_tick + +cat >input <<INPUT_END +commit refs/heads/S +mark :301 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +commit 1 +COMMIT +M 100644 inline hello.c +data <<BLOB +blob 1 +BLOB + +commit refs/heads/S +mark :302 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +commit 2 +COMMIT +from :301 +M 100644 inline hello.c +data <<BLOB +blob 2 +BLOB + +blob +mark :403 +data <<BLOB +blob 3 +BLOB + +blob +mark :202 +data <<BLOB +note 2 +BLOB +INPUT_END + +test_expect_success 'S: initialize for S tests' ' + git fast-import --export-marks=marks <input +' + +# +# filemodify, three datarefs +# +test_expect_success 'S: filemodify with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit N + COMMIT + M 100644 :403x hello.c + EOF + cat err && + test_i18ngrep "space after mark" err +' + +# inline is misspelled; fast-import thinks it is some unknown dataref +test_expect_success 'S: filemodify with garbage after inline must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit N + COMMIT + M 100644 inlineX hello.c + data <<BLOB + inline + BLOB + EOF + cat err && + test_i18ngrep "nvalid dataref" err +' + +test_expect_success 'S: filemodify with garbage after sha1 must fail' ' + sha1=$(grep :403 marks | cut -d\ -f2) && + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit N + COMMIT + M 100644 ${sha1}x hello.c + EOF + cat err && + test_i18ngrep "space after SHA1" err +' + +# +# notemodify, three ways to say dataref +# +test_expect_success 'S: notemodify with garabge after mark dataref must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note dataref markref + COMMIT + N :202x :302 + EOF + cat err && + test_i18ngrep "space after mark" err +' + +test_expect_success 'S: notemodify with garbage after inline dataref must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note dataref inline + COMMIT + N inlineX :302 + data <<BLOB + note blob + BLOB + EOF + cat err && + test_i18ngrep "nvalid dataref" err +' + +test_expect_success 'S: notemodify with garbage after sha1 dataref must fail' ' + sha1=$(grep :202 marks | cut -d\ -f2) && + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note dataref sha1 + COMMIT + N ${sha1}x :302 + EOF + cat err && + test_i18ngrep "space after SHA1" err +' + +# +# notemodify, mark in committish +# +test_expect_success 'S: notemodify with garbarge after mark committish must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/Snotes + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit S note committish + COMMIT + N :202 :302x + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# from +# +test_expect_success 'S: from with garbage after mark must fail' ' + # no && + git fast-import --import-marks=marks --export-marks=marks <<-EOF 2>err + commit refs/heads/S2 + mark :303 + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit 3 + COMMIT + from :301x + M 100644 :403 hello.c + EOF + + ret=$? && + echo returned $ret && + test $ret -ne 0 && # failed, but it created the commit + + # go create the commit, need it for merge test + git fast-import --import-marks=marks --export-marks=marks <<-EOF && + commit refs/heads/S2 + mark :303 + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + commit 3 + COMMIT + from :301 + M 100644 :403 hello.c + EOF + + # now evaluate the error + cat err && + test_i18ngrep "after mark" err +' + + +# +# merge +# +test_expect_success 'S: merge with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + commit refs/heads/S + mark :304 + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + merge 4 + COMMIT + from :302 + merge :303x + M 100644 :403 hello.c + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# tag, from markref +# +test_expect_success 'S: tag with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + tag refs/tags/Stag + from :302x + tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<TAG + tag S + TAG + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# cat-blob markref +# +test_expect_success 'S: cat-blob with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + cat-blob :403x + EOF + cat err && + test_i18ngrep "after mark" err +' + +# +# ls markref +# +test_expect_success 'S: ls with garbage after mark must fail' ' + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + ls :302x hello.c + EOF + cat err && + test_i18ngrep "space after mark" err +' + +test_expect_success 'S: ls with garbage after sha1 must fail' ' + sha1=$(grep :302 marks | cut -d\ -f2) && + test_must_fail git fast-import --import-marks=marks <<-EOF 2>err && + ls ${sha1}x hello.c + EOF + cat err && + test_i18ngrep "space after tree-ish" err +' + test_done diff --git a/t/t9350-fast-export.sh b/t/t9350-fast-export.sh index 950d0ff498..b00196bd23 100755 --- a/t/t9350-fast-export.sh +++ b/t/t9350-fast-export.sh @@ -86,7 +86,7 @@ test_expect_success 'import/export-marks' ' git checkout -b marks master && git fast-export --export-marks=tmp-marks HEAD && test -s tmp-marks && - test $(wc -l < tmp-marks) -eq 3 && + test_line_count = 3 tmp-marks && test $( git fast-export --import-marks=tmp-marks\ --export-marks=tmp-marks HEAD | @@ -101,7 +101,7 @@ test_expect_success 'import/export-marks' ' grep ^commit\ | wc -l) \ -eq 1 && - test $(wc -l < tmp-marks) -eq 4 + test_line_count = 4 tmp-marks ' diff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh index 9199550ef4..806623e885 100755 --- a/t/t9400-git-cvsserver-server.sh +++ b/t/t9400-git-cvsserver-server.sh @@ -476,14 +476,14 @@ test_expect_success 'cvs status' ' cd cvswork && GIT_CONFIG="$git_config" cvs update && GIT_CONFIG="$git_config" cvs status | grep "^File: status.file" >../out && - test $(wc -l <../out) = 2 + test_line_count = 2 ../out ' cd "$WORKDIR" test_expect_success 'cvs status (nonrecursive)' ' cd cvswork && GIT_CONFIG="$git_config" cvs status -l | grep "^File: status.file" >../out && - test $(wc -l <../out) = 1 + test_line_count = 1 ../out ' cd "$WORKDIR" @@ -500,8 +500,8 @@ test_expect_success 'cvs status (no subdirs in header)' ' cd "$WORKDIR" test_expect_success 'cvs co -c (shows module database)' ' GIT_CONFIG="$git_config" cvs co -c > out && - grep "^master[ ]\+master$" < out && - ! grep -v "^master[ ]\+master$" < out + grep "^master[ ][ ]*master$" <out && + ! grep -v "^master[ ][ ]*master$" <out ' #------------ diff --git a/t/test-lib.sh b/t/test-lib.sh index b7d7100c4e..9e2b71132a 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -615,6 +615,7 @@ case $(uname -s) in ;; esac +( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1 test -z "$NO_PERL" && test_set_prereq PERL test -z "$NO_PYTHON" && test_set_prereq PYTHON test -n "$USE_LIBPCRE" && test_set_prereq LIBPCRE diff --git a/transport.c b/transport.c index ea9dcb6612..2dfac700b6 100644 --- a/transport.c +++ b/transport.c @@ -721,6 +721,10 @@ void transport_print_push_status(const char *dest, struct ref *refs, { struct ref *ref; int n = 0; + unsigned char head_sha1[20]; + char *head; + + head = resolve_refdup("HEAD", head_sha1, 1, NULL); if (verbose) { for (ref = refs; ref; ref = ref->next) @@ -738,8 +742,13 @@ void transport_print_push_status(const char *dest, struct ref *refs, ref->status != REF_STATUS_UPTODATE && ref->status != REF_STATUS_OK) n += print_one_push_status(ref, dest, n, porcelain); - if (ref->status == REF_STATUS_REJECT_NONFASTFORWARD) - *nonfastforward = 1; + if (ref->status == REF_STATUS_REJECT_NONFASTFORWARD && + *nonfastforward != NON_FF_HEAD) { + if (!strcmp(head, ref->name)) + *nonfastforward = NON_FF_HEAD; + else + *nonfastforward = NON_FF_OTHER; + } } } diff --git a/transport.h b/transport.h index ce99ef8b7e..1631a35ea6 100644 --- a/transport.h +++ b/transport.h @@ -138,6 +138,8 @@ int transport_set_option(struct transport *transport, const char *name, void transport_set_verbosity(struct transport *transport, int verbosity, int force_progress); +#define NON_FF_HEAD 1 +#define NON_FF_OTHER 2 int transport_push(struct transport *connection, int refspec_nr, const char **refspec, int flags, int * nonfastforward); diff --git a/unpack-trees.c b/unpack-trees.c index 7c9ecf665d..36523da22a 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -102,21 +102,28 @@ void setup_unpack_trees_porcelain(struct unpack_trees_options *opts, opts->unpack_rejects[i].strdup_strings = 1; } -static void add_entry(struct unpack_trees_options *o, struct cache_entry *ce, - unsigned int set, unsigned int clear) +static void do_add_entry(struct unpack_trees_options *o, struct cache_entry *ce, + unsigned int set, unsigned int clear) { - unsigned int size = ce_size(ce); - struct cache_entry *new = xmalloc(size); - clear |= CE_HASHED | CE_UNHASHED; if (set & CE_REMOVE) set |= CE_WT_REMOVE; + ce->next = NULL; + ce->ce_flags = (ce->ce_flags & ~clear) | set; + add_index_entry(&o->result, ce, + ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE); +} + +static void add_entry(struct unpack_trees_options *o, struct cache_entry *ce, + unsigned int set, unsigned int clear) +{ + unsigned int size = ce_size(ce); + struct cache_entry *new = xmalloc(size); + memcpy(new, ce, size); - new->next = NULL; - new->ce_flags = (new->ce_flags & ~clear) | set; - add_index_entry(&o->result, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE); + do_add_entry(o, new, set, clear); } /* @@ -587,7 +594,7 @@ static int unpack_nondirectories(int n, unsigned long mask, for (i = 0; i < n; i++) if (src[i] && src[i] != o->df_conflict_entry) - add_entry(o, src[i], 0, 0); + do_add_entry(o, src[i], 0, 0); return 0; } @@ -772,7 +779,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str if (unpack_nondirectories(n, mask, dirmask, src, names, info) < 0) return -1; - if (src[0]) { + if (o->merge && src[0]) { if (ce_stage(src[0])) mark_ce_used_same_name(src[0], o); else diff --git a/xdiff/xdiff.h b/xdiff/xdiff.h index 00d36c3ac7..09215afe6e 100644 --- a/xdiff/xdiff.h +++ b/xdiff/xdiff.h @@ -32,14 +32,12 @@ extern "C" { #define XDF_IGNORE_WHITESPACE (1 << 2) #define XDF_IGNORE_WHITESPACE_CHANGE (1 << 3) #define XDF_IGNORE_WHITESPACE_AT_EOL (1 << 4) -#define XDF_PATIENCE_DIFF (1 << 5) -#define XDF_HISTOGRAM_DIFF (1 << 6) #define XDF_WHITESPACE_FLAGS (XDF_IGNORE_WHITESPACE | XDF_IGNORE_WHITESPACE_CHANGE | XDF_IGNORE_WHITESPACE_AT_EOL) -#define XDL_PATCH_NORMAL '-' -#define XDL_PATCH_REVERSE '+' -#define XDL_PATCH_MODEMASK ((1 << 8) - 1) -#define XDL_PATCH_IGNOREBSPACE (1 << 8) +#define XDF_PATIENCE_DIFF (1 << 5) +#define XDF_HISTOGRAM_DIFF (1 << 6) +#define XDF_DIFF_ALGORITHM_MASK (XDF_PATIENCE_DIFF | XDF_HISTOGRAM_DIFF) +#define XDF_DIFF_ALG(x) ((x) & XDF_DIFF_ALGORITHM_MASK) #define XDL_EMIT_FUNCNAMES (1 << 0) #define XDL_EMIT_COMMON (1 << 1) diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c index 75a3922750..bc889e8789 100644 --- a/xdiff/xdiffi.c +++ b/xdiff/xdiffi.c @@ -328,10 +328,10 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdalgoenv_t xenv; diffdata_t dd1, dd2; - if (xpp->flags & XDF_PATIENCE_DIFF) + if (XDF_DIFF_ALG(xpp->flags) == XDF_PATIENCE_DIFF) return xdl_do_patience_diff(mf1, mf2, xpp, xe); - if (xpp->flags & XDF_HISTOGRAM_DIFF) + if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF) return xdl_do_histogram_diff(mf1, mf2, xpp, xe); if (xdl_prepare_env(mf1, mf2, xpp, xe) < 0) { diff --git a/xdiff/xhistogram.c b/xdiff/xhistogram.c index 18f6f997c3..bf99787c3e 100644 --- a/xdiff/xhistogram.c +++ b/xdiff/xhistogram.c @@ -252,7 +252,7 @@ static int fall_back_to_classic_diff(struct histindex *index, int line1, int count1, int line2, int count2) { xpparam_t xpp; - xpp.flags = index->xpp->flags & ~XDF_HISTOGRAM_DIFF; + xpp.flags = index->xpp->flags & ~XDF_DIFF_ALGORITHM_MASK; return xdl_fall_back_diff(index->env, &xpp, line1, count1, line2, count2); diff --git a/xdiff/xpatience.c b/xdiff/xpatience.c index fdd7d0263f..04e1a1ab2a 100644 --- a/xdiff/xpatience.c +++ b/xdiff/xpatience.c @@ -288,7 +288,7 @@ static int fall_back_to_classic_diff(struct hashmap *map, int line1, int count1, int line2, int count2) { xpparam_t xpp; - xpp.flags = map->xpp->flags & ~XDF_PATIENCE_DIFF; + xpp.flags = map->xpp->flags & ~XDF_DIFF_ALGORITHM_MASK; return xdl_fall_back_diff(map->env, &xpp, line1, count1, line2, count2); diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c index e419f4f726..63a22c630e 100644 --- a/xdiff/xprepare.c +++ b/xdiff/xprepare.c @@ -181,7 +181,7 @@ static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_ if (!(recs = (xrecord_t **) xdl_malloc(narec * sizeof(xrecord_t *)))) goto abort; - if (xpp->flags & XDF_HISTOGRAM_DIFF) + if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF) hbits = hsize = 0; else { hbits = xdl_hashbits((unsigned int) narec); @@ -209,8 +209,8 @@ static int xdl_prepare_ctx(unsigned int pass, mmfile_t *mf, long narec, xpparam_ crec->ha = hav; recs[nrec++] = crec; - if (!(xpp->flags & XDF_HISTOGRAM_DIFF) && - xdl_classify_record(pass, cf, rhash, hbits, crec) < 0) + if ((XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF) && + xdl_classify_record(pass, cf, rhash, hbits, crec) < 0) goto abort; } } @@ -273,16 +273,15 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, * (nrecs) will be updated correctly anyway by * xdl_prepare_ctx(). */ - sample = xpp->flags & XDF_HISTOGRAM_DIFF ? XDL_GUESS_NLINES2 : XDL_GUESS_NLINES1; + sample = (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF + ? XDL_GUESS_NLINES2 : XDL_GUESS_NLINES1); enl1 = xdl_guess_lines(mf1, sample) + 1; enl2 = xdl_guess_lines(mf2, sample) + 1; - if (!(xpp->flags & XDF_HISTOGRAM_DIFF) && - xdl_init_classifier(&cf, enl1 + enl2 + 1, xpp->flags) < 0) { - + if (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF && + xdl_init_classifier(&cf, enl1 + enl2 + 1, xpp->flags) < 0) return -1; - } if (xdl_prepare_ctx(1, mf1, enl1, xpp, &cf, &xe->xdf1) < 0) { @@ -296,9 +295,9 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, return -1; } - if (!(xpp->flags & XDF_PATIENCE_DIFF) && - !(xpp->flags & XDF_HISTOGRAM_DIFF) && - xdl_optimize_ctxs(&cf, &xe->xdf1, &xe->xdf2) < 0) { + if ((XDF_DIFF_ALG(xpp->flags) != XDF_PATIENCE_DIFF) && + (XDF_DIFF_ALG(xpp->flags) != XDF_HISTOGRAM_DIFF) && + xdl_optimize_ctxs(&cf, &xe->xdf1, &xe->xdf2) < 0) { xdl_free_ctx(&xe->xdf2); xdl_free_ctx(&xe->xdf1); |