diff options
224 files changed, 21340 insertions, 6278 deletions
diff --git a/.gitignore b/.gitignore index 6b1fd1bfb0..66199edd4a 100644 --- a/.gitignore +++ b/.gitignore @@ -202,6 +202,7 @@ /test-string-list /test-subprocess /test-svn-fe +/test-urlmatch-normalization /test-wildmatch /common-cmds.h *.tar.gz @@ -14,13 +14,18 @@ Alex Riesen <raa.lkml@gmail.com> <raa@steel.home> Alex Vandiver <alex@chmrr.net> <alexmv@MIT.EDU> Alexander Gavrilov <angavrilov@gmail.com> Alexey Shumkin <alex.crezoff@gmail.com> <zapped@mail.ru> +Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com> Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com> Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu> Aneesh Kumar K.V <aneesh.kumar@gmail.com> +Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu> +Amos Waterland <apw@debian.org> <apw@us.ibm.com> Ben Walton <bdwalton@gmail.com> <bwalton@artsci.utoronto.ca> +Benoit Sigoure <tsunanet@gmail.com> <tsuna@lrde.epita.fr> Bernt Hansen <bernt@norang.ca> <bernt@alumni.uwaterloo.ca> Brandon Casey <drafnel@gmail.com> <casey@nrlssc.navy.mil> -Brian M. Carlson <sandals@crustytoothpaste.ath.cx> +brian m. carlson <sandals@crustytoothpaste.ath.cx> Brian M. Carlson <sandals@crustytoothpaste.ath.cx> +brian m. carlson <sandals@crustytoothpaste.ath.cx> <sandals@crustytoothpaste.net> Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com> Bryan Larsen <bryan@larsen.st> <bryanlarsen@yahoo.com> Cheng Renquan <crquan@gmail.com> @@ -31,7 +36,10 @@ Christian Stimming <stimming@tuhh.de> <chs@ckiste.goetheallee> Csaba Henk <csaba@gluster.com> <csaba@lowlife.hu> Dan Johnson <computerdruid@gmail.com> Dana L. How <danahow@gmail.com> <how@deathvalley.cswitch.com> +Dana L. How <danahow@gmail.com> Dana How Daniel Barkalow <barkalow@iabervon.org> +Daniel Trstenjak <daniel.trstenjak@gmail.com> <daniel.trstenjak@online.de> +Daniel Trstenjak <daniel.trstenjak@gmail.com> <trsten@science-computing.de> David Brown <git@davidb.org> <davidb@quicinc.com> David D. Kilzer <ddkilzer@kilzer.net> David Kågedal <davidk@lysator.liu.se> @@ -65,11 +73,18 @@ J. Bruce Fields <bfields@citi.umich.edu> <bfields@fieldses.org> J. Bruce Fields <bfields@citi.umich.edu> <bfields@pig.linuxdev.us.dell.com> J. Bruce Fields <bfields@citi.umich.edu> <bfields@puzzle.fieldses.org> Jakub Narębski <jnareb@gmail.com> +James Y Knight <jknight@itasoftware.com> <foom@fuhm.net> +# The 2 following authors are probably the same person, +# but both emails bounce. +Jason McMullan <jason.mcmullan@timesys.com> +Jason McMullan <mcmullan@netapp.com> Jason Riedy <ejr@eecs.berkeley.edu> <ejr@EECS.Berkeley.EDU> Jason Riedy <ejr@eecs.berkeley.edu> <ejr@cs.berkeley.edu> Jay Soffian <jaysoffian@gmail.com> <jaysoffian+git@gmail.com> Jeff King <peff@peff.net> <peff@github.com> Jeff Muizelaar <jmuizelaar@mozilla.com> <jeff@infidigm.net> +Jens Axboe <axboe@kernel.dk> <axboe@suse.de> +Jens Axboe <axboe@kernel.dk> <jens.axboe@oracle.com> Jim Meyering <jim@meyering.net> <meyering@redhat.com> Joachim Berdal Haga <cjhaga@fys.uio.no> Johannes Schindelin <Johannes.Schindelin@gmx.de> <johannes.schindelin@gmx.de> @@ -92,8 +107,8 @@ Junio C Hamano <gitster@pobox.com> <junio@pobox.com> Junio C Hamano <gitster@pobox.com> <junio@twinsun.com> Junio C Hamano <gitster@pobox.com> <junkio@cox.net> Junio C Hamano <gitster@pobox.com> <junkio@twinsun.com> -Karl Wiberg <kha@treskal.com> Karl Hasselström <kha@treskal.com> -Karl Wiberg <kha@treskal.com> Karl Hasselström <kha@yoghurt.hemma.treskal.com> +Karl Wiberg <kha@treskal.com> Karl Hasselström +Karl Wiberg <kha@treskal.com> <kha@yoghurt.hemma.treskal.com> Karsten Blees <blees@dcon.de> <karsten.blees@dcon.de> Karsten Blees <blees@dcon.de> <karsten.blees@gmail.com> Kay Sievers <kay.sievers@vrfy.org> <kay.sievers@suse.de> @@ -141,7 +156,7 @@ Michele Ballabio <barra_cuda@katamail.com> Miklos Vajna <vmiklos@frugalware.org> <vmiklos@suse.cz> Namhyung Kim <namhyung@gmail.com> <namhyung.kim@lge.com> Namhyung Kim <namhyung@gmail.com> <namhyung@kernel.org> -Nanako Shiraishi <nanako3@bluebottle.com> +Nanako Shiraishi <nanako3@lavabit.com> <nanako3@bluebottle.com> Nanako Shiraishi <nanako3@lavabit.com> Nelson Elhage <nelhage@mit.edu> <nelhage@MIT.EDU> Nelson Elhage <nelhage@mit.edu> <nelhage@ksplice.com> @@ -174,9 +189,12 @@ Robert Fitzsimons <robfitz@273k.net> Robert Shearman <robertshearman@gmail.com> <rob@codeweavers.com> Robert Zeh <robert.a.zeh@gmail.com> Robin Rosenberg <robin.rosenberg@dewire.com> <robin.rosenberg.lists@dewire.com> +Rutger Nijlunsing <rutger.nijlunsing@gmail.com> <rutger@nospam.com> +Rutger Nijlunsing <rutger.nijlunsing@gmail.com> <git@tux.tmfweb.nl> Ryan Anderson <ryan@michonline.com> <rda@google.com> Salikh Zakirov <salikh.zakirov@gmail.com> <Salikh.Zakirov@Intel.com> Sam Vilain <sam@vilain.net> <sam.vilain@catalyst.net.nz> +Sam Vilain <sam@vilain.net> sam@vilain.net Santi Béjar <santi@agolina.net> <sbejar@gmail.com> Sean Estabrooks <seanlkml@sympatico.ca> Sebastian Schuberth <sschuberth@gmail.com> <sschuberth@visageimaging.com> @@ -191,6 +209,7 @@ Stefan Sperling <stsp@elego.de> <stsp@stsp.name> Stephen Boyd <bebarino@gmail.com> <sboyd@codeaurora.org> Steven Drake <sdrake@xnet.co.nz> <sdrake@ihug.co.nz> Steven Grimm <koreth@midwinter.com> <sgrimm@sgrimm-mbp.local> +Steven Grimm <koreth@midwinter.com> koreth@midwinter.com Steven Walter <stevenrwalter@gmail.com> <swalter@lexmark.com> Steven Walter <stevenrwalter@gmail.com> <swalter@lpdev.prtdev.lexmark.com> Sven Verdoolaege <skimo@kotnet.org> <Sven.Verdoolaege@cs.kuleuven.ac.be> diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index 559d5f9ebf..e5ca3b75d3 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -242,6 +242,14 @@ Writing Documentation: processed into HTML and manpages (e.g. git.html and git.1 in the same directory). + The documentation liberally mixes US and UK English (en_US/UK) + norms for spelling and grammar, which is somewhat unfortunate. + In an ideal world, it would have been better if it consistently + used only one and not the other, and we would have picked en_US + (if you wish to correct the English of some of the existing + documentation, please see the documentation-related advice in the + Documentation/SubmittingPatches file). + Every user-visible change should be reflected in the documentation. The same general rule as for code applies -- imitate the existing conventions. A few commented examples follow to provide reference diff --git a/Documentation/RelNotes/1.8.4.txt b/Documentation/RelNotes/1.8.4.txt index b4f8737c5a..02f681b710 100644 --- a/Documentation/RelNotes/1.8.4.txt +++ b/Documentation/RelNotes/1.8.4.txt @@ -198,9 +198,6 @@ UI, Workflows & Features response was to stash them and re-run). This introduced a corner case breakage to "git am --abort" but it has been fixed. - * Instead of typing four capital letters "HEAD", you can say "@" now, - e.g. "git log @". - * "check-ignore" (new feature since 1.8.2) has been updated to work more like "check-attr" over bidi-pipes. @@ -242,6 +239,13 @@ UI, Workflows & Features Performance, Internal Implementation, etc. + * On Cygwin, we used to use our own lstat(2) emulation that is + allegedly faster than the platform one in codepaths where some of + the information it returns did not matter, but it started to bite + us in a few codepaths where the trick it uses to cheat does show + breakages. This emulation has been removed and we use the native + lstat(2) emulation supplied by Cygwin now. + * The function attributes extensions are used to catch mistakes in use of our own variadic functions that use NULL sentinel at the end (i.e. like execl(3)) and format strings (i.e. like printf(3)). @@ -263,7 +267,7 @@ Performance, Internal Implementation, etc. been susceptible to lossage of refs under right conditions, which has been tightened up. - * We read loose and packed rerferences in two steps, but after + * We read loose and packed references in two steps, but after deciding to read a loose ref but before actually opening it to read it, another process racing with us can unlink it, which would cause us to barf. The codepath has been updated to retry when such a @@ -365,12 +369,6 @@ details). the user to an unexpected place. (merge 3bed291 rr/rebase-checkout-reflog later to maint). - * "git stash save", when your local change turns a tracked file into - a directory, has to remove files in that directory in order to - revert your working tree to a pristine state. This will lose - untracked files in such a directory, and the command now requires - you to "--force" it. - * The configuration variable column.ui was poorly documented. (merge 5e62cc1 rr/column-doc later to maint). @@ -381,7 +379,7 @@ details). * "git apply" parsed patches that add new files, generated by programs other than Git, incorrectly. This is an old breakage in - v1.7.11 and will need to be merged down to the maintanance tracks. + v1.7.11 and will need to be merged down to the maintenance tracks. * Older cURL wanted piece of memory we call it with to be stable, but we updated the auth material after handing it to a call. diff --git a/Documentation/RelNotes/1.8.5.txt b/Documentation/RelNotes/1.8.5.txt new file mode 100644 index 0000000000..3b43a61d85 --- /dev/null +++ b/Documentation/RelNotes/1.8.5.txt @@ -0,0 +1,130 @@ +Git v1.8.5 Release Notes +======================== + +Backward compatibility notes (for Git 2.0) +------------------------------------------ + +When "git push [$there]" does not say what to push, we have used the +traditional "matching" semantics so far (all your branches were sent +to the remote as long as there already are branches of the same name +over there). In Git 2.0, the default will change to the "simple" +semantics that pushes: + + - only the current branch to the branch with the same name, and only + when the current branch is set to integrate with that remote + branch, if you are pushing to the same remote as you fetch from; or + + - only the current branch to the branch with the same name, if you + are pushing to a remote that is not where you usually fetch from. + +Use the user preference configuration variable "push.default" to +change this. If you are an old-timer who is used to the "matching" +semantics, you can set the variable to "matching" to keep the +traditional behaviour. If you want to live in the future early, you +can set it to "simple" today without waiting for Git 2.0. + +When "git add -u" (and "git add -A") is run inside a subdirectory and +does not specify which paths to add on the command line, it +will operate on the entire tree in Git 2.0 for consistency +with "git commit -a" and other commands. There will be no +mechanism to make plain "git add -u" behave like "git add -u .". +Current users of "git add -u" (without a pathspec) should start +training their fingers to explicitly say "git add -u ." +before Git 2.0 comes. A warning is issued when these commands are +run without a pathspec and when you have local changes outside the +current directory, because the behaviour in Git 2.0 will be different +from today's version in such a situation. + +In Git 2.0, "git add <path>" will behave as "git add -A <path>", so +that "git add dir/" will notice paths you removed from the directory +and record the removal. Versions before Git 2.0, including this +release, will keep ignoring removals, but the users who rely on this +behaviour are encouraged to start using "git add --ignore-removal <path>" +now before 2.0 is released. + + +Updates since v1.8.4 +-------------------- + +Foreign interfaces, subsystems and ports. + + * remote-hg remote helper misbehaved when interacting with a local Hg + repository relative to the home directory, e.g. "clone hg::~/there". + + * imap-send ported to OS X uses Apple's security framework instead of + OpenSSL one. + + * Subversion 1.8.0 that was recently released breaks older subversion + clients coming over http/https in various ways. + + * "git fast-import" treats an empty path given to "ls" as the root of + the tree. + + +UI, Workflows & Features + + * "git check-ignore -z" applied the NUL termination to both its input + (with --stdin) and its output, but "git check-attr -z" ignored the + option on the output side. Make both honor -z on the input and + output side the same way. + + * "git whatchanged" may still be used by old timers, but mention of + it in documents meant for new users will only waste readers' time + wonderig what the difference is between it and "git log". Make it + less prominent in the general part of the documentation and explain + that it is merely a "git log" with different default behaviour in + its own document. + + +Performance, Internal Implementation, etc. + + * Many commands use --dashed-option as a operation mode selector + (e.g. "git tag --delete") that the user can use at most one + (e.g. "git tag --delete --verify" is a nonsense) and you cannot + negate (e.g. "git tag --no-delete" is a nonsense). parse-options + API learned a new OPT_CMDMODE macro to make it easier to implement + such a set of options. + + * OPT_BOOLEAN() in parse-options API was misdesigned to be "counting + up" but many subcommands expect it to behave as "on/off". Update + them to use OPT_BOOL() which is a proper boolean. + + * "git gc" exits early without doing a double-work when it detects + that another instance of itself is already running. + + * Under memory pressure and/or file descriptor pressure, we used to + close pack windows that are not used and also closed filehandle to + an open but unused packfiles. These are now controlled separately + to better cope with the load. + +Also contains various documentation updates and code clean-ups. + + +Fixes since v1.8.4 +------------------ + +Unless otherwise noted, all the fixes since v1.8.4 in the maintenance +track are contained in this release (see release notes to them for +details). + + * Setting submodule.*.path configuration variable to true (without + giving "= value") caused Git to segfault. + (merge 4b05440 jl/some-submodule-config-are-not-boolean later to maint). + + * "git rebase -i" (there could be others, as the root cause is pretty + generic) fed a random, data dependeant string to 'echo' and + expects it to come out literally, corrupting its error message. + (merge 89b0230 mm/no-shell-escape-in-die-message later to maint). + + * Some people still use rather old versions of bash, which cannot + grok some constructs like 'printf -v varname' the prompt and + completion code started to use recently. + (merge a44aa69 bc/completion-for-bash-3.0 later to maint). + + * Code to read configuration from a blob object did not compile on + platforms with fgetc() etc. implemented as macros. + (merge 49d6cfa hv/config-from-blob later to maint-1.8.3). + + * The recent "short-cut clone connectivity check" topic broke a + shallow repository when a fetch operation tries to auto-follow tags. + (merge 6da8bdc nd/fetch-pack-shallow-fix later to maint-1.8.3). diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index d0a4733e45..705557689d 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches @@ -65,7 +65,20 @@ feature does not trigger when it shouldn't. Also make sure that the test suite passes after your commit. Do not forget to update the documentation to describe the updated behaviour. -Oh, another thing. I am picky about whitespaces. Make sure your +Speaking of the documentation, it is currently a liberal mixture of US +and UK English norms for spelling and grammar, which is somewhat +unfortunate. A huge patch that touches the files all over the place +only to correct the inconsistency is not welcome, though. Potential +clashes with other changes that can result from such a patch are not +worth it. We prefer to gradually reconcile the inconsistencies in +favor of US English, with small and easily digestible patches, as a +side effect of doing some other real work in the vicinity (e.g. +rewriting a paragraph for clarity, while turning en_UK spelling to +en_US). Obvious typographical fixes are much more welcomed ("teh -> +"the"), preferably submitted as independent patches separate from +other documentation changes. + +Oh, another thing. We are picky about whitespaces. Make sure your changes do not trigger errors with the sample pre-commit hook shipped in templates/hooks--pre-commit. To help ensure this does not happen, run git diff --check on your changes before you commit. diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt index 4e55b1564e..0cebc4f692 100644 --- a/Documentation/blame-options.txt +++ b/Documentation/blame-options.txt @@ -11,12 +11,12 @@ -L <start>,<end>:: -L :<regex>:: - Annotate only the given line range. <start> and <end> are optional. - ``-L <start>'' or ``-L <start>,'' spans from <start> to end of file. - ``-L ,<end>'' spans from start of file to <end>. + Annotate only the given line range. May be specified multiple times. + Overlapping ranges are allowed. ++ +<start> and <end> are optional. ``-L <start>'' or ``-L <start>,'' spans from +<start> to end of file. ``-L ,<end>'' spans from start of file to <end>. + -<start> and <end> can take one of these forms: - include::line-range-format.txt[] -l:: diff --git a/Documentation/config.txt b/Documentation/config.txt index ec57a15ac5..00bde9dec5 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1061,6 +1061,10 @@ fetch.unpackLimit:: especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead. +fetch.prune:: + If true, fetch will automatically behave as if the `--prune` + option was given on the command line. See also `remote.<name>.prune`. + format.attach:: Enable multipart/mixed attachments as the default for 'format-patch'. The value can also be a double quoted string @@ -1445,7 +1449,11 @@ http.cookiefile:: of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see linkgit:curl[1]). NOTE that the file specified with http.cookiefile is only used as - input. No cookies will be stored in the file. + input unless http.saveCookies is set. + +http.savecookies:: + If set, store cookies received during requests to the file specified by + http.cookiefile. Has no effect if http.cookiefile is unset. http.sslVerify:: Whether to verify the SSL certificate when fetching or pushing @@ -1525,6 +1533,51 @@ http.useragent:: of common USER_AGENT strings (but not including those like git/1.7.1). Can be overridden by the 'GIT_HTTP_USER_AGENT' environment variable. +http.<url>.*:: + Any of the http.* options above can be applied selectively to some urls. + For a config key to match a URL, each element of the config key is + compared to that of the URL, in the following order: ++ +-- +. Scheme (e.g., `https` in `https://example.com/`). This field + must match exactly between the config key and the URL. + +. Host/domain name (e.g., `example.com` in `https://example.com/`). + This field must match exactly between the config key and the URL. + +. Port number (e.g., `8080` in `http://example.com:8080/`). + This field must match exactly between the config key and the URL. + Omitted port numbers are automatically converted to the correct + default for the scheme before matching. + +. Path (e.g., `repo.git` in `https://example.com/repo.git`). The + path field of the config key must match the path field of the URL + either exactly or as a prefix of slash-delimited path elements. This means + a config key with path `foo/` matches URL path `foo/bar`. A prefix can only + match on a slash (`/`) boundary. Longer matches take precedence (so a config + key with path `foo/bar` is a better match to URL path `foo/bar` than a config + key with just path `foo/`). + +. User name (e.g., `user` in `https://user@example.com/repo.git`). If + the config key has a user name it must match the user name in the + URL exactly. If the config key does not have a user name, that + config key will match a URL with any user name (including none), + but at a lower precedence than a config key with a user name. +-- ++ +The list above is ordered by decreasing precedence; a URL that matches +a config key's path is preferred to one that matches its user name. For example, +if the URL is `https://user@example.com/foo/bar` a config key match of +`https://example.com/foo` will be preferred over a config key match of +`https://user@example.com`. ++ +All URLs are normalized before attempting any matching (the password part, +if embedded in the URL, is always ignored for matching purposes) so that +equivalent urls that are simply spelled differently will match properly. +Environment variable settings always override any matches. The urls that are +matched against are those given directly to Git commands. This means any URLs +visited as a result of a redirection do not participate in matching. + i18n.commitEncoding:: Character encoding the commit messages are stored in; Git itself does not care per se, but this information is necessary e.g. when @@ -2024,6 +2077,12 @@ remote.<name>.vcs:: Setting this to a value <vcs> will cause Git to interact with the remote with the git-remote-<vcs> helper. +remote.<name>.prune:: + When set to true, fetching from this remote by default will also + remove any remote-tracking branches which no longer exist on the + remote (as if the `--prune` option was give on the command line). + Overrides `fetch.prune` settings, if any. + remotes.<group>:: The list of remotes which are fetched by "git remote update <group>". See linkgit:git-remote[1]. diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt index 6cea7f1ce1..f2c85cc633 100644 --- a/Documentation/git-blame.txt +++ b/Documentation/git-blame.txt @@ -9,7 +9,7 @@ SYNOPSIS -------- [verse] 'git blame' [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental] - [-L n,m | -L :fn] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>] + [-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>] [--] <file> DESCRIPTION @@ -18,7 +18,8 @@ DESCRIPTION Annotates each line in the given file with information from the revision which last modified the line. Optionally, start annotating from the given revision. -The command can also limit the range of lines annotated. +When specified one or more times, `-L` restricts annotation to the requested +lines. The origin of lines is automatically followed across whole-file renames (currently there is no option to turn the rename-following @@ -130,7 +131,10 @@ SPECIFYING RANGES Unlike 'git blame' and 'git annotate' in older versions of git, the extent of the annotation can be limited to both line ranges and revision -ranges. When you are interested in finding the origin for +ranges. The `-L` option, which limits annotation to a range of lines, may be +specified multiple times. + +When you are interested in finding the origin for lines 40-60 for file `foo`, you can use the `-L` option like so (they mean the same thing -- both ask for 21 lines starting at line 40): diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt index 10fbc6a373..21cffe2bcd 100644 --- a/Documentation/git-cat-file.txt +++ b/Documentation/git-cat-file.txt @@ -86,10 +86,9 @@ BATCH OUTPUT ------------ If `--batch` or `--batch-check` is given, `cat-file` will read objects -from stdin, one per line, and print information about them. - -Each line is considered as a whole object name, and is parsed as if -given to linkgit:git-rev-parse[1]. +from stdin, one per line, and print information about them. By default, +the whole line is considered as an object, as if it were fed to +linkgit:git-rev-parse[1]. You can specify the information shown for each object by using a custom `<format>`. The `<format>` is copied literally to stdout for each @@ -110,6 +109,13 @@ newline. The available atoms are: The size, in bytes, that the object takes up on disk. See the note about on-disk sizes in the `CAVEATS` section below. +`rest`:: + If this atom is used in the output string, input lines are split + at the first whitespace boundary. All characters before that + whitespace are considered to be the object name; characters + after that first run of whitespace (i.e., the "rest" of the + line) are output in place of the `%(rest)` atom. + If no format is specified, the default format is `%(objectname) %(objecttype) %(objectsize)`. diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.txt index a7be80d48b..00e2aa2df2 100644 --- a/Documentation/git-check-attr.txt +++ b/Documentation/git-check-attr.txt @@ -31,8 +31,9 @@ OPTIONS Read file names from stdin instead of from the command-line. -z:: - Only meaningful with `--stdin`; paths are separated with a - NUL character instead of a linefeed character. + The output format is modified to be machine-parseable. + If `--stdin` is also given, input paths are separated + with a NUL character instead of a linefeed character. \--:: Interpret all preceding arguments as attributes and all following @@ -48,6 +49,10 @@ OUTPUT The output is of the form: <path> COLON SP <attribute> COLON SP <info> LF +unless `-z` is in effect, in which case NUL is used as delimiter: +<path> NUL <attribute> NUL <info> NUL + + <path> is the path of a file being queried, <attribute> is an attribute being queried and <info> can be either: diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt index fc02959ba4..a49be1bab4 100644 --- a/Documentation/git-check-ref-format.txt +++ b/Documentation/git-check-ref-format.txt @@ -54,8 +54,6 @@ Git imposes the following rules on how references are named: . They cannot contain a sequence `@{`. -. They cannot be the single character `@`. - . They cannot contain a `\`. These rules make it easy for shell script based tools to parse diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 2dbe486eb1..e9917b89a9 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -15,6 +15,7 @@ SYNOPSIS 'git config' [<file-option>] [type] [-z|--null] --get name [value_regex] 'git config' [<file-option>] [type] [-z|--null] --get-all name [value_regex] 'git config' [<file-option>] [type] [-z|--null] --get-regexp name_regex [value_regex] +'git config' [<file-option>] [type] [-z|--null] --get-urlmatch name URL 'git config' [<file-option>] --unset name [value_regex] 'git config' [<file-option>] --unset-all name [value_regex] 'git config' [<file-option>] --rename-section old_name new_name @@ -95,6 +96,14 @@ OPTIONS in which section and variable names are lowercased, but subsection names are not. +--get-urlmatch name URL:: + When given a two-part name section.key, the value for + section.<url>.key whose <url> part matches the best to the + given URL is returned (if no such key exists, the value for + section.key is used as a fallback). When given just the + section as name, do so for all the keys in the section and + list them. + --global:: For writing options: write to global `~/.gitconfig` file rather than the repository `.git/config`, write to @@ -295,6 +304,13 @@ Given a .git/config like this: gitproxy=proxy-command for kernel.org gitproxy=default-proxy ; for all the rest + ; HTTP + [http] + sslVerify + [http "https://weak.example.com"] + sslVerify = false + cookieFile = /tmp/cookie.txt + you can set the filemode to true with ------------ @@ -380,6 +396,19 @@ RESET=$(git config --get-color "" "reset") echo "${WS}your whitespace color or blue reverse${RESET}" ------------ +For URLs in `https://weak.example.com`, `http.sslVerify` is set to +false, while it is set to `true` for all others: + +------------ +% git config --bool --get-urlmatch http.sslverify https://good.example.com +true +% git config --bool --get-urlmatch http.sslverify https://weak.example.com +false +% git config --get-urlmatch http https://weak.example.com +http.cookiefile /tmp/cookie.txt +http.sslverify false +------------ + include::config.txt[] GIT diff --git a/Documentation/git-fetch-pack.txt b/Documentation/git-fetch-pack.txt index 1e71754347..444b805d35 100644 --- a/Documentation/git-fetch-pack.txt +++ b/Documentation/git-fetch-pack.txt @@ -90,6 +90,10 @@ be in a separate packet, and the list must end with a flush packet. --no-progress:: Do not show the progress. +--check-self-contained-and-connected:: + Output "connectivity-ok" if the received pack is + self-contained and connected. + -v:: Run verbosely. diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt index e394276b1a..9e0ef0eaf3 100644 --- a/Documentation/git-format-patch.txt +++ b/Documentation/git-format-patch.txt @@ -242,6 +242,7 @@ configuration options in linkgit:git-notes[1] to use this workflow). Note that the leading character does not have to be a dot; for example, you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`. +-q:: --quiet:: Do not print the names of the generated files to standard output. diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt index 2402ed6828..e158a3b31f 100644 --- a/Documentation/git-gc.txt +++ b/Documentation/git-gc.txt @@ -9,7 +9,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository SYNOPSIS -------- [verse] -'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] +'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force] DESCRIPTION ----------- @@ -72,6 +72,10 @@ automatic consolidation of packs. --quiet:: Suppress all progress reports. +--force:: + Force `git gc` to run even if there may be another `git gc` + instance running on this repository. + Configuration ------------- diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt index ac2694d04c..34097efea7 100644 --- a/Documentation/git-log.txt +++ b/Documentation/git-log.txt @@ -62,7 +62,8 @@ produced by --stat etc. Note that only message is considered, if also a diff is shown its size is not included. --L <start>,<end>:<file>, -L :<regex>:<file>:: +-L <start>,<end>:<file>:: +-L :<regex>:<file>:: Trace the evolution of the line range given by "<start>,<end>" (or the funcname regex <regex>) within the <file>. You may @@ -71,8 +72,6 @@ produced by --stat etc. give zero or one positive revision arguments. You can specify this option more than once. + -<start> and <end> can take one of these forms: - include::line-range-format.txt[] <revision range>:: diff --git a/Documentation/git-merge-file.txt b/Documentation/git-merge-file.txt index d7db2a3737..d2fc12ec77 100644 --- a/Documentation/git-merge-file.txt +++ b/Documentation/git-merge-file.txt @@ -11,7 +11,7 @@ SYNOPSIS [verse] 'git merge-file' [-L <current-name> [-L <base-name> [-L <other-name>]]] [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>] - <current-file> <base-file> <other-file> + [--[no-]diff3] <current-file> <base-file> <other-file> DESCRIPTION @@ -66,6 +66,9 @@ OPTIONS -q:: Quiet; do not warn about conflicts. +--diff3:: + Show conflicts in "diff3" style. + --ours:: --theirs:: --union:: diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt index 8c7f2f66d8..a74c3713c6 100644 --- a/Documentation/git-merge.txt +++ b/Documentation/git-merge.txt @@ -186,11 +186,11 @@ In such a case, you can "unwrap" the tag yourself before feeding it to `git merge`, or pass `--ff-only` when you do not have any work on your own. e.g. ---- +---- git fetch origin git merge v1.2.3^0 git merge --ff-only v1.2.3 ---- +---- HOW CONFLICTS ARE PRESENTED diff --git a/Documentation/git-mv.txt b/Documentation/git-mv.txt index e93fcb49fd..b1f79881ef 100644 --- a/Documentation/git-mv.txt +++ b/Documentation/git-mv.txt @@ -13,7 +13,7 @@ SYNOPSIS DESCRIPTION ----------- -This script is used to move or rename a file, directory or symlink. +Move or rename a file, directory or symlink. git mv [-v] [-f] [-n] [-k] <source> <destination> git mv [-v] [-f] [-n] [-k] <source> ... <destination directory> @@ -44,6 +44,14 @@ OPTIONS --verbose:: Report the names of files as they are moved. +SUBMODULES +---------- +Moving a submodule using a gitfile (which means they were cloned +with a Git version 1.7.8 or newer) will update the gitfile and +core.worktree setting to make the submodule work in the new location. +It also will attempt to update the submodule.<name>.path setting in +the linkgit:gitmodules[5] file and stage that file (unless -n is used). + GIT --- Part of the linkgit:git[1] suite diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index f7dfe48d28..e2992f17a0 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -11,6 +11,7 @@ SYNOPSIS [verse] 'git push' [--all | --mirror | --tags] [--follow-tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream] + [--force-with-lease[=<refname>[:<expect>]]] [--no-verify] [<repository> [<refspec>...]] DESCRIPTION @@ -130,21 +131,75 @@ already exists on the remote side. repository over ssh, and you do not have the program in a directory on the default $PATH. +--[no-]force-with-lease:: +--force-with-lease=<refname>:: +--force-with-lease=<refname>:<expect>:: + Usually, "git push" refuses to update a remote ref that is + not an ancestor of the local ref used to overwrite it. ++ +This option bypasses the check, but instead requires that the +current value of the ref to be the expected value. "git push" +fails otherwise. ++ +Imagine that you have to rebase what you have already published. +You will have to bypass the "must fast-forward" rule in order to +replace the history you originally published with the rebased history. +If somebody else built on top of your original history while you are +rebasing, the tip of the branch at the remote may advance with her +commit, and blindly pushing with `--force` will lose her work. ++ +This option allows you to say that you expect the history you are +updating is what you rebased and want to replace. If the remote ref +still points at the commit you specified, you can be sure that no +other people did anything to the ref (it is like taking a "lease" on +the ref without explicitly locking it, and you update the ref while +making sure that your earlier "lease" is still valid). ++ +`--force-with-lease` alone, without specifying the details, will protect +all remote refs that are going to be updated by requiring their +current value to be the same as the remote-tracking branch we have +for them, unless specified with a `--force-with-lease=<refname>:<expect>` +option that explicitly states what the expected value is. ++ +`--force-with-lease=<refname>`, without specifying the expected value, will +protect the named ref (alone), if it is going to be updated, by +requiring its current value to be the same as the remote-tracking +branch we have for it. ++ +`--force-with-lease=<refname>:<expect>` will protect the named ref (alone), +if it is going to be updated, by requiring its current value to be +the same as the specified value <expect> (which is allowed to be +different from the remote-tracking branch we have for the refname, +or we do not even have to have such a remote-tracking branch when +this form is used). ++ +Note that all forms other than `--force-with-lease=<refname>:<expect>` +that specifies the expected current value of the ref explicitly are +still experimental and their semantics may change as we gain experience +with this feature. ++ +"--no-force-with-lease" will cancel all the previous --force-with-lease on the +command line. + -f:: --force:: Usually, the command refuses to update a remote ref that is not an ancestor of the local ref used to overwrite it. - This flag disables the check. This can cause the - remote repository to lose commits; use it with care. - Note that `--force` applies to all the refs that are pushed, - hence using it with `push.default` set to `matching` or with - multiple push destinations configured with `remote.*.push` - may overwrite refs other than the current branch (including - local refs that are strictly behind their remote counterpart). - To force a push to only one branch, use a `+` in front of the - refspec to push (e.g `git push origin +master` to force a push - to the `master` branch). See the `<refspec>...` section above - for details. + Also, when `--force-with-lease` option is used, the command refuses + to update a remote ref whose current value does not match + what is expected. ++ +This flag disables these checks, and can cause the remote repository +to lose commits; use it with care. ++ +Note that `--force` applies to all the refs that are pushed, hence +using it with `push.default` set to `matching` or with multiple push +destinations configured with `remote.*.push` may overwrite refs +other than the current branch (including local refs that are +strictly behind their remote counterpart). To force a push to only +one branch, use a `+` in front of the refspec to push (e.g `git push +origin +master` to force a push to the `master` branch). See the +`<refspec>...` section above for details. --repo=<repository>:: This option is only relevant if no <repository> argument is diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index 2b126c0a77..d068a65377 100644 --- a/Documentation/git-rev-parse.txt +++ b/Documentation/git-rev-parse.txt @@ -24,9 +24,23 @@ distinguish between them. OPTIONS ------- + +Operation Modes +~~~~~~~~~~~~~~~ + +Each of these options must appear first on the command line. + --parseopt:: Use 'git rev-parse' in option parsing mode (see PARSEOPT section below). +--sq-quote:: + Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE + section below). In contrast to the `--sq` option below, this + mode does only quoting. Nothing else is done to command input. + +Options for --parseopt +~~~~~~~~~~~~~~~~~~~~~~ + --keep-dashdash:: Only meaningful in `--parseopt` mode. Tells the option parser to echo out the first `--` met instead of skipping it. @@ -36,10 +50,8 @@ OPTIONS the first non-option argument. This can be used to parse sub-commands that take options themselves. ---sq-quote:: - Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE - section below). In contrast to the `--sq` option below, this - mode does only quoting. Nothing else is done to command input. +Options for Filtering +~~~~~~~~~~~~~~~~~~~~~ --revs-only:: Do not output flags and parameters not meant for @@ -55,6 +67,9 @@ OPTIONS --no-flags:: Do not output flag parameters. +Options for Output +~~~~~~~~~~~~~~~~~~ + --default <arg>:: If there is no parameter given by the user, use `<arg>` instead. @@ -110,6 +125,17 @@ can be used. strip '{caret}' prefix from the object names that already have one. +--abbrev-ref[=(strict|loose)]:: + A non-ambiguous short name of the objects name. + The option core.warnAmbiguousRefs is used to select the strict + abbreviation mode. + +--short:: +--short=number:: + Instead of outputting the full SHA-1 values of object names try to + abbreviate them to a shorter unique name. When no length is specified + 7 is used. The minimum length is 4. + --symbolic:: Usually the object names are output in SHA-1 form (with possible '{caret}' prefix); this option makes them output in a @@ -123,16 +149,8 @@ can be used. unfortunately named tag "master"), and show them as full refnames (e.g. "refs/heads/master"). ---abbrev-ref[=(strict|loose)]:: - A non-ambiguous short name of the objects name. - The option core.warnAmbiguousRefs is used to select the strict - abbreviation mode. - ---disambiguate=<prefix>:: - Show every object whose name begins with the given prefix. - The <prefix> must be at least 4 hexadecimal digits long to - avoid listing each and every object in the repository by - mistake. +Options for Objects +~~~~~~~~~~~~~~~~~~~ --all:: Show all refs found in `refs/`. @@ -155,18 +173,20 @@ shown. If the pattern does not contain a globbing character (`?`, character (`?`, `*`, or `[`), it is turned into a prefix match by appending `/*`. ---show-toplevel:: - Show the absolute path of the top-level directory. +--disambiguate=<prefix>:: + Show every object whose name begins with the given prefix. + The <prefix> must be at least 4 hexadecimal digits long to + avoid listing each and every object in the repository by + mistake. ---show-prefix:: - When the command is invoked from a subdirectory, show the - path of the current directory relative to the top-level - directory. +Options for Files +~~~~~~~~~~~~~~~~~ ---show-cdup:: - When the command is invoked from a subdirectory, show the - path of the top-level directory relative to the current - directory (typically a sequence of "../", or an empty string). +--local-env-vars:: + List the GIT_* environment variables that are local to the + repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). + Only the names of the variables are listed, not their value, + even if they are set. --git-dir:: Show `$GIT_DIR` if defined. Otherwise show the path to @@ -188,17 +208,27 @@ print a message to stderr and exit with nonzero status. --is-bare-repository:: When the repository is bare print "true", otherwise "false". ---local-env-vars:: - List the GIT_* environment variables that are local to the - repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). - Only the names of the variables are listed, not their value, - even if they are set. +--resolve-git-dir <path>:: + Check if <path> is a valid repository or a gitfile that + points at a valid repository, and print the location of the + repository. If <path> is a gitfile then the resolved path + to the real repository is printed. ---short:: ---short=number:: - Instead of outputting the full SHA-1 values of object names try to - abbreviate them to a shorter unique name. When no length is specified - 7 is used. The minimum length is 4. +--show-cdup:: + When the command is invoked from a subdirectory, show the + path of the top-level directory relative to the current + directory (typically a sequence of "../", or an empty string). + +--show-prefix:: + When the command is invoked from a subdirectory, show the + path of the current directory relative to the top-level + directory. + +--show-toplevel:: + Show the absolute path of the top-level directory. + +Other Options +~~~~~~~~~~~~~ --since=datestring:: --after=datestring:: @@ -213,12 +243,6 @@ print a message to stderr and exit with nonzero status. <args>...:: Flags and parameters to be parsed. ---resolve-git-dir <path>:: - Check if <path> is a valid repository or a gitfile that - points at a valid repository, and print the location of the - repository. If <path> is a gitfile then the resolved path - to the real repository is printed. - include::revisions.txt[] diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.txt index 1d876c2619..9d731b453d 100644 --- a/Documentation/git-rm.txt +++ b/Documentation/git-rm.txt @@ -134,14 +134,16 @@ use the following command: git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached ---------------- -Submodules -~~~~~~~~~~ +SUBMODULES +---------- Only submodules using a gitfile (which means they were cloned with a Git version 1.7.8 or newer) will be removed from the work tree, as their repository lives inside the .git directory of the superproject. If a submodule (or one of those nested inside it) still uses a .git directory, `git rm` will fail - no matter if forced -or not - to protect the submodule's history. +or not - to protect the submodule's history. If it exists the +submodule.<name> section in the linkgit:gitmodules[5] file will also +be removed and that file will be staged (unless --cached or -n are used). A submodule is considered up-to-date when the HEAD is the same as recorded in the index, no tracked files are modified and no untracked diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt index 7c8b648fbe..db7e803038 100644 --- a/Documentation/git-stash.txt +++ b/Documentation/git-stash.txt @@ -14,8 +14,7 @@ SYNOPSIS 'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>] 'git stash' branch <branchname> [<stash>] 'git stash' [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] - [-u|--include-untracked] [-a|--all] [-f|--force] - [<message>]] + [-u|--include-untracked] [-a|--all] [<message>]] 'git stash' clear 'git stash' create [<message>] 'git stash' store [-m|--message <message>] [-q|--quiet] <commit> @@ -45,7 +44,7 @@ is also possible). OPTIONS ------- -save [-p|--patch] [--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-f|--force] [<message>]:: +save [-p|--patch] [--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]:: Save your local modifications to a new 'stash', and run `git reset --hard` to revert them. The <message> part is optional and gives @@ -72,13 +71,6 @@ linkgit:git-add[1] to learn how to operate the `--patch` mode. + The `--patch` option implies `--keep-index`. You can use `--no-keep-index` to override this. -+ -In some cases, saving a stash could mean irretrievably removing some -data - if a directory with untracked files replaces a tracked file of -the same name, the new untracked files are not saved (except in case -of `--include-untracked`) but the original tracked file shall be restored. -By default, `stash save` will abort in such a case; `--force` will allow -it to remove the untracked files. list [<options>]:: diff --git a/Documentation/git-whatchanged.txt b/Documentation/git-whatchanged.txt index c600b61e2b..8b63ceb00e 100644 --- a/Documentation/git-whatchanged.txt +++ b/Documentation/git-whatchanged.txt @@ -13,43 +13,17 @@ SYNOPSIS DESCRIPTION ----------- -Shows commit logs and diff output each commit introduces. The -command internally invokes 'git rev-list' piped to -'git diff-tree', and takes command line options for both of -these commands. -This manual page describes only the most frequently used options. +Shows commit logs and diff output each commit introduces. +New users are encouraged to use linkgit:git-log[1] instead. The +`whatchanged` command is essentially the same as linkgit:git-log[1] +but defaults to show the raw format diff output and to skip merges. -OPTIONS -------- --p:: - Show textual diffs, instead of the Git internal diff - output format that is useful only to tell the changed - paths and their nature of changes. +The command is kept primarily for historical reasons; fingers of +many people who learned Git long before `git log` was invented by +reading Linux kernel mailing list are trained to type it. --<n>:: - Limit output to <n> commits. - -<since>..<until>:: - Limit output to between the two named commits (bottom - exclusive, top inclusive). - --r:: - Show Git internal diff output, but for the whole tree, - not just the top level. - --m:: - By default, differences for merge commits are not shown. - With this flag, show differences to that commit from all - of its parents. -+ -However, it is not very useful in general, although it -*is* useful on a file-by-file basis. - -include::pretty-options.txt[] - -include::pretty-formats.txt[] Examples -------- diff --git a/Documentation/git.txt b/Documentation/git.txt index 3bdd56e8f4..c4f0ed5957 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -43,6 +43,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.8.4/git.html[documentation for release 1.8.4] + +* release notes for + link:RelNotes/1.8.4.txt[1.8.4]. + * link:v1.8.3.4/git.html[documentation for release 1.8.3.4] * release notes for @@ -452,10 +457,25 @@ help ...`. linkgit:git-replace[1] for more information. --literal-pathspecs:: - Treat pathspecs literally, rather than as glob patterns. This is - equivalent to setting the `GIT_LITERAL_PATHSPECS` environment + Treat pathspecs literally (i.e. no globbing, no pathspec magic). + This is equivalent to setting the `GIT_LITERAL_PATHSPECS` environment variable to `1`. +--glob-pathspecs: + Add "glob" magic to all pathspec. This is equivalent to setting + the `GIT_GLOB_PATHSPECS` environment variable to `1`. Disabling + globbing on individual pathspecs can be done using pathspec + magic ":(literal)" + +--noglob-pathspecs: + Add "literal" magic to all pathspec. This is equivalent to setting + the `GIT_NOGLOB_PATHSPECS` environment variable to `1`. Enabling + globbing on individual pathspecs can be done using pathspec + magic ":(glob)" + +--icase-pathspecs: + Add "icase" magic to all pathspec. This is equivalent to setting + the `GIT_ICASE_PATHSPECS` environment variable to `1`. GIT COMMANDS ------------ @@ -818,7 +838,7 @@ for further details. 'GIT_FLUSH':: If this environment variable is set to "1", then commands such as 'git blame' (in incremental mode), 'git rev-list', 'git log', - 'git check-attr', 'git check-ignore', and 'git whatchanged' will + 'git check-attr' and 'git check-ignore' will force a flush of the output stream after each record have been flushed. If this variable is set to "0", the output of these commands will be done @@ -862,6 +882,18 @@ GIT_LITERAL_PATHSPECS:: literal paths to Git (e.g., paths previously given to you by `git ls-tree`, `--raw` diff output, etc). +GIT_GLOB_PATHSPECS:: + Setting this variable to `1` will cause Git to treat all + pathspecs as glob patterns (aka "glob" magic). + +GIT_NOGLOB_PATHSPECS:: + Setting this variable to `1` will cause Git to treat all + pathspecs as literal (aka "literal" magic). + +GIT_ICASE_PATHSPECS:: + Setting this variable to `1` will cause Git to treat all + pathspecs as case-insensitive. + Discussion[[Discussion]] ------------------------ diff --git a/Documentation/gitcore-tutorial.txt b/Documentation/gitcore-tutorial.txt index f538a870c7..058a352980 100644 --- a/Documentation/gitcore-tutorial.txt +++ b/Documentation/gitcore-tutorial.txt @@ -534,42 +534,9 @@ all, but just show the actual commit message. In fact, together with the 'git rev-list' program (which generates a list of revisions), 'git diff-tree' ends up being a veritable fount of -changes. A trivial (but very useful) script called 'git whatchanged' is -included with Git which does exactly this, and shows a log of recent -activities. - -To see the whole history of our pitiful little git-tutorial project, you -can do - ----------------- -$ git log ----------------- - -which shows just the log messages, or if we want to see the log together -with the associated patches use the more complex (and much more -powerful) - ----------------- -$ git whatchanged -p ----------------- - -and you will see exactly what has changed in the repository over its -short history. - -[NOTE] -When using the above two commands, the initial commit will be shown. -If this is a problem because it is huge, you can hide it by setting -the log.showroot configuration variable to false. Having this, you -can still show it for each command just adding the `--root` option, -which is a flag for 'git diff-tree' accepted by both commands. - -With that, you should now be having some inkling of what Git does, and -can explore on your own. - -[NOTE] -Most likely, you are not directly using the core -Git Plumbing commands, but using Porcelain such as 'git add', `git-rm' -and `git-commit'. +changes. You can emulate `git log`, `git log -p`, etc. with a trivial +script that pipes the output of `git rev-list` to `git diff-tree --stdin`, +which was exactly how early versions of `git log` were implemented. Tagging a version diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt index 0827f69139..bc069c23df 100644 --- a/Documentation/gitremote-helpers.txt +++ b/Documentation/gitremote-helpers.txt @@ -143,6 +143,10 @@ Supported commands: 'list', 'fetch'. + Supported commands: 'list', 'import'. +'check-connectivity':: + Can guarantee that when a clone is requested, the received + pack is self contained and is connected. + If a helper advertises 'connect', Git will use it if possible and fall back to another capability if the helper requests so when connecting (see the 'connect' command under COMMANDS). @@ -270,6 +274,9 @@ Optionally may output a 'lock <file>' line indicating a file under GIT_DIR/objects/pack which is keeping a pack until refs can be suitably updated. + +If option 'check-connectivity' is requested, the helper must output +'connectivity-ok' if the clone is self-contained and connected. ++ Supported if the helper has the "fetch" capability. 'push' +<src>:<dst>:: @@ -416,6 +423,9 @@ set by Git if the remote helper has the 'option' capability. must not rely on this option being set before connect request occurs. +'option check-connectivity' \{'true'|'false'\}:: + Request the helper to check connectivity of a clone. + SEE ALSO -------- linkgit:git-remote[1] diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.txt index dba5062b37..13a64d3aac 100644 --- a/Documentation/glossary-content.txt +++ b/Documentation/glossary-content.txt @@ -322,10 +322,54 @@ and a close parentheses `)`, and the remainder is the pattern to match against the path. + The "magic signature" consists of an ASCII symbol that is not -alphanumeric. Currently only the slash `/` is recognized as a -"magic signature": it makes the pattern match from the root of -the working tree, even when you are running the command from -inside a subdirectory. +alphanumeric. ++ +-- +top `/`;; + The magic word `top` (mnemonic: `/`) makes the pattern match + from the root of the working tree, even when you are running + the command from inside a subdirectory. + +literal;; + Wildcards in the pattern such as `*` or `?` are treated + as literal characters. + +icase;; + Case insensitive match. + +glob;; + Git treats the pattern as a shell glob suitable for + consumption by fnmatch(3) with the FNM_PATHNAME flag: + wildcards in the pattern will not match a / in the pathname. + For example, "Documentation/{asterisk}.html" matches + "Documentation/git.html" but not "Documentation/ppc/ppc.html" + or "tools/perf/Documentation/perf.html". ++ +Two consecutive asterisks ("`**`") in patterns matched against +full pathname may have special meaning: + + - A leading "`**`" followed by a slash means match in all + directories. For example, "`**/foo`" matches file or directory + "`foo`" anywhere, the same as pattern "`foo`". "**/foo/bar" + matches file or directory "`bar`" anywhere that is directly + under directory "`foo`". + + - A trailing "/**" matches everything inside. For example, + "abc/**" matches all files inside directory "abc", relative + to the location of the `.gitignore` file, with infinite depth. + + - A slash followed by two consecutive asterisks then a slash + matches zero or more directories. For example, "`a/**/b`" + matches "`a/b`", "`a/x/b`", "`a/x/y/b`" and so on. + + - Other consecutive asterisks are considered invalid. ++ +Glob magic is incompatible with literal magic. +-- ++ +Currently only the slash `/` is recognized as the "magic signature", +but it is envisioned that we will support more types of magic in later +versions of Git. + A pathspec with only a colon means "there is no pathspec". This form should not be combined with other pathspec. diff --git a/Documentation/line-range-format.txt b/Documentation/line-range-format.txt index 3e7ce72daa..d7f26039ca 100644 --- a/Documentation/line-range-format.txt +++ b/Documentation/line-range-format.txt @@ -1,3 +1,5 @@ +<start> and <end> can take one of these forms: + - number + If <start> or <end> is a number, it specifies an @@ -7,7 +9,10 @@ absolute line number (lines count from 1). - /regex/ + This form will use the first line matching the given -POSIX regex. If <end> is a regex, it will search +POSIX regex. If <start> is a regex, it will search from the end of +the previous `-L` range, if any, otherwise from the start of file. +If <start> is ``^/regex/'', it will search from the start of file. +If <end> is a regex, it will search starting at the line given by <start>. + @@ -15,11 +20,10 @@ starting at the line given by <start>. + This is only valid for <end> and will specify a number of lines before or after the line given by <start>. -+ -- :regex + -If the option's argument is of the form :regex, it denotes the range +If ``:<regex>'' is given in place of <start> and <end>, it denotes the range from the first funcname line that matches <regex>, up to the next -funcname line. -+ +funcname line. ``:<regex>'' searches from the end of the previous `-L` range, +if any, otherwise from the start of file. +``^:<regex>'' searches from the start of file. diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt index 09896a37b1..d477b3f6bc 100644 --- a/Documentation/revisions.txt +++ b/Documentation/revisions.txt @@ -58,9 +58,6 @@ the '$GIT_DIR/refs' directory or from the '$GIT_DIR/packed-refs' file. While the ref name encoding is unspecified, UTF-8 is preferred as some output processing may assume ref names in UTF-8. -'@':: - '@' alone is a shortcut for 'HEAD'. - '<refname>@\{<date>\}', e.g. 'master@\{yesterday\}', 'HEAD@\{5 minutes ago\}':: A ref followed by the suffix '@' with a date specification enclosed in a brace diff --git a/Documentation/technical/api-setup.txt b/Documentation/technical/api-setup.txt index 4f63a04d7d..540e455689 100644 --- a/Documentation/technical/api-setup.txt +++ b/Documentation/technical/api-setup.txt @@ -8,6 +8,42 @@ Talk about * is_inside_git_dir() * is_inside_work_tree() * setup_work_tree() -* get_pathspec() (Dscho) + +Pathspec +-------- + +See glossary-context.txt for the syntax of pathspec. In memory, a +pathspec set is represented by "struct pathspec" and is prepared by +parse_pathspec(). This function takes several arguments: + +- magic_mask specifies what features that are NOT supported by the + following code. If a user attempts to use such a feature, + parse_pathspec() can reject it early. + +- flags specifies other things that the caller wants parse_pathspec to + perform. + +- prefix and args come from cmd_* functions + +get_pathspec() is obsolete and should never be used in new code. + +parse_pathspec() helps catch unsupported features and reject them +politely. At a lower level, different pathspec-related functions may +not support the same set of features. Such pathspec-sensitive +functions are guarded with GUARD_PATHSPEC(), which will die in an +unfriendly way when an unsupported feature is requested. + +The command designers are supposed to make sure that GUARD_PATHSPEC() +never dies. They have to make sure all unsupported features are caught +by parse_pathspec(), not by GUARD_PATHSPEC. grepping GUARD_PATHSPEC() +should give the designers all pathspec-sensitive codepaths and what +features they support. + +A similar process is applied when a new pathspec magic is added. The +designer lifts the GUARD_PATHSPEC restriction in the functions that +support the new magic. At the same time (s)he has to make sure this +new feature will be caught at parse_pathspec() in commands that cannot +handle the new magic in some cases. grepping parse_pathspec() should +help. diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt new file mode 100644 index 0000000000..a1173ee266 --- /dev/null +++ b/Documentation/technical/http-protocol.txt @@ -0,0 +1,503 @@ +HTTP transfer protocols +======================= + +Git supports two HTTP based transfer protocols. A "dumb" protocol +which requires only a standard HTTP server on the server end of the +connection, and a "smart" protocol which requires a Git aware CGI +(or server module). This document describes both protocols. + +As a design feature smart clients can automatically upgrade "dumb" +protocol URLs to smart URLs. This permits all users to have the +same published URL, and the peers automatically select the most +efficient transport available to them. + + +URL Format +---------- + +URLs for Git repositories accessed by HTTP use the standard HTTP +URL syntax documented by RFC 1738, so they are of the form: + + http://<host>:<port>/<path>?<searchpart> + +Within this documentation the placeholder $GIT_URL will stand for +the http:// repository URL entered by the end-user. + +Servers SHOULD handle all requests to locations matching $GIT_URL, as +both the "smart" and "dumb" HTTP protocols used by Git operate +by appending additional path components onto the end of the user +supplied $GIT_URL string. + +An example of a dumb client requesting for a loose object: + + $GIT_URL: http://example.com:8080/git/repo.git + URL request: http://example.com:8080/git/repo.git/objects/d0/49f6c27a2244e12041955e262a404c7faba355 + +An example of a smart request to a catch-all gateway: + + $GIT_URL: http://example.com/daemon.cgi?svc=git&q= + URL request: http://example.com/daemon.cgi?svc=git&q=/info/refs&service=git-receive-pack + +An example of a request to a submodule: + + $GIT_URL: http://example.com/git/repo.git/path/submodule.git + URL request: http://example.com/git/repo.git/path/submodule.git/info/refs + +Clients MUST strip a trailing '/', if present, from the user supplied +$GIT_URL string to prevent empty path tokens ('//') from appearing +in any URL sent to a server. Compatible clients MUST expand +'$GIT_URL/info/refs' as 'foo/info/refs' and not 'foo//info/refs'. + + +Authentication +-------------- + +Standard HTTP authentication is used if authentication is required +to access a repository, and MAY be configured and enforced by the +HTTP server software. + +Because Git repositories are accessed by standard path components +server administrators MAY use directory based permissions within +their HTTP server to control repository access. + +Clients SHOULD support Basic authentication as described by RFC 2616. +Servers SHOULD support Basic authentication by relying upon the +HTTP server placed in front of the Git server software. + +Servers SHOULD NOT require HTTP cookies for the purposes of +authentication or access control. + +Clients and servers MAY support other common forms of HTTP based +authentication, such as Digest authentication. + + +SSL +--- + +Clients and servers SHOULD support SSL, particularly to protect +passwords when relying on Basic HTTP authentication. + + +Session State +------------- + +The Git over HTTP protocol (much like HTTP itself) is stateless +from the perspective of the HTTP server side. All state MUST be +retained and managed by the client process. This permits simple +round-robin load-balancing on the server side, without needing to +worry about state management. + +Clients MUST NOT require state management on the server side in +order to function correctly. + +Servers MUST NOT require HTTP cookies in order to function correctly. +Clients MAY store and forward HTTP cookies during request processing +as described by RFC 2616 (HTTP/1.1). Servers SHOULD ignore any +cookies sent by a client. + + +General Request Processing +-------------------------- + +Except where noted, all standard HTTP behavior SHOULD be assumed +by both client and server. This includes (but is not necessarily +limited to): + +If there is no repository at $GIT_URL, or the resource pointed to by a +location matching $GIT_URL does not exist, the server MUST NOT respond +with '200 OK' response. A server SHOULD respond with +'404 Not Found', '410 Gone', or any other suitable HTTP status code +which does not imply the resource exists as requested. + +If there is a repository at $GIT_URL, but access is not currently +permitted, the server MUST respond with the '403 Forbidden' HTTP +status code. + +Servers SHOULD support both HTTP 1.0 and HTTP 1.1. +Servers SHOULD support chunked encoding for both request and response +bodies. + +Clients SHOULD support both HTTP 1.0 and HTTP 1.1. +Clients SHOULD support chunked encoding for both request and response +bodies. + +Servers MAY return ETag and/or Last-Modified headers. + +Clients MAY revalidate cached entities by including If-Modified-Since +and/or If-None-Match request headers. + +Servers MAY return '304 Not Modified' if the relevant headers appear +in the request and the entity has not changed. Clients MUST treat +'304 Not Modified' identical to '200 OK' by reusing the cached entity. + +Clients MAY reuse a cached entity without revalidation if the +Cache-Control and/or Expires header permits caching. Clients and +servers MUST follow RFC 2616 for cache controls. + + +Discovering References +---------------------- + +All HTTP clients MUST begin either a fetch or a push exchange by +discovering the references available on the remote repository. + +Dumb Clients +~~~~~~~~~~~~ + +HTTP clients that only support the "dumb" protocol MUST discover +references by making a request for the special info/refs file of +the repository. + +Dumb HTTP clients MUST make a GET request to $GIT_URL/info/refs, +without any search/query parameters. + + C: GET $GIT_URL/info/refs HTTP/1.0 + + S: 200 OK + S: + S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint + S: d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master + S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0 + S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{} + +The Content-Type of the returned info/refs entity SHOULD be +"text/plain; charset=utf-8", but MAY be any content type. +Clients MUST NOT attempt to validate the returned Content-Type. +Dumb servers MUST NOT return a return type starting with +"application/x-git-". + +Cache-Control headers MAY be returned to disable caching of the +returned entity. + +When examining the response clients SHOULD only examine the HTTP +status code. Valid responses are '200 OK', or '304 Not Modified'. + +The returned content is a UNIX formatted text file describing +each ref and its known value. The file SHOULD be sorted by name +according to the C locale ordering. The file SHOULD NOT include +the default ref named 'HEAD'. + + info_refs = *( ref_record ) + ref_record = any_ref / peeled_ref + + any_ref = obj-id HTAB refname LF + peeled_ref = obj-id HTAB refname LF + obj-id HTAB refname "^{}" LF + +Smart Clients +~~~~~~~~~~~~~ + +HTTP clients that support the "smart" protocol (or both the +"smart" and "dumb" protocols) MUST discover references by making +a parameterized request for the info/refs file of the repository. + +The request MUST contain exactly one query parameter, +'service=$servicename', where $servicename MUST be the service +name the client wishes to contact to complete the operation. +The request MUST NOT contain additional query parameters. + + C: GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.0 + + dumb server reply: + S: 200 OK + S: + S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint + S: d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master + S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0 + S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{} + + smart server reply: + S: 200 OK + S: Content-Type: application/x-git-upload-pack-advertisement + S: Cache-Control: no-cache + S: + S: 001e# service=git-upload-pack\n + S: 004895dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint\0multi_ack\n + S: 0042d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master\n + S: 003c2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0\n + S: 003fa3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}\n + +Dumb Server Response +^^^^^^^^^^^^^^^^^^^^ +Dumb servers MUST respond with the dumb server reply format. + +See the prior section under dumb clients for a more detailed +description of the dumb server response. + +Smart Server Response +^^^^^^^^^^^^^^^^^^^^^ +If the server does not recognize the requested service name, or the +requested service name has been disabled by the server administrator, +the server MUST respond with the '403 Forbidden' HTTP status code. + +Otherwise, smart servers MUST respond with the smart server reply +format for the requested service name. + +Cache-Control headers SHOULD be used to disable caching of the +returned entity. + +The Content-Type MUST be 'application/x-$servicename-advertisement'. +Clients SHOULD fall back to the dumb protocol if another content +type is returned. When falling back to the dumb protocol clients +SHOULD NOT make an additional request to $GIT_URL/info/refs, but +instead SHOULD use the response already in hand. Clients MUST NOT +continue if they do not support the dumb protocol. + +Clients MUST validate the status code is either '200 OK' or +'304 Not Modified'. + +Clients MUST validate the first five bytes of the response entity +matches the regex "^[0-9a-f]{4}#". If this test fails, clients +MUST NOT continue. + +Clients MUST parse the entire response as a sequence of pkt-line +records. + +Clients MUST verify the first pkt-line is "# service=$servicename". +Servers MUST set $servicename to be the request parameter value. +Servers SHOULD include an LF at the end of this line. +Clients MUST ignore an LF at the end of the line. + +Servers MUST terminate the response with the magic "0000" end +pkt-line marker. + +The returned response is a pkt-line stream describing each ref and +its known value. The stream SHOULD be sorted by name according to +the C locale ordering. The stream SHOULD include the default ref +named 'HEAD' as the first ref. The stream MUST include capability +declarations behind a NUL on the first ref. + + smart_reply = PKT-LINE("# service=$servicename" LF) + ref_list + "0000" + ref_list = empty_list / non_empty_list + + empty_list = PKT-LINE(zero-id SP "capabilities^{}" NUL cap-list LF) + + non_empty_list = PKT-LINE(obj-id SP name NUL cap_list LF) + *ref_record + + cap-list = capability *(SP capability) + capability = 1*(LC_ALPHA / DIGIT / "-" / "_") + LC_ALPHA = %x61-7A + + ref_record = any_ref / peeled_ref + any_ref = PKT-LINE(obj-id SP name LF) + peeled_ref = PKT-LINE(obj-id SP name LF) + PKT-LINE(obj-id SP name "^{}" LF + +Smart Service git-upload-pack +------------------------------ +This service reads from the repository pointed to by $GIT_URL. + +Clients MUST first perform ref discovery with +'$GIT_URL/info/refs?service=git-upload-pack'. + + C: POST $GIT_URL/git-upload-pack HTTP/1.0 + C: Content-Type: application/x-git-upload-pack-request + C: + C: 0032want 0a53e9ddeaddad63ad106860237bbf53411d11a7\n + C: 0032have 441b40d833fdfa93eb2908e52742248faf0ee993\n + C: 0000 + + S: 200 OK + S: Content-Type: application/x-git-upload-pack-result + S: Cache-Control: no-cache + S: + S: ....ACK %s, continue + S: ....NAK + +Clients MUST NOT reuse or revalidate a cached reponse. +Servers MUST include sufficient Cache-Control headers +to prevent caching of the response. + +Servers SHOULD support all capabilities defined here. + +Clients MUST send at least one 'want' command in the request body. +Clients MUST NOT reference an id in a 'want' command which did not +appear in the response obtained through ref discovery unless the +server advertises capability "allow-tip-sha1-in-want". + + compute_request = want_list + have_list + request_end + request_end = "0000" / "done" + + want_list = PKT-LINE(want NUL cap_list LF) + *(want_pkt) + want_pkt = PKT-LINE(want LF) + want = "want" SP id + cap_list = *(SP capability) SP + + have_list = *PKT-LINE("have" SP id LF) + +TODO: Document this further. +TODO: Don't use uppercase for variable names below. + +The Negotiation Algorithm +~~~~~~~~~~~~~~~~~~~~~~~~~ +The computation to select the minimal pack proceeds as follows +(c = client, s = server): + + init step: + (c) Use ref discovery to obtain the advertised refs. + (c) Place any object seen into set ADVERTISED. + + (c) Build an empty set, COMMON, to hold the objects that are later + determined to be on both ends. + (c) Build a set, WANT, of the objects from ADVERTISED the client + wants to fetch, based on what it saw during ref discovery. + + (c) Start a queue, C_PENDING, ordered by commit time (popping newest + first). Add all client refs. When a commit is popped from + the queue its parents SHOULD be automatically inserted back. + Commits MUST only enter the queue once. + + one compute step: + (c) Send one $GIT_URL/git-upload-pack request: + + C: 0032want <WANT #1>............................... + C: 0032want <WANT #2>............................... + .... + C: 0032have <COMMON #1>............................. + C: 0032have <COMMON #2>............................. + .... + C: 0032have <HAVE #1>............................... + C: 0032have <HAVE #2>............................... + .... + C: 0000 + + The stream is organized into "commands", with each command + appearing by itself in a pkt-line. Within a command line + the text leading up to the first space is the command name, + and the remainder of the line to the first LF is the value. + Command lines are terminated with an LF as the last byte of + the pkt-line value. + + Commands MUST appear in the following order, if they appear + at all in the request stream: + + * want + * have + + The stream is terminated by a pkt-line flush ("0000"). + + A single "want" or "have" command MUST have one hex formatted + SHA-1 as its value. Multiple SHA-1s MUST be sent by sending + multiple commands. + + The HAVE list is created by popping the first 32 commits + from C_PENDING. Less can be supplied if C_PENDING empties. + + If the client has sent 256 HAVE commits and has not yet + received one of those back from S_COMMON, or the client has + emptied C_PENDING it SHOULD include a "done" command to let + the server know it won't proceed: + + C: 0009done + + (s) Parse the git-upload-pack request: + + Verify all objects in WANT are directly reachable from refs. + + The server MAY walk backwards through history or through + the reflog to permit slightly stale requests. + + If no WANT objects are received, send an error: + +TODO: Define error if no want lines are requested. + + If any WANT object is not reachable, send an error: + +TODO: Define error if an invalid want is requested. + + Create an empty list, S_COMMON. + + If 'have' was sent: + + Loop through the objects in the order supplied by the client. + For each object, if the server has the object reachable from + a ref, add it to S_COMMON. If a commit is added to S_COMMON, + do not add any ancestors, even if they also appear in HAVE. + + (s) Send the git-upload-pack response: + + If the server has found a closed set of objects to pack or the + request ends with "done", it replies with the pack. + +TODO: Document the pack based response + S: PACK... + + The returned stream is the side-band-64k protocol supported + by the git-upload-pack service, and the pack is embedded into + stream 1. Progress messages from the server side MAY appear + in stream 2. + + Here a "closed set of objects" is defined to have at least + one path from every WANT to at least one COMMON object. + + If the server needs more information, it replies with a + status continue response: + +TODO: Document the non-pack response + + (c) Parse the upload-pack response: + +TODO: Document parsing response + + Do another compute step. + + +Smart Service git-receive-pack +------------------------------ +This service reads from the repository pointed to by $GIT_URL. + +Clients MUST first perform ref discovery with +'$GIT_URL/info/refs?service=git-receive-pack'. + + C: POST $GIT_URL/git-receive-pack HTTP/1.0 + C: Content-Type: application/x-git-receive-pack-request + C: + C: ....0a53e9ddeaddad63ad106860237bbf53411d11a7 441b40d833fdfa93eb2908e52742248faf0ee993 refs/heads/maint\0 report-status + C: 0000 + C: PACK.... + + S: 200 OK + S: Content-Type: application/x-git-receive-pack-result + S: Cache-Control: no-cache + S: + S: .... + +Clients MUST NOT reuse or revalidate a cached reponse. +Servers MUST include sufficient Cache-Control headers +to prevent caching of the response. + +Servers SHOULD support all capabilities defined here. + +Clients MUST send at least one command in the request body. +Within the command portion of the request body clients SHOULD send +the id obtained through ref discovery as old_id. + + update_request = command_list + "PACK" <binary data> + + command_list = PKT-LINE(command NUL cap_list LF) + *(command_pkt) + command_pkt = PKT-LINE(command LF) + cap_list = *(SP capability) SP + + command = create / delete / update + create = zero-id SP new_id SP name + delete = old_id SP zero-id SP name + update = old_id SP new_id SP name + +TODO: Document this further. + + +References +---------- + +link:http://www.ietf.org/rfc/rfc1738.txt[RFC 1738: Uniform Resource Locators (URL)] +link:http://www.ietf.org/rfc/rfc2616.txt[RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1] +link:technical/pack-protocol.txt +link:technical/protocol-capabilities.txt diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index ede98a8c16..b444c18f17 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v1.8.4-rc1 +DEF_VER=v1.8.4.GIT LF=' ' @@ -580,6 +580,7 @@ TEST_PROGRAMS_NEED_X += test-sigchain TEST_PROGRAMS_NEED_X += test-string-list TEST_PROGRAMS_NEED_X += test-subprocess TEST_PROGRAMS_NEED_X += test-svn-fe +TEST_PROGRAMS_NEED_X += test-urlmatch-normalization TEST_PROGRAMS_NEED_X += test-wildmatch TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X)) @@ -736,6 +737,7 @@ LIB_H += tree-walk.h LIB_H += tree.h LIB_H += unpack-trees.h LIB_H += url.h +LIB_H += urlmatch.h LIB_H += userdiff.h LIB_H += utf8.h LIB_H += varint.h @@ -886,6 +888,7 @@ LIB_OBJS += tree.o LIB_OBJS += tree-walk.o LIB_OBJS += unpack-trees.o LIB_OBJS += url.o +LIB_OBJS += urlmatch.o LIB_OBJS += usage.o LIB_OBJS += userdiff.o LIB_OBJS += utf8.o @@ -1182,6 +1185,9 @@ ifdef NEEDS_SSL_WITH_CRYPTO else LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto endif +ifdef APPLE_COMMON_CRYPTO + LIB_4_CRYPTO += -framework Security -framework CoreFoundation +endif endif ifdef NEEDS_LIBICONV ifdef ICONVDIR @@ -1 +1 @@ -Documentation/RelNotes/1.8.4.txt
\ No newline at end of file +Documentation/RelNotes/1.8.5.txt
\ No newline at end of file @@ -151,7 +151,6 @@ int write_archive_entries(struct archiver_args *args, struct archiver_context context; struct unpack_trees_options opts; struct tree_desc t; - struct pathspec pathspec; int err; if (args->baselen > 0 && args->base[args->baselen - 1] == '/') { @@ -186,10 +185,8 @@ int write_archive_entries(struct archiver_args *args, git_attr_set_direction(GIT_ATTR_INDEX, &the_index); } - init_pathspec(&pathspec, args->pathspec); - err = read_tree_recursive(args->tree, "", 0, 0, &pathspec, + err = read_tree_recursive(args->tree, "", 0, 0, &args->pathspec, write_archive_entry, &context); - free_pathspec(&pathspec); if (err == READ_TREE_RECURSIVE) err = 0; return err; @@ -222,7 +219,7 @@ static int path_exists(struct tree *tree, const char *path) struct pathspec pathspec; int ret; - init_pathspec(&pathspec, paths); + parse_pathspec(&pathspec, 0, 0, "", paths); ret = read_tree_recursive(tree, "", 0, 0, &pathspec, reject_entry, NULL); free_pathspec(&pathspec); return ret != 0; @@ -231,11 +228,18 @@ static int path_exists(struct tree *tree, const char *path) static void parse_pathspec_arg(const char **pathspec, struct archiver_args *ar_args) { - ar_args->pathspec = pathspec = get_pathspec("", pathspec); + /* + * must be consistent with parse_pathspec in path_exists() + * Also if pathspec patterns are dependent, we're in big + * trouble as we test each one separately + */ + parse_pathspec(&ar_args->pathspec, 0, + PATHSPEC_PREFER_FULL, + "", pathspec); if (pathspec) { while (*pathspec) { if (**pathspec && !path_exists(ar_args->tree, *pathspec)) - die("path not found: %s", *pathspec); + die(_("pathspec '%s' did not match any files"), *pathspec); pathspec++; } } @@ -1,6 +1,8 @@ #ifndef ARCHIVE_H #define ARCHIVE_H +#include "pathspec.h" + struct archiver_args { const char *base; size_t baselen; @@ -8,7 +10,7 @@ struct archiver_args { const unsigned char *commit_sha1; const struct commit *commit; time_t time; - const char **pathspec; + struct pathspec pathspec; unsigned int verbose : 1; unsigned int worktree_attributes : 1; unsigned int convert : 1; diff --git a/builtin/add.c b/builtin/add.c index 8266a9cb70..ae0bdc78bb 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -166,14 +166,16 @@ static void update_callback(struct diff_queue_struct *q, } } -static void update_files_in_cache(const char *prefix, const char **pathspec, +static void update_files_in_cache(const char *prefix, + const struct pathspec *pathspec, struct update_callback_data *data) { struct rev_info rev; init_revisions(&rev, prefix); setup_revisions(0, NULL, &rev, NULL); - init_pathspec(&rev.prune_data, pathspec); + if (pathspec) + copy_pathspec(&rev.prune_data, pathspec); rev.diffopt.output_format = DIFF_FORMAT_CALLBACK; rev.diffopt.format_callback = update_callback; rev.diffopt.format_callback_data = data; @@ -181,7 +183,8 @@ static void update_files_in_cache(const char *prefix, const char **pathspec, run_diff_files(&rev, DIFF_RACY_IS_MODIFIED); } -int add_files_to_cache(const char *prefix, const char **pathspec, int flags) +int add_files_to_cache(const char *prefix, + const struct pathspec *pathspec, int flags) { struct update_callback_data data; @@ -192,23 +195,21 @@ int add_files_to_cache(const char *prefix, const char **pathspec, int flags) } #define WARN_IMPLICIT_DOT (1u << 0) -static char *prune_directory(struct dir_struct *dir, const char **pathspec, +static char *prune_directory(struct dir_struct *dir, struct pathspec *pathspec, int prefix, unsigned flag) { char *seen; - int i, specs; + int i; struct dir_entry **src, **dst; - for (specs = 0; pathspec[specs]; specs++) - /* nothing */; - seen = xcalloc(specs, 1); + seen = xcalloc(pathspec->nr, 1); src = dst = dir->entries; i = dir->nr; while (--i >= 0) { struct dir_entry *entry = *src++; - if (match_pathspec(pathspec, entry->name, entry->len, - prefix, seen)) + if (match_pathspec_depth(pathspec, entry->name, entry->len, + prefix, seen)) *dst++ = entry; else if (flag & WARN_IMPLICIT_DOT) /* @@ -222,72 +223,33 @@ static char *prune_directory(struct dir_struct *dir, const char **pathspec, warn_pathless_add(); } dir->nr = dst - dir->entries; - add_pathspec_matches_against_index(pathspec, seen, specs); + add_pathspec_matches_against_index(pathspec, seen); return seen; } -/* - * Checks the index to see whether any path in pathspec refers to - * something inside a submodule. If so, dies with an error message. - */ -static void treat_gitlinks(const char **pathspec) -{ - int i; - - if (!pathspec || !*pathspec) - return; - - for (i = 0; pathspec[i]; i++) - pathspec[i] = check_path_for_gitlink(pathspec[i]); -} - -static void refresh(int verbose, const char **pathspec) +static void refresh(int verbose, const struct pathspec *pathspec) { char *seen; - int i, specs; + int i; - for (specs = 0; pathspec[specs]; specs++) - /* nothing */; - seen = xcalloc(specs, 1); + seen = xcalloc(pathspec->nr, 1); refresh_index(&the_index, verbose ? REFRESH_IN_PORCELAIN : REFRESH_QUIET, pathspec, seen, _("Unstaged changes after refreshing the index:")); - for (i = 0; i < specs; i++) { + for (i = 0; i < pathspec->nr; i++) { if (!seen[i]) - die(_("pathspec '%s' did not match any files"), pathspec[i]); + die(_("pathspec '%s' did not match any files"), + pathspec->items[i].match); } free(seen); } -/* - * Normalizes argv relative to prefix, via get_pathspec(), and then - * runs die_if_path_beyond_symlink() on each path in the normalized - * list. - */ -static const char **validate_pathspec(const char **argv, const char *prefix) -{ - const char **pathspec = get_pathspec(prefix, argv); - - if (pathspec) { - const char **p; - for (p = pathspec; *p; p++) { - die_if_path_beyond_symlink(*p, prefix); - } - } - - return pathspec; -} - int run_add_interactive(const char *revision, const char *patch_mode, - const char **pathspec) + const struct pathspec *pathspec) { - int status, ac, pc = 0; + int status, ac, i; const char **args; - if (pathspec) - while (pathspec[pc]) - pc++; - - args = xcalloc(sizeof(const char *), (pc + 5)); + args = xcalloc(sizeof(const char *), (pathspec->nr + 6)); ac = 0; args[ac++] = "add--interactive"; if (patch_mode) @@ -295,11 +257,9 @@ int run_add_interactive(const char *revision, const char *patch_mode, if (revision) args[ac++] = revision; args[ac++] = "--"; - if (pc) { - memcpy(&(args[ac]), pathspec, sizeof(const char *) * pc); - ac += pc; - } - args[ac] = NULL; + for (i = 0; i < pathspec->nr; i++) + /* pass original pathspec, to be re-parsed */ + args[ac++] = pathspec->items[i].original; status = run_command_v_opt(args, RUN_GIT_CMD); free(args); @@ -308,17 +268,23 @@ int run_add_interactive(const char *revision, const char *patch_mode, int interactive_add(int argc, const char **argv, const char *prefix, int patch) { - const char **pathspec = NULL; + struct pathspec pathspec; - if (argc) { - pathspec = validate_pathspec(argv, prefix); - if (!pathspec) - return -1; - } + /* + * git-add--interactive itself does not parse pathspec. It + * simply passes the pathspec to other builtin commands. Let's + * hope all of them support all magic, or we'll need to limit + * the magic here. + */ + parse_pathspec(&pathspec, PATHSPEC_ALL_MAGIC & ~PATHSPEC_FROMTOP, + PATHSPEC_PREFER_FULL | + PATHSPEC_SYMLINK_LEADING_PATH | + PATHSPEC_PREFIX_ORIGIN, + prefix, argv); return run_add_interactive(NULL, patch ? "--patch" : NULL, - pathspec); + &pathspec); } static int edit_patch(int argc, const char **argv, const char *prefix) @@ -446,7 +412,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) { int exit_status = 0; int newfd; - const char **pathspec; + struct pathspec pathspec; struct dir_struct dir; int flags; int add_new_files; @@ -527,14 +493,23 @@ int cmd_add(int argc, const char **argv, const char *prefix) fprintf(stderr, _("Maybe you wanted to say 'git add .'?\n")); return 0; } - pathspec = validate_pathspec(argv, prefix); if (read_cache() < 0) die(_("index file corrupt")); - treat_gitlinks(pathspec); + + /* + * Check the "pathspec '%s' did not match any files" block + * below before enabling new magic. + */ + parse_pathspec(&pathspec, 0, + PATHSPEC_PREFER_FULL | + PATHSPEC_SYMLINK_LEADING_PATH | + PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE, + prefix, argv); if (add_new_files) { int baselen; + struct pathspec empty_pathspec; /* Set up the default git porcelain excludes */ memset(&dir, 0, sizeof(dir)); @@ -543,35 +518,49 @@ int cmd_add(int argc, const char **argv, const char *prefix) setup_standard_excludes(&dir); } + memset(&empty_pathspec, 0, sizeof(empty_pathspec)); /* This picks up the paths that are not tracked */ - baselen = fill_directory(&dir, implicit_dot ? NULL : pathspec); - if (pathspec) - seen = prune_directory(&dir, pathspec, baselen, + baselen = fill_directory(&dir, implicit_dot ? &empty_pathspec : &pathspec); + if (pathspec.nr) + seen = prune_directory(&dir, &pathspec, baselen, implicit_dot ? WARN_IMPLICIT_DOT : 0); } if (refresh_only) { - refresh(verbose, pathspec); + refresh(verbose, &pathspec); goto finish; } if (implicit_dot && prefix) refresh_cache(REFRESH_QUIET); - if (pathspec) { + if (pathspec.nr) { int i; if (!seen) - seen = find_pathspecs_matching_against_index(pathspec); - for (i = 0; pathspec[i]; i++) { - if (!seen[i] && pathspec[i][0] - && !file_exists(pathspec[i])) { + seen = find_pathspecs_matching_against_index(&pathspec); + + /* + * file_exists() assumes exact match + */ + GUARD_PATHSPEC(&pathspec, + PATHSPEC_FROMTOP | + PATHSPEC_LITERAL | + PATHSPEC_GLOB | + PATHSPEC_ICASE); + + for (i = 0; i < pathspec.nr; i++) { + const char *path = pathspec.items[i].match; + if (!seen[i] && + ((pathspec.items[i].magic & + (PATHSPEC_GLOB | PATHSPEC_ICASE)) || + !file_exists(path))) { if (ignore_missing) { int dtype = DT_UNKNOWN; - if (is_excluded(&dir, pathspec[i], &dtype)) - dir_add_ignored(&dir, pathspec[i], strlen(pathspec[i])); + if (is_excluded(&dir, path, &dtype)) + dir_add_ignored(&dir, path, pathspec.items[i].len); } else die(_("pathspec '%s' did not match any files"), - pathspec[i]); + pathspec.items[i].original); } } free(seen); @@ -587,10 +576,11 @@ int cmd_add(int argc, const char **argv, const char *prefix) */ update_data.implicit_dot = prefix; update_data.implicit_dot_len = strlen(prefix); - pathspec = NULL; + free_pathspec(&pathspec); + memset(&pathspec, 0, sizeof(pathspec)); } update_data.flags = flags & ~ADD_CACHE_IMPLICIT_DOT; - update_files_in_cache(prefix, pathspec, &update_data); + update_files_in_cache(prefix, &pathspec, &update_data); exit_status |= !!update_data.add_errors; if (add_new_files) diff --git a/builtin/apply.c b/builtin/apply.c index 50912c928f..ef32e4f624 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -4363,23 +4363,23 @@ int cmd_apply(int argc, const char **argv, const char *prefix_) { OPTION_CALLBACK, 'p', NULL, NULL, N_("num"), N_("remove <num> leading slashes from traditional diff paths"), 0, option_parse_p }, - OPT_BOOLEAN(0, "no-add", &no_add, + OPT_BOOL(0, "no-add", &no_add, N_("ignore additions made by the patch")), - OPT_BOOLEAN(0, "stat", &diffstat, + OPT_BOOL(0, "stat", &diffstat, N_("instead of applying the patch, output diffstat for the input")), OPT_NOOP_NOARG(0, "allow-binary-replacement"), OPT_NOOP_NOARG(0, "binary"), - OPT_BOOLEAN(0, "numstat", &numstat, + OPT_BOOL(0, "numstat", &numstat, N_("show number of added and deleted lines in decimal notation")), - OPT_BOOLEAN(0, "summary", &summary, + OPT_BOOL(0, "summary", &summary, N_("instead of applying the patch, output a summary for the input")), - OPT_BOOLEAN(0, "check", &check, + OPT_BOOL(0, "check", &check, N_("instead of applying the patch, see if the patch is applicable")), - OPT_BOOLEAN(0, "index", &check_index, + OPT_BOOL(0, "index", &check_index, N_("make sure the patch is applicable to the current index")), - OPT_BOOLEAN(0, "cached", &cached, + OPT_BOOL(0, "cached", &cached, N_("apply a patch without touching the working tree")), - OPT_BOOLEAN(0, "apply", &force_apply, + OPT_BOOL(0, "apply", &force_apply, N_("also apply the patch (use with --stat/--summary/--check)")), OPT_BOOL('3', "3way", &threeway, N_( "attempt three-way merge if a patch does not apply")), @@ -4399,13 +4399,13 @@ int cmd_apply(int argc, const char **argv, const char *prefix_) { OPTION_CALLBACK, 0, "ignore-whitespace", NULL, NULL, N_("ignore changes in whitespace when finding context"), PARSE_OPT_NOARG, option_parse_space_change }, - OPT_BOOLEAN('R', "reverse", &apply_in_reverse, + OPT_BOOL('R', "reverse", &apply_in_reverse, N_("apply the patch in reverse")), - OPT_BOOLEAN(0, "unidiff-zero", &unidiff_zero, + OPT_BOOL(0, "unidiff-zero", &unidiff_zero, N_("don't expect at least one line of context")), - OPT_BOOLEAN(0, "reject", &apply_with_reject, + OPT_BOOL(0, "reject", &apply_with_reject, N_("leave the rejected hunks in corresponding *.rej files")), - OPT_BOOLEAN(0, "allow-overlap", &allow_overlap, + OPT_BOOL(0, "allow-overlap", &allow_overlap, N_("allow overlapping hunks")), OPT__VERBOSE(&apply_verbosely, N_("be verbose")), OPT_BIT(0, "inaccurate-eof", &options, diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c index e3884e3bb6..3324229025 100644 --- a/builtin/bisect--helper.c +++ b/builtin/bisect--helper.c @@ -13,10 +13,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix) int next_all = 0; int no_checkout = 0; struct option options[] = { - OPT_BOOLEAN(0, "next-all", &next_all, - N_("perform 'git bisect next'")), - OPT_BOOLEAN(0, "no-checkout", &no_checkout, - N_("update BISECT_HEAD instead of checking out the current commit")), + OPT_BOOL(0, "next-all", &next_all, + N_("perform 'git bisect next'")), + OPT_BOOL(0, "no-checkout", &no_checkout, + N_("update BISECT_HEAD instead of checking out the current commit")), OPT_END() }; diff --git a/builtin/blame.c b/builtin/blame.c index 079dcd3407..6da7233968 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -22,6 +22,7 @@ #include "utf8.h" #include "userdiff.h" #include "line-range.h" +#include "line-log.h" static char blame_usage[] = N_("git blame [options] [rev-opts] [rev] [--] file"); @@ -408,7 +409,7 @@ static struct origin *find_origin(struct scoreboard *sb, paths[0] = origin->path; paths[1] = NULL; - diff_tree_setup_paths(paths, &diff_opts); + parse_pathspec(&diff_opts.pathspec, PATHSPEC_ALL_MAGIC, 0, "", paths); diff_setup_done(&diff_opts); if (is_null_sha1(origin->commit->object.sha1)) @@ -458,7 +459,7 @@ static struct origin *find_origin(struct scoreboard *sb, } } diff_flush(&diff_opts); - diff_tree_release_paths(&diff_opts); + free_pathspec(&diff_opts.pathspec); if (porigin) { /* * Create a freestanding copy that is not part of @@ -486,15 +487,12 @@ static struct origin *find_rename(struct scoreboard *sb, struct origin *porigin = NULL; struct diff_options diff_opts; int i; - const char *paths[2]; diff_setup(&diff_opts); DIFF_OPT_SET(&diff_opts, RECURSIVE); diff_opts.detect_rename = DIFF_DETECT_RENAME; diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT; diff_opts.single_follow = origin->path; - paths[0] = NULL; - diff_tree_setup_paths(paths, &diff_opts); diff_setup_done(&diff_opts); if (is_null_sha1(origin->commit->object.sha1)) @@ -516,7 +514,7 @@ static struct origin *find_rename(struct scoreboard *sb, } } diff_flush(&diff_opts); - diff_tree_release_paths(&diff_opts); + free_pathspec(&diff_opts.pathspec); return porigin; } @@ -1064,7 +1062,6 @@ static int find_copy_in_parent(struct scoreboard *sb, int opt) { struct diff_options diff_opts; - const char *paths[1]; int i, j; int retval; struct blame_list *blame_list; @@ -1078,8 +1075,6 @@ static int find_copy_in_parent(struct scoreboard *sb, DIFF_OPT_SET(&diff_opts, RECURSIVE); diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT; - paths[0] = NULL; - diff_tree_setup_paths(paths, &diff_opts); diff_setup_done(&diff_opts); /* Try "find copies harder" on new path if requested; @@ -1162,7 +1157,7 @@ static int find_copy_in_parent(struct scoreboard *sb, } reset_scanned_flag(sb); diff_flush(&diff_opts); - diff_tree_release_paths(&diff_opts); + free_pathspec(&diff_opts.pathspec); return retval; } @@ -1937,18 +1932,6 @@ static const char *add_prefix(const char *prefix, const char *path) return prefix_path(prefix, prefix ? strlen(prefix) : 0, path); } -/* - * Parsing of -L option - */ -static void prepare_blame_range(struct scoreboard *sb, - const char *bottomtop, - long lno, - long *bottom, long *top) -{ - if (parse_range_arg(bottomtop, nth_line_cb, sb, lno, bottom, top, sb->path)) - usage(blame_usage); -} - static int git_blame_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "blame.showroot")) { @@ -2245,38 +2228,27 @@ static int blame_move_callback(const struct option *option, const char *arg, int return 0; } -static int blame_bottomtop_callback(const struct option *option, const char *arg, int unset) -{ - const char **bottomtop = option->value; - if (!arg) - return -1; - if (*bottomtop) - die("More than one '-L n,m' option given"); - *bottomtop = arg; - return 0; -} - int cmd_blame(int argc, const char **argv, const char *prefix) { struct rev_info revs; const char *path; struct scoreboard sb; struct origin *o; - struct blame_entry *ent; - long dashdash_pos, bottom, top, lno; + struct blame_entry *ent = NULL; + long dashdash_pos, lno; const char *final_commit_name = NULL; enum object_type type; - static const char *bottomtop = NULL; + static struct string_list range_list; static int output_option = 0, opt = 0; static int show_stats = 0; static const char *revs_file = NULL; static const char *contents_from = NULL; static const struct option options[] = { - OPT_BOOLEAN(0, "incremental", &incremental, N_("Show blame entries as we find them, incrementally")), - OPT_BOOLEAN('b', NULL, &blank_boundary, N_("Show blank SHA-1 for boundary commits (Default: off)")), - OPT_BOOLEAN(0, "root", &show_root, N_("Do not treat root commits as boundaries (Default: off)")), - OPT_BOOLEAN(0, "show-stats", &show_stats, N_("Show work cost statistics")), + OPT_BOOL(0, "incremental", &incremental, N_("Show blame entries as we find them, incrementally")), + OPT_BOOL('b', NULL, &blank_boundary, N_("Show blank SHA-1 for boundary commits (Default: off)")), + OPT_BOOL(0, "root", &show_root, N_("Do not treat root commits as boundaries (Default: off)")), + OPT_BOOL(0, "show-stats", &show_stats, N_("Show work cost statistics")), OPT_BIT(0, "score-debug", &output_option, N_("Show output score for blame entries"), OUTPUT_SHOW_SCORE), OPT_BIT('f', "show-name", &output_option, N_("Show original filename (Default: auto)"), OUTPUT_SHOW_NAME), OPT_BIT('n', "show-number", &output_option, N_("Show original linenumber (Default: off)"), OUTPUT_SHOW_NUMBER), @@ -2293,13 +2265,16 @@ int cmd_blame(int argc, const char **argv, const char *prefix) OPT_STRING(0, "contents", &contents_from, N_("file"), N_("Use <file>'s contents as the final image")), { OPTION_CALLBACK, 'C', NULL, &opt, N_("score"), N_("Find line copies within and across files"), PARSE_OPT_OPTARG, blame_copy_callback }, { OPTION_CALLBACK, 'M', NULL, &opt, N_("score"), N_("Find line movements within and across files"), PARSE_OPT_OPTARG, blame_move_callback }, - OPT_CALLBACK('L', NULL, &bottomtop, N_("n,m"), N_("Process only line range n,m, counting from 1"), blame_bottomtop_callback), + OPT_STRING_LIST('L', NULL, &range_list, N_("n,m"), N_("Process only line range n,m, counting from 1")), OPT__ABBREV(&abbrev), OPT_END() }; struct parse_opt_ctx_t ctx; int cmd_is_annotate = !strcmp(argv[0], "annotate"); + struct range_set ranges; + unsigned int range_i; + long anchor; git_config(git_blame_config, NULL); init_revisions(&revs, NULL); @@ -2492,22 +2467,48 @@ parse_done: num_read_blob++; lno = prepare_lines(&sb); - bottom = top = 0; - if (bottomtop) - prepare_blame_range(&sb, bottomtop, lno, &bottom, &top); - if (bottom < 1) - bottom = 1; - if (top < 1) - top = lno; - bottom--; - if (lno < top || lno < bottom) - die("file %s has only %lu lines", path, lno); - - ent = xcalloc(1, sizeof(*ent)); - ent->lno = bottom; - ent->num_lines = top - bottom; - ent->suspect = o; - ent->s_lno = bottom; + if (lno && !range_list.nr) + string_list_append(&range_list, xstrdup("1")); + + anchor = 1; + range_set_init(&ranges, range_list.nr); + for (range_i = 0; range_i < range_list.nr; ++range_i) { + long bottom, top; + if (parse_range_arg(range_list.items[range_i].string, + nth_line_cb, &sb, lno, anchor, + &bottom, &top, sb.path)) + usage(blame_usage); + if (lno < top || ((lno || bottom) && lno < bottom)) + die("file %s has only %lu lines", path, lno); + if (bottom < 1) + bottom = 1; + if (top < 1) + top = lno; + bottom--; + range_set_append_unsafe(&ranges, bottom, top); + anchor = top + 1; + } + sort_and_merge_range_set(&ranges); + + for (range_i = ranges.nr; range_i > 0; --range_i) { + const struct range *r = &ranges.ranges[range_i - 1]; + long bottom = r->start; + long top = r->end; + struct blame_entry *next = ent; + ent = xcalloc(1, sizeof(*ent)); + ent->lno = bottom; + ent->num_lines = top - bottom; + ent->suspect = o; + ent->s_lno = bottom; + ent->next = next; + if (next) + next->prev = ent; + origin_incref(o); + } + origin_decref(o); + + range_set_release(&ranges); + string_list_clear(&range_list, 0); sb.ent = ent; sb.path = path; diff --git a/builtin/branch.c b/builtin/branch.c index 083689063f..0903763702 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -797,7 +797,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix) OPT_SET_INT( 0, "set-upstream", &track, N_("change upstream info"), BRANCH_TRACK_OVERRIDE), OPT_STRING('u', "set-upstream-to", &new_upstream, "upstream", "change the upstream info"), - OPT_BOOLEAN(0, "unset-upstream", &unset_upstream, "Unset the upstream info"), + OPT_BOOL(0, "unset-upstream", &unset_upstream, "Unset the upstream info"), OPT__COLOR(&branch_use_color, N_("use colored output")), OPT_SET_INT('r', "remotes", &kinds, N_("act on remote-tracking branches"), REF_REMOTE_BRANCH), @@ -822,10 +822,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix) OPT_BIT('D', NULL, &delete, N_("delete branch (even if not merged)"), 2), OPT_BIT('m', "move", &rename, N_("move/rename a branch and its reflog"), 1), OPT_BIT('M', NULL, &rename, N_("move/rename a branch, even if target exists"), 2), - OPT_BOOLEAN(0, "list", &list, N_("list branch names")), - OPT_BOOLEAN('l', "create-reflog", &reflog, N_("create the branch's reflog")), - OPT_BOOLEAN(0, "edit-description", &edit_description, - N_("edit the description for the branch")), + OPT_BOOL(0, "list", &list, N_("list branch names")), + OPT_BOOL('l', "create-reflog", &reflog, N_("create the branch's reflog")), + OPT_BOOL(0, "edit-description", &edit_description, + N_("edit the description for the branch")), OPT__FORCE(&force_create, N_("force creation (when already exists)")), { OPTION_CALLBACK, 0, "no-merged", &merge_filter_ref, @@ -872,7 +872,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix) if (with_commit || merge_filter != NO_FILTER) list = 1; - if (!!delete + !!rename + !!force_create + !!list + !!new_upstream + !!unset_upstream > 1) + if (!!delete + !!rename + !!force_create + !!new_upstream + + list + unset_upstream > 1) usage_with_options(builtin_branch_usage, options); if (abbrev == -1) diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 425346048b..41afaa534b 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -119,6 +119,7 @@ struct expand_data { enum object_type type; unsigned long size; unsigned long disk_size; + const char *rest; /* * If mark_query is true, we do not expand anything, but rather @@ -127,6 +128,13 @@ struct expand_data { int mark_query; /* + * Whether to split the input on whitespace before feeding it to + * get_sha1; this is decided during the mark_query phase based on + * whether we have a %(rest) token in our format. + */ + int split_on_whitespace; + + /* * After a mark_query run, this object_info is set up to be * passed to sha1_object_info_extended. It will point to the data * elements above, so you can retrieve the response from there. @@ -163,6 +171,11 @@ static void expand_atom(struct strbuf *sb, const char *atom, int len, data->info.disk_sizep = &data->disk_size; else strbuf_addf(sb, "%lu", data->disk_size); + } else if (is_atom("rest", atom, len)) { + if (data->mark_query) + data->split_on_whitespace = 1; + else if (data->rest) + strbuf_addstr(sb, data->rest); } else die("unknown format element: %.*s", len, atom); } @@ -273,7 +286,23 @@ static int batch_objects(struct batch_options *opt) warn_on_object_refname_ambiguity = 0; while (strbuf_getline(&buf, stdin, '\n') != EOF) { - int error = batch_one_object(buf.buf, opt, &data); + int error; + + if (data.split_on_whitespace) { + /* + * Split at first whitespace, tying off the beginning + * of the string and saving the remainder (or NULL) in + * data.rest. + */ + char *p = strpbrk(buf.buf, " \t"); + if (p) { + while (*p && strchr(" \t", *p)) + *p++ = '\0'; + } + data.rest = p; + } + + error = batch_one_object(buf.buf, opt, &data); if (error) return error; } diff --git a/builtin/check-attr.c b/builtin/check-attr.c index 075d01d30c..e9af7b2bfb 100644 --- a/builtin/check-attr.c +++ b/builtin/check-attr.c @@ -13,14 +13,14 @@ N_("git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>"), NULL }; -static int null_term_line; +static int nul_term_line; static const struct option check_attr_options[] = { - OPT_BOOLEAN('a', "all", &all_attrs, N_("report all attributes set on file")), - OPT_BOOLEAN(0, "cached", &cached_attrs, N_("use .gitattributes only from the index")), - OPT_BOOLEAN(0 , "stdin", &stdin_paths, N_("read file names from stdin")), - OPT_BOOLEAN('z', NULL, &null_term_line, - N_("input paths are terminated by a null character")), + OPT_BOOL('a', "all", &all_attrs, N_("report all attributes set on file")), + OPT_BOOL(0, "cached", &cached_attrs, N_("use .gitattributes only from the index")), + OPT_BOOL(0 , "stdin", &stdin_paths, N_("read file names from stdin")), + OPT_BOOL('z', NULL, &nul_term_line, + N_("terminate input and output records by a NUL character")), OPT_END() }; @@ -38,8 +38,16 @@ static void output_attr(int cnt, struct git_attr_check *check, else if (ATTR_UNSET(value)) value = "unspecified"; - quote_c_style(file, NULL, stdout, 0); - printf(": %s: %s\n", git_attr_name(check[j].attr), value); + if (nul_term_line) { + printf("%s%c" /* path */ + "%s%c" /* attrname */ + "%s%c" /* attrvalue */, + file, 0, git_attr_name(check[j].attr), 0, value, 0); + } else { + quote_c_style(file, NULL, stdout, 0); + printf(": %s: %s\n", git_attr_name(check[j].attr), value); + } + } } @@ -65,7 +73,7 @@ static void check_attr_stdin_paths(const char *prefix, int cnt, struct git_attr_check *check) { struct strbuf buf, nbuf; - int line_termination = null_term_line ? 0 : '\n'; + int line_termination = nul_term_line ? 0 : '\n'; strbuf_init(&buf, 0); strbuf_init(&nbuf, 0); diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c index 4a8fc707c7..e2a1cef684 100644 --- a/builtin/check-ignore.c +++ b/builtin/check-ignore.c @@ -12,18 +12,18 @@ static const char * const check_ignore_usage[] = { NULL }; -static int null_term_line; +static int nul_term_line; static const struct option check_ignore_options[] = { OPT__QUIET(&quiet, N_("suppress progress reporting")), OPT__VERBOSE(&verbose, N_("be verbose")), OPT_GROUP(""), - OPT_BOOLEAN(0, "stdin", &stdin_paths, - N_("read file names from stdin")), - OPT_BOOLEAN('z', NULL, &null_term_line, - N_("input paths are terminated by a null character")), - OPT_BOOLEAN('n', "non-matching", &show_non_matching, - N_("show non-matching input paths")), + OPT_BOOL(0, "stdin", &stdin_paths, + N_("read file names from stdin")), + OPT_BOOL('z', NULL, &nul_term_line, + N_("terminate input and output records by a NUL character")), + OPT_BOOL('n', "non-matching", &show_non_matching, + N_("show non-matching input paths")), OPT_END() }; @@ -31,7 +31,7 @@ static void output_exclude(const char *path, struct exclude *exclude) { char *bang = (exclude && exclude->flags & EXC_FLAG_NEGATIVE) ? "!" : ""; char *slash = (exclude && exclude->flags & EXC_FLAG_MUSTBEDIR) ? "/" : ""; - if (!null_term_line) { + if (!nul_term_line) { if (!verbose) { write_name_quoted(path, stdout, '\n'); } else { @@ -64,37 +64,45 @@ static void output_exclude(const char *path, struct exclude *exclude) } static int check_ignore(struct dir_struct *dir, - const char *prefix, const char **pathspec) + const char *prefix, int argc, const char **argv) { - const char *path, *full_path; + const char *full_path; char *seen; int num_ignored = 0, dtype = DT_UNKNOWN, i; struct exclude *exclude; + struct pathspec pathspec; - if (!pathspec || !*pathspec) { + if (!argc) { if (!quiet) fprintf(stderr, "no pathspec given.\n"); return 0; } /* + * check-ignore just needs paths. Magic beyond :/ is really + * irrelevant. + */ + parse_pathspec(&pathspec, + PATHSPEC_ALL_MAGIC & ~PATHSPEC_FROMTOP, + PATHSPEC_SYMLINK_LEADING_PATH | + PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE | + PATHSPEC_KEEP_ORDER, + prefix, argv); + + /* * look for pathspecs matching entries in the index, since these * should not be ignored, in order to be consistent with * 'git status', 'git add' etc. */ - seen = find_pathspecs_matching_against_index(pathspec); - for (i = 0; pathspec[i]; i++) { - path = pathspec[i]; - full_path = prefix_path(prefix, prefix - ? strlen(prefix) : 0, path); - full_path = check_path_for_gitlink(full_path); - die_if_path_beyond_symlink(full_path, prefix); + seen = find_pathspecs_matching_against_index(&pathspec); + for (i = 0; i < pathspec.nr; i++) { + full_path = pathspec.items[i].match; exclude = NULL; if (!seen[i]) { exclude = last_exclude_matching(dir, full_path, &dtype); } if (!quiet && (exclude || show_non_matching)) - output_exclude(path, exclude); + output_exclude(pathspec.items[i].original, exclude); if (exclude) num_ignored++; } @@ -107,7 +115,7 @@ static int check_ignore_stdin_paths(struct dir_struct *dir, const char *prefix) { struct strbuf buf, nbuf; char *pathspec[2] = { NULL, NULL }; - int line_termination = null_term_line ? 0 : '\n'; + int line_termination = nul_term_line ? 0 : '\n'; int num_ignored = 0; strbuf_init(&buf, 0); @@ -120,7 +128,8 @@ static int check_ignore_stdin_paths(struct dir_struct *dir, const char *prefix) strbuf_swap(&buf, &nbuf); } pathspec[0] = buf.buf; - num_ignored += check_ignore(dir, prefix, (const char **)pathspec); + num_ignored += check_ignore(dir, prefix, + 1, (const char **)pathspec); maybe_flush_or_die(stdout, "check-ignore to stdout"); } strbuf_release(&buf); @@ -142,7 +151,7 @@ int cmd_check_ignore(int argc, const char **argv, const char *prefix) if (argc > 0) die(_("cannot specify pathnames with --stdin")); } else { - if (null_term_line) + if (nul_term_line) die(_("-z only makes sense with --stdin")); if (argc == 0) die(_("no path specified")); @@ -166,7 +175,7 @@ int cmd_check_ignore(int argc, const char **argv, const char *prefix) if (stdin_paths) { num_ignored = check_ignore_stdin_paths(&dir, prefix); } else { - num_ignored = check_ignore(&dir, prefix, argv); + num_ignored = check_ignore(&dir, prefix, argc, argv); maybe_flush_or_die(stdout, "ignore to stdout"); } diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index b1feda7d5e..69e167b16c 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -183,12 +183,12 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix) int prefix_length; int force = 0, quiet = 0, not_new = 0; struct option builtin_checkout_index_options[] = { - OPT_BOOLEAN('a', "all", &all, + OPT_BOOL('a', "all", &all, N_("check out all files in the index")), OPT__FORCE(&force, N_("force overwrite of existing files")), OPT__QUIET(&quiet, N_("no warning for existing files and files not in index")), - OPT_BOOLEAN('n', "no-create", ¬_new, + OPT_BOOL('n', "no-create", ¬_new, N_("don't checkout new files")), { OPTION_CALLBACK, 'u', "index", &newfd, NULL, N_("update stat information in the index file"), @@ -196,9 +196,9 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix) { OPTION_CALLBACK, 'z', NULL, NULL, NULL, N_("paths are separated with NUL character"), PARSE_OPT_NOARG, option_parse_z }, - OPT_BOOLEAN(0, "stdin", &read_from_stdin, + OPT_BOOL(0, "stdin", &read_from_stdin, N_("read list of paths from the standard input")), - OPT_BOOLEAN(0, "temp", &to_tempfile, + OPT_BOOL(0, "temp", &to_tempfile, N_("write the content to temporary files")), OPT_CALLBACK(0, "prefix", NULL, N_("string"), N_("when creating files, prepend <string>"), diff --git a/builtin/checkout.c b/builtin/checkout.c index 7025938ae3..62a96a7e2f 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -46,7 +46,7 @@ struct checkout_opts { int branch_exists; const char *prefix; - const char **pathspec; + struct pathspec pathspec; struct tree *source_tree; }; @@ -83,12 +83,9 @@ static int update_some(const unsigned char *sha1, const char *base, int baselen, return 0; } -static int read_tree_some(struct tree *tree, const char **pathspec) +static int read_tree_some(struct tree *tree, const struct pathspec *pathspec) { - struct pathspec ps; - init_pathspec(&ps, pathspec); - read_tree_recursive(tree, "", 0, 0, &ps, update_some, NULL); - free_pathspec(&ps); + read_tree_recursive(tree, "", 0, 0, pathspec, update_some, NULL); /* update the index with the given tree's info * for all args, expanding wildcards, and exit @@ -228,8 +225,6 @@ static int checkout_paths(const struct checkout_opts *opts, int flag; struct commit *head; int errs = 0; - int stage = opts->writeout_stage; - int merge = opts->merge; int newfd; struct lock_file *lock_file; @@ -257,20 +252,18 @@ static int checkout_paths(const struct checkout_opts *opts, if (opts->patch_mode) return run_add_interactive(revision, "--patch=checkout", - opts->pathspec); + &opts->pathspec); lock_file = xcalloc(1, sizeof(struct lock_file)); newfd = hold_locked_index(lock_file, 1); - if (read_cache_preload(opts->pathspec) < 0) + if (read_cache_preload(&opts->pathspec) < 0) return error(_("corrupt index file")); if (opts->source_tree) - read_tree_some(opts->source_tree, opts->pathspec); + read_tree_some(opts->source_tree, &opts->pathspec); - for (pos = 0; opts->pathspec[pos]; pos++) - ; - ps_matched = xcalloc(1, pos); + ps_matched = xcalloc(1, opts->pathspec.nr); /* * Make sure all pathspecs participated in locating the paths @@ -304,12 +297,12 @@ static int checkout_paths(const struct checkout_opts *opts, * match_pathspec() for _all_ entries when * opts->source_tree != NULL. */ - if (match_pathspec(opts->pathspec, ce->name, ce_namelen(ce), + if (match_pathspec_depth(&opts->pathspec, ce->name, ce_namelen(ce), 0, ps_matched)) ce->ce_flags |= CE_MATCHED; } - if (report_path_error(ps_matched, opts->pathspec, opts->prefix)) { + if (report_path_error(ps_matched, &opts->pathspec, opts->prefix)) { free(ps_matched); return 1; } @@ -327,8 +320,8 @@ static int checkout_paths(const struct checkout_opts *opts, continue; if (opts->force) { warning(_("path '%s' is unmerged"), ce->name); - } else if (stage) { - errs |= check_stage(stage, ce, pos); + } else if (opts->writeout_stage) { + errs |= check_stage(opts->writeout_stage, ce, pos); } else if (opts->merge) { errs |= check_stages((1<<2) | (1<<3), ce, pos); } else { @@ -352,9 +345,9 @@ static int checkout_paths(const struct checkout_opts *opts, errs |= checkout_entry(ce, &state, NULL); continue; } - if (stage) - errs |= checkout_stage(stage, ce, pos, &state); - else if (merge) + if (opts->writeout_stage) + errs |= checkout_stage(opts->writeout_stage, ce, pos, &state); + else if (opts->merge) errs |= checkout_merged(pos, &state); pos = skip_same_name(ce, pos) - 1; } @@ -1002,7 +995,7 @@ static int switch_unborn_to_new_branch(const struct checkout_opts *opts) static int checkout_branch(struct checkout_opts *opts, struct branch_info *new) { - if (opts->pathspec) + if (opts->pathspec.nr) die(_("paths cannot be used with switching branches")); if (opts->patch_mode) @@ -1056,8 +1049,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) N_("create and checkout a new branch")), OPT_STRING('B', NULL, &opts.new_branch_force, N_("branch"), N_("create/reset and checkout a branch")), - OPT_BOOLEAN('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")), - OPT_BOOLEAN(0, "detach", &opts.force_detach, N_("detach the HEAD at named commit")), + OPT_BOOL('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")), + OPT_BOOL(0, "detach", &opts.force_detach, N_("detach the HEAD at named commit")), OPT_SET_INT('t', "track", &opts.track, N_("set upstream info for new branch"), BRANCH_TRACK_EXPLICIT), OPT_STRING(0, "orphan", &opts.new_orphan_branch, N_("new branch"), N_("new unparented branch")), @@ -1066,16 +1059,15 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) OPT_SET_INT('3', "theirs", &opts.writeout_stage, N_("checkout their version for unmerged files"), 3), OPT__FORCE(&opts.force, N_("force checkout (throw away local modifications)")), - OPT_BOOLEAN('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")), - OPT_BOOLEAN(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")), + OPT_BOOL('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")), + OPT_BOOL(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")), OPT_STRING(0, "conflict", &conflict_style, N_("style"), N_("conflict style (merge or diff3)")), - OPT_BOOLEAN('p', "patch", &opts.patch_mode, N_("select hunks interactively")), + OPT_BOOL('p', "patch", &opts.patch_mode, N_("select hunks interactively")), OPT_BOOL(0, "ignore-skip-worktree-bits", &opts.ignore_skipworktree, N_("do not limit pathspecs to sparse entries only")), - { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL, - N_("second guess 'git checkout no-such-branch'"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, + OPT_HIDDEN_BOOL(0, "guess", &dwim_new_local_branch, + N_("second guess 'git checkout no-such-branch'")), OPT_END(), }; @@ -1154,9 +1146,18 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) } if (argc) { - opts.pathspec = get_pathspec(prefix, argv); + /* + * In patch mode (opts.patch_mode != 0), we pass the + * pathspec to an external program, git-add--interactive. + * Do not accept any kind of magic that that program + * cannot handle. Magic mask is pretty safe to be + * lifted for new magic when opts.patch_mode == 0. + */ + parse_pathspec(&opts.pathspec, 0, + opts.patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0, + prefix, argv); - if (!opts.pathspec) + if (!opts.pathspec.nr) die(_("invalid path specification")); /* @@ -1188,7 +1189,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) strbuf_release(&buf); } - if (opts.patch_mode || opts.pathspec) + if (opts.patch_mode || opts.pathspec.nr) return checkout_paths(&opts, new.name); else return checkout_branch(&opts, &new); diff --git a/builtin/clean.c b/builtin/clean.c index 3c85e152e1..615cd57caf 100644 --- a/builtin/clean.c +++ b/builtin/clean.c @@ -15,6 +15,7 @@ #include "quote.h" #include "column.h" #include "color.h" +#include "pathspec.h" static int force = -1; /* unset */ static int interactive; @@ -863,24 +864,23 @@ int cmd_clean(int argc, const char **argv, const char *prefix) int rm_flags = REMOVE_DIR_KEEP_NESTED_GIT; struct strbuf abs_path = STRBUF_INIT; struct dir_struct dir; - static const char **pathspec; + struct pathspec pathspec; struct strbuf buf = STRBUF_INIT; struct string_list exclude_list = STRING_LIST_INIT_NODUP; struct exclude_list *el; struct string_list_item *item; const char *qname; - char *seen = NULL; struct option options[] = { OPT__QUIET(&quiet, N_("do not print names of files removed")), OPT__DRY_RUN(&dry_run, N_("dry run")), OPT__FORCE(&force, N_("force")), OPT_BOOL('i', "interactive", &interactive, N_("interactive cleaning")), - OPT_BOOLEAN('d', NULL, &remove_directories, + OPT_BOOL('d', NULL, &remove_directories, N_("remove whole directories")), { OPTION_CALLBACK, 'e', "exclude", &exclude_list, N_("pattern"), N_("add <pattern> to ignore rules"), PARSE_OPT_NONEG, exclude_cb }, - OPT_BOOLEAN('x', NULL, &ignored, N_("remove ignored files, too")), - OPT_BOOLEAN('X', NULL, &ignored_only, + OPT_BOOL('x', NULL, &ignored, N_("remove ignored files, too")), + OPT_BOOL('X', NULL, &ignored_only, N_("remove only ignored files")), OPT_END() }; @@ -925,12 +925,11 @@ int cmd_clean(int argc, const char **argv, const char *prefix) for (i = 0; i < exclude_list.nr; i++) add_exclude(exclude_list.items[i].string, "", 0, el, -(i+1)); - pathspec = get_pathspec(prefix, argv); + parse_pathspec(&pathspec, 0, + PATHSPEC_PREFER_CWD, + prefix, argv); - fill_directory(&dir, pathspec); - - if (pathspec) - seen = xmalloc(argc > 0 ? argc : 1); + fill_directory(&dir, &pathspec); for (i = 0; i < dir.nr; i++) { struct dir_entry *ent = dir.entries[i]; @@ -961,11 +960,9 @@ int cmd_clean(int argc, const char **argv, const char *prefix) if (lstat(ent->name, &st)) die_errno("Cannot lstat '%s'", ent->name); - if (pathspec) { - memset(seen, 0, argc > 0 ? argc : 1); - matches = match_pathspec(pathspec, ent->name, len, - 0, seen); - } + if (pathspec.nr) + matches = match_pathspec_depth(&pathspec, ent->name, + len, 0, NULL); if (S_ISDIR(st.st_mode)) { if (remove_directories || (matches == MATCHED_EXACTLY)) { @@ -973,7 +970,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix) string_list_append(&del_list, rel); } } else { - if (pathspec && !matches) + if (pathspec.nr && !matches) continue; rel = relative_path(ent->name, prefix, &buf); string_list_append(&del_list, rel); @@ -1019,7 +1016,6 @@ int cmd_clean(int argc, const char **argv, const char *prefix) } strbuf_reset(&abs_path); } - free(seen); strbuf_release(&abs_path); strbuf_release(&buf); diff --git a/builtin/clone.c b/builtin/clone.c index 430307b298..ca3eb68d72 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -62,23 +62,22 @@ static struct option builtin_clone_options[] = { OPT__VERBOSITY(&option_verbosity), OPT_BOOL(0, "progress", &option_progress, N_("force progress reporting")), - OPT_BOOLEAN('n', "no-checkout", &option_no_checkout, - N_("don't create a checkout")), - OPT_BOOLEAN(0, "bare", &option_bare, N_("create a bare repository")), - { OPTION_BOOLEAN, 0, "naked", &option_bare, NULL, - N_("create a bare repository"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, - OPT_BOOLEAN(0, "mirror", &option_mirror, - N_("create a mirror repository (implies bare)")), + OPT_BOOL('n', "no-checkout", &option_no_checkout, + N_("don't create a checkout")), + OPT_BOOL(0, "bare", &option_bare, N_("create a bare repository")), + OPT_HIDDEN_BOOL(0, "naked", &option_bare, + N_("create a bare repository")), + OPT_BOOL(0, "mirror", &option_mirror, + N_("create a mirror repository (implies bare)")), OPT_BOOL('l', "local", &option_local, N_("to clone from a local repository")), - OPT_BOOLEAN(0, "no-hardlinks", &option_no_hardlinks, + OPT_BOOL(0, "no-hardlinks", &option_no_hardlinks, N_("don't use local hardlinks, always copy")), - OPT_BOOLEAN('s', "shared", &option_shared, + OPT_BOOL('s', "shared", &option_shared, N_("setup as shared repository")), - OPT_BOOLEAN(0, "recursive", &option_recursive, + OPT_BOOL(0, "recursive", &option_recursive, N_("initialize submodules in the clone")), - OPT_BOOLEAN(0, "recurse-submodules", &option_recursive, + OPT_BOOL(0, "recurse-submodules", &option_recursive, N_("initialize submodules in the clone")), OPT_STRING(0, "template", &option_template, N_("template-directory"), N_("directory from which templates will be used")), diff --git a/builtin/commit.c b/builtin/commit.c index 10acc53f80..80d886ab3a 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -202,17 +202,15 @@ static int commit_index_files(void) * and return the paths that match the given pattern in list. */ static int list_paths(struct string_list *list, const char *with_tree, - const char *prefix, const char **pattern) + const char *prefix, const struct pathspec *pattern) { int i; char *m; - if (!pattern) + if (!pattern->nr) return 0; - for (i = 0; pattern[i]; i++) - ; - m = xcalloc(1, i); + m = xcalloc(1, pattern->nr); if (with_tree) { char *max_prefix = common_prefix(pattern); @@ -226,7 +224,7 @@ static int list_paths(struct string_list *list, const char *with_tree, if (ce->ce_flags & CE_UPDATE) continue; - if (!match_pathspec(pattern, ce->name, ce_namelen(ce), 0, m)) + if (!match_pathspec_depth(pattern, ce->name, ce_namelen(ce), 0, m)) continue; item = string_list_insert(list, ce->name); if (ce_skip_worktree(ce)) @@ -298,17 +296,17 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, { int fd; struct string_list partial; - const char **pathspec = NULL; + struct pathspec pathspec; char *old_index_env = NULL; int refresh_flags = REFRESH_QUIET; if (is_status) refresh_flags |= REFRESH_UNMERGED; + parse_pathspec(&pathspec, 0, + PATHSPEC_PREFER_FULL, + prefix, argv); - if (*argv) - pathspec = get_pathspec(prefix, argv); - - if (read_cache_preload(pathspec) < 0) + if (read_cache_preload(&pathspec) < 0) die(_("index file corrupt")); if (interactive) { @@ -350,9 +348,9 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, * (A) if all goes well, commit the real index; * (B) on failure, rollback the real index. */ - if (all || (also && pathspec && *pathspec)) { + if (all || (also && pathspec.nr)) { fd = hold_locked_index(&index_lock, 1); - add_files_to_cache(also ? prefix : NULL, pathspec, 0); + add_files_to_cache(also ? prefix : NULL, &pathspec, 0); refresh_cache_or_die(refresh_flags); update_main_cache_tree(WRITE_TREE_SILENT); if (write_cache(fd, active_cache, active_nr) || @@ -371,7 +369,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, * and create commit from the_index. * We still need to refresh the index here. */ - if (!only && (!pathspec || !*pathspec)) { + if (!only && !pathspec.nr) { fd = hold_locked_index(&index_lock, 1); refresh_cache_or_die(refresh_flags); if (active_cache_changed) { @@ -416,7 +414,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, memset(&partial, 0, sizeof(partial)); partial.strdup_strings = 1; - if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, pathspec)) + if (list_paths(&partial, !current_head ? NULL : "HEAD", prefix, &pathspec)) exit(1); discard_cache(); @@ -1091,7 +1089,7 @@ static int parse_and_validate_options(int argc, const char *argv[], if (patch_interactive) interactive = 1; - if (!!also + !!only + !!all + !!interactive > 1) + if (also + only + all + interactive > 1) die(_("Only one of --include/--only/--all/--interactive/--patch can be used.")); if (argc == 0 && (also || (only && !amend))) die(_("No paths with --include/--only does not make sense.")); @@ -1228,14 +1226,14 @@ int cmd_status(int argc, const char **argv, const char *prefix) OPT_SET_INT(0, "long", &status_format, N_("show status in long format (default)"), STATUS_FORMAT_LONG), - OPT_BOOLEAN('z', "null", &s.null_termination, - N_("terminate entries with NUL")), + OPT_BOOL('z', "null", &s.null_termination, + N_("terminate entries with NUL")), { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, - OPT_BOOLEAN(0, "ignored", &show_ignored_in_status, - N_("show ignored files")), + OPT_BOOL(0, "ignored", &show_ignored_in_status, + N_("show ignored files")), { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"), N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, @@ -1259,11 +1257,12 @@ int cmd_status(int argc, const char **argv, const char *prefix) handle_untracked_files_arg(&s); if (show_ignored_in_status) s.show_ignored_files = 1; - if (*argv) - s.pathspec = get_pathspec(prefix, argv); + parse_pathspec(&s.pathspec, 0, + PATHSPEC_PREFER_FULL, + prefix, argv); - read_cache_preload(s.pathspec); - refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, s.pathspec, NULL, NULL); + read_cache_preload(&s.pathspec); + refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, &s.pathspec, NULL, NULL); fd = hold_locked_index(&index_lock, 0); if (0 <= fd) @@ -1434,24 +1433,24 @@ int cmd_commit(int argc, const char **argv, const char *prefix) OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")), OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")), OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")), - OPT_BOOLEAN(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")), - OPT_BOOLEAN('s', "signoff", &signoff, N_("add Signed-off-by:")), + OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")), + OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")), OPT_FILENAME('t', "template", &template_file, N_("use specified template file")), OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")), OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")), - OPT_BOOLEAN(0, "status", &include_status, N_("include status in commit message template")), + OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")), { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key id"), N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" }, /* end commit message options */ OPT_GROUP(N_("Commit contents options")), - OPT_BOOLEAN('a', "all", &all, N_("commit all changed files")), - OPT_BOOLEAN('i', "include", &also, N_("add specified files to index for commit")), - OPT_BOOLEAN(0, "interactive", &interactive, N_("interactively add files")), - OPT_BOOLEAN('p', "patch", &patch_interactive, N_("interactively add changes")), - OPT_BOOLEAN('o', "only", &only, N_("commit only specified files")), - OPT_BOOLEAN('n', "no-verify", &no_verify, N_("bypass pre-commit hook")), - OPT_BOOLEAN(0, "dry-run", &dry_run, N_("show what would be committed")), + OPT_BOOL('a', "all", &all, N_("commit all changed files")), + OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")), + OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")), + OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")), + OPT_BOOL('o', "only", &only, N_("commit only specified files")), + OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")), + OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")), OPT_SET_INT(0, "short", &status_format, N_("show status concisely"), STATUS_FORMAT_SHORT), OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")), @@ -1460,19 +1459,17 @@ int cmd_commit(int argc, const char **argv, const char *prefix) OPT_SET_INT(0, "long", &status_format, N_("show status in long format (default)"), STATUS_FORMAT_LONG), - OPT_BOOLEAN('z', "null", &s.null_termination, - N_("terminate entries with NUL")), - OPT_BOOLEAN(0, "amend", &amend, N_("amend previous commit")), - OPT_BOOLEAN(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")), + OPT_BOOL('z', "null", &s.null_termination, + N_("terminate entries with NUL")), + OPT_BOOL(0, "amend", &amend, N_("amend previous commit")), + OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")), { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, /* end commit contents options */ - { OPTION_BOOLEAN, 0, "allow-empty", &allow_empty, NULL, - N_("ok to record an empty change"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, - { OPTION_BOOLEAN, 0, "allow-empty-message", &allow_empty_message, NULL, - N_("ok to record a change with an empty message"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, + OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty, + N_("ok to record an empty change")), + OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message, + N_("ok to record a change with an empty message")), OPT_END() }; diff --git a/builtin/config.c b/builtin/config.c index 4010c4320a..fc8d8820cb 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -2,6 +2,7 @@ #include "cache.h" #include "color.h" #include "parse-options.h" +#include "urlmatch.h" static const char *const builtin_config_usage[] = { N_("git config [options]"), @@ -42,6 +43,7 @@ static int respect_includes = -1; #define ACTION_SET_ALL (1<<12) #define ACTION_GET_COLOR (1<<13) #define ACTION_GET_COLORBOOL (1<<14) +#define ACTION_GET_URLMATCH (1<<15) #define TYPE_BOOL (1<<0) #define TYPE_INT (1<<1) @@ -50,15 +52,16 @@ static int respect_includes = -1; static struct option builtin_config_options[] = { OPT_GROUP(N_("Config file location")), - OPT_BOOLEAN(0, "global", &use_global_config, N_("use global config file")), - OPT_BOOLEAN(0, "system", &use_system_config, N_("use system config file")), - OPT_BOOLEAN(0, "local", &use_local_config, N_("use repository config file")), + OPT_BOOL(0, "global", &use_global_config, N_("use global config file")), + OPT_BOOL(0, "system", &use_system_config, N_("use system config file")), + OPT_BOOL(0, "local", &use_local_config, N_("use repository config file")), OPT_STRING('f', "file", &given_config_file, N_("file"), N_("use given config file")), OPT_STRING(0, "blob", &given_config_blob, N_("blob-id"), N_("read config from given blob object")), OPT_GROUP(N_("Action")), OPT_BIT(0, "get", &actions, N_("get value: name [value-regex]"), ACTION_GET), OPT_BIT(0, "get-all", &actions, N_("get all values: key [value-regex]"), ACTION_GET_ALL), OPT_BIT(0, "get-regexp", &actions, N_("get values for regexp: name-regex [value-regex]"), ACTION_GET_REGEXP), + OPT_BIT(0, "get-urlmatch", &actions, N_("get value specific for the URL: section[.var] URL"), ACTION_GET_URLMATCH), OPT_BIT(0, "replace-all", &actions, N_("replace all matching variables: name value [value_regex]"), ACTION_REPLACE_ALL), OPT_BIT(0, "add", &actions, N_("add a new variable: name value"), ACTION_ADD), OPT_BIT(0, "unset", &actions, N_("remove a variable: name [value-regex]"), ACTION_UNSET), @@ -75,7 +78,7 @@ static struct option builtin_config_options[] = { OPT_BIT(0, "bool-or-int", &types, N_("value is --bool or --int"), TYPE_BOOL_OR_INT), OPT_BIT(0, "path", &types, N_("value is a path (file or directory name)"), TYPE_PATH), OPT_GROUP(N_("Other")), - OPT_BOOLEAN('z', "null", &end_null, N_("terminate values with NUL byte")), + OPT_BOOL('z', "null", &end_null, N_("terminate values with NUL byte")), OPT_BOOL(0, "includes", &respect_includes, N_("respect include directives on lookup")), OPT_END(), }; @@ -102,25 +105,13 @@ struct strbuf_list { int alloc; }; -static int collect_config(const char *key_, const char *value_, void *cb) +static int format_config(struct strbuf *buf, const char *key_, const char *value_) { - struct strbuf_list *values = cb; - struct strbuf *buf; - char value[256]; - const char *vptr = value; int must_free_vptr = 0; int must_print_delim = 0; + char value[256]; + const char *vptr = value; - if (!use_key_regexp && strcmp(key_, key)) - return 0; - if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) - return 0; - if (regexp != NULL && - (do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) - return 0; - - ALLOC_GROW(values->items, values->nr + 1, values->alloc); - buf = &values->items[values->nr++]; strbuf_init(buf, 0); if (show_keys) { @@ -128,7 +119,7 @@ static int collect_config(const char *key_, const char *value_, void *cb) must_print_delim = 1; } if (types == TYPE_INT) - sprintf(value, "%d", git_config_int(key_, value_?value_:"")); + sprintf(value, "%d", git_config_int(key_, value_ ? value_ : "")); else if (types == TYPE_BOOL) vptr = git_config_bool(key_, value_) ? "true" : "false"; else if (types == TYPE_BOOL_OR_INT) { @@ -156,15 +147,27 @@ static int collect_config(const char *key_, const char *value_, void *cb) strbuf_addch(buf, term); if (must_free_vptr) - /* If vptr must be freed, it's a pointer to a - * dynamically allocated buffer, it's safe to cast to - * const. - */ free((char *)vptr); - return 0; } +static int collect_config(const char *key_, const char *value_, void *cb) +{ + struct strbuf_list *values = cb; + + if (!use_key_regexp && strcmp(key_, key)) + return 0; + if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) + return 0; + if (regexp != NULL && + (do_not_match ^ !!regexec(regexp, (value_?value_:""), 0, NULL, 0))) + return 0; + + ALLOC_GROW(values->items, values->nr + 1, values->alloc); + + return format_config(&values->items[values->nr++], key_, value_); +} + static int get_value(const char *key_, const char *regex_) { int ret = CONFIG_GENERIC_ERROR; @@ -364,6 +367,97 @@ static void check_blob_write(void) die("writing config blobs is not supported"); } +struct urlmatch_current_candidate_value { + char value_is_null; + struct strbuf value; +}; + +static int urlmatch_collect_fn(const char *var, const char *value, void *cb) +{ + struct string_list *values = cb; + struct string_list_item *item = string_list_insert(values, var); + struct urlmatch_current_candidate_value *matched = item->util; + + if (!matched) { + matched = xmalloc(sizeof(*matched)); + strbuf_init(&matched->value, 0); + item->util = matched; + } else { + strbuf_reset(&matched->value); + } + + if (value) { + strbuf_addstr(&matched->value, value); + matched->value_is_null = 0; + } else { + matched->value_is_null = 1; + } + return 0; +} + +static char *dup_downcase(const char *string) +{ + char *result; + size_t len, i; + + len = strlen(string); + result = xmalloc(len + 1); + for (i = 0; i < len; i++) + result[i] = tolower(string[i]); + result[i] = '\0'; + return result; +} + +static int get_urlmatch(const char *var, const char *url) +{ + char *section_tail; + struct string_list_item *item; + struct urlmatch_config config = { STRING_LIST_INIT_DUP }; + struct string_list values = STRING_LIST_INIT_DUP; + + config.collect_fn = urlmatch_collect_fn; + config.cascade_fn = NULL; + config.cb = &values; + + if (!url_normalize(url, &config.url)) + die("%s", config.url.err); + + config.section = dup_downcase(var); + section_tail = strchr(config.section, '.'); + if (section_tail) { + *section_tail = '\0'; + config.key = section_tail + 1; + show_keys = 0; + } else { + config.key = NULL; + show_keys = 1; + } + + git_config_with_options(urlmatch_config_entry, &config, + given_config_file, NULL, respect_includes); + + for_each_string_list_item(item, &values) { + struct urlmatch_current_candidate_value *matched = item->util; + struct strbuf key = STRBUF_INIT; + struct strbuf buf = STRBUF_INIT; + + strbuf_addstr(&key, item->string); + format_config(&buf, key.buf, + matched->value_is_null ? NULL : matched->value.buf); + fwrite(buf.buf, 1, buf.len, stdout); + strbuf_release(&key); + strbuf_release(&buf); + + strbuf_release(&matched->value); + } + string_list_clear(&config.vars, 1); + string_list_clear(&values, 1); + free(config.url.url); + + free((void *)config.section); + return 0; +} + int cmd_config(int argc, const char **argv, const char *prefix) { int nongit = !startup_info->have_repository; @@ -523,6 +617,10 @@ int cmd_config(int argc, const char **argv, const char *prefix) check_argc(argc, 1, 2); return get_value(argv[0], argv[1]); } + else if (actions == ACTION_GET_URLMATCH) { + check_argc(argc, 2, 2); + return get_urlmatch(argv[0], argv[1]); + } else if (actions == ACTION_UNSET) { check_blob_write(); check_argc(argc, 1, 2); diff --git a/builtin/describe.c b/builtin/describe.c index 7d73722f59..c94e5c30d0 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -406,12 +406,12 @@ int cmd_describe(int argc, const char **argv, const char *prefix) { int contains = 0; struct option options[] = { - OPT_BOOLEAN(0, "contains", &contains, N_("find the tag that comes after the commit")), - OPT_BOOLEAN(0, "debug", &debug, N_("debug search strategy on stderr")), - OPT_BOOLEAN(0, "all", &all, N_("use any ref")), - OPT_BOOLEAN(0, "tags", &tags, N_("use any tag, even unannotated")), - OPT_BOOLEAN(0, "long", &longformat, N_("always use long format")), - OPT_BOOLEAN(0, "first-parent", &first_parent, N_("only follow first parent")), + OPT_BOOL(0, "contains", &contains, N_("find the tag that comes after the commit")), + OPT_BOOL(0, "debug", &debug, N_("debug search strategy on stderr")), + OPT_BOOL(0, "all", &all, N_("use any ref")), + OPT_BOOL(0, "tags", &tags, N_("use any tag, even unannotated")), + OPT_BOOL(0, "long", &longformat, N_("always use long format")), + OPT_BOOL(0, "first-parent", &first_parent, N_("only follow first parent")), OPT__ABBREV(&abbrev), OPT_SET_INT(0, "exact-match", &max_candidates, N_("only output exact matches"), 0), @@ -419,11 +419,11 @@ int cmd_describe(int argc, const char **argv, const char *prefix) N_("consider <n> most recent tags (default: 10)")), OPT_STRING(0, "match", &pattern, N_("pattern"), N_("only consider tags matching <pattern>")), - OPT_BOOLEAN(0, "always", &always, - N_("show abbreviated commit object as fallback")), + OPT_BOOL(0, "always", &always, + N_("show abbreviated commit object as fallback")), {OPTION_STRING, 0, "dirty", &dirty, N_("mark"), - N_("append <mark> on dirty working tree (default: \"-dirty\")"), - PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"}, + N_("append <mark> on dirty working tree (default: \"-dirty\")"), + PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"}, OPT_END(), }; diff --git a/builtin/diff-files.c b/builtin/diff-files.c index 46085f862f..9200069363 100644 --- a/builtin/diff-files.c +++ b/builtin/diff-files.c @@ -61,7 +61,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix) (rev.diffopt.output_format & DIFF_FORMAT_PATCH)) rev.combine_merges = rev.dense_combined_merges = 1; - if (read_cache_preload(rev.diffopt.pathspec.raw) < 0) { + if (read_cache_preload(&rev.diffopt.pathspec) < 0) { perror("read_cache_preload"); return -1; } diff --git a/builtin/diff-index.c b/builtin/diff-index.c index 1c737f7921..ce15b23042 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -43,7 +43,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) usage(diff_cache_usage); if (!cached) { setup_work_tree(); - if (read_cache_preload(rev.diffopt.pathspec.raw) < 0) { + if (read_cache_preload(&rev.diffopt.pathspec) < 0) { perror("read_cache_preload"); return -1; } diff --git a/builtin/diff.c b/builtin/diff.c index 9fc273d8cd..2fb8c5dc0b 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -140,7 +140,7 @@ static int builtin_diff_index(struct rev_info *revs, usage(builtin_diff_usage); if (!cached) { setup_work_tree(); - if (read_cache_preload(revs->diffopt.pathspec.raw) < 0) { + if (read_cache_preload(&revs->diffopt.pathspec) < 0) { perror("read_cache_preload"); return -1; } @@ -242,7 +242,7 @@ static int builtin_diff_files(struct rev_info *revs, int argc, const char **argv revs->combine_merges = revs->dense_combined_merges = 1; setup_work_tree(); - if (read_cache_preload(revs->diffopt.pathspec.raw) < 0) { + if (read_cache_preload(&revs->diffopt.pathspec) < 0) { perror("read_cache_preload"); return -1; } @@ -367,6 +367,8 @@ int cmd_diff(int argc, const char **argv, const char *prefix) } } if (rev.prune_data.nr) { + /* builtin_diff_b_f() */ + GUARD_PATHSPEC(&rev.prune_data, PATHSPEC_FROMTOP | PATHSPEC_LITERAL); if (!path) path = rev.prune_data.items[0].match; paths += rev.prune_data.nr; diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 8e19058744..b1b9b5e52a 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -674,11 +674,11 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix) N_("Dump marks to this file")), OPT_STRING(0, "import-marks", &import_filename, N_("file"), N_("Import marks from this file")), - OPT_BOOLEAN(0, "fake-missing-tagger", &fake_missing_tagger, - N_("Fake a tagger when tags lack one")), - OPT_BOOLEAN(0, "full-tree", &full_tree, - N_("Output full tree for each commit")), - OPT_BOOLEAN(0, "use-done-feature", &use_done_feature, + OPT_BOOL(0, "fake-missing-tagger", &fake_missing_tagger, + N_("Fake a tagger when tags lack one")), + OPT_BOOL(0, "full-tree", &full_tree, + N_("Output full tree for each commit")), + OPT_BOOL(0, "use-done-feature", &use_done_feature, N_("Use the done feature to terminate the stream")), OPT_BOOL(0, "no-data", &no_data, N_("Skip output of blob data")), OPT_END() diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index aba4465552..c8e858232a 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -1,6 +1,8 @@ #include "builtin.h" #include "pkt-line.h" #include "fetch-pack.h" +#include "remote.h" +#include "connect.h" static const char fetch_pack_usage[] = "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] " @@ -100,6 +102,10 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) pack_lockfile_ptr = &pack_lockfile; continue; } + if (!strcmp("--check-self-contained-and-connected", arg)) { + args.check_self_contained_and_connected = 1; + continue; + } usage(fetch_pack_usage); } @@ -152,6 +158,11 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) printf("lock %s\n", pack_lockfile); fflush(stdout); } + if (args.check_self_contained_and_connected && + args.self_contained_and_connected) { + printf("connectivity-ok\n"); + fflush(stdout); + } close(fd[0]); close(fd[1]); if (finish_connect(conn)) diff --git a/builtin/fetch.c b/builtin/fetch.c index 564705555b..9e654efa3b 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -30,7 +30,11 @@ enum { TAGS_SET = 2 }; -static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity; +static int fetch_prune_config = -1; /* unspecified */ +static int prune = -1; /* unspecified */ +#define PRUNE_BY_DEFAULT 0 /* do we prune by default? */ + +static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosity; static int progress = -1, recurse_submodules = RECURSE_SUBMODULES_DEFAULT; static int tags = TAGS_DEFAULT, unshallow; static const char *depth; @@ -55,30 +59,39 @@ static int option_parse_recurse_submodules(const struct option *opt, return 0; } +static int git_fetch_config(const char *k, const char *v, void *cb) +{ + if (!strcmp(k, "fetch.prune")) { + fetch_prune_config = git_config_bool(k, v); + return 0; + } + return 0; +} + static struct option builtin_fetch_options[] = { OPT__VERBOSITY(&verbosity), - OPT_BOOLEAN(0, "all", &all, - N_("fetch from all remotes")), - OPT_BOOLEAN('a', "append", &append, - N_("append to .git/FETCH_HEAD instead of overwriting")), + OPT_BOOL(0, "all", &all, + N_("fetch from all remotes")), + OPT_BOOL('a', "append", &append, + N_("append to .git/FETCH_HEAD instead of overwriting")), OPT_STRING(0, "upload-pack", &upload_pack, N_("path"), N_("path to upload pack on remote end")), OPT__FORCE(&force, N_("force overwrite of local branch")), - OPT_BOOLEAN('m', "multiple", &multiple, - N_("fetch from multiple remotes")), + OPT_BOOL('m', "multiple", &multiple, + N_("fetch from multiple remotes")), OPT_SET_INT('t', "tags", &tags, N_("fetch all tags and associated objects"), TAGS_SET), OPT_SET_INT('n', NULL, &tags, N_("do not fetch all tags (--no-tags)"), TAGS_UNSET), - OPT_BOOLEAN('p', "prune", &prune, - N_("prune remote-tracking branches no longer on remote")), + OPT_BOOL('p', "prune", &prune, + N_("prune remote-tracking branches no longer on remote")), { OPTION_CALLBACK, 0, "recurse-submodules", NULL, N_("on-demand"), N_("control recursive fetching of submodules"), PARSE_OPT_OPTARG, option_parse_recurse_submodules }, - OPT_BOOLEAN(0, "dry-run", &dry_run, - N_("dry run")), - OPT_BOOLEAN('k', "keep", &keep, N_("keep downloaded pack")), - OPT_BOOLEAN('u', "update-head-ok", &update_head_ok, + OPT_BOOL(0, "dry-run", &dry_run, + N_("dry run")), + OPT_BOOL('k', "keep", &keep, N_("keep downloaded pack")), + OPT_BOOL('u', "update-head-ok", &update_head_ok, N_("allow updating of HEAD ref")), OPT_BOOL(0, "progress", &progress, N_("force progress reporting")), OPT_STRING(0, "depth", &depth, N_("depth"), @@ -816,7 +829,10 @@ static int do_fetch(struct transport *transport, goto cleanup; } if (prune) { - /* If --tags was specified, pretend the user gave us the canonical tags refspec */ + /* + * If --tags was specified, pretend that the user gave us + * the canonical tags refspec + */ if (tags == TAGS_SET) { const char *tags_str = "refs/tags/*:refs/tags/*"; struct refspec *tags_refspec, *refspec; @@ -913,7 +929,7 @@ static void add_options_to_argv(struct argv_array *argv) { if (dry_run) argv_array_push(argv, "--dry-run"); - if (prune) + if (prune > 0) argv_array_push(argv, "--prune"); if (update_head_ok) argv_array_push(argv, "--update-head-ok"); @@ -981,6 +997,17 @@ static int fetch_one(struct remote *remote, int argc, const char **argv) "remote name from which new revisions should be fetched.")); gtransport = prepare_transport(remote); + + if (prune < 0) { + /* no command line request */ + if (0 <= gtransport->remote->prune) + prune = gtransport->remote->prune; + else if (0 <= fetch_prune_config) + prune = fetch_prune_config; + else + prune = PRUNE_BY_DEFAULT; + } + if (argc > 0) { int j = 0; refs = xcalloc(argc + 1, sizeof(const char *)); @@ -1030,6 +1057,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) for (i = 1; i < argc; i++) strbuf_addf(&default_rla, " %s", argv[i]); + git_config(git_fetch_config, NULL); + argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 7f059c31df..1d4083c2dd 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -867,24 +867,29 @@ static void sort_refs(struct ref_sort *sort, struct refinfo **refs, int num_refs static void print_value(struct refinfo *ref, int atom, int quote_style) { struct atom_value *v; + struct strbuf sb = STRBUF_INIT; get_value(ref, atom, &v); switch (quote_style) { case QUOTE_NONE: fputs(v->s, stdout); break; case QUOTE_SHELL: - sq_quote_print(stdout, v->s); + sq_quote_buf(&sb, v->s); break; case QUOTE_PERL: - perl_quote_print(stdout, v->s); + perl_quote_buf(&sb, v->s); break; case QUOTE_PYTHON: - python_quote_print(stdout, v->s); + python_quote_buf(&sb, v->s); break; case QUOTE_TCL: - tcl_quote_print(stdout, v->s); + tcl_quote_buf(&sb, v->s); break; } + if (quote_style != QUOTE_NONE) { + fputs(sb.buf, stdout); + strbuf_release(&sb); + } } static int hex1(char ch) diff --git a/builtin/fsck.c b/builtin/fsck.c index 9909b6d519..39fa5e86d4 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -611,15 +611,15 @@ static char const * const fsck_usage[] = { static struct option fsck_opts[] = { OPT__VERBOSE(&verbose, N_("be verbose")), - OPT_BOOLEAN(0, "unreachable", &show_unreachable, N_("show unreachable objects")), + OPT_BOOL(0, "unreachable", &show_unreachable, N_("show unreachable objects")), OPT_BOOL(0, "dangling", &show_dangling, N_("show dangling objects")), - OPT_BOOLEAN(0, "tags", &show_tags, N_("report tags")), - OPT_BOOLEAN(0, "root", &show_root, N_("report root nodes")), - OPT_BOOLEAN(0, "cache", &keep_cache_objects, N_("make index objects head nodes")), - OPT_BOOLEAN(0, "reflogs", &include_reflogs, N_("make reflogs head nodes (default)")), - OPT_BOOLEAN(0, "full", &check_full, N_("also consider packs and alternate objects")), - OPT_BOOLEAN(0, "strict", &check_strict, N_("enable more strict checking")), - OPT_BOOLEAN(0, "lost-found", &write_lost_and_found, + OPT_BOOL(0, "tags", &show_tags, N_("report tags")), + OPT_BOOL(0, "root", &show_root, N_("report root nodes")), + OPT_BOOL(0, "cache", &keep_cache_objects, N_("make index objects head nodes")), + OPT_BOOL(0, "reflogs", &include_reflogs, N_("make reflogs head nodes (default)")), + OPT_BOOL(0, "full", &check_full, N_("also consider packs and alternate objects")), + OPT_BOOL(0, "strict", &check_strict, N_("enable more strict checking")), + OPT_BOOL(0, "lost-found", &write_lost_and_found, N_("write dangling objects in .git/lost-found")), OPT_BOOL(0, "progress", &show_progress, N_("show progress")), OPT_END(), diff --git a/builtin/gc.c b/builtin/gc.c index 6be6c8d65b..891a2c2ecb 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -167,19 +167,78 @@ static int need_to_gc(void) return 1; } +/* return NULL on success, else hostname running the gc */ +static const char *lock_repo_for_gc(int force, pid_t* ret_pid) +{ + static struct lock_file lock; + static char locking_host[128]; + char my_host[128]; + struct strbuf sb = STRBUF_INIT; + struct stat st; + uintmax_t pid; + FILE *fp; + int fd, should_exit; + + if (gethostname(my_host, sizeof(my_host))) + strcpy(my_host, "unknown"); + + fd = hold_lock_file_for_update(&lock, git_path("gc.pid"), + LOCK_DIE_ON_ERROR); + if (!force) { + fp = fopen(git_path("gc.pid"), "r"); + memset(locking_host, 0, sizeof(locking_host)); + should_exit = + fp != NULL && + !fstat(fileno(fp), &st) && + /* + * 12 hour limit is very generous as gc should + * never take that long. On the other hand we + * don't really need a strict limit here, + * running gc --auto one day late is not a big + * problem. --force can be used in manual gc + * after the user verifies that no gc is + * running. + */ + time(NULL) - st.st_mtime <= 12 * 3600 && + fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 && + /* be gentle to concurrent "gc" on remote hosts */ + (strcmp(locking_host, my_host) || !kill(pid, 0)); + if (fp != NULL) + fclose(fp); + if (should_exit) { + if (fd >= 0) + rollback_lock_file(&lock); + *ret_pid = pid; + return locking_host; + } + } + + strbuf_addf(&sb, "%"PRIuMAX" %s", + (uintmax_t) getpid(), my_host); + write_in_full(fd, sb.buf, sb.len); + strbuf_release(&sb); + commit_lock_file(&lock); + + return NULL; +} + int cmd_gc(int argc, const char **argv, const char *prefix) { int aggressive = 0; int auto_gc = 0; int quiet = 0; + int force = 0; + const char *name; + pid_t pid; struct option builtin_gc_options[] = { OPT__QUIET(&quiet, N_("suppress progress reporting")), { OPTION_STRING, 0, "prune", &prune_expire, N_("date"), N_("prune unreferenced objects"), PARSE_OPT_OPTARG, NULL, (intptr_t)prune_expire }, - OPT_BOOLEAN(0, "aggressive", &aggressive, N_("be more thorough (increased runtime)")), - OPT_BOOLEAN(0, "auto", &auto_gc, N_("enable auto-gc mode")), + OPT_BOOL(0, "aggressive", &aggressive, N_("be more thorough (increased runtime)")), + OPT_BOOL(0, "auto", &auto_gc, N_("enable auto-gc mode")), + OPT_BOOL(0, "force", &force, N_("force running gc even if there may be another gc running")), OPT_END() }; @@ -225,6 +284,14 @@ int cmd_gc(int argc, const char **argv, const char *prefix) } else add_repack_all_option(); + name = lock_repo_for_gc(force, &pid); + if (name) { + if (auto_gc) + return 0; /* be quiet on --auto */ + die(_("gc is already running on machine '%s' pid %"PRIuMAX" (use --force if not)"), + name, (uintmax_t)pid); + } + if (pack_refs && run_command_v_opt(pack_refs_cmd.argv, RUN_GIT_CMD)) return error(FAILED_RUN, pack_refs_cmd.argv[0]); diff --git a/builtin/grep.c b/builtin/grep.c index d3b3b1db11..03bc442e3f 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -17,6 +17,7 @@ #include "grep.h" #include "quote.h" #include "dir.h" +#include "pathspec.h" static char const * const grep_usage[] = { N_("git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"), @@ -521,7 +522,7 @@ static int grep_directory(struct grep_opt *opt, const struct pathspec *pathspec, if (exc_std) setup_standard_excludes(&dir); - fill_directory(&dir, pathspec->raw); + fill_directory(&dir, pathspec); for (i = 0; i < dir.nr; i++) { const char *name = dir.entries[i]->name; int namelen = strlen(name); @@ -629,7 +630,6 @@ int cmd_grep(int argc, const char **argv, const char *prefix) const char *show_in_pager = NULL, *default_pager = "dummy"; struct grep_opt opt; struct object_array list = OBJECT_ARRAY_INIT; - const char **paths = NULL; struct pathspec pathspec; struct string_list path_list = STRING_LIST_INIT_NODUP; int i; @@ -638,20 +638,20 @@ int cmd_grep(int argc, const char **argv, const char *prefix) int pattern_type_arg = GREP_PATTERN_TYPE_UNSPECIFIED; struct option options[] = { - OPT_BOOLEAN(0, "cached", &cached, + OPT_BOOL(0, "cached", &cached, N_("search in index instead of in the work tree")), OPT_NEGBIT(0, "no-index", &use_index, N_("find in contents not managed by git"), 1), - OPT_BOOLEAN(0, "untracked", &untracked, + OPT_BOOL(0, "untracked", &untracked, N_("search in both tracked and untracked files")), OPT_SET_INT(0, "exclude-standard", &opt_exclude, N_("search also in ignored files"), 1), OPT_GROUP(""), - OPT_BOOLEAN('v', "invert-match", &opt.invert, + OPT_BOOL('v', "invert-match", &opt.invert, N_("show non-matching lines")), - OPT_BOOLEAN('i', "ignore-case", &opt.ignore_case, + OPT_BOOL('i', "ignore-case", &opt.ignore_case, N_("case insensitive matching")), - OPT_BOOLEAN('w', "word-regexp", &opt.word_regexp, + OPT_BOOL('w', "word-regexp", &opt.word_regexp, N_("match patterns only at word boundaries")), OPT_SET_INT('a', "text", &opt.binary, N_("process binary files as text"), GREP_BINARY_TEXT), @@ -675,26 +675,26 @@ int cmd_grep(int argc, const char **argv, const char *prefix) N_("use Perl-compatible regular expressions"), GREP_PATTERN_TYPE_PCRE), OPT_GROUP(""), - OPT_BOOLEAN('n', "line-number", &opt.linenum, N_("show line numbers")), + OPT_BOOL('n', "line-number", &opt.linenum, N_("show line numbers")), OPT_NEGBIT('h', NULL, &opt.pathname, N_("don't show filenames"), 1), OPT_BIT('H', NULL, &opt.pathname, N_("show filenames"), 1), OPT_NEGBIT(0, "full-name", &opt.relative, N_("show filenames relative to top directory"), 1), - OPT_BOOLEAN('l', "files-with-matches", &opt.name_only, + OPT_BOOL('l', "files-with-matches", &opt.name_only, N_("show only filenames instead of matching lines")), - OPT_BOOLEAN(0, "name-only", &opt.name_only, + OPT_BOOL(0, "name-only", &opt.name_only, N_("synonym for --files-with-matches")), - OPT_BOOLEAN('L', "files-without-match", + OPT_BOOL('L', "files-without-match", &opt.unmatch_name_only, N_("show only the names of files without match")), - OPT_BOOLEAN('z', "null", &opt.null_following_name, + OPT_BOOL('z', "null", &opt.null_following_name, N_("print NUL after filenames")), - OPT_BOOLEAN('c', "count", &opt.count, + OPT_BOOL('c', "count", &opt.count, N_("show the number of matches instead of matching lines")), OPT__COLOR(&opt.color, N_("highlight matches")), - OPT_BOOLEAN(0, "break", &opt.file_break, + OPT_BOOL(0, "break", &opt.file_break, N_("print empty line between matches from different files")), - OPT_BOOLEAN(0, "heading", &opt.heading, + OPT_BOOL(0, "heading", &opt.heading, N_("show filename only once above matches from same file")), OPT_GROUP(""), OPT_CALLBACK('C', "context", &opt, N_("n"), @@ -706,9 +706,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix) N_("show <n> context lines after matches")), OPT_NUMBER_CALLBACK(&opt, N_("shortcut for -C NUM"), context_callback), - OPT_BOOLEAN('p', "show-function", &opt.funcname, + OPT_BOOL('p', "show-function", &opt.funcname, N_("show a line with the function name before matches")), - OPT_BOOLEAN('W', "function-context", &opt.funcbody, + OPT_BOOL('W', "function-context", &opt.funcbody, N_("show the surrounding function")), OPT_GROUP(""), OPT_CALLBACK('f', NULL, &opt, N_("file"), @@ -718,7 +718,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix) { OPTION_CALLBACK, 0, "and", &opt, NULL, N_("combine patterns specified with -e"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, and_callback }, - OPT_BOOLEAN(0, "or", &dummy, ""), + OPT_BOOL(0, "or", &dummy, ""), { OPTION_CALLBACK, 0, "not", &opt, NULL, "", PARSE_OPT_NOARG | PARSE_OPT_NONEG, not_callback }, { OPTION_CALLBACK, '(', NULL, &opt, NULL, "", @@ -729,7 +729,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix) close_callback }, OPT__QUIET(&opt.status_only, N_("indicate hit with exit status without output")), - OPT_BOOLEAN(0, "all-match", &opt.all_match, + OPT_BOOL(0, "all-match", &opt.all_match, N_("show only matches from files that match all patterns")), { OPTION_SET_INT, 0, "debug", &opt.debug, NULL, N_("show parse tree for grep expression"), @@ -738,8 +738,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) { OPTION_STRING, 'O', "open-files-in-pager", &show_in_pager, N_("pager"), N_("show matching files in the pager"), PARSE_OPT_OPTARG, NULL, (intptr_t)default_pager }, - OPT_BOOLEAN(0, "ext-grep", &external_grep_allowed__ignored, - N_("allow calling of grep(1) (ignored by this build)")), + OPT_BOOL(0, "ext-grep", &external_grep_allowed__ignored, + N_("allow calling of grep(1) (ignored by this build)")), { OPTION_CALLBACK, 0, "help-all", &options, NULL, N_("show usage"), PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, help_callback }, OPT_END() @@ -856,8 +856,10 @@ int cmd_grep(int argc, const char **argv, const char *prefix) verify_filename(prefix, argv[j], j == i); } - paths = get_pathspec(prefix, argv + i); - init_pathspec(&pathspec, paths); + parse_pathspec(&pathspec, 0, + PATHSPEC_PREFER_CWD | + (opt.max_depth != -1 ? PATHSPEC_MAXDEPTH_VALID : 0), + prefix, argv + i); pathspec.max_depth = opt.max_depth; pathspec.recursive = 1; diff --git a/builtin/hash-object.c b/builtin/hash-object.c index 8d184f1a99..d7fcf4c13c 100644 --- a/builtin/hash-object.c +++ b/builtin/hash-object.c @@ -70,10 +70,10 @@ static const char *vpath; static const struct option hash_object_options[] = { OPT_STRING('t', NULL, &type, N_("type"), N_("object type")), - OPT_BOOLEAN('w', NULL, &write_object, N_("write the object into the object database")), - OPT_BOOLEAN( 0 , "stdin", &hashstdin, N_("read the object from stdin")), - OPT_BOOLEAN( 0 , "stdin-paths", &stdin_paths, N_("read file names from stdin")), - OPT_BOOLEAN( 0 , "no-filters", &no_filters, N_("store file as is without filters")), + OPT_BOOL('w', NULL, &write_object, N_("write the object into the object database")), + OPT_COUNTUP( 0 , "stdin", &hashstdin, N_("read the object from stdin")), + OPT_BOOL( 0 , "stdin-paths", &stdin_paths, N_("read file names from stdin")), + OPT_BOOL( 0 , "no-filters", &no_filters, N_("store file as is without filters")), OPT_STRING( 0 , "path", &vpath, N_("file"), N_("process file as it were from this path")), OPT_END() }; diff --git a/builtin/log.c b/builtin/log.c index 2625f9881a..77d0f5f3fd 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -121,7 +121,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, static struct line_opt_callback_data line_cb = {NULL, NULL, STRING_LIST_INIT_DUP}; const struct option builtin_log_options[] = { - OPT_BOOL(0, "quiet", &quiet, N_("suppress diff output")), + OPT__QUIET(&quiet, N_("suppress diff output")), OPT_BOOL(0, "source", &source, N_("show source")), OPT_BOOL(0, "use-mailmap", &mailmap, N_("Use mail map file")), { OPTION_CALLBACK, 0, "decorate", NULL, NULL, N_("decorate options"), @@ -503,7 +503,7 @@ int cmd_show(int argc, const char **argv, const char *prefix) init_grep_defaults(); git_config(git_log_config, NULL); - init_pathspec(&match_all, NULL); + memset(&match_all, 0, sizeof(match_all)); init_revisions(&rev, prefix); rev.diff = 1; rev.always_show_header = 1; @@ -1179,13 +1179,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) { OPTION_CALLBACK, 'k', "keep-subject", &rev, NULL, N_("don't strip/add [PATCH]"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback }, - OPT_BOOLEAN(0, "no-binary", &no_binary_diff, - N_("don't output binary diffs")), - OPT_BOOLEAN(0, "ignore-if-in-upstream", &ignore_if_in_upstream, - N_("don't include a patch matching a commit upstream")), - { OPTION_BOOLEAN, 'p', "no-stat", &use_patch_format, NULL, + OPT_BOOL(0, "no-binary", &no_binary_diff, + N_("don't output binary diffs")), + OPT_BOOL(0, "ignore-if-in-upstream", &ignore_if_in_upstream, + N_("don't include a patch matching a commit upstream")), + { OPTION_SET_INT, 'p', "no-stat", &use_patch_format, NULL, N_("show patch format instead of default (patch + stat)"), - PARSE_OPT_NONEG | PARSE_OPT_NOARG }, + PARSE_OPT_NONEG | PARSE_OPT_NOARG, NULL, 1}, OPT_GROUP(N_("Messaging")), { OPTION_CALLBACK, 0, "add-header", NULL, N_("header"), N_("add email header"), 0, header_callback }, @@ -1210,8 +1210,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) PARSE_OPT_OPTARG, thread_callback }, OPT_STRING(0, "signature", &signature, N_("signature"), N_("add a signature")), - OPT_BOOLEAN(0, "quiet", &quiet, - N_("don't print the patch filenames")), + OPT__QUIET(&quiet, N_("don't print the patch filenames")), OPT_END() }; diff --git a/builtin/ls-files.c b/builtin/ls-files.c index 5cf3e31370..d4823c9d38 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -13,6 +13,7 @@ #include "parse-options.h" #include "resolve-undo.h" #include "string-list.h" +#include "pathspec.h" static int abbrev; static int show_deleted; @@ -30,7 +31,7 @@ static int debug_mode; static const char *prefix; static int max_prefix_len; static int prefix_len; -static const char **pathspec; +static struct pathspec pathspec; static int error_unmatch; static char *ps_matched; static const char *with_tree; @@ -63,7 +64,7 @@ static void show_dir_entry(const char *tag, struct dir_entry *ent) if (len >= ent->len) die("git ls-files: internal error - directory entry not superset of prefix"); - if (!match_pathspec(pathspec, ent->name, ent->len, len, ps_matched)) + if (!match_pathspec_depth(&pathspec, ent->name, ent->len, len, ps_matched)) return; fputs(tag, stdout); @@ -138,7 +139,7 @@ static void show_ce_entry(const char *tag, const struct cache_entry *ce) if (len >= ce_namelen(ce)) die("git ls-files: internal error - cache entry not superset of prefix"); - if (!match_pathspec(pathspec, ce->name, ce_namelen(ce), len, ps_matched)) + if (!match_pathspec_depth(&pathspec, ce->name, ce_namelen(ce), len, ps_matched)) return; if (tag && *tag && show_valid_bit && @@ -194,7 +195,7 @@ static void show_ru_info(void) len = strlen(path); if (len < max_prefix_len) continue; /* outside of the prefix */ - if (!match_pathspec(pathspec, path, len, max_prefix_len, ps_matched)) + if (!match_pathspec_depth(&pathspec, path, len, max_prefix_len, ps_matched)) continue; /* uninterested */ for (i = 0; i < 3; i++) { if (!ui->mode[i]) @@ -219,7 +220,7 @@ static void show_files(struct dir_struct *dir) /* For cached/deleted files we don't need to even do the readdir */ if (show_others || show_killed) { - fill_directory(dir, pathspec); + fill_directory(dir, &pathspec); if (show_others) show_other_files(dir); if (show_killed) @@ -287,21 +288,6 @@ static void prune_cache(const char *prefix) active_nr = last; } -static void strip_trailing_slash_from_submodules(void) -{ - const char **p; - - for (p = pathspec; *p != NULL; p++) { - int len = strlen(*p), pos; - - if (len < 1 || (*p)[len - 1] != '/') - continue; - pos = cache_name_pos(*p, len - 1); - if (pos >= 0 && S_ISGITLINK(active_cache[pos]->ce_mode)) - *p = xstrndup(*p, len - 1); - } -} - /* * Read the tree specified with --with-tree option * (typically, HEAD) into stage #1 and then @@ -333,13 +319,12 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix) } if (prefix) { - static const char *(matchbuf[2]); - matchbuf[0] = prefix; - matchbuf[1] = NULL; - init_pathspec(&pathspec, matchbuf); - pathspec.items[0].nowildcard_len = pathspec.items[0].len; + static const char *(matchbuf[1]); + matchbuf[0] = NULL; + parse_pathspec(&pathspec, PATHSPEC_ALL_MAGIC, + PATHSPEC_PREFER_CWD, prefix, matchbuf); } else - init_pathspec(&pathspec, NULL); + memset(&pathspec, 0, sizeof(pathspec)); if (read_tree(tree, 1, &pathspec)) die("unable to read tree entries %s", tree_name); @@ -364,15 +349,16 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix) } } -int report_path_error(const char *ps_matched, const char **pathspec, const char *prefix) +int report_path_error(const char *ps_matched, + const struct pathspec *pathspec, + const char *prefix) { /* * Make sure all pathspec matched; otherwise it is an error. */ struct strbuf sb = STRBUF_INIT; - const char *name; int num, errors = 0; - for (num = 0; pathspec[num]; num++) { + for (num = 0; num < pathspec->nr; num++) { int other, found_dup; if (ps_matched[num]) @@ -380,13 +366,16 @@ int report_path_error(const char *ps_matched, const char **pathspec, const char /* * The caller might have fed identical pathspec * twice. Do not barf on such a mistake. + * FIXME: parse_pathspec should have eliminated + * duplicate pathspec. */ for (found_dup = other = 0; - !found_dup && pathspec[other]; + !found_dup && other < pathspec->nr; other++) { if (other == num || !ps_matched[other]) continue; - if (!strcmp(pathspec[other], pathspec[num])) + if (!strcmp(pathspec->items[other].original, + pathspec->items[num].original)) /* * Ok, we have a match already. */ @@ -395,9 +384,8 @@ int report_path_error(const char *ps_matched, const char **pathspec, const char if (found_dup) continue; - name = quote_path_relative(pathspec[num], prefix, &sb); error("pathspec '%s' did not match any file(s) known to git.", - name); + pathspec->items[num].original); errors++; } strbuf_release(&sb); @@ -461,24 +449,24 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) { OPTION_CALLBACK, 'z', NULL, NULL, NULL, N_("paths are separated with NUL character"), PARSE_OPT_NOARG, option_parse_z }, - OPT_BOOLEAN('t', NULL, &show_tag, + OPT_BOOL('t', NULL, &show_tag, N_("identify the file status with tags")), - OPT_BOOLEAN('v', NULL, &show_valid_bit, + OPT_BOOL('v', NULL, &show_valid_bit, N_("use lowercase letters for 'assume unchanged' files")), - OPT_BOOLEAN('c', "cached", &show_cached, + OPT_BOOL('c', "cached", &show_cached, N_("show cached files in the output (default)")), - OPT_BOOLEAN('d', "deleted", &show_deleted, + OPT_BOOL('d', "deleted", &show_deleted, N_("show deleted files in the output")), - OPT_BOOLEAN('m', "modified", &show_modified, + OPT_BOOL('m', "modified", &show_modified, N_("show modified files in the output")), - OPT_BOOLEAN('o', "others", &show_others, + OPT_BOOL('o', "others", &show_others, N_("show other files in the output")), OPT_BIT('i', "ignored", &dir.flags, N_("show ignored files in the output"), DIR_SHOW_IGNORED), - OPT_BOOLEAN('s', "stage", &show_stage, + OPT_BOOL('s', "stage", &show_stage, N_("show staged contents' object name in the output")), - OPT_BOOLEAN('k', "killed", &show_killed, + OPT_BOOL('k', "killed", &show_killed, N_("show files on the filesystem that need to be removed")), OPT_BIT(0, "directory", &dir.flags, N_("show 'other' directories' name only"), @@ -486,9 +474,9 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) OPT_NEGBIT(0, "empty-directory", &dir.flags, N_("don't show empty directories"), DIR_HIDE_EMPTY_DIRECTORIES), - OPT_BOOLEAN('u', "unmerged", &show_unmerged, + OPT_BOOL('u', "unmerged", &show_unmerged, N_("show unmerged files in the output")), - OPT_BOOLEAN(0, "resolve-undo", &show_resolve_undo, + OPT_BOOL(0, "resolve-undo", &show_resolve_undo, N_("show resolve-undo information")), { OPTION_CALLBACK, 'x', "exclude", &exclude_list, N_("pattern"), N_("skip files matching pattern"), @@ -504,12 +492,12 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) { OPTION_SET_INT, 0, "full-name", &prefix_len, NULL, N_("make the output relative to the project top directory"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL }, - OPT_BOOLEAN(0, "error-unmatch", &error_unmatch, + OPT_BOOL(0, "error-unmatch", &error_unmatch, N_("if any <file> is not in the index, treat this as an error")), OPT_STRING(0, "with-tree", &with_tree, N_("tree-ish"), N_("pretend that paths removed since <tree-ish> are still present")), OPT__ABBREV(&abbrev), - OPT_BOOLEAN(0, "debug", &debug_mode, N_("show debugging data")), + OPT_BOOL(0, "debug", &debug_mode, N_("show debugging data")), OPT_END() }; @@ -555,23 +543,18 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) if (require_work_tree && !is_inside_work_tree()) setup_work_tree(); - pathspec = get_pathspec(prefix, argv); - - /* be nice with submodule paths ending in a slash */ - if (pathspec) - strip_trailing_slash_from_submodules(); + parse_pathspec(&pathspec, 0, + PATHSPEC_PREFER_CWD | + PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP, + prefix, argv); /* Find common prefix for all pathspec's */ - max_prefix = common_prefix(pathspec); + max_prefix = common_prefix(&pathspec); max_prefix_len = max_prefix ? strlen(max_prefix) : 0; /* Treat unmatching pathspec elements as errors */ - if (pathspec && error_unmatch) { - int num; - for (num = 0; pathspec[num]; num++) - ; - ps_matched = xcalloc(1, num); - } + if (pathspec.nr && error_unmatch) + ps_matched = xcalloc(1, pathspec.nr); if ((dir.flags & DIR_SHOW_IGNORED) && !exc_given) die("ls-files --ignored needs some exclude pattern"); @@ -598,7 +581,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) if (ps_matched) { int bad; - bad = report_path_error(ps_matched, pathspec, prefix); + bad = report_path_error(ps_matched, &pathspec, prefix); if (bad) fprintf(stderr, "Did you forget to 'git add'?\n"); diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c index fb76e38d84..65ec931846 100644 --- a/builtin/ls-tree.c +++ b/builtin/ls-tree.c @@ -10,6 +10,7 @@ #include "quote.h" #include "builtin.h" #include "parse-options.h" +#include "pathspec.h" static int line_termination = '\n'; #define LS_RECURSIVE 1 @@ -35,7 +36,7 @@ static int show_recursive(const char *base, int baselen, const char *pathname) if (ls_options & LS_RECURSIVE) return 1; - s = pathspec.raw; + s = pathspec._raw; if (!s) return 0; @@ -138,9 +139,9 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix) LS_NAME_ONLY), OPT_SET_INT(0, "full-name", &chomp_prefix, N_("use full path names"), 0), - OPT_BOOLEAN(0, "full-tree", &full_tree, - N_("list entire tree; not just current directory " - "(implies --full-name)")), + OPT_BOOL(0, "full-tree", &full_tree, + N_("list entire tree; not just current directory " + "(implies --full-name)")), OPT__ABBREV(&abbrev), OPT_END() }; @@ -166,7 +167,15 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix) if (get_sha1(argv[0], sha1)) die("Not a valid object name %s", argv[0]); - init_pathspec(&pathspec, get_pathspec(prefix, argv + 1)); + /* + * show_recursive() rolls its own matching code and is + * generally ignorant of 'struct pathspec'. The magic mask + * cannot be lifted until it is converted to use + * match_pathspec_depth() or tree_entry_interesting() + */ + parse_pathspec(&pathspec, PATHSPEC_GLOB | PATHSPEC_ICASE, + PATHSPEC_PREFER_CWD, + prefix, argv + 1); for (i = 0; i < pathspec.nr; i++) pathspec.items[i].nowildcard_len = pathspec.items[i].len; pathspec.has_wildcard = 0; diff --git a/builtin/merge-base.c b/builtin/merge-base.c index 0c4cd2f9f7..e88eb93f14 100644 --- a/builtin/merge-base.c +++ b/builtin/merge-base.c @@ -95,11 +95,11 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix) int is_ancestor = 0; struct option options[] = { - OPT_BOOLEAN('a', "all", &show_all, N_("output all common ancestors")), - OPT_BOOLEAN(0, "octopus", &octopus, N_("find ancestors for a single n-way merge")), - OPT_BOOLEAN(0, "independent", &reduce, N_("list revs not reachable from others")), - OPT_BOOLEAN(0, "is-ancestor", &is_ancestor, - N_("is the first one ancestor of the other?")), + OPT_BOOL('a', "all", &show_all, N_("output all common ancestors")), + OPT_BOOL(0, "octopus", &octopus, N_("find ancestors for a single n-way merge")), + OPT_BOOL(0, "independent", &reduce, N_("list revs not reachable from others")), + OPT_BOOL(0, "is-ancestor", &is_ancestor, + N_("is the first one ancestor of the other?")), OPT_END() }; diff --git a/builtin/merge-file.c b/builtin/merge-file.c index c0570f2407..844f84f40b 100644 --- a/builtin/merge-file.c +++ b/builtin/merge-file.c @@ -30,7 +30,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix) int quiet = 0; int prefixlen = 0; struct option options[] = { - OPT_BOOLEAN('p', "stdout", &to_stdout, N_("send results to standard output")), + OPT_BOOL('p', "stdout", &to_stdout, N_("send results to standard output")), OPT_SET_INT(0, "diff3", &xmp.style, N_("use a diff3 based merge"), XDL_MERGE_DIFF3), OPT_SET_INT(0, "ours", &xmp.favor, N_("for conflicts, use our version"), XDL_MERGE_FAVOR_OURS), diff --git a/builtin/merge.c b/builtin/merge.c index 34a6166b52..a8cf4a2484 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -197,15 +197,15 @@ static struct option builtin_merge_options[] = { { OPTION_CALLBACK, 'n', NULL, NULL, NULL, N_("do not show a diffstat at the end of the merge"), PARSE_OPT_NOARG, option_parse_n }, - OPT_BOOLEAN(0, "stat", &show_diffstat, + OPT_BOOL(0, "stat", &show_diffstat, N_("show a diffstat at the end of the merge")), - OPT_BOOLEAN(0, "summary", &show_diffstat, N_("(synonym to --stat)")), + OPT_BOOL(0, "summary", &show_diffstat, N_("(synonym to --stat)")), { OPTION_INTEGER, 0, "log", &shortlog_len, N_("n"), N_("add (at most <n>) entries from shortlog to merge commit message"), PARSE_OPT_OPTARG, NULL, DEFAULT_MERGE_LOG_LEN }, - OPT_BOOLEAN(0, "squash", &squash, + OPT_BOOL(0, "squash", &squash, N_("create a single commit instead of doing a merge")), - OPT_BOOLEAN(0, "commit", &option_commit, + OPT_BOOL(0, "commit", &option_commit, N_("perform a commit if the merge succeeds (default)")), OPT_BOOL('e', "edit", &option_edit, N_("edit message before committing")), @@ -224,12 +224,12 @@ static struct option builtin_merge_options[] = { N_("merge commit message (for a non-fast-forward merge)"), option_parse_message), OPT__VERBOSITY(&verbosity), - OPT_BOOLEAN(0, "abort", &abort_current_merge, + OPT_BOOL(0, "abort", &abort_current_merge, N_("abort the current in-progress merge")), OPT_SET_INT(0, "progress", &show_progress, N_("force progress reporting"), 1), { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key id"), N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" }, - OPT_BOOLEAN(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")), + OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")), OPT_END() }; diff --git a/builtin/mv.c b/builtin/mv.c index 034fec92a1..aec79d1838 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -9,14 +9,16 @@ #include "cache-tree.h" #include "string-list.h" #include "parse-options.h" +#include "submodule.h" static const char * const builtin_mv_usage[] = { N_("git mv [options] <source>... <destination>"), NULL }; -static const char **copy_pathspec(const char *prefix, const char **pathspec, - int count, int base_name) +static const char **internal_copy_pathspec(const char *prefix, + const char **pathspec, + int count, int base_name) { int i; const char **result = xmalloc((count + 1) * sizeof(const char *)); @@ -56,20 +58,21 @@ static struct lock_file lock_file; int cmd_mv(int argc, const char **argv, const char *prefix) { - int i, newfd; + int i, newfd, gitmodules_modified = 0; int verbose = 0, show_only = 0, force = 0, ignore_errors = 0; struct option builtin_mv_options[] = { OPT__VERBOSE(&verbose, N_("be verbose")), OPT__DRY_RUN(&show_only, N_("dry run")), OPT__FORCE(&force, N_("force move/rename even if target exists")), - OPT_BOOLEAN('k', NULL, &ignore_errors, N_("skip move/rename errors")), + OPT_BOOL('k', NULL, &ignore_errors, N_("skip move/rename errors")), OPT_END(), }; - const char **source, **destination, **dest_path; + const char **source, **destination, **dest_path, **submodule_gitfile; enum update_mode { BOTH = 0, WORKING_DIRECTORY, INDEX } *modes; struct stat st; struct string_list src_for_dst = STRING_LIST_INIT_NODUP; + gitmodules_config(); git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, builtin_mv_options, @@ -81,17 +84,18 @@ int cmd_mv(int argc, const char **argv, const char *prefix) if (read_cache() < 0) die(_("index file corrupt")); - source = copy_pathspec(prefix, argv, argc, 0); + source = internal_copy_pathspec(prefix, argv, argc, 0); modes = xcalloc(argc, sizeof(enum update_mode)); - dest_path = copy_pathspec(prefix, argv + argc, 1, 0); + dest_path = internal_copy_pathspec(prefix, argv + argc, 1, 0); + submodule_gitfile = xcalloc(argc, sizeof(char *)); if (dest_path[0][0] == '\0') /* special case: "." was normalized to "" */ - destination = copy_pathspec(dest_path[0], argv, argc, 1); + destination = internal_copy_pathspec(dest_path[0], argv, argc, 1); else if (!lstat(dest_path[0], &st) && S_ISDIR(st.st_mode)) { dest_path[0] = add_slash(dest_path[0]); - destination = copy_pathspec(dest_path[0], argv, argc, 1); + destination = internal_copy_pathspec(dest_path[0], argv, argc, 1); } else { if (argc != 1) die("destination '%s' is not a directory", dest_path[0]); @@ -117,55 +121,68 @@ int cmd_mv(int argc, const char **argv, const char *prefix) && lstat(dst, &st) == 0) bad = _("cannot move directory over file"); else if (src_is_dir) { - const char *src_w_slash = add_slash(src); - int len_w_slash = length + 1; - int first, last; - - modes[i] = WORKING_DIRECTORY; - - first = cache_name_pos(src_w_slash, len_w_slash); - if (first >= 0) - die (_("Huh? %.*s is in index?"), - len_w_slash, src_w_slash); - - first = -1 - first; - for (last = first; last < active_nr; last++) { - const char *path = active_cache[last]->name; - if (strncmp(path, src_w_slash, len_w_slash)) - break; - } - free((char *)src_w_slash); - - if (last - first < 1) - bad = _("source directory is empty"); - else { - int j, dst_len; - - if (last - first > 0) { - source = xrealloc(source, - (argc + last - first) - * sizeof(char *)); - destination = xrealloc(destination, - (argc + last - first) - * sizeof(char *)); - modes = xrealloc(modes, - (argc + last - first) - * sizeof(enum update_mode)); + int first = cache_name_pos(src, length); + if (first >= 0) { + struct strbuf submodule_dotgit = STRBUF_INIT; + if (!S_ISGITLINK(active_cache[first]->ce_mode)) + die (_("Huh? Directory %s is in index and no submodule?"), src); + if (!is_staging_gitmodules_ok()) + die (_("Please, stage your changes to .gitmodules or stash them to proceed")); + strbuf_addf(&submodule_dotgit, "%s/.git", src); + submodule_gitfile[i] = read_gitfile(submodule_dotgit.buf); + if (submodule_gitfile[i]) + submodule_gitfile[i] = xstrdup(submodule_gitfile[i]); + strbuf_release(&submodule_dotgit); + } else { + const char *src_w_slash = add_slash(src); + int last, len_w_slash = length + 1; + + modes[i] = WORKING_DIRECTORY; + + first = cache_name_pos(src_w_slash, len_w_slash); + if (first >= 0) + die (_("Huh? %.*s is in index?"), + len_w_slash, src_w_slash); + + first = -1 - first; + for (last = first; last < active_nr; last++) { + const char *path = active_cache[last]->name; + if (strncmp(path, src_w_slash, len_w_slash)) + break; } + free((char *)src_w_slash); + + if (last - first < 1) + bad = _("source directory is empty"); + else { + int j, dst_len; - dst = add_slash(dst); - dst_len = strlen(dst); - - for (j = 0; j < last - first; j++) { - const char *path = - active_cache[first + j]->name; - source[argc + j] = path; - destination[argc + j] = - prefix_path(dst, dst_len, - path + length + 1); - modes[argc + j] = INDEX; + if (last - first > 0) { + source = xrealloc(source, + (argc + last - first) + * sizeof(char *)); + destination = xrealloc(destination, + (argc + last - first) + * sizeof(char *)); + modes = xrealloc(modes, + (argc + last - first) + * sizeof(enum update_mode)); + } + + dst = add_slash(dst); + dst_len = strlen(dst); + + for (j = 0; j < last - first; j++) { + const char *path = + active_cache[first + j]->name; + source[argc + j] = path; + destination[argc + j] = + prefix_path(dst, dst_len, + path + length + 1); + modes[argc + j] = INDEX; + } + argc += last - first; } - argc += last - first; } } else if (cache_name_pos(src, length) < 0) bad = _("not under version control"); @@ -210,9 +227,14 @@ int cmd_mv(int argc, const char **argv, const char *prefix) int pos; if (show_only || verbose) printf(_("Renaming %s to %s\n"), src, dst); - if (!show_only && mode != INDEX && - rename(src, dst) < 0 && !ignore_errors) - die_errno (_("renaming '%s' failed"), src); + if (!show_only && mode != INDEX) { + if (rename(src, dst) < 0 && !ignore_errors) + die_errno (_("renaming '%s' failed"), src); + if (submodule_gitfile[i]) + connect_work_tree_and_git_dir(dst, submodule_gitfile[i]); + if (!update_path_in_gitmodules(src, dst)) + gitmodules_modified = 1; + } if (mode == WORKING_DIRECTORY) continue; @@ -223,6 +245,9 @@ int cmd_mv(int argc, const char **argv, const char *prefix) rename_cache_entry_at(pos, dst); } + if (gitmodules_modified) + stage_updated_gitmodules(); + if (active_cache_changed) { if (write_cache(newfd, active_cache, active_nr) || commit_locked_index(&lock_file)) diff --git a/builtin/name-rev.c b/builtin/name-rev.c index 0aaa19e4ab..20fcf8c696 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -310,15 +310,15 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) int all = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0; struct name_ref_data data = { 0, 0, NULL }; struct option opts[] = { - OPT_BOOLEAN(0, "name-only", &data.name_only, N_("print only names (no SHA-1)")), - OPT_BOOLEAN(0, "tags", &data.tags_only, N_("only use tags to name the commits")), + OPT_BOOL(0, "name-only", &data.name_only, N_("print only names (no SHA-1)")), + OPT_BOOL(0, "tags", &data.tags_only, N_("only use tags to name the commits")), OPT_STRING(0, "refs", &data.ref_filter, N_("pattern"), N_("only use refs matching <pattern>")), OPT_GROUP(""), - OPT_BOOLEAN(0, "all", &all, N_("list all commits reachable from all refs")), - OPT_BOOLEAN(0, "stdin", &transform_stdin, N_("read from stdin")), - OPT_BOOLEAN(0, "undefined", &allow_undefined, N_("allow to print `undefined` names")), - OPT_BOOLEAN(0, "always", &always, + OPT_BOOL(0, "all", &all, N_("list all commits reachable from all refs")), + OPT_BOOL(0, "stdin", &transform_stdin, N_("read from stdin")), + OPT_BOOL(0, "undefined", &allow_undefined, N_("allow to print `undefined` names (default)")), + OPT_BOOL(0, "always", &always, N_("show abbreviated commit object as fallback")), { /* A Hidden OPT_BOOL */ @@ -331,7 +331,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0); - if (!!all + !!transform_stdin + !!argc > 1) { + if (all + transform_stdin + !!argc > 1) { error("Specify either a list, or --all, not both!"); usage_with_options(name_rev_usage, opts); } diff --git a/builtin/notes.c b/builtin/notes.c index e4100c4982..d459e23c42 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -483,7 +483,7 @@ static int copy(int argc, const char **argv, const char *prefix) const char *rewrite_cmd = NULL; struct option options[] = { OPT__FORCE(&force, N_("replace existing notes")), - OPT_BOOLEAN(0, "stdin", &from_stdin, N_("read objects from stdin")), + OPT_BOOL(0, "stdin", &from_stdin, N_("read objects from stdin")), OPT_STRING(0, "for-rewrite", &rewrite_cmd, N_("command"), N_("load rewriting config for <command> (implies " "--stdin)")), @@ -739,13 +739,13 @@ static int merge(int argc, const char **argv, const char *prefix) N_("resolve notes conflicts using the given strategy " "(manual/ours/theirs/union/cat_sort_uniq)")), OPT_GROUP(N_("Committing unmerged notes")), - { OPTION_BOOLEAN, 0, "commit", &do_commit, NULL, + { OPTION_SET_INT, 0, "commit", &do_commit, NULL, N_("finalize notes merge by committing unmerged notes"), - PARSE_OPT_NOARG | PARSE_OPT_NONEG }, + PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1}, OPT_GROUP(N_("Aborting notes merge resolution")), - { OPTION_BOOLEAN, 0, "abort", &do_abort, NULL, + { OPTION_SET_INT, 0, "abort", &do_abort, NULL, N_("abort notes merge"), - PARSE_OPT_NOARG | PARSE_OPT_NONEG }, + PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1}, OPT_END() }; @@ -853,7 +853,7 @@ static int remove_cmd(int argc, const char **argv, const char *prefix) OPT_BIT(0, "ignore-missing", &flag, N_("attempt to remove non-existent note is not an error"), IGNORE_MISSING), - OPT_BOOLEAN(0, "stdin", &from_stdin, + OPT_BOOL(0, "stdin", &from_stdin, N_("read object names from the standard input")), OPT_END() }; diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index f069462cb0..4eb0521c81 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1809,7 +1809,7 @@ static void find_deltas(struct object_entry **list, unsigned *list_size, static void try_to_free_from_threads(size_t size) { read_lock(); - release_pack_memory(size, -1); + release_pack_memory(size); read_unlock(); } diff --git a/builtin/push.c b/builtin/push.c index 04f0eaf179..50bbfd62b1 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -21,6 +21,8 @@ static const char *receivepack; static int verbosity; static int progress = -1; +static struct push_cas_option cas; + static const char **refspec; static int refspec_nr; static int refspec_alloc; @@ -316,6 +318,13 @@ static int push_with_options(struct transport *transport, int flags) if (thin) transport_set_option(transport, TRANS_OPT_THIN, "yes"); + if (!is_empty_cas(&cas)) { + if (!transport->smart_options) + die("underlying transport does not support --%s option", + CAS_OPT_NAME); + transport->smart_options->cas = &cas; + } + if (verbosity > 0) fprintf(stderr, _("Pushing to %s\n"), transport->url); err = transport_push(transport, refspec_nr, refspec, flags, @@ -446,15 +455,19 @@ int cmd_push(int argc, const char **argv, const char *prefix) OPT_BIT( 0 , "all", &flags, N_("push all refs"), TRANSPORT_PUSH_ALL), OPT_BIT( 0 , "mirror", &flags, N_("mirror all refs"), (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)), - OPT_BOOLEAN( 0, "delete", &deleterefs, N_("delete refs")), - OPT_BOOLEAN( 0 , "tags", &tags, N_("push tags (can't be used with --all or --mirror)")), + OPT_BOOL( 0, "delete", &deleterefs, N_("delete refs")), + OPT_BOOL( 0 , "tags", &tags, N_("push tags (can't be used with --all or --mirror)")), OPT_BIT('n' , "dry-run", &flags, N_("dry run"), TRANSPORT_PUSH_DRY_RUN), OPT_BIT( 0, "porcelain", &flags, N_("machine-readable output"), TRANSPORT_PUSH_PORCELAIN), OPT_BIT('f', "force", &flags, N_("force updates"), TRANSPORT_PUSH_FORCE), + { OPTION_CALLBACK, + 0, CAS_OPT_NAME, &cas, N_("refname>:<expect"), + N_("require old value of ref to be at this value"), + PARSE_OPT_OPTARG, parseopt_push_cas_option }, { OPTION_CALLBACK, 0, "recurse-submodules", &flags, N_("check"), N_("control recursive pushing of submodules"), PARSE_OPT_OPTARG, option_parse_recurse_submodules }, - OPT_BOOLEAN( 0 , "thin", &thin, N_("use thin pack")), + OPT_BOOL( 0 , "thin", &thin, N_("use thin pack")), OPT_STRING( 0 , "receive-pack", &receivepack, "receive-pack", N_("receive pack program")), OPT_STRING( 0 , "exec", &receivepack, "receive-pack", N_("receive pack program")), OPT_BIT('u', "set-upstream", &flags, N_("set upstream for git pull/status"), diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index e3eb5fc058..7434d9b4a2 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -8,6 +8,7 @@ #include "commit.h" #include "object.h" #include "remote.h" +#include "connect.h" #include "transport.h" #include "string-list.h" #include "sha1-array.h" diff --git a/builtin/remote.c b/builtin/remote.c index 5e54d367b8..eaac3e2012 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -160,7 +160,7 @@ static int add(int argc, const char **argv) int i; struct option options[] = { - OPT_BOOLEAN('f', "fetch", &fetch, N_("fetch the remote branches")), + OPT_BOOL('f', "fetch", &fetch, N_("fetch the remote branches")), OPT_SET_INT(0, "tags", &fetch_tags, N_("import all tags and associated objects when fetching"), TAGS_SET), @@ -1088,7 +1088,7 @@ static int show(int argc, const char **argv) { int no_query = 0, result = 0, query_flag = 0; struct option options[] = { - OPT_BOOLEAN('n', NULL, &no_query, N_("do not query remotes")), + OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")), OPT_END() }; struct ref_states states; @@ -1195,10 +1195,10 @@ static int set_head(int argc, const char **argv) char *head_name = NULL; struct option options[] = { - OPT_BOOLEAN('a', "auto", &opt_a, - N_("set refs/remotes/<name>/HEAD according to remote")), - OPT_BOOLEAN('d', "delete", &opt_d, - N_("delete refs/remotes/<name>/HEAD")), + OPT_BOOL('a', "auto", &opt_a, + N_("set refs/remotes/<name>/HEAD according to remote")), + OPT_BOOL('d', "delete", &opt_d, + N_("delete refs/remotes/<name>/HEAD")), OPT_END() }; argc = parse_options(argc, argv, NULL, options, builtin_remote_sethead_usage, @@ -1317,8 +1317,8 @@ static int update(int argc, const char **argv) { int i, prune = 0; struct option options[] = { - OPT_BOOLEAN('p', "prune", &prune, - N_("prune remotes after fetching")), + OPT_BOOL('p', "prune", &prune, + N_("prune remotes after fetching")), OPT_END() }; const char **fetch_argv; @@ -1404,7 +1404,7 @@ static int set_branches(int argc, const char **argv) { int add_mode = 0; struct option options[] = { - OPT_BOOLEAN('\0', "add", &add_mode, N_("add branch")), + OPT_BOOL('\0', "add", &add_mode, N_("add branch")), OPT_END() }; @@ -1432,11 +1432,11 @@ static int set_url(int argc, const char **argv) int urlset_nr; struct strbuf name_buf = STRBUF_INIT; struct option options[] = { - OPT_BOOLEAN('\0', "push", &push_mode, - N_("manipulate push URLs")), - OPT_BOOLEAN('\0', "add", &add_mode, - N_("add URL")), - OPT_BOOLEAN('\0', "delete", &delete_mode, + OPT_BOOL('\0', "push", &push_mode, + N_("manipulate push URLs")), + OPT_BOOL('\0', "add", &add_mode, + N_("add URL")), + OPT_BOOL('\0', "delete", &delete_mode, N_("delete URLs")), OPT_END() }; diff --git a/builtin/replace.c b/builtin/replace.c index 59d31152d0..11b0a55ae7 100644 --- a/builtin/replace.c +++ b/builtin/replace.c @@ -118,9 +118,9 @@ int cmd_replace(int argc, const char **argv, const char *prefix) { int list = 0, delete = 0, force = 0; struct option options[] = { - OPT_BOOLEAN('l', NULL, &list, N_("list replace refs")), - OPT_BOOLEAN('d', NULL, &delete, N_("delete replace refs")), - OPT_BOOLEAN('f', NULL, &force, N_("replace the ref if it exists")), + OPT_BOOL('l', NULL, &list, N_("list replace refs")), + OPT_BOOL('d', NULL, &delete, N_("delete replace refs")), + OPT_BOOL('f', NULL, &force, N_("replace the ref if it exists")), OPT_END() }; diff --git a/builtin/rerere.c b/builtin/rerere.c index dc1708e6d6..4e51addb3e 100644 --- a/builtin/rerere.c +++ b/builtin/rerere.c @@ -6,6 +6,7 @@ #include "rerere.h" #include "xdiff/xdiff.h" #include "xdiff-interface.h" +#include "pathspec.h" static const char * const rerere_usage[] = { N_("git rerere [clear | forget path... | status | remaining | diff | gc]"), @@ -68,11 +69,12 @@ int cmd_rerere(int argc, const char **argv, const char *prefix) return rerere(flags); if (!strcmp(argv[0], "forget")) { - const char **pathspec; + struct pathspec pathspec; if (argc < 2) warning("'git rerere forget' without paths is deprecated"); - pathspec = get_pathspec(prefix, argv + 1); - return rerere_forget(pathspec); + parse_pathspec(&pathspec, 0, PATHSPEC_PREFER_CWD, + prefix, argv + 1); + return rerere_forget(&pathspec); } fd = setup_rerere(&merge_rr, flags); diff --git a/builtin/reset.c b/builtin/reset.c index afa6e020e8..5e4c551531 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -133,12 +133,13 @@ static void update_index_from_diff(struct diff_queue_struct *q, } } -static int read_from_tree(const char **pathspec, unsigned char *tree_sha1) +static int read_from_tree(const struct pathspec *pathspec, + unsigned char *tree_sha1) { struct diff_options opt; memset(&opt, 0, sizeof(opt)); - diff_tree_setup_paths(pathspec, &opt); + copy_pathspec(&opt.pathspec, pathspec); opt.output_format = DIFF_FORMAT_CALLBACK; opt.format_callback = update_index_from_diff; @@ -147,7 +148,7 @@ static int read_from_tree(const char **pathspec, unsigned char *tree_sha1) return 1; diffcore_std(&opt); diff_flush(&opt); - diff_tree_release_paths(&opt); + free_pathspec(&opt.pathspec); return 0; } @@ -174,7 +175,10 @@ static void die_if_unmerged_cache(int reset_type) } -static const char **parse_args(const char **argv, const char *prefix, const char **rev_ret) +static void parse_args(struct pathspec *pathspec, + const char **argv, const char *prefix, + int patch_mode, + const char **rev_ret) { const char *rev = "HEAD"; unsigned char unused[20]; @@ -216,7 +220,10 @@ static const char **parse_args(const char **argv, const char *prefix, const char } } *rev_ret = rev; - return argv[0] ? get_pathspec(prefix, argv) : NULL; + parse_pathspec(pathspec, 0, + PATHSPEC_PREFER_FULL | + (patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0), + prefix, argv); } static int update_refs(const char *rev, const unsigned char *sha1) @@ -246,7 +253,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) int patch_mode = 0, unborn; const char *rev; unsigned char sha1[20]; - const char **pathspec = NULL; + struct pathspec pathspec; const struct option options[] = { OPT__QUIET(&quiet, N_("be quiet, only report errors")), OPT_SET_INT(0, "mixed", &reset_type, @@ -258,7 +265,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) N_("reset HEAD, index and working tree"), MERGE), OPT_SET_INT(0, "keep", &reset_type, N_("reset HEAD but keep local changes"), KEEP), - OPT_BOOLEAN('p', "patch", &patch_mode, N_("select hunks interactively")), + OPT_BOOL('p', "patch", &patch_mode, N_("select hunks interactively")), OPT_END() }; @@ -266,13 +273,13 @@ int cmd_reset(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, git_reset_usage, PARSE_OPT_KEEP_DASHDASH); - pathspec = parse_args(argv, prefix, &rev); + parse_args(&pathspec, argv, prefix, patch_mode, &rev); unborn = !strcmp(rev, "HEAD") && get_sha1("HEAD", sha1); if (unborn) { /* reset on unborn branch: treat as reset to empty tree */ hashcpy(sha1, EMPTY_TREE_SHA1_BIN); - } else if (!pathspec) { + } else if (!pathspec.nr) { struct commit *commit; if (get_sha1_committish(rev, sha1)) die(_("Failed to resolve '%s' as a valid revision."), rev); @@ -293,13 +300,13 @@ int cmd_reset(int argc, const char **argv, const char *prefix) if (patch_mode) { if (reset_type != NONE) die(_("--patch is incompatible with --{hard,mixed,soft}")); - return run_add_interactive(sha1_to_hex(sha1), "--patch=reset", pathspec); + return run_add_interactive(sha1_to_hex(sha1), "--patch=reset", &pathspec); } /* git reset tree [--] paths... can be used to * load chosen paths from the tree into the index without * affecting the working tree nor HEAD. */ - if (pathspec) { + if (pathspec.nr) { if (reset_type == MIXED) warning(_("--mixed with paths is deprecated; use 'git reset -- <paths>' instead.")); else if (reset_type != NONE) @@ -326,7 +333,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) struct lock_file *lock = xcalloc(1, sizeof(struct lock_file)); int newfd = hold_locked_index(lock, 1); if (reset_type == MIXED) { - if (read_from_tree(pathspec, sha1)) + if (read_from_tree(&pathspec, sha1)) return 1; } else { int err = reset_index(sha1, reset_type, quiet); @@ -347,7 +354,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) die(_("Could not write new index file.")); } - if (!pathspec && !unborn) { + if (!pathspec.nr && !unborn) { /* Any resets without paths update HEAD to the head being * switched to, saving the previous head in ORIG_HEAD before. */ update_ref_status = update_refs(rev, sha1); @@ -355,7 +362,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) if (reset_type == HARD && !update_ref_status && !quiet) print_new_head_line(lookup_commit_reference(sha1)); } - if (!pathspec) + if (!pathspec.nr) remove_branch_state(); return update_ref_status; diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index de894c7577..c76b89dc5b 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -346,9 +346,9 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) NULL }; static struct option parseopt_opts[] = { - OPT_BOOLEAN(0, "keep-dashdash", &keep_dashdash, + OPT_BOOL(0, "keep-dashdash", &keep_dashdash, N_("keep the `--` passed as an arg")), - OPT_BOOLEAN(0, "stop-at-non-option", &stop_at_non_option, + OPT_BOOL(0, "stop-at-non-option", &stop_at_non_option, N_("stop parsing after the " "first non-option argument")), OPT_END(), @@ -486,21 +486,6 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) if (argc > 1 && !strcmp("--sq-quote", argv[1])) return cmd_sq_quote(argc - 2, argv + 2); - if (argc == 2 && !strcmp("--local-env-vars", argv[1])) { - int i; - for (i = 0; local_repo_env[i]; i++) - printf("%s\n", local_repo_env[i]); - return 0; - } - - if (argc > 2 && !strcmp(argv[1], "--resolve-git-dir")) { - const char *gitdir = resolve_gitdir(argv[2]); - if (!gitdir) - die("not a gitdir '%s'", argv[2]); - puts(gitdir); - return 0; - } - if (argc > 1 && !strcmp("-h", argv[1])) usage(builtin_rev_parse_usage); @@ -661,6 +646,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) for_each_remote_ref(show_reference, NULL); continue; } + if (!strcmp(arg, "--local-env-vars")) { + int i; + for (i = 0; local_repo_env[i]; i++) + printf("%s\n", local_repo_env[i]); + continue; + } if (!strcmp(arg, "--show-toplevel")) { const char *work_tree = get_git_work_tree(); if (work_tree) @@ -711,6 +702,13 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) printf("%s%s.git\n", cwd, len && cwd[len-1] != '/' ? "/" : ""); continue; } + if (!strcmp(arg, "--resolve-git-dir")) { + const char *gitdir = resolve_gitdir(argv[i+1]); + if (!gitdir) + die("not a gitdir '%s'", argv[i+1]); + puts(gitdir); + continue; + } if (!strcmp(arg, "--is-inside-git-dir")) { printf("%s\n", is_inside_git_dir() ? "true" : "false"); diff --git a/builtin/revert.c b/builtin/revert.c index 1d2648b756..8e87acd12e 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -71,44 +71,19 @@ static void verify_opt_compatible(const char *me, const char *base_opt, ...) die(_("%s: %s cannot be used with %s"), me, this_opt, base_opt); } -LAST_ARG_MUST_BE_NULL -static void verify_opt_mutually_compatible(const char *me, ...) -{ - const char *opt1, *opt2 = NULL; - va_list ap; - - va_start(ap, me); - while ((opt1 = va_arg(ap, const char *))) { - if (va_arg(ap, int)) - break; - } - if (opt1) { - while ((opt2 = va_arg(ap, const char *))) { - if (va_arg(ap, int)) - break; - } - } - va_end(ap); - - if (opt1 && opt2) - die(_("%s: %s cannot be used with %s"), me, opt1, opt2); -} - static void parse_args(int argc, const char **argv, struct replay_opts *opts) { const char * const * usage_str = revert_or_cherry_pick_usage(opts); const char *me = action_name(opts); - int remove_state = 0; - int contin = 0; - int rollback = 0; + int cmd = 0; struct option options[] = { - OPT_BOOLEAN(0, "quit", &remove_state, N_("end revert or cherry-pick sequence")), - OPT_BOOLEAN(0, "continue", &contin, N_("resume revert or cherry-pick sequence")), - OPT_BOOLEAN(0, "abort", &rollback, N_("cancel revert or cherry-pick sequence")), - OPT_BOOLEAN('n', "no-commit", &opts->no_commit, N_("don't automatically commit")), - OPT_BOOLEAN('e', "edit", &opts->edit, N_("edit the commit message")), + OPT_CMDMODE(0, "quit", &cmd, N_("end revert or cherry-pick sequence"), 'q'), + OPT_CMDMODE(0, "continue", &cmd, N_("resume revert or cherry-pick sequence"), 'c'), + OPT_CMDMODE(0, "abort", &cmd, N_("cancel revert or cherry-pick sequence"), 'a'), + OPT_BOOL('n', "no-commit", &opts->no_commit, N_("don't automatically commit")), + OPT_BOOL('e', "edit", &opts->edit, N_("edit the commit message")), OPT_NOOP_NOARG('r', NULL), - OPT_BOOLEAN('s', "signoff", &opts->signoff, N_("add Signed-off-by:")), + OPT_BOOL('s', "signoff", &opts->signoff, N_("add Signed-off-by:")), OPT_INTEGER('m', "mainline", &opts->mainline, N_("parent number")), OPT_RERERE_AUTOUPDATE(&opts->allow_rerere_auto), OPT_STRING(0, "strategy", &opts->strategy, N_("strategy"), N_("merge strategy")), @@ -124,11 +99,11 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) if (opts->action == REPLAY_PICK) { struct option cp_extra[] = { - OPT_BOOLEAN('x', NULL, &opts->record_origin, N_("append commit name")), - OPT_BOOLEAN(0, "ff", &opts->allow_ff, N_("allow fast-forward")), - OPT_BOOLEAN(0, "allow-empty", &opts->allow_empty, N_("preserve initially empty commits")), - OPT_BOOLEAN(0, "allow-empty-message", &opts->allow_empty_message, N_("allow commits with empty messages")), - OPT_BOOLEAN(0, "keep-redundant-commits", &opts->keep_redundant_commits, N_("keep redundant, empty commits")), + OPT_BOOL('x', NULL, &opts->record_origin, N_("append commit name")), + OPT_BOOL(0, "ff", &opts->allow_ff, N_("allow fast-forward")), + OPT_BOOL(0, "allow-empty", &opts->allow_empty, N_("preserve initially empty commits")), + OPT_BOOL(0, "allow-empty-message", &opts->allow_empty_message, N_("allow commits with empty messages")), + OPT_BOOL(0, "keep-redundant-commits", &opts->keep_redundant_commits, N_("keep redundant, empty commits")), OPT_END(), }; if (parse_options_concat(options, ARRAY_SIZE(options), cp_extra)) @@ -139,23 +114,16 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN); - /* Check for incompatible subcommands */ - verify_opt_mutually_compatible(me, - "--quit", remove_state, - "--continue", contin, - "--abort", rollback, - NULL); - /* implies allow_empty */ if (opts->keep_redundant_commits) opts->allow_empty = 1; /* Set the subcommand */ - if (remove_state) + if (cmd == 'q') opts->subcommand = REPLAY_REMOVE_STATE; - else if (contin) + else if (cmd == 'c') opts->subcommand = REPLAY_CONTINUE; - else if (rollback) + else if (cmd == 'a') opts->subcommand = REPLAY_ROLLBACK; else opts->subcommand = REPLAY_NONE; diff --git a/builtin/rm.c b/builtin/rm.c index 0df0b4d942..9b59ab3a64 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -11,6 +11,7 @@ #include "parse-options.h" #include "string-list.h" #include "submodule.h" +#include "pathspec.h" static const char * const builtin_rm_usage[] = { N_("git rm [options] [--] <file>..."), @@ -267,10 +268,10 @@ static int ignore_unmatch = 0; static struct option builtin_rm_options[] = { OPT__DRY_RUN(&show_only, N_("dry run")), OPT__QUIET(&quiet, N_("do not list removed files")), - OPT_BOOLEAN( 0 , "cached", &index_only, N_("only remove from the index")), + OPT_BOOL( 0 , "cached", &index_only, N_("only remove from the index")), OPT__FORCE(&force, N_("override the up-to-date check")), - OPT_BOOLEAN('r', NULL, &recursive, N_("allow recursive removal")), - OPT_BOOLEAN( 0 , "ignore-unmatch", &ignore_unmatch, + OPT_BOOL('r', NULL, &recursive, N_("allow recursive removal")), + OPT_BOOL( 0 , "ignore-unmatch", &ignore_unmatch, N_("exit with a zero status even if nothing matched")), OPT_END(), }; @@ -278,9 +279,10 @@ static struct option builtin_rm_options[] = { int cmd_rm(int argc, const char **argv, const char *prefix) { int i, newfd; - const char **pathspec; + struct pathspec pathspec; char *seen; + gitmodules_config(); git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, builtin_rm_options, @@ -311,31 +313,32 @@ int cmd_rm(int argc, const char **argv, const char *prefix) } } - pathspec = get_pathspec(prefix, argv); - refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL); + parse_pathspec(&pathspec, 0, PATHSPEC_PREFER_CWD, prefix, argv); + refresh_index(&the_index, REFRESH_QUIET, &pathspec, NULL, NULL); - seen = NULL; - for (i = 0; pathspec[i] ; i++) - /* nothing */; - seen = xcalloc(i, 1); + seen = xcalloc(pathspec.nr, 1); for (i = 0; i < active_nr; i++) { const struct cache_entry *ce = active_cache[i]; - if (!match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen)) + if (!match_pathspec_depth(&pathspec, ce->name, ce_namelen(ce), 0, seen)) continue; ALLOC_GROW(list.entry, list.nr + 1, list.alloc); list.entry[list.nr].name = ce->name; - list.entry[list.nr++].is_submodule = S_ISGITLINK(ce->ce_mode); + list.entry[list.nr].is_submodule = S_ISGITLINK(ce->ce_mode); + if (list.entry[list.nr++].is_submodule && + !is_staging_gitmodules_ok()) + die (_("Please, stage your changes to .gitmodules or stash them to proceed")); } - if (pathspec) { - const char *match; + if (pathspec.nr) { + const char *original; int seen_any = 0; - for (i = 0; (match = pathspec[i]) != NULL ; i++) { + for (i = 0; i < pathspec.nr; i++) { + original = pathspec.items[i].original; if (!seen[i]) { if (!ignore_unmatch) { die(_("pathspec '%s' did not match any files"), - match); + original); } } else { @@ -343,10 +346,10 @@ int cmd_rm(int argc, const char **argv, const char *prefix) } if (!recursive && seen[i] == MATCHED_RECURSIVELY) die(_("not removing '%s' recursively without -r"), - *match ? match : "."); + *original ? original : "."); } - if (! seen_any) + if (!seen_any) exit(0); } @@ -396,13 +399,15 @@ int cmd_rm(int argc, const char **argv, const char *prefix) * in the middle) */ if (!index_only) { - int removed = 0; + int removed = 0, gitmodules_modified = 0; for (i = 0; i < list.nr; i++) { const char *path = list.entry[i].name; if (list.entry[i].is_submodule) { if (is_empty_dir(path)) { if (!rmdir(path)) { removed = 1; + if (!remove_path_from_gitmodules(path)) + gitmodules_modified = 1; continue; } } else { @@ -410,9 +415,14 @@ int cmd_rm(int argc, const char **argv, const char *prefix) strbuf_addstr(&buf, path); if (!remove_dir_recursively(&buf, 0)) { removed = 1; + if (!remove_path_from_gitmodules(path)) + gitmodules_modified = 1; strbuf_release(&buf); continue; - } + } else if (!file_exists(path)) + /* Submodule was removed by user */ + if (!remove_path_from_gitmodules(path)) + gitmodules_modified = 1; strbuf_release(&buf); /* Fallthrough and let remove_path() fail. */ } @@ -424,6 +434,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix) if (!removed) die_errno("git rm: '%s'", path); } + if (gitmodules_modified) + stage_updated_gitmodules(); } if (active_cache_changed) { diff --git a/builtin/send-pack.c b/builtin/send-pack.c index 152c4ea092..4482f16efb 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -5,6 +5,7 @@ #include "sideband.h" #include "run-command.h" #include "remote.h" +#include "connect.h" #include "send-pack.h" #include "quote.h" #include "transport.h" @@ -54,6 +55,11 @@ static void print_helper_status(struct ref *ref) msg = "needs force"; break; + case REF_STATUS_REJECT_STALE: + res = "error"; + msg = "stale info"; + break; + case REF_STATUS_REJECT_ALREADY_EXISTS: res = "error"; msg = "already exists"; @@ -102,6 +108,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) int flags; unsigned int reject_reasons; int progress = -1; + struct push_cas_option cas = {0}; argv++; for (i = 1; i < argc; i++, argv++) { @@ -164,6 +171,22 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) helper_status = 1; continue; } + if (!strcmp(arg, "--" CAS_OPT_NAME)) { + if (parse_push_cas_option(&cas, NULL, 0) < 0) + exit(1); + continue; + } + if (!strcmp(arg, "--no-" CAS_OPT_NAME)) { + if (parse_push_cas_option(&cas, NULL, 1) < 0) + exit(1); + continue; + } + if (!prefixcmp(arg, "--" CAS_OPT_NAME "=")) { + if (parse_push_cas_option(&cas, + strchr(arg, '=') + 1, 0) < 0) + exit(1); + continue; + } usage(send_pack_usage); } if (!dest) { @@ -224,6 +247,9 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) if (match_push_refs(local_refs, &remote_refs, nr_refspecs, refspecs, flags)) return -1; + if (!is_empty_cas(&cas)) + apply_push_cas(&cas, remote, remote_refs); + set_ref_status_for_push(remote_refs, args.send_mirror, args.force_update); diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 1434f8fee4..ae73d17b6c 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -224,12 +224,12 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) int nongit = !startup_info->have_repository; static const struct option options[] = { - OPT_BOOLEAN('n', "numbered", &log.sort_by_number, - N_("sort output according to the number of commits per author")), - OPT_BOOLEAN('s', "summary", &log.summary, - N_("Suppress commit descriptions, only provides commit count")), - OPT_BOOLEAN('e', "email", &log.email, - N_("Show the email address of each author")), + OPT_BOOL('n', "numbered", &log.sort_by_number, + N_("sort output according to the number of commits per author")), + OPT_BOOL('s', "summary", &log.summary, + N_("Suppress commit descriptions, only provides commit count")), + OPT_BOOL('e', "email", &log.email, + N_("Show the email address of each author")), { OPTION_CALLBACK, 'w', NULL, &log, N_("w[,i1[,i2]]"), N_("Linewrap output"), PARSE_OPT_OPTARG, &parse_wrap_args }, OPT_END(), diff --git a/builtin/show-branch.c b/builtin/show-branch.c index 9788eb115b..001f29ca1b 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -646,30 +646,30 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) int dense = 1; const char *reflog_base = NULL; struct option builtin_show_branch_options[] = { - OPT_BOOLEAN('a', "all", &all_heads, - N_("show remote-tracking and local branches")), - OPT_BOOLEAN('r', "remotes", &all_remotes, - N_("show remote-tracking branches")), + OPT_BOOL('a', "all", &all_heads, + N_("show remote-tracking and local branches")), + OPT_BOOL('r', "remotes", &all_remotes, + N_("show remote-tracking branches")), OPT__COLOR(&showbranch_use_color, N_("color '*!+-' corresponding to the branch")), { OPTION_INTEGER, 0, "more", &extra, N_("n"), N_("show <n> more commits after the common ancestor"), PARSE_OPT_OPTARG, NULL, (intptr_t)1 }, OPT_SET_INT(0, "list", &extra, N_("synonym to more=-1"), -1), - OPT_BOOLEAN(0, "no-name", &no_name, N_("suppress naming strings")), - OPT_BOOLEAN(0, "current", &with_current_branch, - N_("include the current branch")), - OPT_BOOLEAN(0, "sha1-name", &sha1_name, - N_("name commits with their object names")), - OPT_BOOLEAN(0, "merge-base", &merge_base, - N_("show possible merge bases")), - OPT_BOOLEAN(0, "independent", &independent, + OPT_BOOL(0, "no-name", &no_name, N_("suppress naming strings")), + OPT_BOOL(0, "current", &with_current_branch, + N_("include the current branch")), + OPT_BOOL(0, "sha1-name", &sha1_name, + N_("name commits with their object names")), + OPT_BOOL(0, "merge-base", &merge_base, + N_("show possible merge bases")), + OPT_BOOL(0, "independent", &independent, N_("show refs unreachable from any other ref")), OPT_SET_INT(0, "topo-order", &sort_order, N_("show commits in topological order"), REV_SORT_IN_GRAPH_ORDER), - OPT_BOOLEAN(0, "topics", &topics, - N_("show only commits not on the first branch")), + OPT_BOOL(0, "topics", &topics, + N_("show only commits not on the first branch")), OPT_SET_INT(0, "sparse", &dense, N_("show merges reachable from only one tip"), 0), OPT_SET_INT(0, "date-order", &sort_order, diff --git a/builtin/show-ref.c b/builtin/show-ref.c index 87806ad5b0..9f3f5e370b 100644 --- a/builtin/show-ref.c +++ b/builtin/show-ref.c @@ -165,16 +165,15 @@ static int help_callback(const struct option *opt, const char *arg, int unset) } static const struct option show_ref_options[] = { - OPT_BOOLEAN(0, "tags", &tags_only, N_("only show tags (can be combined with heads)")), - OPT_BOOLEAN(0, "heads", &heads_only, N_("only show heads (can be combined with tags)")), - OPT_BOOLEAN(0, "verify", &verify, N_("stricter reference checking, " + OPT_BOOL(0, "tags", &tags_only, N_("only show tags (can be combined with heads)")), + OPT_BOOL(0, "heads", &heads_only, N_("only show heads (can be combined with tags)")), + OPT_BOOL(0, "verify", &verify, N_("stricter reference checking, " "requires exact ref path")), - { OPTION_BOOLEAN, 'h', NULL, &show_head, NULL, - N_("show the HEAD reference, even if it would be filtered out"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, - OPT_BOOLEAN(0, "head", &show_head, + OPT_HIDDEN_BOOL('h', NULL, &show_head, + N_("show the HEAD reference, even if it would be filtered out")), + OPT_BOOL(0, "head", &show_head, N_("show the HEAD reference, even if it would be filtered out")), - OPT_BOOLEAN('d', "dereference", &deref_tags, + OPT_BOOL('d', "dereference", &deref_tags, N_("dereference tags into object IDs")), { OPTION_CALLBACK, 's', "hash", &abbrev, N_("n"), N_("only show SHA1 hash using <n> digits"), diff --git a/builtin/tag.c b/builtin/tag.c index af3af3f649..b577af562a 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -436,26 +436,26 @@ int cmd_tag(int argc, const char **argv, const char *prefix) struct ref_lock *lock; struct create_tag_options opt; char *cleanup_arg = NULL; - int annotate = 0, force = 0, lines = -1, list = 0, - delete = 0, verify = 0; + int annotate = 0, force = 0, lines = -1; + int cmdmode = 0; const char *msgfile = NULL, *keyid = NULL; struct msg_arg msg = { 0, STRBUF_INIT }; struct commit_list *with_commit = NULL; struct option options[] = { - OPT_BOOLEAN('l', "list", &list, N_("list tag names")), + OPT_CMDMODE('l', "list", &cmdmode, N_("list tag names"), 'l'), { OPTION_INTEGER, 'n', NULL, &lines, N_("n"), N_("print <n> lines of each tag message"), PARSE_OPT_OPTARG, NULL, 1 }, - OPT_BOOLEAN('d', "delete", &delete, N_("delete tags")), - OPT_BOOLEAN('v', "verify", &verify, N_("verify tags")), + OPT_CMDMODE('d', "delete", &cmdmode, N_("delete tags"), 'd'), + OPT_CMDMODE('v', "verify", &cmdmode, N_("verify tags"), 'v'), OPT_GROUP(N_("Tag creation options")), - OPT_BOOLEAN('a', "annotate", &annotate, + OPT_BOOL('a', "annotate", &annotate, N_("annotated tag, needs a message")), OPT_CALLBACK('m', "message", &msg, N_("message"), N_("tag message"), parse_msg_arg), OPT_FILENAME('F', "file", &msgfile, N_("read message from file")), - OPT_BOOLEAN('s', "sign", &opt.sign, N_("annotated and GPG-signed tag")), + OPT_BOOL('s', "sign", &opt.sign, N_("annotated and GPG-signed tag")), OPT_STRING(0, "cleanup", &cleanup_arg, N_("mode"), N_("how to strip spaces and #comments from message")), OPT_STRING('u', "local-user", &keyid, N_("key id"), @@ -489,22 +489,19 @@ int cmd_tag(int argc, const char **argv, const char *prefix) } if (opt.sign) annotate = 1; - if (argc == 0 && !(delete || verify)) - list = 1; + if (argc == 0 && !cmdmode) + cmdmode = 'l'; - if ((annotate || msg.given || msgfile || force) && - (list || delete || verify)) + if ((annotate || msg.given || msgfile || force) && (cmdmode != 0)) usage_with_options(git_tag_usage, options); - if (list + delete + verify > 1) - usage_with_options(git_tag_usage, options); finalize_colopts(&colopts, -1); - if (list && lines != -1) { + if (cmdmode == 'l' && lines != -1) { if (explicitly_enable_column(colopts)) die(_("--column and -n are incompatible")); colopts = 0; } - if (list) { + if (cmdmode == 'l') { int ret; if (column_active(colopts)) { struct column_options copts; @@ -523,9 +520,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix) die(_("--contains option is only allowed with -l.")); if (points_at.nr) die(_("--points-at option is only allowed with -l.")); - if (delete) + if (cmdmode == 'd') return for_each_tag_name(argv, delete_tag); - if (verify) + if (cmdmode == 'v') return for_each_tag_name(argv, verify_tag); if (msg.given || msgfile) { diff --git a/builtin/tar-tree.c b/builtin/tar-tree.c index 3f1e7012db..ba3ffe69a9 100644 --- a/builtin/tar-tree.c +++ b/builtin/tar-tree.c @@ -26,8 +26,8 @@ int cmd_tar_tree(int argc, const char **argv, const char *prefix) * $0 tree-ish basedir ==> * git archive --format-tar --prefix=basedir tree-ish */ - int i; const char **nargv = xcalloc(sizeof(*nargv), argc + 3); + struct strbuf sb = STRBUF_INIT; char *basedir_arg; int nargc = 0; @@ -65,11 +65,10 @@ int cmd_tar_tree(int argc, const char **argv, const char *prefix) fprintf(stderr, "*** \"git tar-tree\" is now deprecated.\n" "*** Running \"git archive\" instead.\n***"); - for (i = 0; i < nargc; i++) { - fputc(' ', stderr); - sq_quote_print(stderr, nargv[i]); - } - fputc('\n', stderr); + sq_quote_argv(&sb, nargv, 0); + strbuf_addch(&sb, '\n'); + fputs(sb.buf, stderr); + strbuf_release(&sb); return cmd_archive(nargc, nargv, prefix); } diff --git a/builtin/update-index.c b/builtin/update-index.c index c317981516..e3a10d706d 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -11,6 +11,7 @@ #include "refs.h" #include "resolve-undo.h" #include "parse-options.h" +#include "pathspec.h" /* * Default to not allowing changes to the list of files. The @@ -546,10 +547,11 @@ static int do_reupdate(int ac, const char **av, */ int pos; int has_head = 1; - const char **paths = get_pathspec(prefix, av + 1); struct pathspec pathspec; - init_pathspec(&pathspec, paths); + parse_pathspec(&pathspec, 0, + PATHSPEC_PREFER_CWD, + prefix, av + 1); if (read_ref("HEAD", head_sha1)) /* If there is no HEAD, that means it is an initial diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 51d2684859..7484d36a65 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -16,8 +16,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) int delete = 0, no_deref = 0, flags = 0; struct option options[] = { OPT_STRING( 'm', NULL, &msg, N_("reason"), N_("reason of the update")), - OPT_BOOLEAN('d', NULL, &delete, N_("delete the reference")), - OPT_BOOLEAN( 0 , "no-deref", &no_deref, + OPT_BOOL('d', NULL, &delete, N_("delete the reference")), + OPT_BOOL( 0 , "no-deref", &no_deref, N_("update <refname> not the one it points to")), OPT_END(), }; @@ -189,6 +189,8 @@ struct cache_entry { #error "CE_EXTENDED_FLAGS out of range" #endif +struct pathspec; + /* * Copy the sha1 and stat state of a cache entry from one to * another. But we never change the name, or the hash state! @@ -365,6 +367,9 @@ static inline enum object_type object_type(unsigned int mode) #define GIT_NOTES_REWRITE_REF_ENVIRONMENT "GIT_NOTES_REWRITE_REF" #define GIT_NOTES_REWRITE_MODE_ENVIRONMENT "GIT_NOTES_REWRITE_MODE" #define GIT_LITERAL_PATHSPECS_ENVIRONMENT "GIT_LITERAL_PATHSPECS" +#define GIT_GLOB_PATHSPECS_ENVIRONMENT "GIT_GLOB_PATHSPECS" +#define GIT_NOGLOB_PATHSPECS_ENVIRONMENT "GIT_NOGLOB_PATHSPECS" +#define GIT_ICASE_PATHSPECS_ENVIRONMENT "GIT_ICASE_PATHSPECS" /* * This environment variable is expected to contain a boolean indicating @@ -412,6 +417,7 @@ extern void setup_work_tree(void); extern const char *setup_git_directory_gently(int *); extern const char *setup_git_directory(void); extern char *prefix_path(const char *prefix, int len, const char *path); +extern char *prefix_path_gently(const char *prefix, int len, int *remaining, const char *path); extern const char *prefix_filename(const char *prefix, int len, const char *path); extern int check_filename(const char *prefix, const char *name); extern void verify_filename(const char *prefix, @@ -449,7 +455,7 @@ extern void sanitize_stdfds(void); /* Initialize and use the cache information */ extern int read_index(struct index_state *); -extern int read_index_preload(struct index_state *, const char **pathspec); +extern int read_index_preload(struct index_state *, const struct pathspec *pathspec); extern int read_index_from(struct index_state *, const char *path); extern int is_index_unborn(struct index_state *); extern int read_index_unmerged(struct index_state *); @@ -491,28 +497,8 @@ extern void *read_blob_data_from_index(struct index_state *, const char *, unsig extern int ie_match_stat(const struct index_state *, const struct cache_entry *, struct stat *, unsigned int); extern int ie_modified(const struct index_state *, const struct cache_entry *, struct stat *, unsigned int); -#define PATHSPEC_ONESTAR 1 /* the pathspec pattern satisfies GFNM_ONESTAR */ - -struct pathspec { - const char **raw; /* get_pathspec() result, not freed by free_pathspec() */ - int nr; - unsigned int has_wildcard:1; - unsigned int recursive:1; - int max_depth; - struct pathspec_item { - const char *match; - int len; - int nowildcard_len; - int flags; - } *items; -}; - -extern int init_pathspec(struct pathspec *, const char **); -extern void free_pathspec(struct pathspec *); extern int ce_path_match(const struct cache_entry *ce, const struct pathspec *pathspec); -extern int limit_pathspec_to_literal(void); - #define HASH_WRITE_OBJECT 1 #define HASH_FORMAT_CHECK 2 extern int index_fd(unsigned char *sha1, int fd, struct stat *st, enum object_type type, const char *path, unsigned flags); @@ -540,7 +526,7 @@ extern void fill_stat_cache_info(struct cache_entry *ce, struct stat *st); #define REFRESH_IGNORE_MISSING 0x0008 /* ignore non-existent */ #define REFRESH_IGNORE_SUBMODULES 0x0010 /* ignore submodules */ #define REFRESH_IN_PORCELAIN 0x0020 /* user friendly output, not "needs update" */ -extern int refresh_index(struct index_state *, unsigned int flags, const char **pathspec, char *seen, const char *header_msg); +extern int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg); struct lock_file { struct lock_file *next; @@ -762,6 +748,7 @@ const char *real_path(const char *path); const char *real_path_if_valid(const char *path); const char *absolute_path(const char *path); const char *relative_path(const char *in, const char *prefix, struct strbuf *sb); +int normalize_path_copy_len(char *dst, const char *src, int *prefix_len); int normalize_path_copy(char *dst, const char *src); int longest_ancestor_length(const char *path, struct string_list *prefixes); char *strip_path_suffix(const char *path, const char *suffix); @@ -1038,68 +1025,6 @@ struct pack_entry { struct packed_git *p; }; -struct ref { - struct ref *next; - unsigned char old_sha1[20]; - unsigned char new_sha1[20]; - char *symref; - unsigned int - force:1, - forced_update:1, - deletion:1, - matched:1; - - /* - * Order is important here, as we write to FETCH_HEAD - * in numeric order. And the default NOT_FOR_MERGE - * should be 0, so that xcalloc'd structures get it - * by default. - */ - enum { - FETCH_HEAD_MERGE = -1, - FETCH_HEAD_NOT_FOR_MERGE = 0, - FETCH_HEAD_IGNORE = 1 - } fetch_head_status; - - enum { - REF_STATUS_NONE = 0, - REF_STATUS_OK, - REF_STATUS_REJECT_NONFASTFORWARD, - REF_STATUS_REJECT_ALREADY_EXISTS, - REF_STATUS_REJECT_NODELETE, - REF_STATUS_REJECT_FETCH_FIRST, - REF_STATUS_REJECT_NEEDS_FORCE, - REF_STATUS_UPTODATE, - REF_STATUS_REMOTE_REJECT, - REF_STATUS_EXPECTING_REPORT - } status; - char *remote_status; - struct ref *peer_ref; /* when renaming */ - char name[FLEX_ARRAY]; /* more */ -}; - -#define REF_NORMAL (1u << 0) -#define REF_HEADS (1u << 1) -#define REF_TAGS (1u << 2) - -extern struct ref *find_ref_by_name(const struct ref *list, const char *name); - -#define CONNECT_VERBOSE (1u << 0) -extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags); -extern int finish_connect(struct child_process *conn); -extern int git_connection_is_socket(struct child_process *conn); -struct extra_have_objects { - int nr, alloc; - unsigned char (*array)[20]; -}; -extern struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, - struct ref **list, unsigned int flags, - struct extra_have_objects *); -extern int server_supports(const char *feature); -extern int parse_feature_request(const char *features, const char *feature); -extern const char *server_feature_value(const char *feature, int *len_ret); -extern const char *parse_feature_value(const char *feature_list, const char *feature, int *len_ret); - extern struct packed_git *parse_pack_index(unsigned char *sha1, const char *idx_path); /* A hook for count-objects to report invalid files in pack directory */ @@ -1305,7 +1230,7 @@ void packet_trace_identity(const char *prog); * return 0 if success, 1 - if addition of a file failed and * ADD_FILES_IGNORE_ERRORS was specified in flags */ -int add_files_to_cache(const char *prefix, const char **pathspec, int flags); +int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags); /* diff.c */ extern int diff_auto_refresh_index; @@ -1339,7 +1264,7 @@ extern int ws_blank_line(const char *line, int len, unsigned ws_rule); #define ws_tab_width(rule) ((rule) & WS_TAB_WIDTH_MASK) /* ls-files */ -int report_path_error(const char *ps_matched, const char **pathspec, const char *prefix); +int report_path_error(const char *ps_matched, const struct pathspec *pathspec, const char *prefix); void overlay_tree_on_cache(const char *tree_name, const char *prefix); char *alias_lookup(const char *alias); diff --git a/combine-diff.c b/combine-diff.c index 88525b37cf..3b92c44880 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -10,6 +10,7 @@ #include "refs.h" #include "userdiff.h" #include "sha1-array.h" +#include "revision.h" static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr, int n, int num_parent) { @@ -1305,7 +1306,7 @@ void diff_tree_combined(const unsigned char *sha1, int i, num_paths, needsep, show_log_first, num_parent = parents->nr; diffopts = *opt; - diff_tree_setup_paths(diffopts.pathspec.raw, &diffopts); + copy_pathspec(&diffopts.pathspec, &opt->pathspec); diffopts.output_format = DIFF_FORMAT_NO_OUTPUT; DIFF_OPT_SET(&diffopts, RECURSIVE); DIFF_OPT_CLR(&diffopts, ALLOW_EXTERNAL); @@ -1377,13 +1378,13 @@ void diff_tree_combined(const unsigned char *sha1, free(tmp); } - diff_tree_release_paths(&diffopts); + free_pathspec(&diffopts.pathspec); } void diff_tree_combined_merge(const struct commit *commit, int dense, struct rev_info *rev) { - struct commit_list *parent = commit->parents; + struct commit_list *parent = get_saved_parents(rev, commit); struct sha1_array parents = SHA1_ARRAY_INIT; while (parent) { @@ -377,6 +377,22 @@ unsigned commit_list_count(const struct commit_list *l) return c; } +struct commit_list *copy_commit_list(struct commit_list *list) +{ + struct commit_list *head = NULL; + struct commit_list **pp = &head; + while (list) { + struct commit_list *new; + new = xmalloc(sizeof(struct commit_list)); + new->item = list->item; + new->next = NULL; + *pp = new; + pp = &new->next; + list = list->next; + } + return head; +} + void free_commit_list(struct commit_list *list) { while (list) { @@ -62,6 +62,9 @@ struct commit_list *commit_list_insert_by_date(struct commit *item, struct commit_list **list); void commit_list_sort_by_date(struct commit_list **list); +/* Shallow copy of the input list */ +struct commit_list *copy_commit_list(struct commit_list *list); + void free_commit_list(struct commit_list *list); /* Commit formats */ @@ -205,7 +208,7 @@ int in_merge_bases_many(struct commit *, int, struct commit **); extern int interactive_add(int argc, const char **argv, const char *prefix, int patch); extern int run_add_interactive(const char *revision, const char *patch_mode, - const char **pathspec); + const struct pathspec *pathspec); static inline int single_parent(struct commit *commit) { diff --git a/compat/apple-common-crypto.h b/compat/apple-common-crypto.h new file mode 100644 index 0000000000..c8b9b0e1a6 --- /dev/null +++ b/compat/apple-common-crypto.h @@ -0,0 +1,86 @@ +/* suppress inclusion of conflicting openssl functions */ +#define OPENSSL_NO_MD5 +#define HEADER_HMAC_H +#define HEADER_SHA_H +#include <CommonCrypto/CommonHMAC.h> +#define HMAC_CTX CCHmacContext +#define HMAC_Init(hmac, key, len, algo) CCHmacInit(hmac, algo, key, len) +#define HMAC_Update CCHmacUpdate +#define HMAC_Final(hmac, hash, ptr) CCHmacFinal(hmac, hash) +#define HMAC_CTX_cleanup(ignore) +#define EVP_md5(...) kCCHmacAlgMD5 +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 +#define APPLE_LION_OR_NEWER +#include <Security/Security.h> +/* Apple's TYPE_BOOL conflicts with config.c */ +#undef TYPE_BOOL +#endif + +#ifdef APPLE_LION_OR_NEWER +#define git_CC_error_check(pattern, err) \ + do { \ + if (err) { \ + die(pattern, (long)CFErrorGetCode(err)); \ + } \ + } while(0) + +#define EVP_EncodeBlock git_CC_EVP_EncodeBlock +static inline int git_CC_EVP_EncodeBlock(unsigned char *out, + const unsigned char *in, int inlen) +{ + CFErrorRef err; + SecTransformRef encoder; + CFDataRef input, output; + CFIndex length; + + encoder = SecEncodeTransformCreate(kSecBase64Encoding, &err); + git_CC_error_check("SecEncodeTransformCreate failed: %ld", err); + + input = CFDataCreate(kCFAllocatorDefault, in, inlen); + SecTransformSetAttribute(encoder, kSecTransformInputAttributeName, + input, &err); + git_CC_error_check("SecTransformSetAttribute failed: %ld", err); + + output = SecTransformExecute(encoder, &err); + git_CC_error_check("SecTransformExecute failed: %ld", err); + + length = CFDataGetLength(output); + CFDataGetBytes(output, CFRangeMake(0, length), out); + + CFRelease(output); + CFRelease(input); + CFRelease(encoder); + + return (int)strlen((const char *)out); +} + +#define EVP_DecodeBlock git_CC_EVP_DecodeBlock +static int inline git_CC_EVP_DecodeBlock(unsigned char *out, + const unsigned char *in, int inlen) +{ + CFErrorRef err; + SecTransformRef decoder; + CFDataRef input, output; + CFIndex length; + + decoder = SecDecodeTransformCreate(kSecBase64Encoding, &err); + git_CC_error_check("SecEncodeTransformCreate failed: %ld", err); + + input = CFDataCreate(kCFAllocatorDefault, in, inlen); + SecTransformSetAttribute(decoder, kSecTransformInputAttributeName, + input, &err); + git_CC_error_check("SecTransformSetAttribute failed: %ld", err); + + output = SecTransformExecute(decoder, &err); + git_CC_error_check("SecTransformExecute failed: %ld", err); + + length = CFDataGetLength(output); + CFDataGetBytes(output, CFRangeMake(0, length), out); + + CFRelease(output); + CFRelease(input); + CFRelease(decoder); + + return (int)strlen((const char *)out); +} +#endif /* APPLE_LION_OR_NEWER */ diff --git a/compat/mingw.c b/compat/mingw.c index bb92c436f7..22ee9ef1cf 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1086,6 +1086,12 @@ int mingw_kill(pid_t pid, int sig) errno = err_win_to_posix(GetLastError()); CloseHandle(h); return -1; + } else if (pid > 0 && sig == 0) { + HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); + if (h) { + CloseHandle(h); + return 0; + } } errno = EINVAL; @@ -27,9 +27,9 @@ struct config_source { struct strbuf value; struct strbuf var; - int (*fgetc)(struct config_source *c); - int (*ungetc)(int c, struct config_source *conf); - long (*ftell)(struct config_source *c); + int (*do_fgetc)(struct config_source *c); + int (*do_ungetc)(int c, struct config_source *conf); + long (*do_ftell)(struct config_source *c); }; static struct config_source *cf; @@ -217,13 +217,13 @@ int git_config_from_parameters(config_fn_t fn, void *data) static int get_next_char(void) { - int c = cf->fgetc(cf); + int c = cf->do_fgetc(cf); if (c == '\r') { /* DOS like systems */ - c = cf->fgetc(cf); + c = cf->do_fgetc(cf); if (c != '\n') { - cf->ungetc(c, cf); + cf->do_ungetc(c, cf); c = '\r'; } } @@ -992,9 +992,9 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data) top.u.file = f; top.name = filename; top.die_on_error = 1; - top.fgetc = config_file_fgetc; - top.ungetc = config_file_ungetc; - top.ftell = config_file_ftell; + top.do_fgetc = config_file_fgetc; + top.do_ungetc = config_file_ungetc; + top.do_ftell = config_file_ftell; ret = do_config_from(&top, fn, data); @@ -1013,9 +1013,9 @@ int git_config_from_buf(config_fn_t fn, const char *name, const char *buf, top.u.buf.pos = 0; top.name = name; top.die_on_error = 0; - top.fgetc = config_buf_fgetc; - top.ungetc = config_buf_ungetc; - top.ftell = config_buf_ftell; + top.do_fgetc = config_buf_fgetc; + top.do_ungetc = config_buf_ungetc; + top.do_ftell = config_buf_ftell; return do_config_from(&top, fn, data); } @@ -1196,7 +1196,7 @@ static int store_aux(const char *key, const char *value, void *cb) return 1; } - store.offset[store.seen] = cf->ftell(cf); + store.offset[store.seen] = cf->do_ftell(cf); store.seen++; } break; @@ -1223,19 +1223,19 @@ static int store_aux(const char *key, const char *value, void *cb) * Do not increment matches: this is no match, but we * just made sure we are in the desired section. */ - store.offset[store.seen] = cf->ftell(cf); + store.offset[store.seen] = cf->do_ftell(cf); /* fallthru */ case SECTION_END_SEEN: case START: if (matches(key, value)) { - store.offset[store.seen] = cf->ftell(cf); + store.offset[store.seen] = cf->do_ftell(cf); store.state = KEY_SEEN; store.seen++; } else { if (strrchr(key, '.') - key == store.baselen && !strncmp(key, store.key, store.baselen)) { store.state = SECTION_SEEN; - store.offset[store.seen] = cf->ftell(cf); + store.offset[store.seen] = cf->do_ftell(cf); } } } @@ -5,6 +5,7 @@ #include "refs.h" #include "run-command.h" #include "remote.h" +#include "connect.h" #include "url.h" static char *server_capabilities; diff --git a/connect.h b/connect.h new file mode 100644 index 0000000000..9dff25cad4 --- /dev/null +++ b/connect.h @@ -0,0 +1,13 @@ +#ifndef CONNECT_H +#define CONNECT_H + +#define CONNECT_VERBOSE (1u << 0) +extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags); +extern int finish_connect(struct child_process *conn); +extern int git_connection_is_socket(struct child_process *conn); +extern int server_supports(const char *feature); +extern int parse_feature_request(const char *features, const char *feature); +extern const char *server_feature_value(const char *feature, int *len_ret); +extern const char *parse_feature_value(const char *feature_list, const char *feature, int *len_ret); + +#endif diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 5da920ecd9..e1b7313072 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -2580,7 +2580,7 @@ if [[ -n ${ZSH_VERSION-} ]]; then --*=*|*.) ;; *) c="$c " ;; esac - array[$#array+1]="$c" + array[${#array[@]}+1]="$c" done compset -P '*[=:]' compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index a81ef5a482..d6c61b2bde 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@ -84,6 +84,10 @@ # the colored output of "git status -sb" and are available only when # using __git_ps1 for PROMPT_COMMAND or precmd. +# check whether printf supports -v +__git_printf_supports_v= +printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1 + # stores the divergence from upstream in $p # used by GIT_PS1_SHOWUPSTREAM __git_ps1_show_upstream () @@ -433,7 +437,7 @@ __git_ps1 () local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p" if [ $pcmode = yes ]; then - if [[ -n ${ZSH_VERSION-} ]]; then + if [ "${__git_printf_supports_v-}" != yes ]; then gitstring=$(printf -- "$printf_format" "$gitstring") else printf -v gitstring -- "$printf_format" "$gitstring" diff --git a/contrib/contacts/git-contacts b/contrib/contacts/git-contacts index d80f7d1b6e..fb6429b64b 100755 --- a/contrib/contacts/git-contacts +++ b/contrib/contacts/git-contacts @@ -59,11 +59,11 @@ sub import_commits { } sub get_blame { - my ($commits, $source, $start, $len, $from) = @_; - $len = 1 unless defined($len); - return if $len == 0; + my ($commits, $source, $from, $ranges) = @_; + return unless @$ranges; open my $f, '-|', - qw(git blame --porcelain -C), '-L', "$start,+$len", + qw(git blame --porcelain -C), + map({"-L$_->[0],+$_->[1]"} @$ranges), '--since', $since, "$from^", '--', $source or die; while (<$f>) { if (/^([0-9a-f]{40}) \d+ \d+ \d+$/) { @@ -76,8 +76,17 @@ sub get_blame { close $f; } +sub blame_sources { + my ($sources, $commits) = @_; + for my $s (keys %$sources) { + for my $id (keys %{$sources->{$s}}) { + get_blame($commits, $s, $id, $sources->{$s}{$id}); + } + } +} + sub scan_patches { - my ($commits, $id, $f) = @_; + my ($sources, $id, $f) = @_; my $source; while (<$f>) { if (/^From ([0-9a-f]{40}) Mon Sep 17 00:00:00 2001$/) { @@ -90,7 +99,8 @@ sub scan_patches { } elsif (/^--- /) { die "Cannot parse hunk source: $_\n"; } elsif (/^@@ -(\d+)(?:,(\d+))?/ && $source) { - get_blame($commits, $source, $1, $2, $id); + my $len = defined($2) ? $2 : 1; + push @{$sources->{$source}{$id}}, [$1, $len] if $len; } } } @@ -163,13 +173,16 @@ for (@ARGV) { } } -my %commits; +my %sources; for (@files) { - scan_patch_file(\%commits, $_); + scan_patch_file(\%sources, $_); } if (@rev_args) { - scan_rev_args(\%commits, \@rev_args) + scan_rev_args(\%sources, \@rev_args) } + +my %commits; +blame_sources(\%sources, \%commits); import_commits(\%commits); my $contacts = {}; diff --git a/contrib/examples/git-log.sh b/contrib/examples/git-log.sh new file mode 100755 index 0000000000..c2ea71cf14 --- /dev/null +++ b/contrib/examples/git-log.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# +# Copyright (c) 2005 Linus Torvalds +# + +USAGE='[--max-count=<n>] [<since>..<limit>] [--pretty=<format>] [git-rev-list options]' +SUBDIRECTORY_OK='Yes' +. git-sh-setup + +revs=$(git-rev-parse --revs-only --no-flags --default HEAD "$@") || exit +[ "$revs" ] || { + die "No HEAD ref" +} +git-rev-list --pretty $(git-rev-parse --default HEAD "$@") | +LESS=-S ${PAGER:-less} diff --git a/contrib/examples/git-whatchanged.sh b/contrib/examples/git-whatchanged.sh new file mode 100755 index 0000000000..1fb9feb348 --- /dev/null +++ b/contrib/examples/git-whatchanged.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +USAGE='[-p] [--max-count=<n>] [<since>..<limit>] [--pretty=<format>] [-m] [git-diff-tree options] [git-rev-list options]' +SUBDIRECTORY_OK='Yes' +. git-sh-setup + +diff_tree_flags=$(git-rev-parse --sq --no-revs --flags "$@") || exit +case "$0" in +*whatchanged) + count= + test -z "$diff_tree_flags" && + diff_tree_flags=$(git-repo-config --get whatchanged.difftree) + diff_tree_default_flags='-c -M --abbrev' ;; +*show) + count=-n1 + test -z "$diff_tree_flags" && + diff_tree_flags=$(git-repo-config --get show.difftree) + diff_tree_default_flags='--cc --always' ;; +esac +test -z "$diff_tree_flags" && + diff_tree_flags="$diff_tree_default_flags" + +rev_list_args=$(git-rev-parse --sq --default HEAD --revs-only "$@") && +diff_tree_args=$(git-rev-parse --sq --no-revs --no-flags "$@") && + +eval "git-rev-list $count $rev_list_args" | +eval "git-diff-tree --stdin --pretty -r $diff_tree_flags $diff_tree_args" | +LESS="$LESS -S" ${PAGER:-less} diff --git a/contrib/mw-to-git/.gitignore b/contrib/mw-to-git/.gitignore index b9196555e5..ae545b013d 100644 --- a/contrib/mw-to-git/.gitignore +++ b/contrib/mw-to-git/.gitignore @@ -1 +1,2 @@ git-remote-mediawiki +git-mw diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index c3a3cac77b..1e0044b69f 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -674,7 +674,7 @@ def parse_reset(parser): parsed_refs[ref] = mark_to_rev(from_mark) def do_export(parser): - global parsed_refs, dirname + global parsed_refs, dirname, transports parser.next() @@ -699,7 +699,8 @@ def do_export(parser): branch.generate_revision_history(revid, marks.get_tip(name)) if name in peers: - peer = bzrlib.branch.Branch.open(peers[name]) + peer = bzrlib.branch.Branch.open(peers[name], + possible_transports=transports) try: peer.bzrdir.push_branch(branch, revision_id=revid) except bzrlib.errors.DivergedBranches: @@ -769,25 +770,28 @@ def do_list(parser): print def clone(path, remote_branch): + global transports try: - bdir = bzrlib.bzrdir.BzrDir.create(path) + bdir = bzrlib.bzrdir.BzrDir.create(path, possible_transports=transports) except bzrlib.errors.AlreadyControlDirError: - bdir = bzrlib.bzrdir.BzrDir.open(path) + bdir = bzrlib.bzrdir.BzrDir.open(path, possible_transports=transports) repo = bdir.find_repository() repo.fetch(remote_branch.repository) return remote_branch.sprout(bdir, repository=repo) def get_remote_branch(name): - global dirname, branches + global dirname, branches, transports - remote_branch = bzrlib.branch.Branch.open(branches[name]) + remote_branch = bzrlib.branch.Branch.open(branches[name], + possible_transports=transports) if isinstance(remote_branch.user_transport, bzrlib.transport.local.LocalTransport): return remote_branch branch_path = os.path.join(dirname, 'clone', name) try: - branch = bzrlib.branch.Branch.open(branch_path) + branch = bzrlib.branch.Branch.open(branch_path, + possible_transports=transports) except bzrlib.errors.NotBranchError: # clone branch = clone(branch_path, remote_branch) @@ -821,17 +825,19 @@ def find_branches(repo): yield name, branch.base def get_repo(url, alias): - global dirname, peer, branches + global dirname, peer, branches, transports normal_url = bzrlib.urlutils.normalize_url(url) - origin = bzrlib.bzrdir.BzrDir.open(url) + origin = bzrlib.bzrdir.BzrDir.open(url, possible_transports=transports) is_local = isinstance(origin.transport, bzrlib.transport.local.LocalTransport) shared_path = os.path.join(gitdir, 'bzr') try: - shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path) + shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path, + possible_transports=transports) except bzrlib.errors.NotBranchError: - shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path) + shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path, + possible_transports=transports) try: shared_repo = shared_dir.open_repository() except bzrlib.errors.NoRepositoryPresent: @@ -844,7 +850,8 @@ def get_repo(url, alias): else: # check and remove old organization try: - bdir = bzrlib.bzrdir.BzrDir.open(clone_path) + bdir = bzrlib.bzrdir.BzrDir.open(clone_path, + possible_transports=transports) bdir.destroy_repository() except bzrlib.errors.NotBranchError: pass @@ -897,6 +904,7 @@ def main(args): global files_cache global is_tmp global branches, peers + global transports alias = args[1] url = args[2] @@ -909,6 +917,7 @@ def main(args): marks = None branches = {} peers = {} + transports = [] if alias[5:] == url: is_tmp = True diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index 0194c67fb1..c27603965a 100755 --- a/contrib/remote-helpers/git-remote-hg +++ b/contrib/remote-helpers/git-remote-hg @@ -391,11 +391,24 @@ def get_repo(url, alias): os.makedirs(dirname) else: shared_path = os.path.join(gitdir, 'hg') - if not os.path.exists(shared_path): - try: - hg.clone(myui, {}, url, shared_path, update=False, pull=True) - except: - die('Repository error') + + # check and upgrade old organization + hg_path = os.path.join(shared_path, '.hg') + if os.path.exists(shared_path) and not os.path.exists(hg_path): + repos = os.listdir(shared_path) + for x in repos: + local_hg = os.path.join(shared_path, x, 'clone', '.hg') + if not os.path.exists(local_hg): + continue + if not os.path.exists(hg_path): + shutil.move(local_hg, hg_path) + shutil.rmtree(os.path.join(shared_path, x, 'clone')) + + # setup shared repo (if not there) + try: + hg.peer(myui, {}, shared_path, create=True) + except error.RepoError: + pass if not os.path.exists(dirname): os.makedirs(dirname) @@ -1124,7 +1137,7 @@ def do_option(parser): def fix_path(alias, repo, orig_url): url = urlparse.urlparse(orig_url, 'file') - if url.scheme != 'file' or os.path.isabs(url.path): + if url.scheme != 'file' or os.path.isabs(os.path.expanduser(url.path)): return abs_url = urlparse.urljoin("%s/" % os.getcwd(), orig_url) cmd = ['git', 'config', 'remote.%s.url' % alias, "hg::%s" % abs_url] diff --git a/diff-delta.c b/diff-delta.c index 93385e12ba..3797ce6041 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -155,7 +155,7 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize) entries = 0xfffffffeU / RABIN_WINDOW; } hsize = entries / 4; - for (i = 4; (1u << i) < hsize && i < 31; i++); + for (i = 4; (1u << i) < hsize; i++); hsize = 1 << i; hmask = hsize - 1; diff --git a/diff-lib.c b/diff-lib.c index b6f4b21637..346cac651d 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -87,10 +87,12 @@ int run_diff_files(struct rev_info *revs, unsigned int option) { int entries, i; int diff_unmerged_stage = revs->max_count; - int silent_on_removed = option & DIFF_SILENT_ON_REMOVED; unsigned ce_option = ((option & DIFF_RACY_IS_MODIFIED) ? CE_MATCH_RACY_IS_DIRTY : 0); + if (option & DIFF_SILENT_ON_REMOVED) + handle_deprecated_show_diff_q(&revs->diffopt); + diff_set_mnemonic_prefix(&revs->diffopt, "i/", "w/"); if (diff_unmerged_stage < 0) @@ -137,8 +139,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option) perror(ce->name); continue; } - if (silent_on_removed) - continue; wt_mode = 0; } dpath->mode = wt_mode; @@ -204,8 +204,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option) perror(ce->name); continue; } - if (silent_on_removed) - continue; diff_addremove(&revs->diffopt, '-', ce->ce_mode, ce->sha1, !is_null_sha1(ce->sha1), ce->name, 0); @@ -476,7 +474,6 @@ static int diff_cache(struct rev_info *revs, opts.dst_index = NULL; opts.pathspec = &revs->diffopt.pathspec; opts.pathspec->recursive = 1; - opts.pathspec->max_depth = -1; init_tree_desc(&t, tree->buffer, tree->size); return unpack_trees(1, &t, &opts); @@ -502,7 +499,7 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt) struct rev_info revs; init_revisions(&revs, NULL); - init_pathspec(&revs.prune_data, opt->pathspec.raw); + copy_pathspec(&revs.prune_data, &opt->pathspec); revs.diffopt = *opt; if (diff_cache(&revs, tree_sha1, NULL, 1)) diff --git a/diff-no-index.c b/diff-no-index.c index e66fdf33da..e301aafff9 100644 --- a/diff-no-index.c +++ b/diff-no-index.c @@ -187,7 +187,7 @@ void diff_no_index(struct rev_info *revs, { int i, prefixlen; int no_index = 0; - unsigned options = 0; + unsigned deprecated_show_diff_q_option_used = 0; const char *paths[2]; /* Were we asked to do --no-index explicitly? */ @@ -225,7 +225,7 @@ void diff_no_index(struct rev_info *revs, if (!strcmp(argv[i], "--no-index")) i++; else if (!strcmp(argv[i], "-q")) { - options |= DIFF_SILENT_ON_REMOVED; + deprecated_show_diff_q_option_used = 1; i++; } else if (!strcmp(argv[i], "--")) @@ -260,6 +260,9 @@ void diff_no_index(struct rev_info *revs, revs->max_count = -2; diff_setup_done(&revs->diffopt); + if (deprecated_show_diff_q_option_used) + handle_deprecated_show_diff_q(&revs->diffopt); + setup_diff_pager(&revs->diffopt); DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS); @@ -669,7 +669,7 @@ static void emit_rewrite_diff(const char *name_a, memset(&ecbdata, 0, sizeof(ecbdata)); ecbdata.color_diff = want_color(o->use_color); ecbdata.found_changesp = &o->found_changes; - ecbdata.ws_rule = whitespace_rule(name_b ? name_b : name_a); + ecbdata.ws_rule = whitespace_rule(name_b); ecbdata.opt = o; if (ecbdata.ws_rule & WS_BLANK_AT_EOF) { mmfile_t mf1, mf2; @@ -2252,7 +2252,7 @@ static void builtin_diff(const char *name_a, (!two->mode || S_ISGITLINK(two->mode))) { const char *del = diff_get_color_opt(o, DIFF_FILE_OLD); const char *add = diff_get_color_opt(o, DIFF_FILE_NEW); - show_submodule_summary(o->file, one ? one->path : two->path, + show_submodule_summary(o->file, one->path ? one->path : two->path, line_prefix, one->sha1, two->sha1, two->dirty_submodule, meta, del, add, reset); @@ -2372,7 +2372,7 @@ static void builtin_diff(const char *name_a, ecbdata.label_path = lbl; ecbdata.color_diff = want_color(o->use_color); ecbdata.found_changesp = &o->found_changes; - ecbdata.ws_rule = whitespace_rule(name_b ? name_b : name_a); + ecbdata.ws_rule = whitespace_rule(name_b); if (ecbdata.ws_rule & WS_BLANK_AT_EOF) check_blank_at_eof(&mf1, &mf2, &ecbdata); ecbdata.opt = o; @@ -3503,6 +3503,88 @@ static int parse_submodule_opt(struct diff_options *options, const char *value) return 1; } +static const char diff_status_letters[] = { + DIFF_STATUS_ADDED, + DIFF_STATUS_COPIED, + DIFF_STATUS_DELETED, + DIFF_STATUS_MODIFIED, + DIFF_STATUS_RENAMED, + DIFF_STATUS_TYPE_CHANGED, + DIFF_STATUS_UNKNOWN, + DIFF_STATUS_UNMERGED, + DIFF_STATUS_FILTER_AON, + DIFF_STATUS_FILTER_BROKEN, + '\0', +}; + +static unsigned int filter_bit['Z' + 1]; + +static void prepare_filter_bits(void) +{ + int i; + + if (!filter_bit[DIFF_STATUS_ADDED]) { + for (i = 0; diff_status_letters[i]; i++) + filter_bit[(int) diff_status_letters[i]] = (1 << i); + } +} + +static unsigned filter_bit_tst(char status, const struct diff_options *opt) +{ + return opt->filter & filter_bit[(int) status]; +} + +static int parse_diff_filter_opt(const char *optarg, struct diff_options *opt) +{ + int i, optch; + + prepare_filter_bits(); + + /* + * If there is a negation e.g. 'd' in the input, and we haven't + * initialized the filter field with another --diff-filter, start + * from full set of bits, except for AON. + */ + if (!opt->filter) { + for (i = 0; (optch = optarg[i]) != '\0'; i++) { + if (optch < 'a' || 'z' < optch) + continue; + opt->filter = (1 << (ARRAY_SIZE(diff_status_letters) - 1)) - 1; + opt->filter &= ~filter_bit[DIFF_STATUS_FILTER_AON]; + break; + } + } + + for (i = 0; (optch = optarg[i]) != '\0'; i++) { + unsigned int bit; + int negate; + + if ('a' <= optch && optch <= 'z') { + negate = 1; + optch = toupper(optch); + } else { + negate = 0; + } + + bit = (0 <= optch && optch <= 'Z') ? filter_bit[optch] : 0; + if (!bit) + return optarg[i]; + if (negate) + opt->filter &= ~bit; + else + opt->filter |= bit; + } + return 0; +} + +/* Used only by "diff-files" and "diff --no-index" */ +void handle_deprecated_show_diff_q(struct diff_options *opt) +{ + warning("'diff -q' and 'diff-files -q' are deprecated."); + warning("Use 'diff --diff-filter=d' instead to ignore deleted filepairs."); + parse_diff_filter_opt("d", opt); +} + static void enable_patch_output(int *fmt) { *fmt &= ~DIFF_FORMAT_NO_OUTPUT; *fmt |= DIFF_FORMAT_PATCH; @@ -3732,7 +3814,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) return argcount; } else if ((argcount = parse_long_opt("diff-filter", av, &optarg))) { - options->filter = optarg; + int offending = parse_diff_filter_opt(optarg, options); + if (offending) + die("unknown change class '%c' in --diff-filter=%s", + offending, optarg); return argcount; } else if (!strcmp(arg, "--abbrev")) @@ -4524,27 +4609,32 @@ free_queue: } } -static void diffcore_apply_filter(const char *filter) +static int match_filter(const struct diff_options *options, const struct diff_filepair *p) +{ + return (((p->status == DIFF_STATUS_MODIFIED) && + ((p->score && + filter_bit_tst(DIFF_STATUS_FILTER_BROKEN, options)) || + (!p->score && + filter_bit_tst(DIFF_STATUS_MODIFIED, options)))) || + ((p->status != DIFF_STATUS_MODIFIED) && + filter_bit_tst(p->status, options))); +} + +static void diffcore_apply_filter(struct diff_options *options) { int i; struct diff_queue_struct *q = &diff_queued_diff; struct diff_queue_struct outq; + DIFF_QUEUE_CLEAR(&outq); - if (!filter) + if (!options->filter) return; - if (strchr(filter, DIFF_STATUS_FILTER_AON)) { + if (filter_bit_tst(DIFF_STATUS_FILTER_AON, options)) { int found; for (i = found = 0; !found && i < q->nr; i++) { - struct diff_filepair *p = q->queue[i]; - if (((p->status == DIFF_STATUS_MODIFIED) && - ((p->score && - strchr(filter, DIFF_STATUS_FILTER_BROKEN)) || - (!p->score && - strchr(filter, DIFF_STATUS_MODIFIED)))) || - ((p->status != DIFF_STATUS_MODIFIED) && - strchr(filter, p->status))) + if (match_filter(options, q->queue[i])) found++; } if (found) @@ -4562,14 +4652,7 @@ static void diffcore_apply_filter(const char *filter) /* Only the matching ones */ for (i = 0; i < q->nr; i++) { struct diff_filepair *p = q->queue[i]; - - if (((p->status == DIFF_STATUS_MODIFIED) && - ((p->score && - strchr(filter, DIFF_STATUS_FILTER_BROKEN)) || - (!p->score && - strchr(filter, DIFF_STATUS_MODIFIED)))) || - ((p->status != DIFF_STATUS_MODIFIED) && - strchr(filter, p->status))) + if (match_filter(options, p)) diff_q(&outq, p); else diff_free_filepair(p); @@ -4676,7 +4759,7 @@ void diffcore_std(struct diff_options *options) if (!options->found_follow) /* See try_to_follow_renames() in tree-diff.c */ diff_resolve_rename_copy(); - diffcore_apply_filter(options->filter); + diffcore_apply_filter(options); if (diff_queued_diff.nr && !DIFF_OPT_TST(options, DIFF_FROM_CONTENTS)) DIFF_OPT_SET(options, HAS_CHANGES); @@ -5,6 +5,7 @@ #define DIFF_H #include "tree-walk.h" +#include "pathspec.h" struct rev_info; struct diff_options; @@ -103,12 +104,15 @@ enum diff_words_type { }; struct diff_options { - const char *filter; const char *orderfile; const char *pickaxe; const char *single_follow; const char *a_prefix, *b_prefix; unsigned flags; + + /* diff-filter bits */ + unsigned int filter; + int use_color; int context; int interhunkcontext; @@ -179,8 +183,6 @@ const char *diff_line_prefix(struct diff_options *); extern const char mime_boundary_leader[]; -extern void diff_tree_setup_paths(const char **paths, struct diff_options *); -extern void diff_tree_release_paths(struct diff_options *); extern int diff_tree(struct tree_desc *t1, struct tree_desc *t2, const char *base, struct diff_options *opt); extern int diff_tree_sha1(const unsigned char *old, const unsigned char *new, @@ -338,6 +340,8 @@ extern int parse_rename_score(const char **cp_p); extern long parse_algorithm_value(const char *value); +extern void handle_deprecated_show_diff_q(struct diff_options *); + extern int print_stat_summary(FILE *fp, int files, int insertions, int deletions); extern void setup_diff_pager(struct diff_options *); @@ -11,6 +11,7 @@ #include "dir.h" #include "refs.h" #include "wildmatch.h" +#include "pathspec.h" struct path_simplify { int len; @@ -51,26 +52,32 @@ int fnmatch_icase(const char *pattern, const char *string, int flags) return fnmatch(pattern, string, flags | (ignore_case ? FNM_CASEFOLD : 0)); } -inline int git_fnmatch(const char *pattern, const char *string, - int flags, int prefix) +inline int git_fnmatch(const struct pathspec_item *item, + const char *pattern, const char *string, + int prefix) { - int fnm_flags = 0; - if (flags & GFNM_PATHNAME) - fnm_flags |= FNM_PATHNAME; if (prefix > 0) { - if (strncmp(pattern, string, prefix)) + if (ps_strncmp(item, pattern, string, prefix)) return FNM_NOMATCH; pattern += prefix; string += prefix; } - if (flags & GFNM_ONESTAR) { + if (item->flags & PATHSPEC_ONESTAR) { int pattern_len = strlen(++pattern); int string_len = strlen(string); return string_len < pattern_len || - strcmp(pattern, - string + string_len - pattern_len); + ps_strcmp(item, pattern, + string + string_len - pattern_len); } - return fnmatch(pattern, string, fnm_flags); + if (item->magic & PATHSPEC_GLOB) + return wildmatch(pattern, string, + WM_PATHNAME | + (item->magic & PATHSPEC_ICASE ? WM_CASEFOLD : 0), + NULL); + else + /* wildmatch has not learned no FNM_PATHNAME mode yet */ + return fnmatch(pattern, string, + item->magic & PATHSPEC_ICASE ? FNM_CASEFOLD : 0); } static int fnmatch_icase_mem(const char *pattern, int patternlen, @@ -102,26 +109,40 @@ static int fnmatch_icase_mem(const char *pattern, int patternlen, return match_status; } -static size_t common_prefix_len(const char **pathspec) +static size_t common_prefix_len(const struct pathspec *pathspec) { - const char *n, *first; + int n; size_t max = 0; - int literal = limit_pathspec_to_literal(); - if (!pathspec) - return max; - - first = *pathspec; - while ((n = *pathspec++)) { - size_t i, len = 0; - for (i = 0; first == n || i < max; i++) { - char c = n[i]; - if (!c || c != first[i] || (!literal && is_glob_special(c))) + /* + * ":(icase)path" is treated as a pathspec full of + * wildcard. In other words, only prefix is considered common + * prefix. If the pathspec is abc/foo abc/bar, running in + * subdir xyz, the common prefix is still xyz, not xuz/abc as + * in non-:(icase). + */ + GUARD_PATHSPEC(pathspec, + PATHSPEC_FROMTOP | + PATHSPEC_MAXDEPTH | + PATHSPEC_LITERAL | + PATHSPEC_GLOB | + PATHSPEC_ICASE); + + for (n = 0; n < pathspec->nr; n++) { + size_t i = 0, len = 0, item_len; + if (pathspec->items[n].magic & PATHSPEC_ICASE) + item_len = pathspec->items[n].prefix; + else + item_len = pathspec->items[n].nowildcard_len; + while (i < item_len && (n == 0 || i < max)) { + char c = pathspec->items[n].match[i]; + if (c != pathspec->items[0].match[i]) break; if (c == '/') len = i + 1; + i++; } - if (first == n || len < max) { + if (n == 0 || len < max) { max = len; if (!max) break; @@ -134,14 +155,14 @@ static size_t common_prefix_len(const char **pathspec) * Returns a copy of the longest leading path common among all * pathspecs. */ -char *common_prefix(const char **pathspec) +char *common_prefix(const struct pathspec *pathspec) { unsigned long len = common_prefix_len(pathspec); - return len ? xmemdupz(*pathspec, len) : NULL; + return len ? xmemdupz(pathspec->items[0].match, len) : NULL; } -int fill_directory(struct dir_struct *dir, const char **pathspec) +int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec) { size_t len; @@ -152,7 +173,7 @@ int fill_directory(struct dir_struct *dir, const char **pathspec) len = common_prefix_len(pathspec); /* Read the directory and prune it */ - read_directory(dir, pathspec ? *pathspec : "", len, pathspec); + read_directory(dir, pathspec->nr ? pathspec->_raw[0] : "", len, pathspec); return len; } @@ -183,113 +204,6 @@ int within_depth(const char *name, int namelen, * * It returns 0 when there is no match. */ -static int match_one(const char *match, const char *name, int namelen) -{ - int matchlen; - int literal = limit_pathspec_to_literal(); - - /* If the match was just the prefix, we matched */ - if (!*match) - return MATCHED_RECURSIVELY; - - if (ignore_case) { - for (;;) { - unsigned char c1 = tolower(*match); - unsigned char c2 = tolower(*name); - if (c1 == '\0' || (!literal && is_glob_special(c1))) - break; - if (c1 != c2) - return 0; - match++; - name++; - namelen--; - } - } else { - for (;;) { - unsigned char c1 = *match; - unsigned char c2 = *name; - if (c1 == '\0' || (!literal && is_glob_special(c1))) - break; - if (c1 != c2) - return 0; - match++; - name++; - namelen--; - } - } - - /* - * If we don't match the matchstring exactly, - * we need to match by fnmatch - */ - matchlen = strlen(match); - if (strncmp_icase(match, name, matchlen)) { - if (literal) - return 0; - return !fnmatch_icase(match, name, 0) ? MATCHED_FNMATCH : 0; - } - - if (namelen == matchlen) - return MATCHED_EXACTLY; - if (match[matchlen-1] == '/' || name[matchlen] == '/') - return MATCHED_RECURSIVELY; - return 0; -} - -/* - * Given a name and a list of pathspecs, returns the nature of the - * closest (i.e. most specific) match of the name to any of the - * pathspecs. - * - * The caller typically calls this multiple times with the same - * pathspec and seen[] array but with different name/namelen - * (e.g. entries from the index) and is interested in seeing if and - * how each pathspec matches all the names it calls this function - * with. A mark is left in the seen[] array for each pathspec element - * indicating the closest type of match that element achieved, so if - * seen[n] remains zero after multiple invocations, that means the nth - * pathspec did not match any names, which could indicate that the - * user mistyped the nth pathspec. - */ -int match_pathspec(const char **pathspec, const char *name, int namelen, - int prefix, char *seen) -{ - int i, retval = 0; - - if (!pathspec) - return 1; - - name += prefix; - namelen -= prefix; - - for (i = 0; pathspec[i] != NULL; i++) { - int how; - const char *match = pathspec[i] + prefix; - if (seen && seen[i] == MATCHED_EXACTLY) - continue; - how = match_one(match, name, namelen); - if (how) { - if (retval < how) - retval = how; - if (seen && seen[i] < how) - seen[i] = how; - } - } - return retval; -} - -/* - * Does 'match' match the given name? - * A match is found if - * - * (1) the 'match' string is leading directory of 'name', or - * (2) the 'match' string is a wildcard and matches 'name', or - * (3) the 'match' string is exactly the same as 'name'. - * - * and the return value tells which case it was. - * - * It returns 0 when there is no match. - */ static int match_pathspec_item(const struct pathspec_item *item, int prefix, const char *name, int namelen) { @@ -297,11 +211,44 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix, const char *match = item->match + prefix; int matchlen = item->len - prefix; + /* + * The normal call pattern is: + * 1. prefix = common_prefix_len(ps); + * 2. prune something, or fill_directory + * 3. match_pathspec_depth() + * + * 'prefix' at #1 may be shorter than the command's prefix and + * it's ok for #2 to match extra files. Those extras will be + * trimmed at #3. + * + * Suppose the pathspec is 'foo' and '../bar' running from + * subdir 'xyz'. The common prefix at #1 will be empty, thanks + * to "../". We may have xyz/foo _and_ XYZ/foo after #2. The + * user does not want XYZ/foo, only the "foo" part should be + * case-insensitive. We need to filter out XYZ/foo here. In + * other words, we do not trust the caller on comparing the + * prefix part when :(icase) is involved. We do exact + * comparison ourselves. + * + * Normally the caller (common_prefix_len() in fact) does + * _exact_ matching on name[-prefix+1..-1] and we do not need + * to check that part. Be defensive and check it anyway, in + * case common_prefix_len is changed, or a new caller is + * introduced that does not use common_prefix_len. + * + * If the penalty turns out too high when prefix is really + * long, maybe change it to + * strncmp(match, name, item->prefix - prefix) + */ + if (item->prefix && (item->magic & PATHSPEC_ICASE) && + strncmp(item->match, name - prefix, item->prefix)) + return 0; + /* If the match was just the prefix, we matched */ if (!*match) return MATCHED_RECURSIVELY; - if (matchlen <= namelen && !strncmp(match, name, matchlen)) { + if (matchlen <= namelen && !ps_strncmp(item, match, name, matchlen)) { if (matchlen == namelen) return MATCHED_EXACTLY; @@ -310,8 +257,7 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix, } if (item->nowildcard_len < item->len && - !git_fnmatch(match, name, - item->flags & PATHSPEC_ONESTAR ? GFNM_ONESTAR : 0, + !git_fnmatch(item, match, name, item->nowildcard_len - prefix)) return MATCHED_FNMATCH; @@ -339,8 +285,17 @@ int match_pathspec_depth(const struct pathspec *ps, { int i, retval = 0; + GUARD_PATHSPEC(ps, + PATHSPEC_FROMTOP | + PATHSPEC_MAXDEPTH | + PATHSPEC_LITERAL | + PATHSPEC_GLOB | + PATHSPEC_ICASE); + if (!ps->nr) { - if (!ps->recursive || ps->max_depth == -1) + if (!ps->recursive || + !(ps->magic & PATHSPEC_MAXDEPTH) || + ps->max_depth == -1) return MATCHED_RECURSIVELY; if (within_depth(name, namelen, 0, ps->max_depth)) @@ -357,7 +312,9 @@ int match_pathspec_depth(const struct pathspec *ps, if (seen && seen[i] == MATCHED_EXACTLY) continue; how = match_pathspec_item(ps->items+i, prefix, name, namelen); - if (ps->recursive && ps->max_depth != -1 && + if (ps->recursive && + (ps->magic & PATHSPEC_MAXDEPTH) && + ps->max_depth != -1 && how && how != MATCHED_FNMATCH) { int len = ps->items[i].len; if (name[len] == '/') @@ -380,7 +337,7 @@ int match_pathspec_depth(const struct pathspec *ps, /* * Return the length of the "simple" part of a path match limiter. */ -static int simple_length(const char *match) +int simple_length(const char *match) { int len = -1; @@ -392,7 +349,7 @@ static int simple_length(const char *match) } } -static int no_wildcard(const char *string) +int no_wildcard(const char *string) { return string[simple_length(string)] == '\0'; } @@ -1381,14 +1338,25 @@ static int treat_leading_path(struct dir_struct *dir, return rc; } -int read_directory(struct dir_struct *dir, const char *path, int len, const char **pathspec) +int read_directory(struct dir_struct *dir, const char *path, int len, const struct pathspec *pathspec) { struct path_simplify *simplify; + /* + * Check out create_simplify() + */ + if (pathspec) + GUARD_PATHSPEC(pathspec, + PATHSPEC_FROMTOP | + PATHSPEC_MAXDEPTH | + PATHSPEC_LITERAL | + PATHSPEC_GLOB | + PATHSPEC_ICASE); + if (has_symlink_leading_path(path, len)) return dir->nr; - simplify = create_simplify(pathspec); + simplify = create_simplify(pathspec ? pathspec->_raw : NULL); if (!len || treat_leading_path(dir, path, len, simplify)) read_directory_recursive(dir, path, len, 0, simplify); free_simplify(simplify); @@ -1568,71 +1536,6 @@ int remove_path(const char *name) return 0; } -static int pathspec_item_cmp(const void *a_, const void *b_) -{ - struct pathspec_item *a, *b; - - a = (struct pathspec_item *)a_; - b = (struct pathspec_item *)b_; - return strcmp(a->match, b->match); -} - -int init_pathspec(struct pathspec *pathspec, const char **paths) -{ - const char **p = paths; - int i; - - memset(pathspec, 0, sizeof(*pathspec)); - if (!p) - return 0; - while (*p) - p++; - pathspec->raw = paths; - pathspec->nr = p - paths; - if (!pathspec->nr) - return 0; - - pathspec->items = xmalloc(sizeof(struct pathspec_item)*pathspec->nr); - for (i = 0; i < pathspec->nr; i++) { - struct pathspec_item *item = pathspec->items+i; - const char *path = paths[i]; - - item->match = path; - item->len = strlen(path); - item->flags = 0; - if (limit_pathspec_to_literal()) { - item->nowildcard_len = item->len; - } else { - item->nowildcard_len = simple_length(path); - if (item->nowildcard_len < item->len) { - pathspec->has_wildcard = 1; - if (path[item->nowildcard_len] == '*' && - no_wildcard(path + item->nowildcard_len + 1)) - item->flags |= PATHSPEC_ONESTAR; - } - } - } - - qsort(pathspec->items, pathspec->nr, - sizeof(struct pathspec_item), pathspec_item_cmp); - - return 0; -} - -void free_pathspec(struct pathspec *pathspec) -{ - free(pathspec->items); - pathspec->items = NULL; -} - -int limit_pathspec_to_literal(void) -{ - static int flag = -1; - if (flag < 0) - flag = git_env_bool(GIT_LITERAL_PATHSPECS_ENVIRONMENT, 0); - return flag; -} - /* * Frees memory within dir which was allocated for exclude lists and * the exclude_stack. Does not free dir itself. @@ -128,15 +128,16 @@ struct dir_struct { #define MATCHED_RECURSIVELY 1 #define MATCHED_FNMATCH 2 #define MATCHED_EXACTLY 3 -extern char *common_prefix(const char **pathspec); -extern int match_pathspec(const char **pathspec, const char *name, int namelen, int prefix, char *seen); +extern int simple_length(const char *match); +extern int no_wildcard(const char *string); +extern char *common_prefix(const struct pathspec *pathspec); extern int match_pathspec_depth(const struct pathspec *pathspec, const char *name, int namelen, int prefix, char *seen); extern int within_depth(const char *name, int namelen, int depth, int max_depth); -extern int fill_directory(struct dir_struct *dir, const char **pathspec); -extern int read_directory(struct dir_struct *, const char *path, int len, const char **pathspec); +extern int fill_directory(struct dir_struct *dir, const struct pathspec *pathspec); +extern int read_directory(struct dir_struct *, const char *path, int len, const struct pathspec *pathspec); extern int is_excluded_from_list(const char *pathname, int pathlen, const char *basename, int *dtype, struct exclude_list *el); @@ -198,10 +199,9 @@ extern int fnmatch_icase(const char *pattern, const char *string, int flags); /* * The prefix part of pattern must not contains wildcards. */ -#define GFNM_PATHNAME 1 /* similar to FNM_PATHNAME */ -#define GFNM_ONESTAR 2 /* there is only _one_ wildcard, a star */ - -extern int git_fnmatch(const char *pattern, const char *string, - int flags, int prefix); +struct pathspec_item; +extern int git_fnmatch(const struct pathspec_item *item, + const char *pattern, const char *string, + int prefix); #endif @@ -37,7 +37,7 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en return error("Terminal is dumb, but EDITOR unset"); if (strcmp(editor, ":")) { - const char *args[] = { editor, path, NULL }; + const char *args[] = { editor, real_path(path), NULL }; struct child_process p; int ret, sig; diff --git a/fast-import.c b/fast-import.c index 23f625f561..21db3fc46d 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1568,7 +1568,8 @@ static int tree_content_set( static int tree_content_remove( struct tree_entry *root, const char *p, - struct tree_entry *backup_leaf) + struct tree_entry *backup_leaf, + int allow_root) { struct tree_content *t; const char *slash1; @@ -1583,6 +1584,12 @@ static int tree_content_remove( if (!root->tree) load_tree(root); + + if (!*p && allow_root) { + e = root; + goto del_entry; + } + t = root->tree; for (i = 0; i < t->entry_count; i++) { e = t->entries[i]; @@ -1599,7 +1606,7 @@ static int tree_content_remove( goto del_entry; if (!e->tree) load_tree(e); - if (tree_content_remove(e, slash1 + 1, backup_leaf)) { + if (tree_content_remove(e, slash1 + 1, backup_leaf, 0)) { for (n = 0; n < e->tree->entry_count; n++) { if (e->tree->entries[n]->versions[1].mode) { hashclr(root->versions[1].sha1); @@ -1629,7 +1636,8 @@ del_entry: static int tree_content_get( struct tree_entry *root, const char *p, - struct tree_entry *leaf) + struct tree_entry *leaf, + int allow_root) { struct tree_content *t; const char *slash1; @@ -1641,31 +1649,39 @@ static int tree_content_get( n = slash1 - p; else n = strlen(p); - if (!n) + if (!n && !allow_root) die("Empty path component found in input"); if (!root->tree) load_tree(root); + + if (!n) { + e = root; + goto found_entry; + } + t = root->tree; for (i = 0; i < t->entry_count; i++) { e = t->entries[i]; if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) { - if (!slash1) { - memcpy(leaf, e, sizeof(*leaf)); - if (e->tree && is_null_sha1(e->versions[1].sha1)) - leaf->tree = dup_tree_content(e->tree); - else - leaf->tree = NULL; - return 1; - } + if (!slash1) + goto found_entry; if (!S_ISDIR(e->versions[1].mode)) return 0; if (!e->tree) load_tree(e); - return tree_content_get(e, slash1 + 1, leaf); + return tree_content_get(e, slash1 + 1, leaf, 0); } } return 0; + +found_entry: + memcpy(leaf, e, sizeof(*leaf)); + if (e->tree && is_null_sha1(e->versions[1].sha1)) + leaf->tree = dup_tree_content(e->tree); + else + leaf->tree = NULL; + return 1; } static int update_branch(struct branch *b) @@ -2179,7 +2195,7 @@ static uintmax_t do_change_note_fanout( } /* Rename fullpath to realpath */ - if (!tree_content_remove(orig_root, fullpath, &leaf)) + if (!tree_content_remove(orig_root, fullpath, &leaf, 0)) die("Failed to remove path %s", fullpath); tree_content_set(orig_root, realpath, leaf.versions[1].sha1, @@ -2314,7 +2330,7 @@ static void file_change_m(struct branch *b) /* Git does not track empty, non-toplevel directories. */ if (S_ISDIR(mode) && !memcmp(sha1, EMPTY_TREE_SHA1_BIN, 20) && *p) { - tree_content_remove(&b->branch_tree, p, NULL); + tree_content_remove(&b->branch_tree, p, NULL, 0); return; } @@ -2375,7 +2391,7 @@ static void file_change_d(struct branch *b) die("Garbage after path in: %s", command_buf.buf); p = uq.buf; } - tree_content_remove(&b->branch_tree, p, NULL); + tree_content_remove(&b->branch_tree, p, NULL, 1); } static void file_change_cr(struct branch *b, int rename) @@ -2413,9 +2429,9 @@ static void file_change_cr(struct branch *b, int rename) memset(&leaf, 0, sizeof(leaf)); if (rename) - tree_content_remove(&b->branch_tree, s, &leaf); + tree_content_remove(&b->branch_tree, s, &leaf, 1); else - tree_content_get(&b->branch_tree, s, &leaf); + tree_content_get(&b->branch_tree, s, &leaf, 1); if (!leaf.versions[1].mode) die("Path %s not in branch", s); if (!*d) { /* C "path/to/subdir" "" */ @@ -2521,7 +2537,7 @@ static void note_change_n(struct branch *b, unsigned char *old_fanout) } construct_path_with_fanout(sha1_to_hex(commit_sha1), *old_fanout, path); - if (tree_content_remove(&b->branch_tree, path, NULL)) + if (tree_content_remove(&b->branch_tree, path, NULL, 0)) b->num_notes--; if (is_null_sha1(sha1)) @@ -3051,6 +3067,8 @@ static void parse_ls(struct branch *b) struct object_entry *e = parse_treeish_dataref(&p); root = new_tree_entry(); hashcpy(root->versions[1].sha1, e->idx.sha1); + if (!is_null_sha1(root->versions[1].sha1)) + root->versions[1].mode = S_IFDIR; load_tree(root); if (*p++ != ' ') die("Missing space after tree-ish: %s", command_buf.buf); @@ -3065,7 +3083,7 @@ static void parse_ls(struct branch *b) die("Garbage after path in: %s", command_buf.buf); p = uq.buf; } - tree_content_get(root, p, &leaf); + tree_content_get(root, p, &leaf, 1); /* * A directory in preparation would have a sha1 of zero * until it is saved. Save, for simplicity. diff --git a/fetch-pack.c b/fetch-pack.c index 6684348c0e..094267fd80 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -9,6 +9,7 @@ #include "fetch-pack.h" #include "remote.h" #include "run-command.h" +#include "connect.h" #include "transport.h" #include "version.h" #include "prio-queue.h" @@ -897,6 +898,8 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args, packet_flush(fd[1]); if (args->depth > 0) setup_alternate_shallow(); + else + alternate_shallow_file = NULL; if (get_pack(args, fd, pack_lockfile)) die("git fetch-pack: fetch failed."); @@ -987,7 +990,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args, } ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought, pack_lockfile); - if (alternate_shallow_file) { + if (args->depth > 0 && alternate_shallow_file) { if (*alternate_shallow_file == '\0') { /* --unshallow */ unlink_or_warn(git_path("shallow")); rollback_lock_file(&shallow_lock); diff --git a/fetch-pack.h b/fetch-pack.h index 40f08bab24..461cbf39b2 100644 --- a/fetch-pack.h +++ b/fetch-pack.h @@ -2,6 +2,7 @@ #define FETCH_PACK_H #include "string-list.h" +#include "run-command.h" struct fetch_pack_args { const char *uploadpack; diff --git a/git-compat-util.h b/git-compat-util.h index 115cb1da42..8752317fe9 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -330,6 +330,16 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin extern int error(const char *err, ...) __attribute__((format (printf, 1, 2))); extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2))); +#ifndef NO_OPENSSL +#ifdef APPLE_COMMON_CRYPTO +#include "compat/apple-common-crypto.h" +#else +#include <openssl/evp.h> +#include <openssl/hmac.h> +#endif /* APPLE_COMMON_CRYPTO */ +#include <openssl/x509v3.h> +#endif /* NO_OPENSSL */ + /* * Let callers be aware of the constant return value; this can help * gcc with -Wuninitialized analysis. We restrict this trick to gcc, though, @@ -514,7 +524,7 @@ int inet_pton(int af, const char *src, void *dst); const char *inet_ntop(int af, const void *src, char *dst, size_t size); #endif -extern void release_pack_memory(size_t, int); +extern void release_pack_memory(size_t); typedef void (*try_to_free_t)(size_t); extern try_to_free_t set_try_to_free_routine(try_to_free_t); @@ -2180,9 +2180,13 @@ class P4Sync(Command, P4UserMap): git_mode = "100755" if type_base == "symlink": git_mode = "120000" - # p4 print on a symlink contains "target\n"; remove the newline + # p4 print on a symlink sometimes contains "target\n"; + # if it does, remove the newline data = ''.join(contents) - contents = [data[:-1]] + if data[-1] == '\n': + contents = [data[:-1]] + else: + contents = [data] if type_base == "utf16": # p4 delivers different text in the python output to -G diff --git a/git-sh-setup.sh b/git-sh-setup.sh index 7a964ad2ff..e15be51636 100644 --- a/git-sh-setup.sh +++ b/git-sh-setup.sh @@ -53,7 +53,7 @@ die () { die_with_status () { status=$1 shift - echo >&2 "$*" + printf >&2 '%s\n' "$*" exit "$status" } diff --git a/git-stash.sh b/git-stash.sh index 85c9e2c081..1e541a2125 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -195,7 +195,6 @@ save_stash () { keep_index= patch_mode= untracked= - force= while test $# != 0 do case "$1" in @@ -216,9 +215,6 @@ save_stash () { -u|--include-untracked) untracked=untracked ;; - -f|--force) - force=t - ;; -a|--all) untracked=all ;; @@ -262,14 +258,6 @@ save_stash () { say "$(gettext "No local changes to save")" exit 0 fi - if test -z "$untracked$force" && - test -n "$(git ls-files --killed | head -n 1)" - then - say "$(gettext "The following untracked files would NOT be saved but need to be removed by stash save:")" - test -n "$GIT_QUIET" || git ls-files --killed | sed 's/^/\t/' - say "$(gettext "Aborting. Consider using either the --force or --include-untracked option.")" >&2 - exit 1 - fi test -f "$GIT_DIR/logs/$ref_stash" || clear_stash || die "$(gettext "Cannot initialize stash")" @@ -147,6 +147,18 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) setenv(GIT_LITERAL_PATHSPECS_ENVIRONMENT, "0", 1); if (envchanged) *envchanged = 1; + } else if (!strcmp(cmd, "--glob-pathspecs")) { + setenv(GIT_GLOB_PATHSPECS_ENVIRONMENT, "1", 1); + if (envchanged) + *envchanged = 1; + } else if (!strcmp(cmd, "--noglob-pathspecs")) { + setenv(GIT_NOGLOB_PATHSPECS_ENVIRONMENT, "1", 1); + if (envchanged) + *envchanged = 1; + } else if (!strcmp(cmd, "--icase-pathspecs")) { + setenv(GIT_ICASE_PATHSPECS_ENVIRONMENT, "1", 1); + if (envchanged) + *envchanged = 1; } else if (!strcmp(cmd, "--shallow-file")) { (*argv)++; (*argc)--; @@ -3,6 +3,7 @@ #include "sideband.h" #include "run-command.h" #include "url.h" +#include "urlmatch.h" #include "credential.h" #include "version.h" #include "pkt-line.h" @@ -45,6 +46,7 @@ static long curl_low_speed_time = -1; static int curl_ftp_no_epsv; static const char *curl_http_proxy; static const char *curl_cookie_file; +static int curl_save_cookies; static struct credential http_auth = CREDENTIAL_INIT; static int http_proactive_auth; static const char *user_agent; @@ -160,8 +162,7 @@ static int http_options(const char *var, const char *value, void *cb) if (!strcmp("http.sslcainfo", var)) return git_config_string(&ssl_cainfo, var, value); if (!strcmp("http.sslcertpasswordprotected", var)) { - if (git_config_bool(var, value)) - ssl_cert_password_required = 1; + ssl_cert_password_required = git_config_bool(var, value); return 0; } if (!strcmp("http.ssltry", var)) { @@ -200,6 +201,10 @@ static int http_options(const char *var, const char *value, void *cb) if (!strcmp("http.cookiefile", var)) return git_config_string(&curl_cookie_file, var, value); + if (!strcmp("http.savecookies", var)) { + curl_save_cookies = git_config_bool(var, value); + return 0; + } if (!strcmp("http.postbuffer", var)) { http_post_buffer = git_config_int(var, value); @@ -341,10 +346,20 @@ void http_init(struct remote *remote, const char *url, int proactive_auth) { char *low_speed_limit; char *low_speed_time; + char *normalized_url; + struct urlmatch_config config = { STRING_LIST_INIT_DUP }; + + config.section = "http"; + config.key = NULL; + config.collect_fn = http_options; + config.cascade_fn = git_default_config; + config.cb = NULL; http_is_verbose = 0; + normalized_url = url_normalize(url, &config.url); - git_config(http_options, NULL); + git_config(urlmatch_config_entry, &config); + free(normalized_url); curl_global_init(CURL_GLOBAL_ALL); @@ -513,6 +528,8 @@ struct active_request_slot *get_active_slot(void) slot->callback_data = NULL; slot->callback_func = NULL; curl_easy_setopt(slot->curl, CURLOPT_COOKIEFILE, curl_cookie_file); + if (curl_save_cookies) + curl_easy_setopt(slot->curl, CURLOPT_COOKIEJAR, curl_cookie_file); curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, pragma_header); curl_easy_setopt(slot->curl, CURLOPT_ERRORBUFFER, curl_errorstr); curl_easy_setopt(slot->curl, CURLOPT_CUSTOMREQUEST, NULL); diff --git a/imap-send.c b/imap-send.c index d6b65e204c..6f5cc4f782 100644 --- a/imap-send.c +++ b/imap-send.c @@ -28,20 +28,6 @@ #include "prompt.h" #ifdef NO_OPENSSL typedef void *SSL; -#else -#ifdef APPLE_COMMON_CRYPTO -#include <CommonCrypto/CommonHMAC.h> -#define HMAC_CTX CCHmacContext -#define HMAC_Init(hmac, key, len, algo) CCHmacInit(hmac, algo, key, len) -#define HMAC_Update CCHmacUpdate -#define HMAC_Final(hmac, hash, ptr) CCHmacFinal(hmac, hash) -#define HMAC_CTX_cleanup(ignore) -#define EVP_md5() kCCHmacAlgMD5 -#else -#include <openssl/evp.h> -#include <openssl/hmac.h> -#endif -#include <openssl/x509v3.h> #endif static const char imap_send_usage[] = "git imap-send < <mbox>"; diff --git a/line-log.c b/line-log.c index c2d01dccc2..8b6e497b3f 100644 --- a/line-log.c +++ b/line-log.c @@ -23,7 +23,7 @@ static void range_set_grow(struct range_set *rs, size_t extra) /* Either initialization would be fine */ #define RANGE_SET_INIT {0} -static void range_set_init(struct range_set *rs, size_t prealloc) +void range_set_init(struct range_set *rs, size_t prealloc) { rs->alloc = rs->nr = 0; rs->ranges = NULL; @@ -31,7 +31,7 @@ static void range_set_init(struct range_set *rs, size_t prealloc) range_set_grow(rs, prealloc); } -static void range_set_release(struct range_set *rs) +void range_set_release(struct range_set *rs) { free(rs->ranges); rs->alloc = rs->nr = 0; @@ -56,7 +56,7 @@ static void range_set_move(struct range_set *dst, struct range_set *src) } /* tack on a _new_ range _at the end_ */ -static void range_set_append_unsafe(struct range_set *rs, long a, long b) +void range_set_append_unsafe(struct range_set *rs, long a, long b) { assert(a <= b); range_set_grow(rs, 1); @@ -65,7 +65,7 @@ static void range_set_append_unsafe(struct range_set *rs, long a, long b) rs->nr++; } -static void range_set_append(struct range_set *rs, long a, long b) +void range_set_append(struct range_set *rs, long a, long b) { assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a); range_set_append_unsafe(rs, a, b); @@ -107,7 +107,7 @@ static void range_set_check_invariants(struct range_set *rs) * In-place pass of sorting and merging the ranges in the range set, * to establish the invariants when we get the ranges from the user */ -static void sort_and_merge_range_set(struct range_set *rs) +void sort_and_merge_range_set(struct range_set *rs) { int i; int o = 0; /* output cursor */ @@ -291,7 +291,6 @@ static void line_log_data_insert(struct line_log_data **list, if (p) { range_set_append_unsafe(&p->ranges, begin, end); - sort_and_merge_range_set(&p->ranges); free(path); return; } @@ -299,7 +298,6 @@ static void line_log_data_insert(struct line_log_data **list, p = xcalloc(1, sizeof(struct line_log_data)); p->path = path; range_set_append(&p->ranges, begin, end); - sort_and_merge_range_set(&p->ranges); if (ip) { p->next = ip->next; ip->next = p; @@ -566,12 +564,14 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) struct nth_line_cb cb_data; struct string_list_item *item; struct line_log_data *ranges = NULL; + struct line_log_data *p; for_each_string_list_item(item, args) { const char *name_part, *range_part; char *full_name; struct diff_filespec *spec; long begin = 0, end = 0; + long anchor; name_part = skip_range_arg(item->string); if (!name_part || *name_part != ':' || !name_part[1]) @@ -590,17 +590,23 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) cb_data.lines = lines; cb_data.line_ends = ends; + p = search_line_log_data(ranges, full_name, NULL); + if (p && p->ranges.nr) + anchor = p->ranges.ranges[p->ranges.nr - 1].end + 1; + else + anchor = 1; + if (parse_range_arg(range_part, nth_line, &cb_data, - lines, &begin, &end, + lines, anchor, &begin, &end, full_name)) die("malformed -L argument '%s'", range_part); + if (lines < end || ((lines || begin) && lines < begin)) + die("file %s has only %lu lines", name_part, lines); if (begin < 1) begin = 1; if (end < 1) end = lines; begin--; - if (lines < end || lines < begin) - die("file %s has only %ld lines", name_part, lines); line_log_data_insert(&ranges, full_name, begin, end); free_filespec(spec); @@ -608,6 +614,9 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) ends = NULL; } + for (p = ranges; p; p = p->next) + sort_and_merge_range_set(&p->ranges); + return ranges; } @@ -751,7 +760,7 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_list r = r->next; } paths[count] = NULL; - init_pathspec(&rev->diffopt.pathspec, paths); + parse_pathspec(&rev->diffopt.pathspec, 0, 0, "", paths); free(paths); } } diff --git a/line-log.h b/line-log.h index 8bea45fd78..a9212d84e4 100644 --- a/line-log.h +++ b/line-log.h @@ -25,6 +25,18 @@ struct diff_ranges { struct range_set target; }; +extern void range_set_init(struct range_set *, size_t prealloc); +extern void range_set_release(struct range_set *); +/* Range includes start; excludes end */ +extern void range_set_append_unsafe(struct range_set *, long start, long end); +/* New range must begin at or after end of last added range */ +extern void range_set_append(struct range_set *, long start, long end); +/* + * In-place pass of sorting and merging the ranges in the range set, + * to sort and make the ranges disjoint. + */ +extern void sort_and_merge_range_set(struct range_set *); + /* Linked list of interesting files and their associated ranges. The * list must be kept sorted by path. * diff --git a/line-range.c b/line-range.c index 3942475c2f..de4e32f942 100644 --- a/line-range.c +++ b/line-range.c @@ -6,6 +6,18 @@ /* * Parse one item in the -L option + * + * 'begin' is applicable only to relative range anchors. Absolute anchors + * ignore this value. + * + * When parsing "-L A,B", parse_loc() is called once for A and once for B. + * + * When parsing A, 'begin' must be a negative number, the absolute value of + * which is the line at which relative start-of-range anchors should be + * based. Beginning of file is represented by -1. + * + * When parsing B, 'begin' must be the positive line number immediately + * following the line computed for 'A'. */ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, void *data, long lines, long begin, long *ret) @@ -21,11 +33,13 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, * for 20 lines, or "-L <something>,-5" for 5 lines ending at * <something>. */ - if (1 < begin && (spec[0] == '+' || spec[0] == '-')) { + if (1 <= begin && (spec[0] == '+' || spec[0] == '-')) { num = strtol(spec + 1, &term, 10); if (term != spec + 1) { if (!ret) return term; + if (num == 0) + die("-L invalid empty range"); if (spec[0] == '-') num = 0 - num; if (0 < num) @@ -40,10 +54,23 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, } num = strtol(spec, &term, 10); if (term != spec) { - if (ret) + if (ret) { + if (num <= 0) + die("-L invalid line number: %ld", num); *ret = num; + } return term; } + + if (begin < 0) { + if (spec[0] != '^') + begin = -begin; + else { + begin = 1; + spec++; + } + } + if (spec[0] != '/') return spec; @@ -83,7 +110,8 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, else { char errbuf[1024]; regerror(reg_error, ®exp, errbuf, 1024); - die("-L parameter '%s': %s", spec + 1, errbuf); + die("-L parameter '%s' starting at line %ld: %s", + spec + 1, begin + 1, errbuf); } } @@ -136,7 +164,7 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char } static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_cb, - void *cb_data, long lines, long *begin, long *end, + void *cb_data, long lines, long anchor, long *begin, long *end, const char *path) { char *pattern; @@ -148,6 +176,11 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ int reg_error; regex_t regexp; + if (*arg == '^') { + anchor = 1; + arg++; + } + assert(*arg == ':'); term = arg+1; while (*term && *term != ':') { @@ -162,7 +195,8 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ pattern = xstrndup(arg+1, term-(arg+1)); - start = nth_line_cb(cb_data, 0); + anchor--; /* input is in human terms */ + start = nth_line_cb(cb_data, anchor); drv = userdiff_find_by_path(path); if (drv && drv->funcname.pattern) { @@ -180,7 +214,8 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ p = find_funcname_matching_regexp(xecfg, (char*) start, ®exp); if (!p) - die("-L parameter '%s': no match", pattern); + die("-L parameter '%s' starting at line %ld: no match", + pattern, anchor + 1); *begin = 0; while (p > nth_line_cb(cb_data, *begin)) (*begin)++; @@ -208,19 +243,24 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ } int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, - void *cb_data, long lines, long *begin, long *end, - const char *path) + void *cb_data, long lines, long anchor, + long *begin, long *end, const char *path) { *begin = *end = 0; - if (*arg == ':') { - arg = parse_range_funcname(arg, nth_line_cb, cb_data, lines, begin, end, path); + if (anchor < 1) + anchor = 1; + if (anchor > lines) + anchor = lines + 1; + + if (*arg == ':' || (*arg == '^' && *(arg + 1) == ':')) { + arg = parse_range_funcname(arg, nth_line_cb, cb_data, lines, anchor, begin, end, path); if (!arg || *arg) return -1; return 0; } - arg = parse_loc(arg, nth_line_cb, cb_data, lines, 1, begin); + arg = parse_loc(arg, nth_line_cb, cb_data, lines, -anchor, begin); if (*arg == ',') arg = parse_loc(arg + 1, nth_line_cb, cb_data, lines, *begin + 1, end); @@ -238,8 +278,8 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, const char *skip_range_arg(const char *arg) { - if (*arg == ':') - return parse_range_funcname(arg, NULL, NULL, 0, NULL, NULL, NULL); + if (*arg == ':' || (*arg == '^' && *(arg + 1) == ':')) + return parse_range_funcname(arg, NULL, NULL, 0, 0, NULL, NULL, NULL); arg = parse_loc(arg, NULL, NULL, 0, -1, NULL); diff --git a/line-range.h b/line-range.h index ae3d0123b4..83ba3c25e8 100644 --- a/line-range.h +++ b/line-range.h @@ -9,6 +9,9 @@ * line 'lno' inside the 'cb_data'. The caller is expected to already * have a suitable map at hand to make this a constant-time lookup. * + * 'anchor' is the 1-based line at which relative range specifications + * should be anchored. Absolute ranges are unaffected by this value. + * * Returns 0 in case of success and -1 if there was an error. The * actual range is stored in *begin and *end. The counting starts * at 1! In case of error, the caller should show usage message. @@ -18,7 +21,7 @@ typedef const char *(*nth_line_fn_t)(void *data, long lno); extern int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, - void *cb_data, long lines, + void *cb_data, long lines, long anchor, long *begin, long *end, const char *path); diff --git a/log-tree.c b/log-tree.c index a49d8e895d..8534d91826 100644 --- a/log-tree.c +++ b/log-tree.c @@ -738,7 +738,7 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log sha1 = commit->tree->object.sha1; /* Root commit? */ - parents = commit->parents; + parents = get_saved_parents(opt, commit); if (!parents) { if (opt->show_root_diff) { diff_root_tree_sha1(sha1, "", &opt->diffopt); diff --git a/merge-recursive.c b/merge-recursive.c index f95933b0aa..40eb840a52 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -298,7 +298,7 @@ static int get_files_dirs(struct merge_options *o, struct tree *tree) { int n; struct pathspec match_all; - init_pathspec(&match_all, NULL); + memset(&match_all, 0, sizeof(match_all)); if (read_tree_recursive(tree, "", 0, 0, &match_all, save_files_dirs, o)) return 0; n = o->current_file_set.nr + o->current_directory_set.nr; diff --git a/notes-merge.c b/notes-merge.c index ab18857074..94a1a8ae46 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -170,7 +170,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o, sha1_to_hex(mp->remote)); } diff_flush(&opt); - diff_tree_release_paths(&opt); + free_pathspec(&opt.pathspec); *num_changes = len; return changes; @@ -256,7 +256,7 @@ static void diff_tree_local(struct notes_merge_options *o, sha1_to_hex(mp->local)); } diff_flush(&opt); - diff_tree_release_paths(&opt); + free_pathspec(&opt.pathspec); } static void check_notes_merge_worktree(struct notes_merge_options *o) diff --git a/parse-options.c b/parse-options.c index c2cbca25cc..62e9b1cc68 100644 --- a/parse-options.c +++ b/parse-options.c @@ -43,8 +43,42 @@ static void fix_filename(const char *prefix, const char **file) *file = xstrdup(prefix_filename(prefix, strlen(prefix), *file)); } +static int opt_command_mode_error(const struct option *opt, + const struct option *all_opts, + int flags) +{ + const struct option *that; + struct strbuf message = STRBUF_INIT; + struct strbuf that_name = STRBUF_INIT; + + /* + * Find the other option that was used to set the variable + * already, and report that this is not compatible with it. + */ + for (that = all_opts; that->type != OPTION_END; that++) { + if (that == opt || + that->type != OPTION_CMDMODE || + that->value != opt->value || + that->defval != *(int *)opt->value) + continue; + + if (that->long_name) + strbuf_addf(&that_name, "--%s", that->long_name); + else + strbuf_addf(&that_name, "-%c", that->short_name); + strbuf_addf(&message, ": incompatible with %s", that_name.buf); + strbuf_release(&that_name); + opterror(opt, message.buf, flags); + strbuf_release(&message); + return -1; + } + return opterror(opt, ": incompatible with something else", flags); +} + static int get_value(struct parse_opt_ctx_t *p, - const struct option *opt, int flags) + const struct option *opt, + const struct option *all_opts, + int flags) { const char *s, *arg; const int unset = flags & OPT_UNSET; @@ -83,6 +117,16 @@ static int get_value(struct parse_opt_ctx_t *p, *(int *)opt->value = unset ? 0 : opt->defval; return 0; + case OPTION_CMDMODE: + /* + * Giving the same mode option twice, although is unnecessary, + * is not a grave error, so let it pass. + */ + if (*(int *)opt->value && *(int *)opt->value != opt->defval) + return opt_command_mode_error(opt, all_opts, flags); + *(int *)opt->value = opt->defval; + return 0; + case OPTION_SET_PTR: *(void **)opt->value = unset ? NULL : (void *)opt->defval; return 0; @@ -143,12 +187,13 @@ static int get_value(struct parse_opt_ctx_t *p, static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *options) { + const struct option *all_opts = options; const struct option *numopt = NULL; for (; options->type != OPTION_END; options++) { if (options->short_name == *p->opt) { p->opt = p->opt[1] ? p->opt + 1 : NULL; - return get_value(p, options, OPT_SHORT); + return get_value(p, options, all_opts, OPT_SHORT); } /* @@ -177,6 +222,7 @@ static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *optio static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg, const struct option *options) { + const struct option *all_opts = options; const char *arg_end = strchr(arg, '='); const struct option *abbrev_option = NULL, *ambiguous_option = NULL; int abbrev_flags = 0, ambiguous_flags = 0; @@ -253,7 +299,7 @@ is_abbreviated: continue; p->opt = rest + 1; } - return get_value(p, options, flags ^ opt_flags); + return get_value(p, options, all_opts, flags ^ opt_flags); } if (ambiguous_option) @@ -265,18 +311,20 @@ is_abbreviated: (abbrev_flags & OPT_UNSET) ? "no-" : "", abbrev_option->long_name); if (abbrev_option) - return get_value(p, abbrev_option, abbrev_flags); + return get_value(p, abbrev_option, all_opts, abbrev_flags); return -2; } static int parse_nodash_opt(struct parse_opt_ctx_t *p, const char *arg, const struct option *options) { + const struct option *all_opts = options; + for (; options->type != OPTION_END; options++) { if (!(options->flags & PARSE_OPT_NODASH)) continue; if (options->short_name == arg[0] && arg[1] == '\0') - return get_value(p, options, OPT_SHORT); + return get_value(p, options, all_opts, OPT_SHORT); } return -2; } diff --git a/parse-options.h b/parse-options.h index c378b75b13..8736006ed7 100644 --- a/parse-options.h +++ b/parse-options.h @@ -13,6 +13,7 @@ enum parse_opt_type { OPTION_COUNTUP, OPTION_SET_INT, OPTION_SET_PTR, + OPTION_CMDMODE, /* options with arguments (usually) */ OPTION_STRING, OPTION_INTEGER, @@ -21,9 +22,6 @@ enum parse_opt_type { OPTION_FILENAME }; -/* Deprecated synonym */ -#define OPTION_BOOLEAN OPTION_COUNTUP - enum parse_opt_flags { PARSE_OPT_KEEP_DASHDASH = 1, PARSE_OPT_STOP_AT_NON_OPTION = 2, @@ -128,8 +126,12 @@ struct option { #define OPT_SET_INT(s, l, v, h, i) { OPTION_SET_INT, (s), (l), (v), NULL, \ (h), PARSE_OPT_NOARG, NULL, (i) } #define OPT_BOOL(s, l, v, h) OPT_SET_INT(s, l, v, h, 1) +#define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \ + (h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1} #define OPT_SET_PTR(s, l, v, h, p) { OPTION_SET_PTR, (s), (l), (v), NULL, \ (h), PARSE_OPT_NOARG, NULL, (p) } +#define OPT_CMDMODE(s, l, v, h, i) { OPTION_CMDMODE, (s), (l), (v), NULL, \ + (h), PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, (i) } #define OPT_INTEGER(s, l, v, h) { OPTION_INTEGER, (s), (l), (v), N_("n"), (h) } #define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) } #define OPT_STRING_LIST(s, l, v, a, h) \ @@ -180,7 +182,7 @@ extern NORETURN void usage_msg_opt(const char *msg, extern int optbug(const struct option *opt, const char *reason); extern int opterror(const struct option *opt, const char *reason, int flags); -#if defined(__GNUC__) && ! defined(clang) +#if defined(__GNUC__) && ! defined(__clang__) #define opterror(o,r,f) (opterror((o),(r),(f)), -1) #endif @@ -543,8 +543,14 @@ const char *relative_path(const char *in, const char *prefix, * * Note that this function is purely textual. It does not follow symlinks, * verify the existence of the path, or make any system calls. + * + * prefix_len != NULL is for a specific case of prefix_pathspec(): + * assume that src == dst and src[0..prefix_len-1] is already + * normalized, any time "../" eats up to the prefix_len part, + * prefix_len is reduced. In the end prefix_len is the remaining + * prefix that has not been overridden by user pathspec. */ -int normalize_path_copy(char *dst, const char *src) +int normalize_path_copy_len(char *dst, const char *src, int *prefix_len) { char *dst0; @@ -619,11 +625,18 @@ int normalize_path_copy(char *dst, const char *src) /* Windows: dst[-1] cannot be backslash anymore */ while (dst0 < dst && dst[-1] != '/') dst--; + if (prefix_len && *prefix_len > dst - dst0) + *prefix_len = dst - dst0; } *dst = '\0'; return 0; } +int normalize_path_copy(char *dst, const char *src) +{ + return normalize_path_copy_len(dst, src, NULL); +} + /* * path = Canonical absolute path * prefixes = string_list containing normalized, absolute paths without diff --git a/pathspec.c b/pathspec.c index 6ea0867493..4b32cc32cb 100644 --- a/pathspec.c +++ b/pathspec.c @@ -15,8 +15,8 @@ * If seen[] has not already been written to, it may make sense * to use find_pathspecs_matching_against_index() instead. */ -void add_pathspec_matches_against_index(const char **pathspec, - char *seen, int specs) +void add_pathspec_matches_against_index(const struct pathspec *pathspec, + char *seen) { int num_unmatched = 0, i; @@ -26,14 +26,14 @@ void add_pathspec_matches_against_index(const char **pathspec, * mistakenly think that the user gave a pathspec that did not match * anything. */ - for (i = 0; i < specs; i++) + for (i = 0; i < pathspec->nr; i++) if (!seen[i]) num_unmatched++; if (!num_unmatched) return; for (i = 0; i < active_nr; i++) { const struct cache_entry *ce = active_cache[i]; - match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen); + match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, seen); } } @@ -45,57 +45,428 @@ void add_pathspec_matches_against_index(const char **pathspec, * nature of the "closest" (i.e. most specific) matches which each of the * given pathspecs achieves against all items in the index. */ -char *find_pathspecs_matching_against_index(const char **pathspec) +char *find_pathspecs_matching_against_index(const struct pathspec *pathspec) { - char *seen; - int i; - - for (i = 0; pathspec[i]; i++) - ; /* just counting */ - seen = xcalloc(i, 1); - add_pathspec_matches_against_index(pathspec, seen, i); + char *seen = xcalloc(pathspec->nr, 1); + add_pathspec_matches_against_index(pathspec, seen); return seen; } /* - * Check the index to see whether path refers to a submodule, or - * something inside a submodule. If the former, returns the path with - * any trailing slash stripped. If the latter, dies with an error - * message. + * Magic pathspec + * + * Possible future magic semantics include stuff like: + * + * { PATHSPEC_RECURSIVE, '*', "recursive" }, + * { PATHSPEC_REGEXP, '\0', "regexp" }, + * + */ + +static struct pathspec_magic { + unsigned bit; + char mnemonic; /* this cannot be ':'! */ + const char *name; +} pathspec_magic[] = { + { PATHSPEC_FROMTOP, '/', "top" }, + { PATHSPEC_LITERAL, 0, "literal" }, + { PATHSPEC_GLOB, '\0', "glob" }, + { PATHSPEC_ICASE, '\0', "icase" }, +}; + +/* + * Take an element of a pathspec and check for magic signatures. + * Append the result to the prefix. Return the magic bitmap. + * + * For now, we only parse the syntax and throw out anything other than + * "top" magic. + * + * NEEDSWORK: This needs to be rewritten when we start migrating + * get_pathspec() users to use the "struct pathspec" interface. For + * example, a pathspec element may be marked as case-insensitive, but + * the prefix part must always match literally, and a single stupid + * string cannot express such a case. */ -const char *check_path_for_gitlink(const char *path) +static unsigned prefix_pathspec(struct pathspec_item *item, + unsigned *p_short_magic, + const char **raw, unsigned flags, + const char *prefix, int prefixlen, + const char *elt) { - int i, path_len = strlen(path); - for (i = 0; i < active_nr; i++) { - const struct cache_entry *ce = active_cache[i]; - if (S_ISGITLINK(ce->ce_mode)) { - int ce_len = ce_namelen(ce); - if (path_len <= ce_len || path[ce_len] != '/' || - memcmp(ce->name, path, ce_len)) - /* path does not refer to this - * submodule or anything inside it */ + static int literal_global = -1; + static int glob_global = -1; + static int noglob_global = -1; + static int icase_global = -1; + unsigned magic = 0, short_magic = 0, global_magic = 0; + const char *copyfrom = elt, *long_magic_end = NULL; + char *match; + int i, pathspec_prefix = -1; + + if (literal_global < 0) + literal_global = git_env_bool(GIT_LITERAL_PATHSPECS_ENVIRONMENT, 0); + if (literal_global) + global_magic |= PATHSPEC_LITERAL; + + if (glob_global < 0) + glob_global = git_env_bool(GIT_GLOB_PATHSPECS_ENVIRONMENT, 0); + if (glob_global) + global_magic |= PATHSPEC_GLOB; + + if (noglob_global < 0) + noglob_global = git_env_bool(GIT_NOGLOB_PATHSPECS_ENVIRONMENT, 0); + + if (glob_global && noglob_global) + die(_("global 'glob' and 'noglob' pathspec settings are incompatible")); + + + if (icase_global < 0) + icase_global = git_env_bool(GIT_ICASE_PATHSPECS_ENVIRONMENT, 0); + if (icase_global) + global_magic |= PATHSPEC_ICASE; + + if ((global_magic & PATHSPEC_LITERAL) && + (global_magic & ~PATHSPEC_LITERAL)) + die(_("global 'literal' pathspec setting is incompatible " + "with all other global pathspec settings")); + + if (elt[0] != ':' || literal_global) { + ; /* nothing to do */ + } else if (elt[1] == '(') { + /* longhand */ + const char *nextat; + for (copyfrom = elt + 2; + *copyfrom && *copyfrom != ')'; + copyfrom = nextat) { + size_t len = strcspn(copyfrom, ",)"); + if (copyfrom[len] == ',') + nextat = copyfrom + len + 1; + else + /* handle ')' and '\0' */ + nextat = copyfrom + len; + if (!len) continue; - if (path_len == ce_len + 1) { - /* path refers to submodule; - * strip trailing slash */ - return xstrndup(ce->name, ce_len); + for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) { + if (strlen(pathspec_magic[i].name) == len && + !strncmp(pathspec_magic[i].name, copyfrom, len)) { + magic |= pathspec_magic[i].bit; + break; + } + if (!prefixcmp(copyfrom, "prefix:")) { + char *endptr; + pathspec_prefix = strtol(copyfrom + 7, + &endptr, 10); + if (endptr - copyfrom != len) + die(_("invalid parameter for pathspec magic 'prefix'")); + /* "i" would be wrong, but it does not matter */ + break; + } + } + if (ARRAY_SIZE(pathspec_magic) <= i) + die(_("Invalid pathspec magic '%.*s' in '%s'"), + (int) len, copyfrom, elt); + } + if (*copyfrom != ')') + die(_("Missing ')' at the end of pathspec magic in '%s'"), elt); + long_magic_end = copyfrom; + copyfrom++; + } else { + /* shorthand */ + for (copyfrom = elt + 1; + *copyfrom && *copyfrom != ':'; + copyfrom++) { + char ch = *copyfrom; + + if (!is_pathspec_magic(ch)) + break; + for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) + if (pathspec_magic[i].mnemonic == ch) { + short_magic |= pathspec_magic[i].bit; + break; + } + if (ARRAY_SIZE(pathspec_magic) <= i) + die(_("Unimplemented pathspec magic '%c' in '%s'"), + ch, elt); + } + if (*copyfrom == ':') + copyfrom++; + } + + magic |= short_magic; + *p_short_magic = short_magic; + + /* --noglob-pathspec adds :(literal) _unless_ :(glob) is specifed */ + if (noglob_global && !(magic & PATHSPEC_GLOB)) + global_magic |= PATHSPEC_LITERAL; + + /* --glob-pathspec is overriden by :(literal) */ + if ((global_magic & PATHSPEC_GLOB) && (magic & PATHSPEC_LITERAL)) + global_magic &= ~PATHSPEC_GLOB; + + magic |= global_magic; + + if (pathspec_prefix >= 0 && + (prefixlen || (prefix && *prefix))) + die("BUG: 'prefix' magic is supposed to be used at worktree's root"); + + if ((magic & PATHSPEC_LITERAL) && (magic & PATHSPEC_GLOB)) + die(_("%s: 'literal' and 'glob' are incompatible"), elt); + + if (pathspec_prefix >= 0) { + match = xstrdup(copyfrom); + prefixlen = pathspec_prefix; + } else if (magic & PATHSPEC_FROMTOP) { + match = xstrdup(copyfrom); + prefixlen = 0; + } else { + match = prefix_path_gently(prefix, prefixlen, &prefixlen, copyfrom); + if (!match) + die(_("%s: '%s' is outside repository"), elt, copyfrom); + } + *raw = item->match = match; + /* + * Prefix the pathspec (keep all magic) and assign to + * original. Useful for passing to another command. + */ + if (flags & PATHSPEC_PREFIX_ORIGIN) { + struct strbuf sb = STRBUF_INIT; + const char *start = elt; + if (prefixlen && !literal_global) { + /* Preserve the actual prefix length of each pattern */ + if (long_magic_end) { + strbuf_add(&sb, start, long_magic_end - start); + strbuf_addf(&sb, ",prefix:%d", prefixlen); + start = long_magic_end; } else { - die (_("Path '%s' is in submodule '%.*s'"), - path, ce_len, ce->name); + if (*start == ':') + start++; + strbuf_addf(&sb, ":(prefix:%d)", prefixlen); } } + strbuf_add(&sb, start, copyfrom - start); + strbuf_addstr(&sb, match); + item->original = strbuf_detach(&sb, NULL); + } else + item->original = elt; + item->len = strlen(item->match); + item->prefix = prefixlen; + + if ((flags & PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP) && + (item->len >= 1 && item->match[item->len - 1] == '/') && + (i = cache_name_pos(item->match, item->len - 1)) >= 0 && + S_ISGITLINK(active_cache[i]->ce_mode)) { + item->len--; + match[item->len] = '\0'; + } + + if (flags & PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE) + for (i = 0; i < active_nr; i++) { + struct cache_entry *ce = active_cache[i]; + int ce_len = ce_namelen(ce); + + if (!S_ISGITLINK(ce->ce_mode)) + continue; + + if (item->len <= ce_len || match[ce_len] != '/' || + memcmp(ce->name, match, ce_len)) + continue; + if (item->len == ce_len + 1) { + /* strip trailing slash */ + item->len--; + match[item->len] = '\0'; + } else + die (_("Pathspec '%s' is in submodule '%.*s'"), + elt, ce_len, ce->name); + } + + if (magic & PATHSPEC_LITERAL) + item->nowildcard_len = item->len; + else { + item->nowildcard_len = simple_length(item->match); + if (item->nowildcard_len < prefixlen) + item->nowildcard_len = prefixlen; + } + item->flags = 0; + if (magic & PATHSPEC_GLOB) { + /* + * FIXME: should we enable ONESTAR in _GLOB for + * pattern "* * / * . c"? + */ + } else { + if (item->nowildcard_len < item->len && + item->match[item->nowildcard_len] == '*' && + no_wildcard(item->match + item->nowildcard_len + 1)) + item->flags |= PATHSPEC_ONESTAR; } - return path; + + /* sanity checks, pathspec matchers assume these are sane */ + assert(item->nowildcard_len <= item->len && + item->prefix <= item->len); + return magic; +} + +static int pathspec_item_cmp(const void *a_, const void *b_) +{ + struct pathspec_item *a, *b; + + a = (struct pathspec_item *)a_; + b = (struct pathspec_item *)b_; + return strcmp(a->match, b->match); +} + +static void NORETURN unsupported_magic(const char *pattern, + unsigned magic, + unsigned short_magic) +{ + struct strbuf sb = STRBUF_INIT; + int i, n; + for (n = i = 0; i < ARRAY_SIZE(pathspec_magic); i++) { + const struct pathspec_magic *m = pathspec_magic + i; + if (!(magic & m->bit)) + continue; + if (sb.len) + strbuf_addstr(&sb, " "); + if (short_magic & m->bit) + strbuf_addf(&sb, "'%c'", m->mnemonic); + else + strbuf_addf(&sb, "'%s'", m->name); + n++; + } + /* + * We may want to substitute "this command" with a command + * name. E.g. when add--interactive dies when running + * "checkout -p" + */ + die(_("%s: pathspec magic not supported by this command: %s"), + pattern, sb.buf); } /* - * Dies if the given path refers to a file inside a symlinked - * directory in the index. + * Given command line arguments and a prefix, convert the input to + * pathspec. die() if any magic in magic_mask is used. */ -void die_if_path_beyond_symlink(const char *path, const char *prefix) +void parse_pathspec(struct pathspec *pathspec, + unsigned magic_mask, unsigned flags, + const char *prefix, const char **argv) { - if (has_symlink_leading_path(path, strlen(path))) { - int len = prefix ? strlen(prefix) : 0; - die(_("'%s' is beyond a symbolic link"), path + len); + struct pathspec_item *item; + const char *entry = argv ? *argv : NULL; + int i, n, prefixlen; + + memset(pathspec, 0, sizeof(*pathspec)); + + if (flags & PATHSPEC_MAXDEPTH_VALID) + pathspec->magic |= PATHSPEC_MAXDEPTH; + + /* No arguments, no prefix -> no pathspec */ + if (!entry && !prefix) + return; + + if ((flags & PATHSPEC_PREFER_CWD) && + (flags & PATHSPEC_PREFER_FULL)) + die("BUG: PATHSPEC_PREFER_CWD and PATHSPEC_PREFER_FULL are incompatible"); + + /* No arguments with prefix -> prefix pathspec */ + if (!entry) { + static const char *raw[2]; + + if (flags & PATHSPEC_PREFER_FULL) + return; + + if (!(flags & PATHSPEC_PREFER_CWD)) + die("BUG: PATHSPEC_PREFER_CWD requires arguments"); + + pathspec->items = item = xmalloc(sizeof(*item)); + memset(item, 0, sizeof(*item)); + item->match = prefix; + item->original = prefix; + item->nowildcard_len = item->len = strlen(prefix); + item->prefix = item->len; + raw[0] = prefix; + raw[1] = NULL; + pathspec->nr = 1; + pathspec->_raw = raw; + return; } + + n = 0; + while (argv[n]) + n++; + + pathspec->nr = n; + pathspec->items = item = xmalloc(sizeof(*item) * n); + pathspec->_raw = argv; + prefixlen = prefix ? strlen(prefix) : 0; + + for (i = 0; i < n; i++) { + unsigned short_magic; + entry = argv[i]; + + item[i].magic = prefix_pathspec(item + i, &short_magic, + argv + i, flags, + prefix, prefixlen, entry); + if (item[i].magic & magic_mask) + unsupported_magic(entry, + item[i].magic & magic_mask, + short_magic); + + if ((flags & PATHSPEC_SYMLINK_LEADING_PATH) && + has_symlink_leading_path(item[i].match, item[i].len)) { + die(_("pathspec '%s' is beyond a symbolic link"), entry); + } + + if (item[i].nowildcard_len < item[i].len) + pathspec->has_wildcard = 1; + pathspec->magic |= item[i].magic; + } + + + if (pathspec->magic & PATHSPEC_MAXDEPTH) { + if (flags & PATHSPEC_KEEP_ORDER) + die("BUG: PATHSPEC_MAXDEPTH_VALID and PATHSPEC_KEEP_ORDER are incompatible"); + qsort(pathspec->items, pathspec->nr, + sizeof(struct pathspec_item), pathspec_item_cmp); + } +} + +/* + * N.B. get_pathspec() is deprecated in favor of the "struct pathspec" + * based interface - see pathspec.c:parse_pathspec(). + * + * Arguments: + * - prefix - a path relative to the root of the working tree + * - pathspec - a list of paths underneath the prefix path + * + * Iterates over pathspec, prepending each path with prefix, + * and return the resulting list. + * + * If pathspec is empty, return a singleton list containing prefix. + * + * If pathspec and prefix are both empty, return an empty list. + * + * This is typically used by built-in commands such as add.c, in order + * to normalize argv arguments provided to the built-in into a list of + * paths to process, all relative to the root of the working tree. + */ +const char **get_pathspec(const char *prefix, const char **pathspec) +{ + struct pathspec ps; + parse_pathspec(&ps, + PATHSPEC_ALL_MAGIC & + ~(PATHSPEC_FROMTOP | PATHSPEC_LITERAL), + PATHSPEC_PREFER_CWD, + prefix, pathspec); + return ps._raw; +} + +void copy_pathspec(struct pathspec *dst, const struct pathspec *src) +{ + *dst = *src; + dst->items = xmalloc(sizeof(struct pathspec_item) * dst->nr); + memcpy(dst->items, src->items, + sizeof(struct pathspec_item) * dst->nr); +} + +void free_pathspec(struct pathspec *pathspec) +{ + free(pathspec->items); + pathspec->items = NULL; } diff --git a/pathspec.h b/pathspec.h index db0184a1ac..04b632fa33 100644 --- a/pathspec.h +++ b/pathspec.h @@ -1,8 +1,92 @@ #ifndef PATHSPEC_H #define PATHSPEC_H -extern char *find_pathspecs_matching_against_index(const char **pathspec); -extern void add_pathspec_matches_against_index(const char **pathspec, char *seen, int specs); +/* Pathspec magic */ +#define PATHSPEC_FROMTOP (1<<0) +#define PATHSPEC_MAXDEPTH (1<<1) +#define PATHSPEC_LITERAL (1<<2) +#define PATHSPEC_GLOB (1<<3) +#define PATHSPEC_ICASE (1<<4) +#define PATHSPEC_ALL_MAGIC \ + (PATHSPEC_FROMTOP | \ + PATHSPEC_MAXDEPTH | \ + PATHSPEC_LITERAL | \ + PATHSPEC_GLOB | \ + PATHSPEC_ICASE) + +#define PATHSPEC_ONESTAR 1 /* the pathspec pattern sastisfies GFNM_ONESTAR */ + +struct pathspec { + const char **_raw; /* get_pathspec() result, not freed by free_pathspec() */ + int nr; + unsigned int has_wildcard:1; + unsigned int recursive:1; + unsigned magic; + int max_depth; + struct pathspec_item { + const char *match; + const char *original; + unsigned magic; + int len, prefix; + int nowildcard_len; + int flags; + } *items; +}; + +#define GUARD_PATHSPEC(ps, mask) \ + do { \ + if ((ps)->magic & ~(mask)) \ + die("BUG:%s:%d: unsupported magic %x", \ + __FILE__, __LINE__, (ps)->magic & ~(mask)); \ + } while (0) + +/* parse_pathspec flags */ +#define PATHSPEC_PREFER_CWD (1<<0) /* No args means match cwd */ +#define PATHSPEC_PREFER_FULL (1<<1) /* No args means match everything */ +#define PATHSPEC_MAXDEPTH_VALID (1<<2) /* max_depth field is valid */ +/* strip the trailing slash if the given path is a gitlink */ +#define PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP (1<<3) +/* die if a symlink is part of the given path's directory */ +#define PATHSPEC_SYMLINK_LEADING_PATH (1<<4) +/* + * This is like a combination of ..LEADING_PATH and .._SLASH_CHEAP + * (but not the same): it strips the trailing slash if the given path + * is a gitlink but also checks and dies if gitlink is part of the + * leading path (i.e. the given path goes beyond a submodule). It's + * safer than _SLASH_CHEAP and also more expensive. + */ +#define PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE (1<<5) +#define PATHSPEC_PREFIX_ORIGIN (1<<6) +#define PATHSPEC_KEEP_ORDER (1<<7) + +extern void parse_pathspec(struct pathspec *pathspec, + unsigned magic_mask, + unsigned flags, + const char *prefix, + const char **args); +extern void copy_pathspec(struct pathspec *dst, const struct pathspec *src); +extern void free_pathspec(struct pathspec *); + +static inline int ps_strncmp(const struct pathspec_item *item, + const char *s1, const char *s2, size_t n) +{ + if (item->magic & PATHSPEC_ICASE) + return strncasecmp(s1, s2, n); + else + return strncmp(s1, s2, n); +} + +static inline int ps_strcmp(const struct pathspec_item *item, + const char *s1, const char *s2) +{ + if (item->magic & PATHSPEC_ICASE) + return strcasecmp(s1, s2); + else + return strcmp(s1, s2); +} + +extern char *find_pathspecs_matching_against_index(const struct pathspec *pathspec); +extern void add_pathspec_matches_against_index(const struct pathspec *pathspec, char *seen); extern const char *check_path_for_gitlink(const char *path); extern void die_if_path_beyond_symlink(const char *path, const char *prefix); diff --git a/perl/Git.pm b/perl/Git.pm index 7a252ef872..204fdc6737 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -61,7 +61,7 @@ require Exporter; remote_refs prompt get_tz_offset credential credential_read credential_write - temp_acquire temp_release temp_reset temp_path); + temp_acquire temp_is_locked temp_release temp_reset temp_path); =head1 DESCRIPTION @@ -1206,6 +1206,35 @@ sub temp_acquire { $temp_fd; } +=item temp_is_locked ( NAME ) + +Returns true if the internal lock created by a previous C<temp_acquire()> +call with C<NAME> is still in effect. + +When temp_acquire is called on a C<NAME>, it internally locks the temporary +file mapped to C<NAME>. That lock will not be released until C<temp_release()> +is called with either the original C<NAME> or the L<File::Handle> that was +returned from the original call to temp_acquire. + +Subsequent attempts to call C<temp_acquire()> with the same C<NAME> will fail +unless there has been an intervening C<temp_release()> call for that C<NAME> +(or its corresponding L<File::Handle> that was returned by the original +C<temp_acquire()> call). + +If true is returned by C<temp_is_locked()> for a C<NAME>, an attempt to +C<temp_acquire()> the same C<NAME> will cause an error unless +C<temp_release> is first called on that C<NAME> (or its corresponding +L<File::Handle> that was returned by the original C<temp_acquire()> call). + +=cut + +sub temp_is_locked { + my ($self, $name) = _maybe_self(@_); + my $temp_fd = \$TEMP_FILEMAP{$name}; + + defined $$temp_fd && $$temp_fd->opened && $TEMP_FILES{$$temp_fd}{locked}; +} + =item temp_release ( NAME ) =item temp_release ( FILEHANDLE ) diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm index bd174189b9..10edb27732 100644 --- a/perl/Git/SVN/Fetcher.pm +++ b/perl/Git/SVN/Fetcher.pm @@ -315,11 +315,13 @@ sub change_file_prop { sub apply_textdelta { my ($self, $fb, $exp) = @_; return undef if $self->is_path_ignored($fb->{path}); - my $fh = $::_repository->temp_acquire('svn_delta'); + my $suffix = 0; + ++$suffix while $::_repository->temp_is_locked("svn_delta_${$}_$suffix"); + my $fh = $::_repository->temp_acquire("svn_delta_${$}_$suffix"); # $fh gets auto-closed() by SVN::TxDelta::apply(), # (but $base does not,) so dup() it for reading in close_file open my $dup, '<&', $fh or croak $!; - my $base = $::_repository->temp_acquire('git_blob'); + my $base = $::_repository->temp_acquire("git_blob_${$}_$suffix"); if ($fb->{blob}) { my ($base_is_link, $size); @@ -12,6 +12,11 @@ Members: Thomas Rast <trast@student.ethz.ch> Jan Krüger <jk@jk.gs> Christian Stimming <stimming@tuhh.de> +Language: fr (French) +Repository: https://github.com/jnavila/git +Leader: Jean-Noël Avila <jn.avila@free.fr> +Members: Sébastien Helleu <flashcode@flashtux.org> + Language: is (Icelandic) Leader: Ævar Arnfjörð Bjarmason <avarab@gmail.com> @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git 1.8.3\n" +"Project-Id-Version: git 1.8.4\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" -"PO-Revision-Date: 2012-10-02 19:35+0200\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-07-28 18:42+0200\n" "Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n" "Language-Team: German <>\n" "Language: de\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "Hinweis: %.*s\n" @@ -26,21 +26,21 @@ msgstr "Hinweis: %.*s\n" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 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 "" -"Korrigieren Sie dies im Arbeitsbaum,\n" +"Korrigieren Sie dies im Arbeitsverzeichnis,\n" "und benutzen Sie dann 'git add/rm <Datei>'\n" -"um die Auflösung entsprechend zu markieren und einzutragen,\n" +"um die Auflösung entsprechend zu markieren und zu committen,\n" "oder benutzen Sie 'git commit -a'." #: archive.c:10 msgid "git archive [options] <tree-ish> [<path>...]" -msgstr "git archive [Optionen] <Versionsreferenz> [<Pfad>...]" +msgstr "git archive [Optionen] <Commit-Referenz> [<Pfad>...]" #: archive.c:11 msgid "git archive --list" @@ -50,12 +50,12 @@ msgstr "git archive --list" msgid "" "git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]" msgstr "" -"git archive --remote <Projektarchiv> [--exec <Programm>] [Optionen] " -"<Versionsreferenz> [Pfad...]" +"git archive --remote <Repository> [--exec <Programm>] [Optionen] <Commit-" +"Referenz> [Pfad...]" #: archive.c:13 msgid "git archive --remote <repo> [--exec <cmd>] --list" -msgstr "git archive --remote <Projektarchiv> [--exec <Programm>] --list" +msgstr "git archive --remote <Repository> [--exec <Programm>] --list" #: archive.c:323 msgid "fmt" @@ -63,27 +63,27 @@ msgstr "Format" #: archive.c:323 msgid "archive format" -msgstr "Ausgabeformat" +msgstr "Archivformat" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "Prefix" #: archive.c:325 msgid "prepend prefix to each pathname in the archive" -msgstr "stellt einen Präfix vor jeden Pfadnamen in der Ausgabe" +msgstr "stellt einen Präfix vor jeden Pfadnamen in dem Archiv" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "Datei" #: archive.c:327 builtin/archive.c:89 msgid "write the archive to this file" -msgstr "schreibt die Ausgabe in diese Datei" +msgstr "schreibt das Archiv in diese Datei" #: archive.c:329 msgid "read .gitattributes in working directory" @@ -107,17 +107,17 @@ msgstr "besser komprimieren" #: archive.c:343 msgid "list supported archive formats" -msgstr "listet unterstützte Ausgabeformate auf" +msgstr "listet unterstützte Archivformate auf" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" -msgstr "Projektarchiv" +msgstr "Repository" #: archive.c:346 builtin/archive.c:91 msgid "retrieve the archive from remote repository <repo>" -msgstr "ruft das Archiv von externem Projektarchiv <Projektarchiv> ab" +msgstr "ruft das Archiv von Remote-Repository <Repository> ab" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "Programm" @@ -136,88 +136,90 @@ msgstr "" #: branch.c:60 #, c-format msgid "Not setting branch %s as its own upstream." -msgstr "Zweig %s kann nicht sein eigener Ãœbernahmezweig sein." +msgstr "Branch %s kann nicht sein eigener Upstream-Branch sein." #: branch.c:82 #, c-format msgid "Branch %s set up to track remote branch %s from %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von externem Zweig %s von %s durch " -"Neuaufbau." +msgstr "" +"Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s durch Rebase." #: branch.c:83 #, c-format msgid "Branch %s set up to track remote branch %s from %s." -msgstr "Zweig %s konfiguriert zum Folgen von externem Zweig %s von %s." +msgstr "Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s." #: branch.c:87 #, c-format msgid "Branch %s set up to track local branch %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von lokalem Zweig %s durch Neuaufbau." +msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s durch Rebase." #: branch.c:88 #, c-format msgid "Branch %s set up to track local branch %s." -msgstr "Zweig %s konfiguriert zum Folgen von lokalem Zweig %s." +msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s." #: branch.c:92 #, c-format msgid "Branch %s set up to track remote ref %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von externer Referenz %s durch " -"Neuaufbau." +msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s durch Rebase." #: branch.c:93 #, c-format msgid "Branch %s set up to track remote ref %s." -msgstr "Zweig %s konfiguriert zum Folgen von externer Referenz %s." +msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s." #: branch.c:97 #, c-format msgid "Branch %s set up to track local ref %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von lokaler Referenz %s durch " -"Neuaufbau." +msgstr "" +"Branch %s konfiguriert zum Folgen von lokaler Referenz %s durch Rebase." #: branch.c:98 #, c-format msgid "Branch %s set up to track local ref %s." -msgstr "Zweig %s konfiguriert zum Folgen von lokaler Referenz %s." +msgstr "Branch %s konfiguriert zum Folgen von lokaler Referenz %s." #: branch.c:118 #, c-format msgid "Tracking not set up: name too long: %s" -msgstr "Konfiguration zum Folgen von Zweig nicht eingerichtet. Name zu lang: %s" +msgstr "" +"Konfiguration zum Folgen von Branch nicht eingerichtet. Name zu lang: %s" #: branch.c:137 #, c-format msgid "Not tracking: ambiguous information for ref %s" -msgstr "Konfiguration zum Folgen von Zweig nicht eingerichtet. Referenz %s ist mehrdeutig." +msgstr "" +"Konfiguration zum Folgen von Branch nicht eingerichtet. Referenz %s ist " +"mehrdeutig." #: branch.c:182 #, c-format msgid "'%s' is not a valid branch name." -msgstr "'%s' ist kein gültiger Zweigname." +msgstr "'%s' ist kein gültiger Branchname." #: branch.c:187 #, c-format msgid "A branch named '%s' already exists." -msgstr "Zweig '%s' existiert bereits." +msgstr "Branch '%s' existiert bereits." #: branch.c:195 msgid "Cannot force update the current branch." -msgstr "Kann Aktualisierung des aktuellen Zweiges nicht erzwingen." +msgstr "Kann Aktualisierung des aktuellen Branches nicht erzwingen." -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "" -"Kann Informationen zum Ãœbernahmezweig nicht einrichten; Startpunkt '%s' ist " -"kein Zweig." +"Kann Tracking-Informationen nicht einrichten; Startpunkt '%s' ist kein " +"Branch." -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" -msgstr "der angeforderte externe Ãœbernahmezweig '%s' existiert nicht" +msgstr "der angeforderte Upstream-Branch '%s' existiert nicht" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -229,35 +231,35 @@ msgid "" "\"git push -u\" to set the upstream config as you push." msgstr "" "\n" -"Falls Sie vorhaben, Ihre Arbeit auf einem bereits existierenden,\n" -"externen Ãœbernahmezweig aufzubauen, sollten Sie \"git fetch\"\n" +"Falls Sie vorhaben, Ihre Arbeit auf einem bereits existierenden\n" +"Upstream-Branch aufzubauen, sollten Sie \"git fetch\"\n" "ausführen, um diesen abzurufen.\n" "\n" -"Falls Sie vorhaben, einen neuen lokalen Zweig zu versenden\n" +"Falls Sie vorhaben, einen neuen lokalen Branch zu versenden\n" "der seinem externen Gegenstück folgen soll, können Sie\n" -"\"git push -u\" verwenden, um den externen Ãœbernahmezweig\n" -"beim Versand zu konfigurieren." +"\"git push -u\" verwenden, um den Upstream-Branch beim \"push\"\n" +"zu konfigurieren." -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "Ungültiger Objekt-Name: '%s'" -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "mehrdeutiger Objekt-Name: '%s'" -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." -msgstr "Ungültiger Verzweigungspunkt: '%s'" +msgstr "Ungültiger Branchpunkt: '%s'" -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "Fehler beim Sperren der Referenz zur Aktualisierung." -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "Fehler beim Schreiben der Referenz." @@ -271,18 +273,18 @@ msgstr "'%s' sieht nicht wie eine v2 Paketdatei aus" msgid "unrecognized header: %s%s (%d)" msgstr "nicht erkannter Kopfbereich: %s%s (%d)" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "Konnte '%s' nicht öffnen" #: bundle.c:140 msgid "Repository lacks these prerequisite commits:" -msgstr "Dem Projektarchiv fehlen folgende vorausgesetzte Versionen:" +msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" msgstr "Einrichtung des Revisionsgangs fehlgeschlagen" @@ -308,7 +310,7 @@ msgstr[1] "Das Paket benötigt diese %d Referenzen:" msgid "rev-list died" msgstr "\"rev-list\" abgebrochen" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "nicht erkanntes Argument: %s" @@ -339,30 +341,30 @@ msgstr "kann '%s' nicht erstellen" msgid "index-pack died" msgstr "Erstellung der Paketindexdatei abgebrochen" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" msgstr "konnte %s nicht parsen" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" -msgstr "%s %s ist keine Version!" +msgstr "%s %s ist kein Commit!" #: compat/obstack.c:406 compat/obstack.c:408 msgid "memory exhausted" msgstr "Speicher verbraucht" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "Konnte 'git rev-list' nicht ausführen" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "Fehler beim Schreiben nach rev-list: %s" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe: %s" @@ -459,7 +461,7 @@ msgstr "" "Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n" "%s" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -468,7 +470,7 @@ msgstr "" "Fehler beim Parsen des --dirstat/-X Optionsparameters:\n" "%s" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'" @@ -510,20 +512,20 @@ msgstr "'%s': %s" msgid "'%s': short read %s" msgstr "'%s': read() zu kurz %s" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "Vorhandene Git-Kommandos in '%s'" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "Vorhandene Git-Kommandos irgendwo in Ihrem $PATH" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "Die allgemein verwendeten Git-Kommandos sind:" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -532,11 +534,11 @@ msgstr "" "'%s' scheint ein git-Kommando zu sein, konnte aber\n" "nicht ausgeführt werden. Vielleicht ist git-%s fehlerhaft?" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "Uh oh. Keine Git-Kommandos auf Ihrem System vorhanden." -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -545,17 +547,17 @@ msgstr "" "Warnung: Sie haben das nicht existierende Git-Kommando '%s' ausgeführt.\n" "Setze fort unter der Annahme, dass Sie '%s' gemeint haben" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "automatisch in %0.1f Sekunden..." -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: '%s' ist kein Git-Kommando. Siehe 'git --help'." -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -569,89 +571,94 @@ msgstr[1] "" "\n" "Haben Sie eines von diesen gemeint?" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "%s: %s - %s" + #: merge.c:56 msgid "failed to read the cache" msgstr "Lesen des Zwischenspeichers fehlgeschlagen" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" -msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." +msgstr "Konnte neue Staging-Area-Datei nicht schreiben." #: merge-recursive.c:190 #, c-format msgid "(bad commit)\n" -msgstr "(ungültige Version)\n" +msgstr "(ungültiger Commit)\n" #: merge-recursive.c:206 #, c-format msgid "addinfo_cache failed for path '%s'" msgstr "addinfo_cache für Pfad '%s' fehlgeschlagen" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" -msgstr "Fehler beim Erstellen der Bäume" +msgstr "Fehler beim Erstellen der \"Tree\"-Objekte" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "Fehler beim Erstellen des Pfades '%s'%s" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "Entferne %s um Platz für Unterverzeichnis zu schaffen\n" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "verweigere, da unbeobachtete Dateien in '%s' verloren gehen würden" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "kann Objekt %s '%s' nicht lesen" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "Blob erwartet für %s '%s'" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "Fehler beim Öffnen von '%s'" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" -msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s'" +msgstr "Fehler beim Erstellen eines symbolischen Verweises für '%s'" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "weiß nicht was mit %06o %s '%s' zu machen ist" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" -msgstr "Fehler bei Ausführung der internen Zusammenführung" +msgstr "Fehler bei Ausführung des internen Merges" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "Konnte %s nicht zur Datenbank hinzufügen" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" -msgstr "nicht unterstützter Objekttyp im Baum" +msgstr "nicht unterstützter Objekttyp im Verzeichnis" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -660,7 +667,7 @@ msgstr "" "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde " "im Arbeitsbereich gelassen." -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -669,174 +676,197 @@ msgstr "" "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde " "im Arbeitsbereich bei %s gelassen." -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "umbenennen" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "umbenannt" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu" -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" "\"->\"%s\" in \"%s\"%s" msgstr "" -"KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Zweig \"%s\" " -"und \"%s\"->\"%s\" in Zweig \"%s\"%s" +"KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" " +"und \"%s\"->\"%s\" in Branch \"%s\"%s" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr " (bleibt unaufgelöst)" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" "KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s " "in %s" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "Benenne stattdessen %s nach %s und %s nach %s um" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "" "KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in " "%s" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "Füge zusammengeführte Datei %s hinzu" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "Füge stattdessen als %s hinzu" -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "kann Objekt %s nicht lesen" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "Objekt %s ist kein Blob" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "ändern" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "geändert" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "Inhalt" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "hinzufügen/hinzufügen" -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" -msgstr "%s ausgelassen (Ergebnis der Zusammenführung existiert bereits)" +msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" -msgstr "automatische Zusammenführung von %s" +msgstr "automatischer Merge von %s" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" -msgstr "Unterprojekt" +msgstr "Submodul" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" -msgstr "KONFLIKT (%s): Zusammenführungskonflikt in %s" +msgstr "KONFLIKT (%s): Merge-Konflikt in %s" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "Entferne %s" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "Datei/Verzeichnis" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "Verzeichnis/Datei" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" "KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s " "hinzu." -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "Füge %s hinzu" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." -msgstr "Fataler Fehler bei der Zusammenführung. Sollte nicht passieren." +msgstr "Fataler Merge-Fehler. Sollte nicht passieren." -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "Bereits aktuell!" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" -msgstr "Zusammenführen der Bäume %s und %s fehlgeschlagen" +msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "unverarbeiteter Pfad??? %s" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" -msgstr "Zusammenführung:" +msgstr "Merge:" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" -msgstr[0] "%u gemeinsamen Vorfahren gefunden" -msgstr[1] "%u gemeinsame Vorfahren gefunden" +msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden" +msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" -msgstr "Zusammenführung hat keine Version zurückgegeben" +msgstr "Merge hat keinen Commit zurückgegeben" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "Konnte Objekt '%s' nicht parsen." -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." -msgstr "Konnte Bereitstellung nicht schreiben." +msgstr "Konnte Staging-Area nicht schreiben." + +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" +"Kann uninitialisiertes/unreferenzierte Notiz-Verzeichnis nicht committen." + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "Ungültiger notes.rewriteMode Wert: '%s'" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" +"Umschreiben der Notizen in %s zurückgewiesen (außerhalb von refs/notes/)" -#: object.c:195 +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Ungültiger %s Wert: '%s'" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "Konnte Objekt '%s' nicht parsen." @@ -869,41 +899,40 @@ msgstr "-NUM" #: pathspec.c:83 #, c-format msgid "Path '%s' is in submodule '%.*s'" -msgstr "Pfad '%s' befindet sich in Unterprojekt '%.*s'" +msgstr "Pfad '%s' befindet sich in Submodul '%.*s'" #: pathspec.c:99 #, c-format msgid "'%s' is beyond a symbolic link" -msgstr "'%s' ist über einem symbolischen Link" +msgstr "'%s' ist hinter einem symbolischen Verweis" -#: remote.c:1781 +#: remote.c:1788 #, 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] "Ihr Zweig ist vor '%s' um %d Version.\n" -msgstr[1] "Ihr Zweig ist vor '%s' um %d Versionen.\n" +msgstr[0] "Ihr Branch ist vor '%s' um %d Commit.\n" +msgstr[1] "Ihr Branch ist vor '%s' um %d Commits.\n" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" -msgstr " (benutzen Sie \"git push\" um lokalen Versionen herauszubringen)\n" +msgstr " (benutzen Sie \"git push\" um lokale Commits zu publizieren)\n" -#: remote.c:1790 +#: remote.c:1797 #, 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] "" -"Ihr Zweig ist zu '%s' um %d Version hinterher, und kann vorgespult werden.\n" +"Ihr Branch ist zu '%s' um %d Commit hinterher, und kann vorgespult werden.\n" msgstr[1] "" -"Ihr Zweig ist zu '%s' um %d Versionen hinterher, und kann vorgespult " -"werden.\n" +"Ihr Branch ist zu '%s' um %d Commits hinterher, und kann vorgespult werden.\n" -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr "" -" (benutzen Sie \"git pull\" um Ihren lokalen Zweig zu aktualisieren)\n" +" (benutzen Sie \"git pull\" um Ihren lokalen Branch zu aktualisieren)\n" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -912,26 +941,35 @@ msgid_plural "" "Your branch and '%s' have diverged,\n" "and have %d and %d different commits each, respectively.\n" msgstr[0] "" -"Ihr Zweig und '%s' sind divergiert,\n" -"und haben jeweils %d und %d unterschiedliche Versionen.\n" +"Ihr Branch und '%s' sind divergiert,\n" +"und haben jeweils %d und %d unterschiedliche Commits.\n" msgstr[1] "" -"Ihr Zweig und '%s' sind divergiert,\n" -"und haben jeweils %d und %d unterschiedliche Versionen.\n" +"Ihr Branch und '%s' sind divergiert,\n" +"und haben jeweils %d und %d unterschiedliche Commits.\n" -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr "" -" (benutzen Sie \"git pull\" um Ihren Zweig mit dem externen " +" (benutzen Sie \"git pull\" um Ihren Branch mit dem Remote-Branch " "zusammenzuführen)\n" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "Öffnen von /dev/null fehlgeschlagen" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "dup2(%d,%d) fehlgeschlagen" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "Konnte '%s' nicht zum Schreiben öffnen." -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "Konnte nicht nach '%s' schreiben." @@ -954,7 +992,7 @@ msgstr "" "mit 'git add <Pfade>' oder 'git rm <Pfade>'und tragen Sie das Ergebnis mit\n" "'git commit' ein" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "Konnte nicht nach %s schreiben" @@ -979,396 +1017,421 @@ msgstr "" "Tragen Sie Ihre Änderungen ein oder benutzen Sie \"stash\" um fortzufahren." #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" -msgstr "%s: Konnte neue Bereitstellungsdatei nicht schreiben" +msgstr "%s: Konnte neue Staging-Area-Datei nicht schreiben" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" -msgstr "Konnte Version der Zweigspitze (HEAD) nicht auflösen\n" +msgstr "Konnte Commit von HEAD nicht auflösen\n" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" -msgstr "Konnte zwischengespeicherten Baum nicht aktualisieren\n" +msgstr "Konnte Cache-Verzeichnis nicht aktualisieren\n" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" -msgstr "Konnte Version %s nicht parsen\n" +msgstr "Konnte Commit %s nicht parsen\n" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" -msgstr "Konnte Elternversion %s nicht parsen\n" +msgstr "Konnte Eltern-Commit %s nicht parsen\n" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." -msgstr "Ihre Bereitstellungsdatei ist nicht zusammengeführt." +msgstr "Ihre Staging-Area-Datei ist nicht zusammengeführt." -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." -msgstr "" -"Version %s ist eine Zusammenführung, aber die Option -m wurde nicht " -"angegeben." +msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben." -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" -msgstr "Version %s hat keinen Elternteil %d" +msgstr "Commit %s hat keinen Elternteil %d" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." -msgstr "" -"Hauptlinie wurde spezifiziert, aber Version %s ist keine Zusammenführung." +msgstr "Hauptlinie wurde spezifiziert, aber Commit %s ist kein Merge." #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" -msgstr "%s: kann Elternversion %s nicht parsen" +msgstr "%s: kann Eltern-Commit %s nicht parsen" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" -msgstr "Kann keine Versionsbeschreibung für %s bekommen" +msgstr "Kann keine Commit-Beschreibung für %s bekommen" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" -msgstr "Konnte %s nicht zurücknehmen... %s" +msgstr "Konnte \"revert\" nicht auf %s ausführen... %s" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "Konnte %s nicht anwenden... %s" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" -msgstr "leere Menge von Versionen übergeben" +msgstr "leere Menge von Commits übergeben" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" -msgstr "git %s: Fehler beim Lesen der Bereitstellung" +msgstr "git %s: Fehler beim Lesen der Staging-Area" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" -msgstr "git %s: Fehler beim Aktualisieren der Bereitstellung" +msgstr "git %s: Fehler beim Aktualisieren der Staging-Area" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "Kann %s nicht während eines %s durchführen" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "Konnte Zeile %d nicht parsen." -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." -msgstr "Keine Versionen geparst." +msgstr "Keine Commits geparst." -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "Konnte %s nicht öffnen" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "Konnte %s nicht lesen." -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "Unbenutzbares Instruktionsblatt: %s" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "Ungültiger Schlüssel: %s" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "Ungültiger Wert für %s: %s" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "Fehlerhaftes Optionsblatt: %s" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "\"cherry-pick\" oder \"revert\" ist bereits im Gang" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "versuchen Sie \"git cherry-pick (--continue | --quit | --abort)\"" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "Konnte \"sequencer\"-Verzeichnis %s nicht erstellen" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "Fehler beim Einpacken von %s." -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "kein \"cherry-pick\" oder \"revert\" im Gang" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" -msgstr "kann Zweigspitze (HEAD) nicht auflösen" +msgstr "kann HEAD nicht auflösen" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" -msgstr "kann nicht abbrechen: bin auf einem Zweig, der noch geboren wird" +msgstr "kann nicht abbrechen: bin auf einem Branch, der noch geboren wird" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "Kann %s nicht öffnen: %s" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "Kann %s nicht lesen: %s" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "Unerwartetes Dateiende" -#: sequencer.c:916 +#: sequencer.c:926 #, 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" +msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "Konnte %s nicht formatieren." -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" -msgstr "%s: ungültige Revision" +msgstr "%s: ungültiger Commit" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" -msgstr "Rücknahme-Version kann nicht initial sein." +msgstr "Kann nicht als allerersten Commit einen Revert ausführen." -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" -msgstr "Kann \"cherry-pick\" nicht in einem leeren Zweig ausführen." +msgstr "Kann nicht als allerersten Commit einen Cherry-Pick ausführen." -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" +"Git erzeugt normalerweise keine Referenzen die mit\n" +"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n" +"Sie diese angeben. Diese Referenzen könnten aus Versehen\n" +"erzeugt worden sein. Zum Beispiel,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n" +"wurde. Bitte prüfen Sie diese Referenzen und löschen\n" +"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n" +"indem Sie \"git config advice.objectNameWarning false\"\n" +"ausführen." + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" -msgstr "Zweigspitze (HEAD) zeigt auf keinen Zweig" +msgstr "HEAD zeigt auf keinen Branch" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" -msgstr "Kein solcher Zweig '%s'" +msgstr "Kein solcher Branch '%s'" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" -msgstr "Kein entferntes Projektarchiv für Zweig '%s' konfiguriert." +msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert." -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" -msgstr "" -"Zweig '%s' des entfernten Projektarchivs ist kein gefolgter Ãœbernahmezweig" +msgstr "Upstream-Branch '%s' ist nicht als Remote-Tracking-Branch gespeichert" #: wrapper.c:408 #, c-format msgid "unable to access '%s': %s" msgstr "konnte nicht auf '%s' zugreifen: %s" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "konnte nicht auf '%s' zugreifen" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "konnte aktuellen Benutzer nicht in Passwort-Datei finden: %s" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "kein solcher Benutzer" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "Nicht zusammengeführte Pfade:" -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr "" -" (benutzen Sie \"git reset %s <Datei>...\" zum Herausnehmen aus der " -"Bereitstellung)" +" (benutzen Sie \"git reset %s <Datei>...\" zum Entfernen aus der Staging-" +"Area)" -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr "" -" (benutzen Sie \"git rm --cached <Datei>...\" zum Herausnehmen aus der " -"Bereitstellung)" +" (benutzen Sie \"git rm --cached <Datei>...\" zum Entfernen aus der Staging-" +"Area)" -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr "" " (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung zu markieren)" -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr "" " (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung entsprechend zu " "markieren)" -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr "" " (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung zu markieren)" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" -msgstr "zum Eintragen bereitgestellte Änderungen:" +msgstr "zum Commit vorgemerkte Änderungen:" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" -msgstr "Änderungen, die nicht zum Eintragen bereitgestellt sind:" +msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:" -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" -msgstr " (benutzen Sie \"git add <Datei>...\" zum Bereitstellen)" +msgstr "" +" (benutzen Sie \"git add <Datei>...\" um die Änderungen zum Commit " +"vorzumerken)" -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" -msgstr " (benutzen Sie \"git add/rm <Datei>...\" zum Bereitstellen)" +msgstr "" +" (benutzen Sie \"git add/rm <Datei>...\" um die Änderungen zum Commit " +"vorzumerken)" -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr "" " (benutzen Sie \"git checkout -- <Datei>...\" um die Änderungen im " "Arbeitsverzeichnis zu verwerfen)" -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" -" (tragen Sie ein oder verwerfen Sie den unbeobachteten oder geänderten " -"Inhalt in den Unterprojekten)" +" (committen oder verwerfen Sie den unbeobachteten oder geänderten Inhalt in " +"den Submodulen)" -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" -msgstr " (benutzen Sie \"git %s <Datei>...\" zum Einfügen in die Eintragung)" +msgstr "" +" (benutzen Sie \"git %s <Datei>...\" um die Änderungen zum Commit " +"vorzumerken)" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "Fehler" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "beide gelöscht:" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "von uns hinzugefügt:" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "von denen gelöscht:" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "von denen hinzugefügt:" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "von uns gelöscht:" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "von beiden hinzugefügt:" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "von beiden geändert:" -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " -msgstr "neue Versionen, " +msgstr "neue Commits, " -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "geänderter Inhalt, " -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "unbeobachteter Inhalt, " -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "neue Datei: %s" -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "kopiert: %s -> %s" -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "gelöscht: %s" -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "geändert: %s" -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "umbenannt: %s -> %s" -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "Typänderung: %s" -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "unbekannt: %s" -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "nicht zusammengeführt: %s" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "Fehler: unbehandelter Differenz-Status %c" @@ -1377,18 +1440,17 @@ msgstr "Fehler: unbehandelter Differenz-Status %c" msgid "You have unmerged paths." msgstr "Sie haben nicht zusammengeführte Pfade." -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr " (beheben Sie die Konflikte und führen Sie \"git commit\" aus)" #: wt-status.c:809 msgid "All conflicts fixed but you are still merging." -msgstr "" -"Alle Konflikte sind behoben, aber Sie sind immer noch beim Zusammenführen." +msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge." #: wt-status.c:812 msgid " (use \"git commit\" to conclude merge)" -msgstr " (benutzen Sie \"git commit\" um die Zusammenführung abzuschließen)" +msgstr " (benutzen Sie \"git commit\" um den Merge abzuschließen)" #: wt-status.c:822 msgid "You are in the middle of an am session." @@ -1399,28 +1461,28 @@ msgid "The current patch is empty." msgstr "Der aktuelle Patch ist leer." #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" msgstr "" -" (beheben Sie die Konflikte und führen Sie dann \"git am --resolved\" aus)" +" (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)" #: wt-status.c:831 msgid " (use \"git am --skip\" to skip this patch)" -msgstr " (benutzen Sie \"git am --skip\" um diesen Patch auszulassen)" +msgstr " (benutzen Sie \"git am --skip\" um diesen Patch auszulassen)" #: wt-status.c:833 msgid " (use \"git am --abort\" to restore the original branch)" msgstr "" -" (benutzen Sie \"git am --abort\" um den ursprünglichen Zweig " +" (benutzen Sie \"git am --abort\" um den ursprünglichen Branch " "wiederherzustellen)" #: wt-status.c:893 wt-status.c:910 #, c-format msgid "You are currently rebasing branch '%s' on '%s'." -msgstr "Sie sind gerade beim Neuaufbau von Zweig '%s' auf '%s'." +msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'." #: wt-status.c:898 wt-status.c:915 msgid "You are currently rebasing." -msgstr "Sie sind gerade beim Neuaufbau." +msgstr "Sie sind gerade beim Rebase." #: wt-status.c:901 msgid " (fix conflicts and then run \"git rebase --continue\")" @@ -1435,7 +1497,7 @@ msgstr " (benutzen Sie \"git rebase --skip\" um diesen Patch auszulassen)" #: wt-status.c:905 msgid " (use \"git rebase --abort\" to check out the original branch)" msgstr "" -" (benutzen Sie \"git rebase --abort\" um den ursprünglichen Zweig " +" (benutzen Sie \"git rebase --abort\" um den ursprünglichen Branch " "auszuchecken)" #: wt-status.c:918 @@ -1447,34 +1509,34 @@ msgstr " (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)" msgid "" "You are currently splitting a commit while rebasing branch '%s' on '%s'." msgstr "" -"Sie teilen gerade eine Version auf, während ein Neuaufbau von Zweig '%s' auf " +"Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf " "'%s' im Gange ist." #: wt-status.c:927 msgid "You are currently splitting a commit during a rebase." -msgstr "Sie teilen gerade eine Version während eines Neuaufbaus auf." +msgstr "Sie teilen gerade einen Commit während eines Rebase auf." #: wt-status.c:930 msgid " (Once your working directory is clean, run \"git rebase --continue\")" msgstr "" -" (Sobald Ihr Arbeitsverzeichnis sauber ist, führen Sie \"git rebase --" +" (Sobald Ihr Arbeitsverzeichnis unverändert ist, führen Sie \"git rebase --" "continue\" aus)" #: wt-status.c:934 #, c-format msgid "You are currently editing a commit while rebasing branch '%s' on '%s'." msgstr "" -"Sie editieren gerade eine Version während eines Neuaufbaus von Zweig '%s' " -"auf '%s'." +"Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf " +"'%s'." #: wt-status.c:939 msgid "You are currently editing a commit during a rebase." -msgstr "Sie editieren gerade eine Version während eines Neuaufbaus." +msgstr "Sie editieren gerade einen Commit während eines Rebase." #: wt-status.c:942 msgid " (use \"git commit --amend\" to amend the current commit)" msgstr "" -" (benutzen Sie \"git commit --amend\" um die aktuelle Version nachzubessern)" +" (benutzen Sie \"git commit --amend\" um den aktuellen Commit nachzubessern)" #: wt-status.c:944 msgid "" @@ -1487,74 +1549,91 @@ msgstr "" msgid "You are currently cherry-picking." msgstr "Sie führen gerade \"cherry-pick\" aus." +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr "" +" (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue" +"\" aus)" + #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" -msgstr " (alle Konflikte behoben: führen Sie \"git commit\" aus)" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr "" +" (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)" + +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" +msgstr "" +" (benutzen Sie \"git cherry-pick --abort\" um die Cherry-Pick-Operation " +"abzubrechen)" -#: wt-status.c:970 +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." -msgstr "Sie nehmen gerade Version '%s' zurück." +msgstr "Sie sind gerade an einem Revert von Commit '%s'." -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr "" " (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" " "aus)" -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr " (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)" -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr "" -" (benutzen Sie \"git revert --abort\" um die Umkehroperation abzubrechen)" +" (benutzen Sie \"git revert --abort\" um die Revert-Operation abzubrechen)" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." -msgstr "Sie sind gerade bei einer binären Suche, gestartet von Zweig '%s'." +msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'." -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "Sie sind gerade bei einer binären Suche." -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" -" (benutzen Sie \"git bisect reset\" um zum ursprünglichen Zweig " +" (benutzen Sie \"git bisect reset\" um zum ursprünglichen Branch " "zurückzukehren)" #: wt-status.c:1173 msgid "On branch " -msgstr "Auf Zweig " +msgstr "Auf Branch " + +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "Rebase im Gange; auf " -#: wt-status.c:1184 +#: wt-status.c:1187 msgid "HEAD detached at " -msgstr "Zweigspitze (HEAD) losgelöst bei " +msgstr "HEAD losgelöst bei " -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " -msgstr "Zweigspitze (HEAD) losgelöst von " +msgstr "HEAD losgelöst von " -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." -msgstr "Im Moment auf keinem Zweig." +msgstr "Im Moment auf keinem Branch." -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" -msgstr "Initiale Version" +msgstr "Initialer Commit" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "Unbeobachtete Dateien" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "Ignorierte Dateien" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1565,90 +1644,90 @@ msgstr "" "'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n" "neue Dateien selbstständig hinzuzufügen (siehe 'git help status')." -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "Unbeobachtete Dateien nicht aufgelistet%s" -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr " (benutzen Sie die Option -u um unbeobachteten Dateien anzuzeigen)" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "Keine Änderungen" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" -"keine Änderungen zum Eintragen hinzugefügt (benutzen Sie \"git add\" und/" -"oder \"git commit -a\")\n" +"keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder " +"\"git commit -a\")\n" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" -msgstr "keine Änderungen zum Eintragen hinzugefügt\n" +msgstr "keine Änderungen zum Commit vorgemerkt\n" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " "track)\n" msgstr "" -"nichts zum Eintragen hinzugefügt, aber es gibt unbeobachtete Dateien " -"(benutzen Sie \"git add\" zum Beobachten)\n" +"nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien (benutzen " +"Sie \"git add\" zum Beobachten)\n" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" -msgstr "nichts zum Eintragen hinzugefügt, aber es gibt unbeobachtete Dateien\n" +msgstr "nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien\n" -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "" -"nichts einzutragen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git add" -"\" zum Beobachten)\n" +"nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git " +"add\" zum Beobachten)\n" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" -msgstr "nichts einzutragen\n" +msgstr "nichts zu committen\n" -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "" -"nichts einzutragen (benutzen Sie die Option -u, um unbeobachtete Dateien " +"nichts zu committen (benutzen Sie die Option -u, um unbeobachtete Dateien " "anzuzeigen)\n" -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" -msgstr "nichts einzutragen, Arbeitsverzeichnis sauber\n" +msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" -msgstr "HEAD (kein Zweig)" +msgstr "HEAD (kein Branch)" -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " -msgstr "Initiale Version auf " +msgstr "Initialer Commit auf " -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "hinterher " -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "voraus " -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr ", hinterher " -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "Konnte '%s' nicht entfernen." @@ -1724,11 +1803,9 @@ msgstr "" "dieser Version von Git ignoriert.\n" "\n" "* 'git add --ignore-removal <Pfadspezifikation>', was der aktuelle\n" -" Standardwert ist, ignoriert gelöschte Pfade im Arbeitsverzeichnis." -"\n" +" Standardwert ist, ignoriert gelöschte Pfade im Arbeitsverzeichnis.\n" "* 'git add --all <Pfadspezifikation>' berücksichtigt ebenfalls gelöschte\n" -" Pfade." -"\n" +" Pfade.\n" "Führen Sie 'git status' aus, um die gelöschten Pfade zu überprüfen.\n" #: builtin/add.c:144 @@ -1736,7 +1813,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "unerwarteter Differenz-Status %c" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "Aktualisierung der Dateien fehlgeschlagen" @@ -1748,147 +1825,146 @@ msgstr "lösche '%s'\n" #: builtin/add.c:253 msgid "Unstaged changes after refreshing the index:" msgstr "" -"Nicht bereitgestellte Änderungen nach Aktualisierung der Bereitstellung:" +"Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein" #: builtin/add.c:339 msgid "Could not read the index" -msgstr "Konnte die Bereitstellung nicht lesen" +msgstr "Konnte die Staging-Area nicht lesen" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "Konnte '%s' nicht zum Schreiben öffnen." -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "Konnte Patch nicht schreiben" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "Konnte Verzeichnis '%s' nicht lesen" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "Leerer Patch. Abgebrochen." -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "Konnte '%s' nicht anwenden." -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" "Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien " "ignoriert:\n" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "Probelauf" -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "erweiterte Ausgaben" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "interaktives Auswählen" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" -msgstr "interaktiv Bereiche auswählen" +msgstr "Blöcke interaktiv auswählen" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "aktuelle Unterschiede editieren und anwenden" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "erlaubt das Hinzufügen andernfalls ignorierter Dateien" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "aktualisiert beobachtete Dateien" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "speichert nur, dass der Pfad später hinzugefügt werden soll" -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "" "fügt Änderungen von allen beobachteten und unbeobachteten Dateien hinzu" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" -msgstr "ignoriert gelöschte Pfade im Arbeitsverzeichnis (genau wie " -"--no-all)" +msgstr "ignoriert gelöschte Pfade im Arbeitsverzeichnis (genau wie --no-all)" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" -msgstr "fügt nichts hinzu, aktualisiert nur die Bereitstellung" +msgstr "fügt nichts hinzu, aktualisiert nur die Staging-Area" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "" "überspringt Dateien, die aufgrund von Fehlern nicht hinzugefügt werden " "konnten" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "prüft ob - auch fehlende - Dateien im Probelauf ignoriert werden" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "Verwenden Sie -f wenn Sie diese wirklich hinzufügen möchten.\n" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "keine Dateien hinzugefügt" -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "Hinzufügen von Dateien fehlgeschlagen" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "Die Optionen -A und -u sind zueinander inkompatibel." -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "" "Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden." -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "Nichts spezifiziert, nichts hinzugefügt.\n" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Wollten Sie vielleicht 'git add .' sagen?\n" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" -msgstr "Bereitstellungsdatei beschädigt" +msgstr "Staging-Area-Datei beschädigt" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" -msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." +msgstr "Konnte neue Staging-Area-Datei nicht schreiben." #: builtin/apply.c:57 msgid "git apply [options] [<patch>...]" @@ -1897,12 +1973,12 @@ msgstr "git apply [Optionen] [<Patch>...]" #: builtin/apply.c:110 #, c-format msgid "unrecognized whitespace option '%s'" -msgstr "nicht erkannte Option für Leerzeichen: '%s'" +msgstr "nicht erkannte Whitespace-Option: '%s'" #: builtin/apply.c:125 #, c-format msgid "unrecognized whitespace ignore option '%s'" -msgstr "nicht erkannte Option zum Ignorieren von Leerzeichen: '%s'" +msgstr "nicht erkannte Option zum Ignorieren von Whitespace: '%s'" #: builtin/apply.c:823 #, c-format @@ -2015,7 +2091,7 @@ msgstr "Patch mit nutzlosen Informationen bei Zeile %d" #: builtin/apply.c:2076 #, c-format msgid "unable to read symlink %s" -msgstr "konnte symbolische Verknüpfung %s nicht lesen" +msgstr "konnte symbolischen Verweis %s nicht lesen" #: builtin/apply.c:2080 #, c-format @@ -2075,319 +2151,315 @@ msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld" msgid "cannot checkout %s" msgstr "kann %s nicht auschecken" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "Konnte %s nicht lesen" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "Pfad %s wurde umbenannt/gelöscht" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" -msgstr "%s ist nicht bereitgestellt" +msgstr "%s ist nicht in der Staging-Area" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" -msgstr "%s entspricht nicht der Bereitstellung" +msgstr "%s entspricht nicht der Version in der Staging-Area" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "Lösch-Patch hinterlässt Dateiinhalte" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "%s: falscher Typ" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "%s ist vom Typ %o, erwartete %o" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "%s ist bereits bereitgestellt" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "%s existiert bereits im Arbeitsverzeichnis" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "%s: Patch konnte nicht angewendet werden" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "Prüfe Patch %s..." -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" -msgstr "konnte %s nicht aus der Bereitstellung entfernen" +msgstr "konnte %s nicht aus der Staging-Area entfernen" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" -msgstr "fehlerhafter Patch für Unterprojekt %s" +msgid "corrupt patch for submodule %s" +msgstr "fehlerhafter Patch für Submodul %s" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "konnte neu erstellte Datei '%s' nicht lesen" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "schließe Datei '%s'" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "konnte Datei '%s' mit Modus %o nicht schreiben" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "Patch %s sauber angewendet" -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "interner Fehler" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..." msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..." -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "Verkürze Name von .rej Datei zu %.*s.rej" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "Patch-Bereich #%d sauber angewendet." -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." -msgstr "Patch-Bereich #%d zurückgewiesen." +msgstr "Patch-Block #%d zurückgewiesen." -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "nicht erkannte Eingabe" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" -msgstr "Konnte Bereitstellungsdatei nicht lesen" +msgstr "Konnte Staging-Area-Datei nicht lesen" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "Pfad" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "wendet keine Änderungen im angegebenen Pfad an" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "wendet Änderungen nur im angegebenen Pfad an" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "Anzahl" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "" "entfernt <Anzahl> vorangestellte Schrägstriche von herkömmlichen " "Differenzpfaden" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "ignoriert hinzugefügte Zeilen des Patches" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "" "anstatt der Anwendung des Patches, wird der \"diffstat\" für die Eingabe " "ausgegeben" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "" "zeigt die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "" "anstatt der Anwendung des Patches, wird eine Zusammenfassung für die Eingabe " "ausgegeben" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "" "anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "" -"stellt sicher, dass der Patch in der aktuellen Bereitstellung angewendet " +"stellt sicher, dass der Patch in der aktuellen Staging-Area angewendet " "werden kann" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" -msgstr "wendet einen Patch an, ohne Änderungen im Arbeitszweig vorzunehmen" +msgstr "" +"wendet einen Patch an, ohne Änderungen im Arbeitsverzeichnis vorzunehmen" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "wendet den Patch an (Benutzung mit --stat/--summary/--check)" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" -msgstr "" -"versucht 3-Wege-Zusammenführung, wenn der Patch nicht angewendet werden " -"konnte" +msgstr "versucht 3-Wege-Merge, wenn der Patch nicht angewendet werden konnte" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "" -"erstellt eine temporäre Bereitstellung basierend auf den integrierten " -"Bereitstellungsinformationen" +"erstellt eine temporäre Staging-Area basierend auf den integrierten Staging-" +"Area-Informationen" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "Pfade sind getrennt durch NUL Zeichen" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "stellt sicher, dass mindestens <n> Zeilen des Kontextes übereinstimmen" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "Aktion" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" -msgstr "ermittelt neue oder geänderte Zeilen die Fehler in Leerzeichen haben" +msgstr "ermittelt neue oder geänderte Zeilen die Whitespace-Fehler haben" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" -msgstr "ignoriert Änderungen in Leerzeichen bei der Suche des Kontextes" +msgstr "ignoriert Änderungen im Whitespace bei der Suche des Kontextes" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "wendet den Patch in umgekehrter Reihenfolge an" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "erwartet keinen Kontext" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "" -"hinterlässt zurückgewiesene Patch-Bereiche in den entsprechenden *.rej " -"Dateien" +"hinterlässt zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" -msgstr "erlaubt sich überlappende Patch-Bereiche" +msgstr "erlaubt sich überlappende Patch-Blöcke" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "toleriert fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" -msgstr "vertraut nicht den Zeilennummern im Kopf des Patch-Bereiches" +msgstr "vertraut nicht den Zeilennummern im Kopf des Patch-Blocks" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "Wurzelverzeichnis" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "stellt <Wurzelverzeichnis> vor alle Dateinamen" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "" -"Die Option --3way kann nicht außerhalb eines Projektarchivs verwendet werden." +"Die Option --3way kann nicht außerhalb eines Repositories verwendet werden." -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "" -"Die Option --index kann nicht außerhalb eines Projektarchivs verwendet " -"werden." +"Die Option --index kann nicht außerhalb eines Repositories verwendet werden." -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "" -"Die Option --cached kann nicht außerhalb eines Projektarchivs verwendet " -"werden." +"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden." -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "kann Patch '%s' nicht öffnen" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" -msgstr[0] "unterdrückte %d Fehler in Leerzeichen" -msgstr[1] "unterdrückte %d Fehler in Leerzeichen" +msgstr[0] "unterdrückte %d Whitespace-Fehler" +msgstr[1] "unterdrückte %d Whitespace-Fehler" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." -msgstr[0] "%d Zeile fügt Fehler in Leerzeichen hinzu." -msgstr[1] "%d Zeilen fügen Fehler in Leerzeichen hinzu." +msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu." +msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu." #: builtin/archive.c:17 #, c-format @@ -2434,106 +2506,106 @@ msgstr "führt 'git bisect next' aus" #: builtin/bisect--helper.c:19 msgid "update BISECT_HEAD instead of checking out the current commit" -msgstr "aktualisiert BISECT_HEAD, anstatt die aktuelle Version auszuchecken" +msgstr "aktualisiert BISECT_HEAD, anstatt den aktuellen Commit auszuchecken" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "git blame [Optionen] [rev-opts] [rev] [--] Datei" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "[rev-opts] sind dokumentiert in git-rev-list(1)" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "Zeigt \"blame\"-Einträge schrittweise, während wir sie generieren" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" -msgstr "Zeigt leere SHA-1 für Grenzversionen (Standard: aus)" +msgstr "Zeigt leere SHA-1 für Grenz-Commits (Standard: aus)" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" -msgstr "Behandelt Ursprungsversionen nicht als Grenzen (Standard: aus)" +msgstr "Behandelt Ursprungs-Commit nicht als Grenzen (Standard: aus)" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "Zeigt Statistiken zum Arbeitsaufwand" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "Zeigt Ausgabebewertung für \"blame\"-Einträge" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "Zeigt ursprünglichen Dateinamen (Standard: auto)" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "Zeigt ursprüngliche Zeilennummer (Standard: aus)" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "Anzeige in einem Format für maschinelle Auswertung" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "" -"Anzeige in Format für Fremdprogramme mit Versionsinformationen pro Zeile" +"Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "Benutzt den gleichen Ausgabemodus wie \"git-annotate\" (Standard: aus)" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "Zeigt unbearbeiteten Zeitstempel (Standard: aus)" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" -msgstr "Zeigt langen Versions-SHA1 (Standard: aus)" +msgstr "Zeigt langen Commit-SHA1 (Standard: aus)" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "Unterdrückt den Namen des Autors und den Zeitstempel (Standard: aus)" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "Zeigt anstatt des Namens die Email-Adresse des Autors (Standard: aus)" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" -msgstr "Ignoriert Unterschiede in Leerzeichen" +msgstr "Ignoriert Unterschiede im Whitespace" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "arbeite länger, um bessere Ãœbereinstimmungen zu finden" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" -msgstr "Benutzt Revisionen von <Datei> anstatt \"git-rev-list\" aufzurufen" +msgstr "Benutzt Commits von <Datei> anstatt \"git-rev-list\" aufzurufen" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "Benutzt Inhalte der <Datei>en als entgültiges Abbild" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "Bewertung" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "Findet kopierte Zeilen innerhalb oder zwischen Dateien" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "Findet verschobene Zeilen innerhalb oder zwischen Dateien" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "Verarbeitet nur Zeilen im Bereich n,m, gezählt von 1" @@ -2543,15 +2615,15 @@ msgstr "git branch [Optionen] [-r | -a] [--merged | --no-merged]" #: builtin/branch.c:25 msgid "git branch [options] [-l] [-f] <branchname> [<start-point>]" -msgstr "git branch [Optionen] [-l] [-f] <Zweigname> [<Startpunkt>]" +msgstr "git branch [Optionen] [-l] [-f] <Branchname> [<Startpunkt>]" #: builtin/branch.c:26 msgid "git branch [options] [-r] (-d | -D) <branchname>..." -msgstr "git branch [Optionen] [-r] (-d | -D) <Zweigname>..." +msgstr "git branch [Optionen] [-r] (-d | -D) <Branchname>..." #: builtin/branch.c:27 msgid "git branch [options] (-m | -M) [<oldbranch>] <newbranch>" -msgstr "git branch [Optionen] (-m | -M) [<alterZweig>] <neuerZweig>" +msgstr "git branch [Optionen] (-m | -M) [<alterBranch>] <neuerBranch>" #: builtin/branch.c:150 #, c-format @@ -2559,9 +2631,8 @@ 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." +"entferne Branch '%s', der zusammengeführt wurde mit\n" +" '%s', aber noch nicht mit HEAD zusammengeführt wurde." #: builtin/branch.c:154 #, c-format @@ -2569,13 +2640,13 @@ msgid "" "not deleting branch '%s' that is not yet merged to\n" " '%s', even though it is merged to HEAD." msgstr "" -"entferne Zweig '%s' nicht, der noch nicht zusammengeführt wurde mit\n" -" '%s', obwohl er mit der Zweigspitze (HEAD) zusammengeführt wurde." +"entferne Branch '%s' nicht, der noch nicht zusammengeführt wurde mit\n" +" '%s', obwohl er mit HEAD zusammengeführt wurde." #: builtin/branch.c:168 #, c-format msgid "Couldn't look up commit object for '%s'" -msgstr "Konnte Versionsobjekt für '%s' nicht nachschlagen." +msgstr "Konnte Commit-Objekt für '%s' nicht nachschlagen." #: builtin/branch.c:172 #, c-format @@ -2583,8 +2654,8 @@ 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 Sie sicher sind diesen Zweig zu entfernen, führen Sie 'git branch -D " +"Der Branch '%s' ist nicht vollständig zusammengeführt.\n" +"Wenn Sie sicher sind diesen Branch zu entfernen, führen Sie 'git branch -D " "%s' aus." #: builtin/branch.c:185 @@ -2597,48 +2668,48 @@ msgstr "kann -a nicht mit -d benutzen" #: builtin/branch.c:219 msgid "Couldn't look up commit object for HEAD" -msgstr "Konnte Versionsobjekt für Zweigspitze (HEAD) nicht nachschlagen." +msgstr "Konnte Commit-Objekt für HEAD nicht nachschlagen." #: builtin/branch.c:227 #, c-format msgid "Cannot delete the branch '%s' which you are currently on." msgstr "" -"Kann Zweig '%s' nicht entfernen, da Sie sich gerade auf diesem befinden." +"Kann Branch '%s' nicht entfernen, da Sie sich gerade auf diesem befinden." #: builtin/branch.c:240 #, c-format msgid "remote branch '%s' not found." -msgstr "externer Zweig '%s' nicht gefunden" +msgstr "Remote-Branch '%s' nicht gefunden" #: builtin/branch.c:241 #, c-format msgid "branch '%s' not found." -msgstr "Zweig '%s' nicht gefunden." +msgstr "Branch '%s' nicht gefunden." #: builtin/branch.c:255 #, c-format msgid "Error deleting remote branch '%s'" -msgstr "Fehler beim Entfernen des externen Zweiges '%s'" +msgstr "Fehler beim Entfernen des Remote-Branches '%s'" #: builtin/branch.c:256 #, c-format msgid "Error deleting branch '%s'" -msgstr "Fehler beim Entfernen des Zweiges '%s'" +msgstr "Fehler beim Entfernen des Branches '%s'" #: builtin/branch.c:263 #, c-format msgid "Deleted remote branch %s (was %s).\n" -msgstr "Externer Zweig %s entfernt (war %s).\n" +msgstr "Remote-Branch %s entfernt (war %s).\n" #: builtin/branch.c:264 #, c-format msgid "Deleted branch %s (was %s).\n" -msgstr "Zweig %s entfernt (war %s).\n" +msgstr "Branch %s entfernt (war %s).\n" #: builtin/branch.c:366 #, c-format msgid "branch '%s' does not point at a commit" -msgstr "Zweig '%s' zeigt auf keine Version" +msgstr "Branch '%s' zeigt auf keinen Commit" #: builtin/branch.c:453 #, c-format @@ -2677,12 +2748,12 @@ msgstr " **** ungültige Referenz ****" #: builtin/branch.c:582 #, c-format msgid "(no branch, rebasing %s)" -msgstr "(kein Zweig, Neuaufbau von Zweig %s im Gange)" +msgstr "(kein Branch, Rebase von Branch %s im Gange)" #: builtin/branch.c:585 #, c-format msgid "(no branch, bisect started on %s)" -msgstr "(kein Zweig, Neuaufbau begonnen bei %s)" +msgstr "(kein Branch, binäre Suche begonnen bei %s)" #: builtin/branch.c:588 #, c-format @@ -2691,12 +2762,12 @@ msgstr "(losgelöst von %s)" #: builtin/branch.c:591 msgid "(no branch)" -msgstr "(kein Zweig)" +msgstr "(kein Branch)" #: builtin/branch.c:637 #, c-format msgid "object '%s' does not point to a commit" -msgstr "Objekt '%s' zeigt auf keine Version" +msgstr "Objekt '%s' zeigt auf keinen Commit" #: builtin/branch.c:669 msgid "some refs could not be read" @@ -2705,31 +2776,31 @@ msgstr "Konnte einige Referenzen nicht lesen" #: builtin/branch.c:682 msgid "cannot rename the current branch while not on any." msgstr "" -"Kann aktuellen Zweig nicht umbenennen, solange Sie sich auf keinem befinden." +"Kann aktuellen Branch nicht umbenennen, solange Sie sich auf keinem befinden." #: builtin/branch.c:692 #, c-format msgid "Invalid branch name: '%s'" -msgstr "Ungültiger Zweig-Name: '%s'" +msgstr "Ungültiger Branchname: '%s'" #: builtin/branch.c:707 msgid "Branch rename failed" -msgstr "Umbenennung des Zweiges fehlgeschlagen" +msgstr "Umbenennung des Branches fehlgeschlagen" #: builtin/branch.c:711 #, c-format msgid "Renamed a misnamed branch '%s' away" -msgstr "falsch benannten Zweig '%s' umbenannt" +msgstr "falsch benannten Branch '%s' umbenannt" #: builtin/branch.c:715 #, c-format msgid "Branch renamed to %s, but HEAD is not updated!" -msgstr "Zweig umbenannt zu %s, aber Zweigspitze (HEAD) ist nicht aktualisiert!" +msgstr "Branch umbenannt zu %s, aber HEAD ist nicht aktualisiert!" #: builtin/branch.c:722 msgid "Branch is renamed, but update of config-file failed" msgstr "" -"Zweig ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist " +"Branch ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist " "fehlgeschlagen." #: builtin/branch.c:737 @@ -2740,7 +2811,7 @@ msgstr "Missgebildeter Objektname %s" #: builtin/branch.c:761 #, c-format msgid "could not write branch description template: %s" -msgstr "Konnte Beschreibungsvorlage für Zweig nicht schreiben: %s" +msgstr "Konnte Beschreibungsvorlage für Branch nicht schreiben: %s" #: builtin/branch.c:791 msgid "Generic options" @@ -2748,7 +2819,7 @@ msgstr "Allgemeine Optionen" #: builtin/branch.c:793 msgid "show hash and subject, give twice for upstream branch" -msgstr "Zeigt Hash und Betreff; -vv: zusätzlich externen Ãœbernahmezweig" +msgstr "Zeigt Hash und Betreff; -vv: zusätzlich Upstream-Branch" #: builtin/branch.c:794 msgid "suppress informational messages" @@ -2760,7 +2831,7 @@ msgstr "stellt den Ãœbernahmemodus ein (siehe git-pull(1))" #: builtin/branch.c:797 msgid "change upstream info" -msgstr "ändert Informationen zum externen Ãœbernahmezweig" +msgstr "ändert Informationen zum Upstream-Branch" #: builtin/branch.c:801 msgid "use colored output" @@ -2768,17 +2839,17 @@ msgstr "verwendet farbliche Ausgaben" #: builtin/branch.c:802 msgid "act on remote-tracking branches" -msgstr "wirkt auf externe Ãœbernahmezweige" +msgstr "wirkt auf Remote-Tracking-Branches" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" -msgstr "Version" +msgstr "Commit" #: builtin/branch.c:806 builtin/branch.c:812 msgid "print only branches that contain the commit" -msgstr "gibt nur Zweige aus, welche diese Version beinhalten" +msgstr "gibt nur Branches aus, welche diesen Commit beinhalten" #: builtin/branch.c:818 msgid "Specific git-branch actions:" @@ -2786,60 +2857,60 @@ msgstr "spezifische Aktionen für \"git-branch\":" #: builtin/branch.c:819 msgid "list both remote-tracking and local branches" -msgstr "listet externe Ãœbernahmezweige und lokale Zweige auf" +msgstr "listet Remote-Tracking und lokale Branches auf" #: builtin/branch.c:821 msgid "delete fully merged branch" -msgstr "entfernt vollständig zusammengeführten Zweig" +msgstr "entfernt vollständig zusammengeführten Branch" #: builtin/branch.c:822 msgid "delete branch (even if not merged)" -msgstr "löscht Zweig (auch wenn nicht zusammengeführt)" +msgstr "löscht Branch (auch wenn nicht zusammengeführt)" #: builtin/branch.c:823 msgid "move/rename a branch and its reflog" -msgstr "verschiebt/benennt einen Zweig und dessen Referenzprotokoll um" +msgstr "verschiebt/benennt einen Branch und dessen Reflog um" #: builtin/branch.c:824 msgid "move/rename a branch, even if target exists" msgstr "" -"verschiebt/benennt einen Zweig um, auch wenn das Ziel bereits existiert" +"verschiebt/benennt einen Branch um, auch wenn das Ziel bereits existiert" #: builtin/branch.c:825 msgid "list branch names" -msgstr "listet Zweignamen auf" +msgstr "listet Branchnamen auf" #: builtin/branch.c:826 msgid "create the branch's reflog" -msgstr "erzeugt das Referenzprotokoll des Zweiges" +msgstr "erzeugt das Reflog des Branches" #: builtin/branch.c:828 msgid "edit the description for the branch" -msgstr "bearbeitet die Beschreibung für den Zweig" +msgstr "bearbeitet die Beschreibung für den Branch" #: builtin/branch.c:829 msgid "force creation (when already exists)" -msgstr "erzeuge auch, wenn der Zweig bereits existiert" +msgstr "erzeuge auch, wenn der Branch bereits existiert" #: builtin/branch.c:832 msgid "print only not merged branches" -msgstr "gibt nur Zweige aus, die nicht zusammengeführt sind" +msgstr "gibt nur Branches aus, die nicht zusammengeführt sind" #: builtin/branch.c:838 msgid "print only merged branches" -msgstr "gibt nur Zweige aus, die zusammengeführt sind" +msgstr "gibt nur Branches aus, die zusammengeführt sind" #: builtin/branch.c:842 msgid "list branches in columns" -msgstr "listet Zweige in Spalten auf" +msgstr "listet Branches in Spalten auf" #: builtin/branch.c:855 msgid "Failed to resolve HEAD as a valid ref." -msgstr "Konnte Zweigspitze (HEAD) nicht als gültige Referenz auflösen." +msgstr "Konnte HEAD nicht als gültige Referenz auflösen." -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" -msgstr "Zweigspitze (HEAD) wurde nicht unter \"refs/heads\" gefunden!" +msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!" #: builtin/branch.c:883 msgid "--column and --verbose are incompatible" @@ -2847,68 +2918,67 @@ msgstr "Die Optionen --column und --verbose sind inkompatibel." #: builtin/branch.c:889 builtin/branch.c:928 msgid "branch name required" -msgstr "Zweigname erforderlich" +msgstr "Branchname erforderlich" #: builtin/branch.c:904 msgid "Cannot give description to detached HEAD" -msgstr "" -"zu losgelöster Zweigspitze (HEAD) kann keine Beschreibung hinterlegt werden" +msgstr "zu losgelöstem HEAD kann keine Beschreibung hinterlegt werden" #: builtin/branch.c:909 msgid "cannot edit description of more than one branch" -msgstr "Beschreibung von mehr als einem Zweig kann nicht bearbeitet werden" +msgstr "Beschreibung von mehr als einem Branch kann nicht bearbeitet werden" #: builtin/branch.c:916 #, c-format msgid "No commit on branch '%s' yet." -msgstr "Noch keine Version in Zweig '%s'." +msgstr "Noch kein Commit in Branch '%s'." #: builtin/branch.c:919 #, c-format msgid "No branch named '%s'." -msgstr "Zweig '%s' nicht vorhanden." +msgstr "Branch '%s' nicht vorhanden." #: builtin/branch.c:934 msgid "too many branches for a rename operation" -msgstr "zu viele Zweige für eine Umbenennen-Operation angegeben" +msgstr "zu viele Branches für eine Umbenennen-Operation angegeben" #: builtin/branch.c:939 msgid "too many branches to set new upstream" -msgstr "zu viele Zweige angegeben um neuen Ãœbernahmezweig zu setzen" +msgstr "zu viele Branches angegeben um Upstream-Branch zu setzen" #: builtin/branch.c:943 #, c-format msgid "" "could not set upstream of HEAD to %s when it does not point to any branch." msgstr "" -"Konnte keinen neuen Ãœbernahmezweig von Zweigspitze (HEAD) zu %s setzen,\n" -"da diese auf keinen Zweig zeigt." +"Konnte keinen neuen Upstream-Branch von HEAD zu %s setzen, da dieser auf\n" +"keinen Branch zeigt." #: builtin/branch.c:946 builtin/branch.c:968 builtin/branch.c:990 #, c-format msgid "no such branch '%s'" -msgstr "Kein solcher Zweig '%s'" +msgstr "Kein solcher Branch '%s'" #: builtin/branch.c:950 #, c-format msgid "branch '%s' does not exist" -msgstr "Zweig '%s' existiert nicht" +msgstr "Branch '%s' existiert nicht" #: builtin/branch.c:962 msgid "too many branches to unset upstream" msgstr "" -"zu viele Zweige angegeben um Konfiguration zu Ãœbernahmezweig zu entfernen" +"zu viele Branches angegeben um Konfiguration zu Upstream-Branch zu entfernen" #: builtin/branch.c:966 msgid "could not unset upstream of HEAD when it does not point to any branch." msgstr "" -"Konnte Konfiguration zum Ãœbernahmezweig von Zweigspitze (HEAD) nicht\n" -"entfernen, da diese auf keinen Zweig zeigt." +"Konnte Konfiguration zu Upstream-Branch von HEAD nicht entfernen, da dieser\n" +"auf keinen Branch zeigt." #: builtin/branch.c:972 #, c-format msgid "Branch '%s' has no upstream information" -msgstr "Zweig '%s' hat keinen externen Ãœbernahmezweig gesetzt" +msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt" #: builtin/branch.c:987 msgid "it does not make sense to create 'HEAD' manually" @@ -2918,7 +2988,7 @@ msgstr "'HEAD' darf nicht manuell erstellt werden" 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' können nicht gemeimsam mit einem " -"Zweignamen verwendet werden." +"Branchnamen verwendet werden." #: builtin/branch.c:996 #, c-format @@ -2937,8 +3007,8 @@ msgid "" "\n" msgstr "" "\n" -"Wenn Sie wollten, dass '%s' den Zweig '%s' als externen Ãœbernahmezweig hat, " -"führen Sie aus:\n" +"Wenn Sie wollten, dass '%s' den Branch '%s' als Upstream-Branch hat, führen " +"Sie aus:\n" #: builtin/branch.c:1014 #, c-format @@ -2957,51 +3027,51 @@ 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." +msgstr "Um ein Paket zu erstellen wird ein Repository benötigt." #: builtin/bundle.c:60 msgid "Need a repository to unbundle." -msgstr "Zum Entpacken wird ein Projektarchiv benötigt." +msgstr "Zum Entpacken wird ein Repository benötigt." -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<Art>|--textconv) <Objekt>" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <Liste_von_Objekten>" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<Art> kann sein: blob, tree, commit, tag" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "zeigt Objektart" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "zeigt Objektgröße" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "beendet mit Rückgabewert 0, wenn kein Fehler aufgetreten ist" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "ansprechende Anzeige des Objektinhaltes" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "führt eine Textkonvertierung auf den Inhalt von Blob-Objekten aus" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "" "Anzeige von Informationen und Inhalt von Objekten, gelesen von der Standard-" "Eingabe" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "" "Anzeige von Informationen über Objekte, gelesen von der Standard-Eingabe" @@ -3021,7 +3091,7 @@ msgstr "gibt alle Attribute einer Datei aus" #: builtin/check-attr.c:20 msgid "use .gitattributes only from the index" -msgstr "verwendet .gitattributes nur von der Bereitstellung" +msgstr "verwendet .gitattributes nur von der Staging-Area" #: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75 msgid "read file names from stdin" @@ -3031,38 +3101,63 @@ msgstr "liest Dateinamen von der Standard-Eingabe" msgid "input paths are terminated by a null character" msgstr "Eingabepfade sind durch ein NUL Zeichen abgeschlossen" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "unterdrückt Fortschrittsanzeige" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "zeigt Eingabe-Pfade ohne Ãœbereinstimmungen" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "Angabe von Pfadnamen kann nicht gemeinsam mit --stdin verwendet werden" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "Die Option -z kann nur mit --stdin verwendet werden." -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "kein Pfad angegeben" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "Die Option --quiet ist nur mit einem einzelnen Pfadnamen gültig." -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "" "Die Optionen --quiet und --verbose können nicht gemeinsam verwendet werden." +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "--non-matching ist nur mit --verbose zulässig" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "git check-mailmap [Optionen] <Kontakt>..." + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "liest ebenfalls Kontakte von der Standard-Eingabe" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "Konnte Kontakt '%s' nicht parsen." + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "keine Kontakte angegeben" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "git checkout-index [Optionen] [--] [<Datei>...]" #: builtin/checkout-index.c:187 msgid "check out all files in the index" -msgstr "checkt alle Dateien in der Bereitstellung aus" +msgstr "checkt alle Dateien in der Staging-Area aus" #: builtin/checkout-index.c:188 msgid "force overwrite of existing files" @@ -3072,7 +3167,7 @@ msgstr "erzwingt das Ãœberschreiben bereits existierender Dateien" msgid "no warning for existing files and files not in index" msgstr "" "keine Warnung für existierende Dateien, und Dateien, die sich nicht in der " -"Bereitstellung befinden" +"Staging-Area befinden" #: builtin/checkout-index.c:192 msgid "don't checkout new files" @@ -3080,7 +3175,7 @@ msgstr "checkt keine neuen Dateien aus" #: builtin/checkout-index.c:194 msgid "update stat information in the index file" -msgstr "aktualisiert Dateiinformationen in der Bereitstellungsdatei" +msgstr "aktualisiert Dateiinformationen in der Staging-Area-Datei" #: builtin/checkout-index.c:200 msgid "read list of paths from the standard input" @@ -3105,11 +3200,11 @@ msgstr "kopiert Dateien von dem benannten Stand" #: builtin/checkout.c:25 msgid "git checkout [options] <branch>" -msgstr "git checkout [Optionen] <Zweig>" +msgstr "git checkout [Optionen] <Branch>" #: builtin/checkout.c:26 msgid "git checkout [options] [<branch>] -- <file>..." -msgstr "git checkout [Optionen] [Zweig>] -- <Datei>..." +msgstr "git checkout [Optionen] [<Branch>] -- <Datei>..." #: builtin/checkout.c:117 builtin/checkout.c:150 #, c-format @@ -3139,7 +3234,7 @@ msgstr "Pfad '%s': kann nicht zusammenführen" #: builtin/checkout.c:213 #, c-format msgid "Unable to add merge result for '%s'" -msgstr "Konnte Ergebnis der Zusammenführung von '%s' nicht hinzufügen." +msgstr "Konnte Merge-Ergebnis von '%s' nicht hinzufügen." #: builtin/checkout.c:237 builtin/checkout.c:240 builtin/checkout.c:243 #: builtin/checkout.c:246 @@ -3155,11 +3250,12 @@ msgstr "'%s' kann nicht mit '%s' verwendet werden" #: builtin/checkout.c:255 #, c-format msgid "Cannot update paths and switch to branch '%s' at the same time." -msgstr "Kann nicht gleichzeitig Pfade aktualisieren und zu Zweig '%s' wechseln" +msgstr "" +"Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln" #: builtin/checkout.c:266 builtin/checkout.c:458 msgid "corrupt index file" -msgstr "beschädigte Bereitstellungsdatei" +msgstr "beschädigte Staging-Area-Datei" #: builtin/checkout.c:329 builtin/checkout.c:336 #, c-format @@ -3168,49 +3264,49 @@ msgstr "Pfad '%s' ist nicht zusammengeführt." #: builtin/checkout.c:480 msgid "you need to resolve your current index first" -msgstr "Sie müssen zuerst Ihre aktuelle Bereitstellung auflösen." +msgstr "Sie müssen zuerst Ihre aktuelle Staging-Area auflösen." #: builtin/checkout.c:601 #, c-format msgid "Can not do reflog for '%s'\n" msgstr "Konnte \"reflog\" für '%s' nicht durchführen\n" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" -msgstr "Zweigspitze (HEAD) ist jetzt bei" +msgstr "HEAD ist jetzt bei" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" -msgstr "Setze Zweig '%s' neu\n" +msgstr "Setze Branch '%s' neu\n" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "Bereits auf '%s'\n" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" -msgstr "Gewechselt zu neu gesetztem Zweig '%s'\n" +msgstr "Gewechselt zu umgesetzten Branch '%s'\n" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" -msgstr "Gewechselt zu einem neuen Zweig '%s'\n" +msgstr "Gewechselt zu einem neuem Branch '%s'\n" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" -msgstr "Gewechselt zu Zweig '%s'\n" +msgstr "Gewechselt zu Branch '%s'\n" -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr " ... und %d weitere.\n" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3223,17 +3319,17 @@ msgid_plural "" "\n" "%s\n" msgstr[0] "" -"Warnung: Sie sind um %d Version hinterher, nicht verbunden zu\n" -"einem Ihrer Zweige:\n" +"Warnung: Sie sind um %d Commit hinterher, nicht verbunden zu\n" +"einem Ihrer Branches:\n" "\n" "%s\n" msgstr[1] "" -"Warnung: Sie sind um %d Versionen hinterher, nicht verbunden zu\n" -"einem Ihrer Zweige:\n" +"Warnung: Sie sind um %d Commits hinterher, nicht verbunden zu\n" +"einem Ihrer Branches:\n" "\n" "%s\n" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3242,376 +3338,478 @@ msgid "" " git branch new_branch_name %s\n" "\n" msgstr "" -"Wenn Sie diese durch einen neuen Zweig behalten möchten, dann könnte jetzt\n" +"Wenn Sie diese durch einen neuen Branch behalten möchten, dann könnte jetzt\n" "ein guter Zeitpunkt sein dies zu tun mit:\n" "\n" -" git branch neuer_zweig_name %s\n" +" git branch neuer_branch_name %s\n" "\n" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" msgstr "interner Fehler im Revisionsgang" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" -msgstr "Vorherige Position der Zweigspitze (HEAD) war" +msgstr "Vorherige Position von HEAD war" -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" -msgstr "Sie sind auf einem Zweig, der noch geboren wird" +msgstr "Sie sind auf einem Branch, der noch geboren wird" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "Ungültige Referenz: %s" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" -msgstr "Referenz ist kein Baum: %s" +msgstr "Referenz ist kein \"Tree\"-Objekt: %s" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" -msgstr "Pfade können nicht beim Wechseln von Zweigen verwendet werden" +msgstr "Pfade können nicht beim Wechseln von Branches verwendet werden" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" -msgstr "'%s' kann nicht beim Wechseln von Zweigen verwendet werden" +msgstr "'%s' kann nicht beim Wechseln von Branches verwendet werden" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "'%s' kann nicht mit '%s' verwendet werden" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" -msgstr "Kann Zweig nicht zu Nicht-Version '%s' wechseln" +msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" -msgstr "Zweig" +msgstr "Branch" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" -msgstr "erzeugt und checkt einen neuen Zweig aus" +msgstr "erzeugt und checkt einen neuen Branch aus" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" -msgstr "erzeugt/setzt neu und checkt einen Zweig aus" +msgstr "erzeugt/setzt um und checkt einen Branch aus" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" -msgstr "erzeugt Referenzprotokoll für den neuen Zweig" +msgstr "erzeugt das Reflog für den neuen Branch" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" -msgstr "setzt die Zweigspitze (HEAD) zu benannter Version" +msgstr "setzt HEAD zu benanntem Commit" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" -msgstr "setzt Informationen zum externen Ãœbernahmezweig für den neuen Zweig" +msgstr "setzt Informationen zum Upstream-Branch für den neuen Branch" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" -msgstr "neuer Zweig" +msgstr "neuer Branch" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" -msgstr "neuer Zweig ohne Elternversion" +msgstr "neuer Branch ohne Eltern-Commit" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "checkt unsere Variante für nicht zusammengeführte Dateien aus" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "checkt ihre Variante für nicht zusammengeführte Dateien aus" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "erzwingt Auschecken (verwirft lokale Änderungen)" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" -msgstr "führt eine 3-Wege-Zusammenführung mit dem neuen Zweig aus" +msgstr "führt einen 3-Wege-Merge mit dem neuen Branch aus" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "aktualisiert ignorierte Dateien (Standard)" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "Stil" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "Konfliktstil (merge oder diff3)" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "Pfadspezifikationen ignorieren Einstellungen zum partiellen Auschecken" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "second guess 'git checkout no-such-branch'" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "Die Optionen -b, -B und --orphan schließen sich gegenseitig aus." -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" -msgstr "Bei der Option --track muss ein Zweigname angegeben werden." +msgstr "Bei der Option --track muss ein Branchname angegeben werden." -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" -msgstr "Vermisse Zweignamen; versuchen Sie -b" +msgstr "Vermisse Branchnamen; versuchen Sie -b" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "ungültige Pfadspezifikation" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" "Did you intend to checkout '%s' which can not be resolved as commit?" msgstr "" -"Kann nicht gleichzeitig Pfade aktualisieren und zu Zweig '%s' wechseln.\n" -"Haben Sie beabsichtigt '%s' auszuchecken, welcher nicht als Version " -"aufgelöst werden kann?" +"Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln.\n" +"Haben Sie beabsichtigt '%s' auszuchecken, welcher nicht als Commit aufgelöst " +"werden kann?" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout: --detach nimmt kein Pfad-Argument '%s'" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." msgstr "" "git checkout: --ours/--theirs, --force und --merge sind inkompatibel wenn\n" -"Sie aus der Bereitstellung auschecken." +"Sie aus der Staging-Area auschecken." -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." -msgstr "git clean [-d] [-f] [-n] [-q] [-e <Muster>] [-x | -X] [--] <Pfade>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +msgstr "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <Muster>] [-x | -X] [--] <Pfade>..." -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "Lösche %s\n" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "Würde %s löschen\n" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" -msgstr "Ãœberspringe Projektarchiv %s\n" +msgstr "Ãœberspringe Repository %s\n" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" -msgstr "Würde Projektarchiv %s überspringen\n" +msgstr "Würde Repository %s überspringen\n" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "Fehler beim Löschen von %s" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" +"Eingabehilfe:\n" +"1 - nummeriertes Element auswählen\n" +"foo - Element anhand eines eindeutigen Prefix auswählen\n" +" - (leer) nichts auswählen" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" +"Eingabehilfe:\n" +"1 - einzelnes Element auswählen\n" +"3-5 - Bereich von Elementen auswählen\n" +"2-3,6-9 - mehrere Bereiche auswählen\n" +"foo - Element anhand eines eindeutigen Prefix auswählen\n" +"-... - angegebenes Element abwählen\n" +"* - alle Elemente auswählen\n" +" - (leer) Auswahl beenden" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "Wie bitte (%s)?" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "Ignorier-Muster eingeben>> " + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "WARNUNG: Kann keine Einträge finden die Muster entsprechen: %s" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "Wählen Sie Einträge zum Löschen" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "'%s' löschen? " + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "Tschüss." + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" +"clean - Clean starten\n" +"filter by pattern - Einträge von Löschung ausschließen\n" +"select by numbers - Auswahl von Einträgen über Nummern\n" +"ask each - jede Löschung bestätigen (wie \"rm -i\")\n" +"quit - Clean beenden\n" +"help - diese Meldung anzeigen\n" +"? - Hilfe zur Auswahl mittels Eingabe anzeigen" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "*** Kommandos ***" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "Was nun" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "Würde das folgende Element entfernen:" +msgstr[1] "Würde die folgenden Elemente entfernen:" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "Keine Dateien mehr zum Löschen, beende." + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "gibt keine Namen von gelöschten Dateien aus" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "erzwingt Aktion" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "interaktives Clean" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "löscht ganze Verzeichnisse" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "Muster" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "fügt <Muster> zu den Regeln für ignorierte Pfade hinzu" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "löscht auch ignorierte Dateien" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "löscht nur ignorierte Dateien" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "Die Optionen -x und -X können nicht gemeinsam verwendet werden." -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -"clean.requireForce auf \"true\" gesetzt und weder -n noch -f gegeben; " -"Säuberung verweigert" +"clean.requireForce auf \"true\" gesetzt und weder -i, -n noch -f gegeben; " +"\"clean\" verweigert" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -"clean.requireForce standardmäßig auf \"true\" gesetzt und weder -n noch -f " -"gegeben; Säuberung verweigert" +"clean.requireForce standardmäßig auf \"true\" gesetzt und weder -i, -n noch -" +"f gegeben; \"clean\" verweigert" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" -msgstr "git clone [Optionen] [--] <Projektarchiv> [<Verzeichnis>]" +msgstr "git clone [Optionen] [--] <Repository> [<Verzeichnis>]" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "erzwingt Fortschrittsanzeige" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "kein Auschecken" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" -msgstr "erstellt ein bloßes Projektarchiv" +msgstr "erstellt ein Bare-Repository" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" -msgstr "erstellt ein Spiegelarchiv (impliziert bloßes Projektarchiv)" +msgstr "erstellt ein Spiegelarchiv (impliziert --bare)" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" -msgstr "um von einem lokalen Projektarchiv zu klonen" +msgstr "um von einem lokalen Repository zu klonen" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" -msgstr "verwendet lokal keine harten Links, immer Kopien" +msgstr "verwendet lokal keine harten Verweise, immer Kopien" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" -msgstr "Einrichtung als verteiltes Projektarchiv" +msgstr "Einrichtung als verteiltes Repository" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" -msgstr "initialisiert Unterprojekte im Klon" +msgstr "initialisiert Submodule im Klon" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "Vorlagenverzeichnis" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "Verzeichnis, von welchem die Vorlagen verwendet werden" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" -msgstr "referenziert Projektarchiv" +msgstr "referenziert Repository" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "Name" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" -msgstr "verwendet <Name> statt 'origin' für externes Projektarchiv" +msgstr "verwendet <Name> statt 'origin' für Upstream-Repository" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" -msgstr "" -"checkt <Zweig> aus, anstatt Zweigspitze (HEAD) des externen Projektarchivs" +msgstr "checkt <Branch> aus, anstatt HEAD des Remote-Repositories" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "Tiefe" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "erstellt einen flachen Klon mit dieser Tiefe" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" -msgstr "klont nur einen Zweig, Zweigspitze (HEAD) oder --branch" +msgstr "klont nur einen Branch, HEAD oder --branch" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr ".git-Verzeichnis" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" -msgstr "separiert Git-Verzeichnis vom Arbeitsbaum" +msgstr "separiert Git-Verzeichnis vom Arbeitsverzeichnis" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "Schlüssel=Wert" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" -msgstr "setzt Konfiguration innerhalb des neuen Projektarchivs" +msgstr "setzt Konfiguration innerhalb des neuen Repositories" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." -msgstr "Referenziertes Projektarchiv '%s' ist kein lokales Projektarchiv." +msgstr "Referenziertes Repository '%s' ist kein lokales Repository." -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "Fehler beim Erstellen von Verzeichnis '%s'" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "Konnte '%s' nicht lesen" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "%s existiert und ist kein Verzeichnis" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "Konnte %s nicht lesen\n" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" -msgstr "Konnte Verknüpfung '%s' nicht erstellen" +msgstr "Konnte Verweis '%s' nicht erstellen" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "Konnte Datei nicht nach '%s' kopieren" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "Fertig.\n" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -3621,96 +3819,110 @@ msgstr "" "Sie können mit 'git status' prüfen, was ausgecheckt worden ist\n" "und das Auschecken mit 'git checkout -f HEAD' erneut versuchen.\n" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." -msgstr "Konnte zu klonenden externer Zweig %s nicht finden." +msgstr "Konnte zu klonenden Remote-Branch %s nicht finden." -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "Prüfe Konnektivität... " + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" -msgstr "Fernarchiv hat nicht alle erforderlichen Objekte gesendet." +msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet." + +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "Fertig\n" -#: builtin/clone.c:610 +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" -"Externe Zweigspitze (HEAD) bezieht sich auf eine nicht existierende Referenz " -"und kann nicht ausgecheckt werden.\n" +"Externer HEAD bezieht sich auf eine nicht existierende Referenz und kann " +"nicht ausgecheckt werden.\n" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" -msgstr "Arbeitsbaum konnte nicht ausgecheckt werden" +msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "Zu viele Argumente." -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." -msgstr "Sie müssen ein Projektarchiv zum Klonen angeben." +msgstr "Sie müssen ein Repository zum Klonen angeben." -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "Die Optionen --bare und --origin %s sind inkompatibel." -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel." -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" -msgstr "Projektarchiv '%s' existiert nicht." +msgstr "Repository '%s' existiert nicht." -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "" "Die Option --depth wird in lokalen Klonen ignoriert; benutzen Sie " "stattdessen file://" -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "--local wird ignoriert" + +#: builtin/clone.c:808 #, 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:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." -msgstr "Arbeitsbaum '%s' existiert bereits." +msgstr "Arbeitsverzeichnis '%s' existiert bereits." -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen." -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen." -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" -msgstr "Klone in bloßes Projektarchiv '%s'...\n" +msgstr "Klone in Bare-Repository '%s'...\n" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "Klone nach '%s'...\n" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "Weiß nicht wie %s zu klonen ist." -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" -msgstr "externer Zweig %s nicht im anderen Projektarchiv %s gefunden" +msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." -msgstr "Sie scheinen ein leeres Projektarchiv geklont zu haben." +msgstr "Sie scheinen ein leeres Repository geklont zu haben." #: builtin/column.c:9 msgid "git column [options]" @@ -3744,15 +3956,15 @@ msgstr "Abstand zwischen Spalten" msgid "--command must be the first argument" msgstr "Die Option --command muss an erster Stelle stehen." -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "git commit [Optionen] [--] <Pfadspezifikation>..." -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "git status [Optionen] [--] <Pfadspezifikation>..." -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3773,129 +3985,144 @@ msgstr "" " git config --global user.name \"Ihr Name\"\n" " git config --global user.email ihre@emailadresse.de\n" "\n" -"Nachdem Sie das getan hast, können Sie Ihre Identität für diese Version " +"Nachdem Sie das getan hast, können Sie Ihre Identität für diesen Commit " "ändern mit:\n" "\n" " git commit --amend --reset-author\n" -#: builtin/commit.c:56 +#: builtin/commit.c:57 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 "" -"Sie fragten die jüngste Version nachzubessern, aber das würde diese leer\n" -"machen. Sie können Ihr Kommando mit --allow-empty wiederholen, oder die\n" -"Version mit \"git reset HEAD^\" vollständig entfernen.\n" +"Sie fragten den jüngsten Commit nachzubessern, aber das würde diesen leer\n" +"machen. Sie können Ihr Kommando mit --allow-empty wiederholen, oder diesen\n" +"Commit mit \"git reset HEAD^\" vollständig entfernen.\n" -#: builtin/commit.c:61 +#: builtin/commit.c:62 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 Sie dies trotzdem eintragen wollen, benutzen Sie:\n" +"Wenn Sie dies trotzdem committen wollen, benutzen Sie:\n" "\n" " git commit --allow-empty\n" "\n" -"Andernfalls benutzen Sie bitte 'git reset'\n" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "Andernfalls benutzen Sie bitte 'git reset'\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"Wenn Sie diesen Commit auslassen möchten, benutzen Sie:\n" +"\n" +" git reset\n" +"\n" +"Benutzen Sie anschließend \"git cherry-pick --continue\", um die\n" +"Cherry-Pick-Operation mit den verbleibenden Commits fortzusetzen.\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" -msgstr "Fehler beim Entpacken des Baum-Objektes der Zweigspitze (HEAD)." +msgstr "Fehler beim Entpacken des \"Tree\"-Objektes von HEAD." -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" -msgstr "Konnte temporäre Bereitstellung nicht erstellen." +msgstr "Konnte temporäre Staging-Area nicht erstellen." -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "interaktives Hinzufügen fehlgeschlagen" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "Konnte new_index Datei nicht schreiben" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." -msgstr "" -"Kann keine partielle Eintragung durchführen, während eine Zusammenführung im " -"Gange ist." +msgstr "Kann keinen Teil-Commit durchführen, während ein Merge im Gange ist." -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "" -"Kann keine partielle Eintragung durchführen, während \"cherry-pick\" im " -"Gange ist." +"Kann keinen Teil-Commit durchführen, während \"cherry-pick\" im Gange ist." -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" -msgstr "Kann Bereitstellung nicht lesen" +msgstr "Kann Staging-Area nicht lesen" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" -msgstr "Konnte temporäre Bereitstellungsdatei nicht schreiben." +msgstr "Konnte temporäre Staging-Area-Datei nicht schreiben." -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" -msgstr "Ungültige Version: %s" +msgstr "Ungültiger Commit: %s" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "Fehlerhafter --author Parameter" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" -msgstr "Fehlerhafte Identifikations-String: '%s'" +msgstr "Fehlerhafter Ident-String: '%s'" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" -msgstr "Konnte Version %s nicht nachschlagen" +msgstr "Konnte Commit %s nicht nachschlagen" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(lese Log-Nachricht von Standard-Eingabe)\n" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "Konnte Log nicht von Standard-Eingabe lesen." -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "Konnte Log-Datei '%s' nicht lesen" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" -msgstr "Version hat eine leere Beschreibung" +msgstr "Commit hat eine leere Beschreibung" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "Konnte MERGE_MSG nicht lesen" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "Konnte SQUASH_MSG nicht lesen" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "Konnte '%s' nicht lesen" -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" -msgstr "Konnte Versionsvorlage nicht schreiben" +msgstr "Konnte Commit-Vorlage nicht schreiben" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3905,12 +4132,12 @@ msgid "" "and try again.\n" msgstr "" "\n" -"Es sieht so aus, als tragen Sie eine Zusammenführung ein.\n" +"Es sieht so aus, als committen Sie einen Merge.\n" "Falls das nicht korrekt ist, löschen Sie bitte die Datei\n" "\t%s\n" "und versuchen Sie es erneut.\n" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3920,406 +4147,406 @@ msgid "" "and try again.\n" msgstr "" "\n" -"Es sieht so aus, als tragen Sie ein \"cherry-pick\" ein.\n" +"Es sieht so aus, als committen Sie einen \"cherry-pick\".\n" "Falls das nicht korrekt ist, löschen Sie bitte die Datei\n" "\t%s\n" "und versuchen Sie es erneut.\n" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be ignored, and an empty message aborts the commit.\n" msgstr "" -"Bitte geben Sie eine Versionsbeschreibung für Ihre Änderungen ein. Zeilen,\n" -"die mit '%c' beginnen, werden ignoriert, und eine leere " -"Versionsbeschreibung\n" -"bricht die Eintragung ab.\n" +"Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,\n" +"die mit '%c' beginnen, werden ignoriert, und eine leere Beschreibung\n" +"bricht den Commit ab.\n" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be kept; you may remove them yourself if you want to.\n" "An empty message aborts the commit.\n" msgstr "" -"Bitte geben Sie eine Versionsbeschreibung für Ihre Änderungen ein. Zeilen, " +"Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen, " "die\n" "mit '%c' beginnen, werden beibehalten; wenn Sie möchten, können Sie diese " "entfernen.\n" -"Eine leere Versionsbeschreibung bricht die Eintragung ab.\n" +"Eine leere Beschreibung bricht den Commit ab.\n" -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%sAutor: %s" -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" -msgstr "%sEintragender: %s" +msgstr "%sCommit-Ersteller: %s" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" -msgstr "Kann Bereitstellung nicht lesen" +msgstr "Kann Staging-Area nicht lesen" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" -msgstr "Fehler beim Erzeugen der Zweige" +msgstr "Fehler beim Erzeugen der \"Tree\"-Objekte" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" -msgstr "Bitte liefere eine Beschreibung entweder mit der Option -m oder -F.\n" +msgstr "" +"Bitte liefern Sie eine Beschreibung entweder mit der Option -m oder -F.\n" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "Kein existierender Autor mit '%s' gefunden." -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Ungültiger Modus '%s' für unbeobachtete Dateien" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "Die Optionen --long und -z sind inkompatibel." + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "" "Die Optionen --reset-author und --author können nicht gemeinsam verwendet " "werden." -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." -msgstr "Sie haben nichts zum nachbessern." +msgstr "Sie haben nichts für \"--amend\"." -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." -msgstr "Eine Zusammenführung ist im Gange -- kann nicht nachbessern." +msgstr "Ein Merge ist im Gange -- kann \"--amend\" nicht ausführen." -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." -msgstr "\"cherry-pick\" ist im Gange -- kann nicht nachbessern." +msgstr "\"cherry-pick\" ist im Gange -- kann \"--amend\" nicht ausführen." -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "" "Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden." -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "Es kann nur eine Option von -c/-C/-F/--fixup verwendet werden." -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "Die Option -m kann nicht mit -c/-C/-F/--fixup kombiniert werden." -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" "Die Option --reset--author kann nur mit -C, -c oder --amend verwendet werden." -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" "Es kann nur eine Option von --include/--only/--all/--interactive/--patch " "verwendet werden." -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "" "Die Optionen --include und --only können nur mit der Angabe von Pfaden " "verwendet werden." -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "" -"Klug... die letzte Version mit einer unsauberen Bereitstellung nachbessern." +"Klug... den letzten Commit mit einer geänderten Staging-Area nachbessern." -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" "Explizite Pfade ohne -i oder -o angegeben; unter der Annahme von --only " "Pfaden..." -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "Ungültiger \"cleanup\" Modus %s" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "Die Option -a kann nur mit der Angabe von Pfaden verwendet werden." -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "Die Optionen --long und -z sind inkompatibel." - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "zeigt Status im Kurzformat" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" -msgstr "zeigt Zweiginformationen" +msgstr "zeigt Branchinformationen" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "maschinenlesbare Ausgabe" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "zeigt Status im Langformat (Standard)" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "schließt Einträge mit NUL-Zeichen ab" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "Modus" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" "zeigt nicht beobachtete Dateien, optionale Modi: all, normal, no. (Standard: " "all)" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "zeigt ignorierte Dateien" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "wann" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" -"ignoriert Änderungen in Unterprojekten, optional wenn: all, dirty, " -"untracked. (Standard: all)" +"ignoriert Änderungen in Submodulen, optional wenn: all, dirty, untracked. " +"(Standard: all)" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "listet unbeobachtete Dateien in Spalten auf" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" -msgstr "Konnte neu erstellte Version nicht nachschlagen." +msgstr "Konnte neu erstellten Commit nicht nachschlagen." -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" -msgstr "Konnte neulich erstellte Version nicht analysieren." +msgstr "Konnte neulich erstellten Commit nicht analysieren." -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" -msgstr "losgelöste Zweigspitze (HEAD)" +msgstr "losgelöster HEAD" -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" -msgstr " (Basis-Version)" +msgstr " (Basis-Commit)" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" -msgstr "unterdrückt Zusammenfassung nach erfolgreicher Eintragung" +msgstr "unterdrückt Zusammenfassung nach erfolgreichem Commit" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" -msgstr "zeigt Unterschiede in Versionsbeschreibungsvorlage an" +msgstr "zeigt Unterschiede in Commit-Beschreibungsvorlage an" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" -msgstr "Optionen für Versionsbeschreibung" +msgstr "Optionen für Commit-Beschreibung" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "liest Beschreibung von Datei" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "Autor" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" -msgstr "überschreibt Autor von Version" +msgstr "überschreibt Autor eines Commits" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "Datum" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" -msgstr "überschreibt Datum von Version" +msgstr "überschreibt Datum eines Commits" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "Beschreibung" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" -msgstr "Versionsbeschreibung" +msgstr "Commit-Beschreibung" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" -msgstr "verwendet wieder und editiert Beschreibung von der angegebenen Version" +msgstr "verwendet wieder und editiert Beschreibung des angegebenen Commits" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" -msgstr "verwendet Beschreibung der angegebenen Version wieder" +msgstr "verwendet Beschreibung des angegebenen Commits wieder" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" -"verwendet eine automatisch zusammengesetzte Beschreibung zum Nachbessern der " -"angegebenen Version" +"verwendet eine automatisch zusammengesetzte Beschreibung zum Nachbessern des " +"angegebenen Commits" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" -"verwendet eine automatisch zusammengesetzte Beschreibung zum Zusammenführen " -"der angegebenen Version" +"verwendet eine automatisch zusammengesetzte Beschreibung beim \"squash\" des " +"angegebenen Commits" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" -msgstr "Setzt Sie als Autor der Version (verwendet mit -C/-c/--amend)" +msgstr "Setzt Sie als Autor des Commits (verwendet mit -C/-c/--amend)" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "fügt 'Signed-off-by:'-Zeile hinzu" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "verwendet angegebene Vorlagendatei" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" -msgstr "erzwingt Bearbeitung der Version" +msgstr "erzwingt Bearbeitung des Commits" -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "Standard" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "" "wie Leerzeichen und #Kommentare von der Beschreibung getrennt werden sollen" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" -msgstr "fügt Status in die Versionsbeschreibungsvorlage ein" +msgstr "fügt Status in die Commit-Beschreibungsvorlage ein" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "Schlüssel-ID" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" -msgstr "signiert Version mit GPG" +msgstr "signiert Commit mit GPG" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" -msgstr "Optionen für Versionsinhalt" +msgstr "Optionen für Commit-Inhalt" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" -msgstr "trägt alle geänderten Dateien ein" +msgstr "committet alle geänderten Dateien" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" -msgstr "trägt die angegebenen Dateien zusätzlich zur Bereitstellung ein" +msgstr "merkt die angegebenen Dateien zusätzlich zum Commit vor" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "interaktives Hinzufügen von Dateien" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "interaktives Hinzufügen von Änderungen" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" -msgstr "trägt nur die angegebenen Dateien ein" +msgstr "committet nur die angegebenen Dateien" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "umgeht \"pre-commit hook\"" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" -msgstr "zeigt an, was eingetragen werden würde" +msgstr "zeigt an, was committet werden würde" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" -msgstr "ändert vorherige Version" +msgstr "ändert vorherigen Commit" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "umgeht \"post-rewrite hook\"" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "erlaubt Aufzeichnung einer leeren Änderung" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "erlaubt Aufzeichnung einer Änderung mit einer leeren Beschreibung" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" -msgstr "Konnte Version der Zweigspitze (HEAD) nicht analysieren." +msgstr "Konnte Commit von HEAD nicht analysieren." -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "Konnte '%s' nicht zum Lesen öffnen." -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Beschädigte MERGE_HEAD-Datei (%s)" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "Konnte MERGE_MODE nicht lesen" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" -msgstr "Konnte Versionsbeschreibung nicht lesen: %s" +msgstr "Konnte Commit-Beschreibung nicht lesen: %s" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" -msgstr "Eintragung abgebrochen; Sie haben die Beschreibung nicht editiert.\n" +msgstr "Commit abgebrochen; Sie haben die Beschreibung nicht editiert.\n" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" -msgstr "Eintragung aufgrund leerer Versionsbeschreibung abgebrochen.\n" +msgstr "Commit aufgrund leerer Beschreibung abgebrochen.\n" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" -msgstr "Fehler beim Schreiben des Versionsobjektes." +msgstr "Fehler beim Schreiben des Commit-Objektes." -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" -msgstr "Kann Referenz der Zweigspitze (HEAD) nicht sperren." +msgstr "Kann Referenz von HEAD nicht sperren." -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" -msgstr "Kann Referenz der Zweigspitze (HEAD) nicht aktualisieren." +msgstr "Kann Referenz von HEAD nicht aktualisieren." -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 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" +"Das Repository wurde aktualisiert, aber die \"new_index\"-Datei\n" "konnte nicht geschrieben werden. Prüfen Sie, dass Ihre Festplatte nicht\n" "voll und Ihr Kontingent nicht aufgebraucht ist und führen Sie\n" "anschließend \"git reset HEAD\" zu Wiederherstellung aus." @@ -4328,115 +4555,123 @@ msgstr "" msgid "git config [options]" msgstr "git config [Optionen]" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "Ort der Konfigurationsdatei" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "verwendet globale Konfigurationsdatei" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "verwendet systemweite Konfigurationsdatei" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" -msgstr "verwendet Konfigurationsdatei des Projektarchivs" +msgstr "verwendet Konfigurationsdatei des Repositories" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "verwendet die angegebene Konfigurationsdatei" -#: builtin/config.c:56 +#: builtin/config.c:57 +msgid "blob-id" +msgstr "Blob-Id" + +#: builtin/config.c:57 +msgid "read config from given blob object" +msgstr "liest Konfiguration von angegebenem Blob-Objekt" + +#: builtin/config.c:58 msgid "Action" msgstr "Aktion" -#: builtin/config.c:57 +#: builtin/config.c:59 msgid "get value: name [value-regex]" msgstr "gibt Wert zurück: Name [Wert-regex]" -#: builtin/config.c:58 +#: builtin/config.c:60 msgid "get all values: key [value-regex]" msgstr "gibt alle Werte zurück: Schlüssel [Wert-regex]" -#: builtin/config.c:59 +#: builtin/config.c:61 msgid "get values for regexp: name-regex [value-regex]" msgstr "gibt Werte für den regulären Ausdruck zurück: Name-regex [Wert-regex]" -#: builtin/config.c:60 +#: builtin/config.c:62 msgid "replace all matching variables: name value [value_regex]" msgstr "ersetzt alle passenden Variablen: Name Wert [Wert-regex] " -#: builtin/config.c:61 +#: builtin/config.c:63 msgid "add a new variable: name value" msgstr "fügt neue Variable hinzu: Name Wert" -#: builtin/config.c:62 +#: builtin/config.c:64 msgid "remove a variable: name [value-regex]" msgstr "entfernt eine Variable: Name [Wert-regex]" -#: builtin/config.c:63 +#: builtin/config.c:65 msgid "remove all matches: name [value-regex]" msgstr "entfernt alle Ãœbereinstimmungen: Name [Wert-regex]" -#: builtin/config.c:64 +#: builtin/config.c:66 msgid "rename section: old-name new-name" msgstr "benennt eine Sektion um: alter-Name neuer-Name" -#: builtin/config.c:65 +#: builtin/config.c:67 msgid "remove a section: name" msgstr "entfernt eine Sektion: Name" -#: builtin/config.c:66 +#: builtin/config.c:68 msgid "list all" msgstr "listet alles auf" -#: builtin/config.c:67 +#: builtin/config.c:69 msgid "open an editor" msgstr "öffnet einen Editor" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "Slot" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "findet die konfigurierte Farbe: [Standard]" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "findet die Farbeinstellung: [Standard-Ausgabe-ist-Terminal]" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "Typ" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "Wert ist \"true\" oder \"false\"" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "Wert ist eine Dezimalzahl" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "Wert ist --bool oder --int" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "Wert ist ein Pfad (Datei oder Verzeichnisname)" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "Sonstiges" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "schließt Werte mit NUL-Byte ab" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "beachtet \"include\"-Direktiven beim Nachschlagen" @@ -4448,173 +4683,173 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "gibt Größenangaben in menschenlesbaren Format aus" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "git describe [Optionen] <committish>*" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "git describe [Optionen] --dirty" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" -msgstr "annotierte Markierung %s ist nicht verfügbar" +msgstr "annotierter Tag %s ist nicht verfügbar" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" -msgstr "annotierte Markierung %s hat keinen eingebetteten Namen" +msgstr "annotierter Tag %s hat keinen eingebetteten Namen" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" -msgstr "Markierung '%s' ist eigentlich '%s' hier" +msgstr "Tag '%s' ist eigentlich '%s' hier" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "%s ist kein gültiger Objekt-Name" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "%s ist kein gültiges '%s' Objekt" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" -msgstr "kein Markierung entspricht exakt '%s'" +msgstr "kein Tag entspricht exakt '%s'" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "suche zur Beschreibung von %s\n" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "beendete Suche bei %s\n" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, 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: versuchen Sie --tags." +"Keine annotierten Tags können '%s' beschreiben.\n" +"Jedoch gab es nicht-annotierte Tags: versuchen Sie --tags." -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" "Try --always, or create some tags." msgstr "" -"Keine Markierungen können '%s' beschreiben.\n" -"Versuchen Sie --always oder erstellen Sie einige Markierungen." +"Keine Tags können '%s' beschreiben.\n" +"Versuchen Sie --always oder erstellen Sie einige Tags." -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" -msgstr "%lu Versionen durchlaufen\n" +msgstr "%lu Commits durchlaufen\n" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, 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 ersten %i auf\n" +"mehr als %i Tags gefunden; Führe die ersten %i auf\n" "Suche bei %s aufgegeben\n" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" -msgstr "findet die Markierung, die nach der Version kommt" +msgstr "findet den Tag, die nach Commit kommt" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "protokolliert die Suchstrategie in der Standard-Fehlerausgabe" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "verwendet alle Referenzen" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" -msgstr "verwendet jede Markierung, auch nicht-annotierte" +msgstr "verwendet jeden Tag, auch nicht-annotierte" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "verwendet immer langes Format" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "folgt nur erstem Elternteil" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "gibt nur exakte Ãœbereinstimmungen aus" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" -msgstr "betrachtet die jüngsten <n> Markierungen (Standard: 10)" +msgstr "betrachtet die jüngsten <n> Tags (Standard: 10)" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" -msgstr "betrachtet nur Markierungen die <Muster> entsprechen" +msgstr "betrachtet nur Tags die <Muster> entsprechen" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" -msgstr "zeigt gekürztes Versionsobjekt, wenn sonst nichts zutrifft" +msgstr "zeigt gekürztes Commit-Objekt, wenn sonst nichts zutrifft" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "Kennzeichen" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "" -"fügt <Kennzeichen> bei geändertem Arbeitsbaum hinzu (Standard: \"-dirty\")" +"fügt <Kennzeichen> bei geändertem Arbeitsverzeichnis hinzu (Standard: \"-" +"dirty\")" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "Die Optionen --long und --abbrev=0 sind inkompatibel." -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "Keine Namen gefunden, kann nichts beschreiben." -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" -msgstr "Die Option --dirty kann nicht mit Versionen verwendet werden." +msgstr "Die Option --dirty kann nicht mit Commits verwendet werden." #: builtin/diff.c:79 #, c-format msgid "'%s': not a regular file or symlink" -msgstr "'%s': keine reguläre Datei oder symbolischer Link" +msgstr "'%s': keine reguläre Datei oder symbolischer Verweis" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "Ungültige Option: %s" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" -msgstr "Kein Git-Projektarchiv" +msgstr "Kein Git-Repository" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "Objekt '%s' ist ungültig." -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "Mehr als %d Zweige angegeben: '%s'" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "Mehr als zwei Blobs angegeben: '%s'" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "unbehandeltes Objekt '%s' angegeben" @@ -4623,46 +4858,45 @@ msgstr "unbehandeltes Objekt '%s' angegeben" msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [rev-list-opts]" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "zeigt Fortschritt nach <n> Objekten an" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" -msgstr "wählt Behandlung von signierten Markierungen" +msgstr "wählt Behandlung von signierten Tags" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" -msgstr "wählt Behandlung von Markierungen, die gefilterte Objekte markieren" +msgstr "wählt Behandlung von Tags, die gefilterte Objekte markieren" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "Schreibt Kennzeichen in diese Datei" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "Importiert Kennzeichen von dieser Datei" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" -msgstr "" -"erzeugt künstlich einen Markierungsersteller, wenn die Markierung keinen hat" +msgstr "erzeugt künstlich einen Tag-Ersteller, wenn der Tag keinen hat" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" -msgstr "gibt für jede Version den gesamten Baum aus" +msgstr "gibt für jeden Commit das gesamte Verzeichnis aus" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "Benutzt die \"done\"-Funktion um den Strom abzuschließen" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "Ãœberspringt Ausgabe von Blob-Daten" #: builtin/fetch.c:20 msgid "git fetch [<options>] [<repository> [<refspec>...]]" -msgstr "git fetch [<Optionen>] [<Projektarchiv> [<Referenzspezifikation>...]]" +msgstr "git fetch [<Optionen>] [<Repository> [<Refspec>...]]" #: builtin/fetch.c:21 msgid "git fetch [<options>] <group>" @@ -4670,7 +4904,7 @@ msgstr "git fetch [<Optionen>] <Gruppe>" #: builtin/fetch.c:22 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]" -msgstr "git fetch --multiple [<Optionen>] [(<Projektarchiv> | <Gruppe>)...]" +msgstr "git fetch --multiple [<Optionen>] [(<Repository> | <Gruppe>)...]" #: builtin/fetch.c:23 msgid "git fetch --all [<options>]" @@ -4678,7 +4912,7 @@ msgstr "git fetch --all [<Optionen>]" #: builtin/fetch.c:60 msgid "fetch from all remotes" -msgstr "fordert von allen externen Projektarchiven an" +msgstr "fordert von allen Remote-Repositories an" #: builtin/fetch.c:62 msgid "append to .git/FETCH_HEAD instead of overwriting" @@ -4690,24 +4924,25 @@ msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite" #: builtin/fetch.c:65 msgid "force overwrite of local branch" -msgstr "erzwingt das Ãœberschreiben von lokalen Zweigen" +msgstr "erzwingt das Ãœberschreiben von lokalen Branches" #: builtin/fetch.c:67 msgid "fetch from multiple remotes" -msgstr "fordert von mehreren externen Projektarchiven an" +msgstr "fordert von mehreren Remote-Repositories an" #: builtin/fetch.c:69 msgid "fetch all tags and associated objects" -msgstr "fordert alle Markierungen und verbundene Objekte an" +msgstr "fordert alle Tags und verbundene Objekte an" #: builtin/fetch.c:71 msgid "do not fetch all tags (--no-tags)" -msgstr "fordert nicht alle Markierungen an (--no-tags)" +msgstr "fordert nicht alle Tags an (--no-tags)" #: builtin/fetch.c:73 msgid "prune remote-tracking branches no longer on remote" msgstr "" -"entfernt externe Ãœbernahmezweige, die sich nicht mehr im Fernarchiv befinden" +"entfernt Remote-Tracking-Branches, die sich nicht mehr im Remote-Repository " +"befinden" #: builtin/fetch.c:74 msgid "on-demand" @@ -4715,7 +4950,7 @@ msgstr "bei-Bedarf" #: builtin/fetch.c:75 msgid "control recursive fetching of submodules" -msgstr "kontrolliert rekursive Anforderungen von Unterprojekten" +msgstr "kontrolliert rekursive Anforderungen von Submodulen" #: builtin/fetch.c:79 msgid "keep downloaded pack" @@ -4727,203 +4962,204 @@ msgstr "erlaubt Aktualisierung der \"HEAD\"-Referenz" #: builtin/fetch.c:84 msgid "deepen history of shallow clone" -msgstr "vertieft die Historie eines flachen Klon" +msgstr "vertieft die Historie eines flachen Klons" #: builtin/fetch.c:86 msgid "convert to a complete repository" -msgstr "konvertiert zu einem vollständigen Projektarchiv" +msgstr "konvertiert zu einem vollständigen Repository" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "Verzeichnis" #: builtin/fetch.c:89 msgid "prepend this to submodule path output" -msgstr "stellt dies an die Ausgabe der Unterprojekt-Pfade voran" +msgstr "stellt dies an die Ausgabe der Submodul-Pfade voran" #: builtin/fetch.c:92 msgid "default mode for recursion" msgstr "Standard-Modus für Rekursion" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" -msgstr "Konnte externe Referenz der Zweigspitze (HEAD) nicht finden." +msgstr "Konnte Remote-Referenz von HEAD nicht finden." -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "Objekt %s nicht gefunden" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "[aktuell]" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" -msgstr "! %-*s %-*s -> %s (kann nicht im aktuellen Zweig anfordern)" +msgstr "" +"! %-*s %-*s -> %s (kann \"fetch\" im aktuellen Branch nicht ausführen)" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "[zurückgewiesen]" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" -msgstr "[Markierungsaktualisierung]" +msgstr "[Tag Aktualisierung]" -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr " (kann lokale Referenz nicht aktualisieren)" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" -msgstr "[neue Markierung]" +msgstr "[neuer Tag]" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" -msgstr "[neuer Zweig]" +msgstr "[neuer Branch]" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "[neue Referenz]" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "kann lokale Referenz nicht aktualisieren" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "Aktualisierung erzwungen" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "(kein Vorspulen)" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "kann %s nicht öffnen: %s\n" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "Von %.*s\n" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, 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; versuchen Sie\n" -"'git remote prune %s' um jeden älteren, widersprüchlichen Zweig zu löschen." +"'git remote prune %s' um jeden älteren, widersprüchlichen Branch zu löschen." -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr " (%s wird unreferenziert)" -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr " (%s wurde unreferenziert)" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "[gelöscht]" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "(nichts)" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "" -"Das Anfordern in den aktuellen Zweig %s von einem nicht-bloßen Projektarchiv " +"Der \"fetch\" in den aktuellen Branch %s von einem nicht-Bare-Repository " "wurde verweigert." -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" msgstr "Weiß nicht wie von %s angefordert wird." -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, 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:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "Option \"%s\" wird ignoriert für %s\n" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" msgstr "Fordere an von %s\n" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" msgstr "Konnte nicht von %s anfordern" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." msgstr "" -"Kein externes Projektarchiv angegeben. Bitte geben Sie entweder eine URL\n" -"oder den Namen des externen Archivs an, von welchem neue\n" -"Revisionen angefordert werden sollen." +"Kein Remote-Repository angegeben. Bitte geben Sie entweder eine URL\n" +"oder den Namen des Remote-Repositories an, von welchem neue\n" +"Commits angefordert werden sollen." -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." -msgstr "Sie müssen den Namen der Markierung angeben." +msgstr "Sie müssen den Namen des Tags angeben." -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "" "Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden." -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "" -"Die Option --unshallow kann nicht in einem vollständigen Projektarchiv " +"Die Option --unshallow kann nicht in einem vollständigen Repository " "verwendet werden." -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" -msgstr "fetch --all akzeptiert kein Projektarchiv als Argument" +msgstr "fetch --all akzeptiert kein Repository als Argument" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" -msgstr "fetch --all kann nicht mit Referenzspezifikationen verwendet werden." +msgstr "fetch --all kann nicht mit Refspecs verwendet werden." -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" -msgstr "Kein externes Archiv (einzeln oder Gruppe): %s" +msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "" -"Das Abholen einer Gruppe von externen Archiven kann nicht mit der Angabe\n" -"von Referenzspezifikationen verwendet werden." +"Das Abholen einer Gruppe von Remote-Repositories kann nicht mit der Angabe\n" +"von Refspecs verwendet werden." #: builtin/fmt-merge-msg.c:13 msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" "git fmt-merge-msg [-m <Beschreibung>] [--log[=<n>]|--no-log] [--file <Datei>]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "Anzahl" @@ -5001,7 +5237,7 @@ msgstr "zeigt unreferenzierte Objekte" #: builtin/fsck.c:616 msgid "report tags" -msgstr "meldet Markierungen" +msgstr "meldet Tags" #: builtin/fsck.c:617 msgid "report root nodes" @@ -5009,11 +5245,11 @@ msgstr "meldet Hauptwurzeln" #: builtin/fsck.c:618 msgid "make index objects head nodes" -msgstr "erzeugt Kopfknoten der Bereitstellungsobjekte" +msgstr "prüft Objekte in der Staging-Area" #: builtin/fsck.c:619 msgid "make reflogs head nodes (default)" -msgstr "erzeugt Kopfknoten des Referenzprotokolls (Standard)" +msgstr "prüft die Reflogs (Standard)" #: builtin/fsck.c:620 msgid "also consider packs and alternate objects" @@ -5063,7 +5299,7 @@ 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 "" -"Die Datenbank des Projektarchivs wird für eine optimale Performance\n" +"Die Datenbank des Repositories wird für eine optimale Performance\n" "komprimiert. Sie können auch \"git gc\" manuell ausführen.\n" "Siehe \"git help gc\" für weitere Informationen.\n" @@ -5076,240 +5312,240 @@ msgstr "" #: builtin/grep.c:22 msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]" -msgstr "git grep [Optionen] [-e] <Muster> [<Revision>...] [[--] <Pfad>...]" +msgstr "git grep [Optionen] [-e] <Muster> [<Commit>...] [[--] <Pfad>...]" #: builtin/grep.c:217 #, c-format msgid "grep: failed to create thread: %s" msgstr "grep: Fehler beim Erzeugen eines Thread: %s" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "Fehler beim Verzeichniswechsel: %s" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" -msgstr "konnte Zweig (%s) nicht lesen" +msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "Schalter '%c' erwartet einen numerischen Wert" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "kann '%s' nicht öffnen" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" -msgstr "sucht in der Bereitstellung anstatt im Arbeitsbaum" +msgstr "sucht in der Staging-Area anstatt im Arbeitsverzeichnis" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "findet auch in Inhalten, die nicht von Git verwaltet werden" -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "sucht in beobachteten und unbeobachteten Dateien" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "sucht auch in ignorierten Dateien" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" msgstr "zeigt Zeilen ohne Ãœbereinstimmungen" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "findet Ãœbereinstimmungen unabhängig von Groß- und Kleinschreibung" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "sucht nur ganze Wörter" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "verarbeitet binäre Dateien als Text" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "findet keine Muster in Binärdateien" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "durchläuft höchstens <Tiefe> Ebenen" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "verwendet erweiterte reguläre Ausdrücke aus POSIX" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "verwendet grundlegende reguläre Ausdrücke aus POSIX (Standard)" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "interpretiert Muster als feste Zeichenketten" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "verwendet Perl-kompatible reguläre Ausdrücke" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "zeigt Zeilennummern" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "zeigt keine Dateinamen" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "zeigt Dateinamen" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "zeigt Dateinamen relativ zum Projektverzeichnis" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "zeigt nur Dateinamen anstatt übereinstimmende Zeilen" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "Synonym für --files-with-matches" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "zeigt nur die Dateinamen ohne Ãœbereinstimmungen" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "gibt NUL-Zeichen nach Dateinamen aus" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "zeigt, anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "hebt Ãœbereinstimmungen hervor" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "" "gibt eine Leerzeile zwischen Ãœbereinstimmungen in verschiedenen Dateien aus" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "" "zeigt den Dateinamen nur einmal oberhalb der Ãœbereinstimmungen aus dieser " "Datei an" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "zeigt <n> Zeilen vor und nach den Ãœbereinstimmungen an" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "zeigt <n> Zeilen vor den Ãœbereinstimmungen an" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "zeigt <n> Zeilen nach den Ãœbereinstimmungen an" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "Kurzform für -C NUM" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "zeigt eine Zeile mit dem Funktionsnamen vor Ãœbereinstimmungen an" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "zeigt die umgebende Funktion an" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "liest Muster von einer Datei" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "findet <Muster>" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "kombiniert Muster, die mit -e angegeben wurden" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "zeigt Ãœbereinstimmungen nur durch Beendigungsstatus an" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "zeigt nur Ãœbereinstimmungen von Dateien, die allen Mustern entsprechen" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" -msgstr "zeigt geparsten Baum für \"grep\"-Ausdruck" +msgstr "zeigt geparstes Verzeichnis für \"grep\"-Ausdruck" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "Anzeigeprogramm" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "zeigt Dateien mit Ãœbereinstimmungen im Anzeigeprogramm" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "erlaubt den Aufruf von grep(1) (von dieser Programmversion ignoriert)" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "zeigt Verwendung" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "keine Muster angegeben" -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "" -"Die Option --open-files-in-pager kann nur innerhalb des Arbeitsbaums " -"verwendet werden." +"Die Option --open-files-in-pager kann nur innerhalb des " +"Arbeitsverzeichnisses verwendet werden." -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "" "Die Optionen --cached und --untracked können nicht mit --no-index verwendet " "werden." -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "" -"Die Optionen --no-index und --untracked können nicht mit Versionen verwendet " +"Die Optionen --no-index und --untracked können nicht mit Commits verwendet " "werden." -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "" "Die Option --[no-]exclude-standard kann nicht mit beobachteten Inhalten " "verwendet werden." -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." -msgstr "Die Option --cached kann nicht mit Zweigen verwendet werden." +msgstr "Die Option --cached kann nicht mit \"Tree\"-Objekten verwendet werden." #: builtin/hash-object.c:60 msgid "" @@ -5347,54 +5583,54 @@ msgstr "speichert Datei wie sie ist, ohne Filter" msgid "process file as it were from this path" msgstr "verarbeitet Datei, als ob sie von diesem Pfad wäre" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "Anzeige aller vorhandenen Kommandos" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "zeigt Liste von allgemein verwendeten Anleitungen" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "zeigt Handbuch" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "zeigt Handbuch in einem Webbrowser" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "zeigt Info-Seite" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "git help [--all] [--guides] [--man|--web|--info] [Kommando]" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "nicht erkanntes Hilfeformat: %s" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "Konnte emacsclient nicht starten." -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "Konnte Version des emacsclient nicht parsen." -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "Version des emacsclient '%d' ist zu alt (< 22)." -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "Fehler beim Ausführen von '%s': %s" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" @@ -5403,7 +5639,7 @@ msgstr "" "'%s': Pfad für nicht unterstützten Handbuchbetrachter.\n" "Sie könnten stattdessen 'man.<Werkzeug>.cmd' benutzen." -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -5412,336 +5648,336 @@ msgstr "" "'%s': Kommando für unterstützten Handbuchbetrachter.\n" "Sie könnten stattdessen 'man.<Werkzeug>.path' benutzen." -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "'%s': unbekannter Handbuch-Betrachter." -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "kein Handbuch-Betrachter konnte mit dieser Anfrage umgehen" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "Definition von Attributen pro Pfad" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "Ein Git-Glossar" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" msgstr "Spezifikation von bewusst ignorierten, unbeobachteten Dateien" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" -msgstr "Definition von Unterprojekt-Eigenschaften" +msgstr "Definition von Submodul-Eigenschaften" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" -msgstr "Spezifikation von Revisionen und Bereichen für Git" +msgstr "Spezifikation von Commits und Bereichen für Git" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" msgstr "Eine einführende Anleitung zu Git (für Version 1.5.1 oder neuer)" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "Eine Ãœbersicht über empfohlene Arbeitsabläufe mit Git" -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "Die allgemein verwendeten Git-Anleitungen sind:\n" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "Verwendung: %s%s" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "für `git %s' wurde der Alias `%s' angelegt" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "Objekt-Typen passen bei %s nicht zusammen" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "Objekt hat unerwarteten Typ" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "kann %d Byte nicht lesen" msgstr[1] "kann %d Bytes nicht lesen" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "zu frühes Dateiende" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "Fehler beim Lesen der Eingabe" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "verwendete mehr Bytes als verfügbar waren" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "Paket ist zu groß für die aktuelle Definition von off_t" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "konnte '%s' nicht erstellen" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "Kann Paketdatei '%s' nicht öffnen" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "Paketsignatur stimmt nicht überein" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "Paketversion %<PRIu32> nicht unterstützt" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "Paket hat ein ungültiges Objekt bei Versatz %lu: %s" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "Dekomprimierung gab %d zurück" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "Wert für Versatz bei Differenzobjekt übergelaufen" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "" "Wert für Versatz bei Differenzobjekt liegt außerhalb des gültigen Bereichs" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "Unbekannter Objekt-Typ %d" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "Kann Paketdatei %s nicht lesen" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "frühzeitiges Ende der Paketdatei, vermisse %lu Byte" msgstr[1] "frühzeitiges Ende der Paketdatei, vermisse %lu Bytes" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "ernsthafte Inkonsistenz nach Dekomprimierung" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "SHA1 KOLLISION MIT %s GEFUNDEN !" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "kann %s nicht lesen" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "Kann existierendes Objekt %s nicht lesen." -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "ungültiges Blob-Objekt %s" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "Ungültiger Objekt-Typ %s" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "Fehler in Objekt" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "Nicht alle Kind-Objekte von %s sind erreichbar" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "Konnte Dateiunterschied nicht anwenden" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "Empfange Objekte" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "Indiziere Objekte" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "Paket ist beschädigt (SHA1 unterschiedlich)" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "kann Paketdatei nicht lesen" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "Paketende enthält nicht verwendbaren Inhalt" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "Fehler beim Ausführen von \"parse_pack_objects()\"" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "Löse Unterschiede auf" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "kann Thread nicht erzeugen: %s" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "Fehler beim Auflösen der Unterschiede" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "vervollständigt mit %d lokalen Objekten" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "Unerwartete Prüfsumme für %s (Festplattenfehler?)" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "Paket hat %d unaufgelöste Unterschied" msgstr[1] "Paket hat %d unaufgelöste Unterschiede" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "Konnte angehängtes Objekt (%d) nicht komprimieren" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "lokales Objekt %s ist beschädigt" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "Fehler beim Schließen der Paketdatei" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "Kann Paketbeschreibungsdatei '%s' nicht schreiben" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "Kann eben erstellte Paketbeschreibungsdatei '%s' nicht schließen" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "Kann Paketdatei nicht speichern" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "Kann Indexdatei nicht speichern" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "ungültige Anzahl von Threads angegeben (%d)" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "keine Unterstützung von Threads, '%s' wird ignoriert" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "Kann existierende Paketdatei '%s' nicht öffnen" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "Kann existierende Indexdatei für Paket '%s' nicht öffnen" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "kein Unterschied: %d Objekt" msgstr[1] "kein Unterschied: %d Objekte" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "Länge der Objekt-Liste = %d: %lu Objekt" msgstr[1] "Länge der Objekt-Liste = %d: %lu Objekte" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "Kann nicht zurück zu Arbeitsverzeichnis wechseln" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "%s ist ungültig" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "Die Option --fix-thin kann nicht ohne --stdin verwendet werden." -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "Name der Paketdatei '%s' endet nicht mit '.pack'" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "Die Option --verify wurde ohne Namen der Paketdatei angegeben." @@ -5773,17 +6009,17 @@ msgstr "kann Verzeichnis '%s' nicht öffnen" #: builtin/init-db.c:97 #, c-format msgid "cannot readlink '%s'" -msgstr "kann Verknüpfung '%s' nicht lesen" +msgstr "kann Verweis '%s' nicht lesen" #: builtin/init-db.c:99 #, c-format msgid "insanely long symlink %s" -msgstr "zu lange symbolische Verknüpfung %s" +msgstr "zu langer symbolischer Verweis %s" #: builtin/init-db.c:102 #, c-format msgid "cannot symlink '%s' '%s'" -msgstr "kann '%s' nicht mit '%s' symbolisch verknüpfen" +msgstr "kann symbolischen Verweis '%s' auf '%s' nicht erstellen" #: builtin/init-db.c:106 #, c-format @@ -5833,7 +6069,7 @@ msgstr "Konnte %s nicht nach %s verschieben" #: builtin/init-db.c:363 #, c-format msgid "Could not create git link %s" -msgstr "Konnte git-Verknüpfung %s nicht erstellen" +msgstr "Konnte git-Verweis %s nicht erstellen" #. #. * TRANSLATORS: The first '%s' is either "Reinitialized @@ -5843,7 +6079,7 @@ msgstr "Konnte git-Verknüpfung %s nicht erstellen" #: builtin/init-db.c:420 #, c-format msgid "%s%s Git repository in %s%s\n" -msgstr "%s%s Git-Projektarchiv in %s%s\n" +msgstr "%s%s Git-Repository in %s%s\n" #: builtin/init-db.c:421 msgid "Reinitialized existing" @@ -5875,10 +6111,9 @@ msgstr "Berechtigungen" #: builtin/init-db.c:491 msgid "specify that the git repository is to be shared amongst several users" -msgstr "" -"gibt an, dass das Git-Projektarchiv mit mehreren Benutzern geteilt wird" +msgstr "gibt an, dass das Git-Repository mit mehreren Benutzern geteilt wird" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "weniger Ausgaben" @@ -5908,368 +6143,385 @@ msgstr "Kann nicht auf aktuelles Arbeitsverzeichnis zugreifen." #: builtin/init-db.c:586 #, c-format msgid "Cannot access work tree '%s'" -msgstr "Kann nicht auf Arbeitsbaum '%s' zugreifen." +msgstr "Kann nicht auf Arbeitsverzeichnis '%s' zugreifen." -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" -msgstr "git log [<Optionen>] [Revisionsbereich>] [[--] <Pfad>...]\n" +msgstr "git log [<Optionen>] [Commitbereich>] [[--] <Pfad>...]\n" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr " oder: git show [Optionen] <Objekt>..." -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "unterdrückt Ausgabe der Unterschiede" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "zeigt Quelle" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "verwendet \"mailmap\"-Datei" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "decorate-Optionen" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "letzte Ausgabe: %d %s\n" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "Kann Objekt %s nicht lesen." -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "Unbekannter Typ: %d" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "format.headers ohne Wert" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "Name des Ausgabeverzeichnisses ist zu lang." -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "Kann Patch-Datei %s nicht öffnen" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." -msgstr "Brauche genau einen Versionsbereich." +msgstr "Brauche genau einen Commit-Bereich." -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." -msgstr "Kein Versionsbereich." +msgstr "Kein Commit-Bereich." -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "Anschreiben benötigt E-Mail-Format" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "ungültiges in-reply-to: %s" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" -msgstr "git format-patch [Optionen] [<seit> | <Revisionsbereich>]" +msgstr "git format-patch [Optionen] [<seit> | <Commitbereich>]" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "Zwei Ausgabeverzeichnisse?" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "verwendet [PATCH n/m] auch mit einzelnem Patch" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "verwendet [PATCH] auch mit mehreren Patches" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "Ausgabe der Patches in Standard-Ausgabe" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "erzeugt ein Deckblatt" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "verwendet einfache Nummernfolge für die Namen der Ausgabedateien" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "Dateiendung" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "verwendet <Dateiendung> anstatt '.patch'" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "beginnt die Nummerierung der Patches bei <n> anstatt bei 1" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "kennzeichnet die Serie als n-te Fassung" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "verwendet [<Prefix>] anstatt [PATCH]" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "speichert erzeugte Dateien in <Verzeichnis>" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "[PATCH] wird nicht entfernt/hinzugefügt" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "gibt keine binären Unterschiede aus" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "" -"schließt keine Patches ein, die einer Version im Ãœbernahmezweig entsprechen" +"schließt keine Patches ein, die einem Commit im Upstream-Branch entsprechen" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "zeigt Patchformat anstatt des Standards (Patch + Zusammenfassung)" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "Email-Einstellungen" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "Header" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "fügt Email-Header hinzu" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "Email" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "fügt \"To:\"-Header hinzu" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "fügt \"Cc:\"-Header hinzu" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "Ident" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "" +"setzt \"From\"-Adresse auf <Ident> (oder Ident des Commit-Erstellers,wenn " +"fehlend)" + +#: builtin/log.c:1199 msgid "message-id" msgstr "message-id" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "macht aus erster Email eine Antwort zu <message-id>" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "Grenze" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "hängt einen Patch an" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "fügt den Patch direkt in die Nachricht ein" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "aktiviert Nachrichtenverkettung, Stile: shallow, deep" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "Signatur" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "fügt eine Signatur hinzu" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "zeigt keine Dateinamen der Patches" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "Ungültige Identifikationszeile: %s" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "Die Optionen -n und -k schließen sich gegenseitig aus." -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "Die Optionen --subject-prefix und -k schließen sich gegenseitig aus." -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "Die Option --name-only kann nicht verwendet werden." -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "Die Option --name-status kann nicht verwendet werden." -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "Die Option --check kann nicht verwendet werden." -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "Standard-Ausgabe oder Verzeichnis, welches von beidem?" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "Konnte Verzeichnis '%s' nicht erstellen." -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "Fehler beim Erstellen der Ausgabedateien." -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" -msgstr "git cherry [-v] [<Ãœbernahmezweig> [<Arbeitszweig> [<Limit>]]]" +msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" msgstr "" -"Konnte gefolgten, externen Zweig nicht finden, bitte geben Sie <upstream> " +"Konnte gefolgten Remote-Branch nicht finden, bitte geben Sie <Upstream> " "manuell an.\n" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" -msgstr "Unbekannte Version %s" +msgstr "Unbekannter Commit %s" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "git ls-files [Optionen] [<Datei>...]" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" -msgstr "zeigt den Dateistatus mit Markierungen" +msgstr "zeigt den Dateistatus mit Tags" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "" "verwendet Kleinbuchstaben für Dateien mit 'assume unchanged' Markierung" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "zeigt zwischengespeicherten Dateien in der Ausgabe an (Standard)" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "zeigt entfernte Dateien in der Ausgabe an" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "zeigt geänderte Dateien in der Ausgabe an" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "zeigt sonstige Dateien in der Ausgabe an" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "zeigt ignorierte Dateien in der Ausgabe an" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" -msgstr "zeigt Objektnamen von Inhalten in der Bereitstellung in der Ausgabe an" +msgstr "" +"zeigt Objektnamen von Inhalten, die zum Commit vorgemerkt sind, in der " +"Ausgabe an" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "zeigt Dateien im Dateisystem, die gelöscht werden müssen, an" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "zeigt nur Namen von 'sonstigen' Verzeichnissen an" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "zeigt keine leeren Verzeichnisse an" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "zeigt nicht zusammengeführte Dateien in der Ausgabe an" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "zeigt 'resolve-undo' Informationen an" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "lässt Dateien aus, die einem Muster entsprechen" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "schließt Muster, gelesen von <Datei>, aus" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "liest zusätzliche pro-Verzeichnis Auschlussmuster aus <Datei>" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "fügt die standardmäßigen Git-Ausschlüsse hinzu" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "Ausgabe relativ zum Projektverzeichnis" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "" -"behandle es als Fehler, wenn sich eine <Datei> nicht in der Bereitstellung " +"behandle es als Fehler, wenn sich eine <Datei> nicht in der Staging-Area " "befindet" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" -msgstr "Versionsreferenz" +msgstr "Commit-Referenz" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "" -"gibt vor, dass Pfade, die seit <Versionsreferenz> gelöscht wurden, immer " -"noch vorhanden sind" +"gibt vor, dass Pfade, die seit <Commit-Referenz> gelöscht wurden, immer noch " +"vorhanden sind" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "zeigt Ausgaben zur Fehlersuche an" #: builtin/ls-tree.c:27 msgid "git ls-tree [<options>] <tree-ish> [<path>...]" -msgstr "git ls-tree [<Optionen>] <Versionsreferenz> [<Pfad>...]" +msgstr "git ls-tree [<Optionen>] <Commit-Referenz> [<Pfad>...]" #: builtin/ls-tree.c:125 msgid "only show trees" -msgstr "zeigt nur Bäume an" +msgstr "zeigt nur Verzeichnisse an" #: builtin/ls-tree.c:127 msgid "recurse into subtrees" -msgstr "führt Rekursion in Teilbäumen durch" +msgstr "führt Rekursion in Unterverzeichnissen durch" #: builtin/ls-tree.c:129 msgid "show trees when recursing" -msgstr "zeigt Bäume bei Rekursion an" +msgstr "zeigt Verzeichnisse bei Rekursion an" #: builtin/ls-tree.c:132 msgid "terminate entries with NUL byte" @@ -6290,195 +6542,187 @@ msgstr "verwendet vollständige Pfadnamen" #: builtin/ls-tree.c:142 msgid "list entire tree; not just current directory (implies --full-name)" msgstr "" -"listet den gesamten Baum auf; nicht nur das aktuelle Verzeichnis (impliziert " -"--full-name)" +"listet das gesamte Verzeichnis auf; nicht nur das aktuelle Verzeichnis " +"(impliziert --full-name)" #: builtin/merge.c:43 msgid "git merge [options] [<commit>...]" -msgstr "git merge [Optionen] [<Version>...]" +msgstr "git merge [Optionen] [<Commit>...]" #: builtin/merge.c:44 msgid "git merge [options] <msg> HEAD <commit>" -msgstr "git merge [Optionen] <Beschreibung> HEAD <Version>" +msgstr "git merge [Optionen] <Beschreibung> HEAD <Commit>" #: builtin/merge.c:45 msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "Schalter 'm' erfordert einen Wert." -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" -msgstr "Konnte Zusammenführungsstrategie '%s' nicht finden.\n" +msgstr "Konnte Merge-Strategie '%s' nicht finden.\n" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "Verfügbare Strategien sind:" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "Verfügbare benutzerdefinierte Strategien sind:" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" -msgstr "" -"zeigt keine Zusammenfassung der Unterschiede am Schluss der Zusammenführung " -"an" +msgstr "zeigt keine Zusammenfassung der Unterschiede am Schluss des Merges an" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" -msgstr "" -"zeigt eine Zusammenfassung der Unterschiede am Schluss der Zusammenführung an" +msgstr "zeigt eine Zusammenfassung der Unterschiede am Schluss des Merges an" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "(Synonym für --stat)" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "" -"fügt (höchstens <n>) Einträge von \"shortlog\" zur Beschreibung der " -"Zusammenführung hinzu" +"fügt (höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-" +"Commits hinzu" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" -msgstr "erzeugt eine einzelne Version anstatt einer Zusammenführung" +msgstr "erzeugt einen einzelnen Commit anstatt eines Merges" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" -msgstr "" -"führt eine Eintragung durch, wenn die Zusammenführung erfolgreich war " -"(Standard)" +msgstr "führt einen Commit durch, wenn der Merge erfolgreich war (Standard)" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" -msgstr "Bearbeitung der Versionsbeschreibung vor der Eintragung" +msgstr "Bearbeitung der Beschreibung vor dem Commit" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "erlaubt Vorspulen (Standard)" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "bricht ab, wenn kein Vorspulen möglich ist" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" -msgstr "überprüft die genannte Version auf eine gültige GPG-Signatur" +msgstr "überprüft den genannten Commit auf eine gültige GPG-Signatur" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "Strategie" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" -msgstr "zu verwendende Zusammenführungsstrategie" +msgstr "zu verwendende Merge-Strategie" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "Option=Wert" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" -msgstr "Option für ausgewählte Zusammenführungsstrategie" +msgstr "Option für ausgewählte Merge-Strategie" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "" -"führt Versionsbeschreibung zusammen (für eine Zusammenführung, die kein " -"Vorspulen war)" +"führt Commit-Beschreibung zusammen (für einen Merge, der kein Vorspulen war)" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" -msgstr "bricht die sich im Gange befindliche Zusammenführung ab" +msgstr "bricht den sich im Gange befindlichen Merge ab" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "Konnte \"stash\" nicht ausführen." -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "\"stash\" fehlgeschlagen" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "kein gültiges Objekt: %s" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "read-tree fehlgeschlagen" -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr " (nichts zu quetschen)" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" -msgstr "Quetsche Version -- Zweigspitze (HEAD) wird nicht aktualisiert\n" +msgstr "Quetsche Commit -- HEAD wird nicht aktualisiert\n" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "Schreibe SQUASH_MSG" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "Schließe SQUASH_MSG ab" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" -msgstr "" -"Keine Zusammenführungsbeschreibung -- Zweigspitze (HEAD) wird nicht " -"aktualisiert\n" +msgstr "Keine Merge-Commit-Beschreibung -- HEAD wird nicht aktualisiert\n" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" -msgstr "'%s' zeigt auf keine Version" +msgstr "'%s' zeigt auf keinen Commit" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Ungültiger branch.%s.mergeoptions String: %s" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" -msgstr "\"git write-tree\" schlug beim Schreiben eines Baumes fehl" +msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." -msgstr "Es wird nur die Zusammenführung von zwei Zweigen behandelt." +msgstr "Es wird nur der Merge von zwei Branches behandelt." -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "Unbekannte Option für merge-recursive: -X%s" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "konnte %s nicht schreiben" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "konnte nicht von '%s' lesen" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" -"Zusammenführung wurde nicht eingetragen; benutzen Sie 'git commit' um die " -"Zusammenführung abzuschließen.\n" +"Merge wurde nicht committet; benutzen Sie 'git commit' um den Merge " +"abzuschließen.\n" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6487,219 +6731,212 @@ msgid "" "Lines starting with '%c' will be ignored, and an empty message aborts\n" "the commit.\n" msgstr "" -"Bitte geben Sie eine Versionsbeschreibung ein um zu erklären, warum diese " -"Zusammenführung erforderlich ist,\n" -"insbesondere wenn es einen aktualisierten, externen Zweig mit einem Thema-" -"Zweig zusammenführt.\n" +"Bitte geben Sie eine Commit-Beschreibung ein um zu erklären, warum dieser\n" +"Merge erforderlich ist, insbesondere wenn es einen aktualisierten\n" +"Upstream-Branch mit einem Thema-Branch zusammenführt.\n" "\n" -"Zeilen beginnend mit '%c' werden ignoriert, und eine leere Beschreibung " -"bricht die Eintragung ab.\n" +"Zeilen beginnend mit '%c' werden ignoriert, und eine leere Beschreibung\n" +"bricht den Commit ab.\n" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." -msgstr "Leere Versionsbeschreibung" +msgstr "Leere Commit-Beschreibung" -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "Wunderbar.\n" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" -"Automatische Zusammenführung fehlgeschlagen; beheben Sie die Konflikte und " -"tragen Sie dann das Ergebnis ein.\n" +"Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen " +"Sie dann das Ergebnis.\n" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" -msgstr "'%s' ist keine Version" +msgstr "'%s' ist kein Commit" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." -msgstr "Sie befinden sich auf keinem Zweig." +msgstr "Sie befinden sich auf keinem Branch." -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." -msgstr "Kein externes Archiv für den aktuellen Zweig." +msgstr "Kein Remote-Repository für den aktuellen Branch." -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "" -"Es ist kein externes Standard-Projektarchiv für den aktuellen Zweig " -"definiert." +"Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert." -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" -msgstr "Kein externer Ãœbernahmezweig für %s von %s" +msgid "No remote-tracking branch for %s from %s" +msgstr "Kein Remote-Tracking-Branch für %s von %s" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "%s - nichts was wir zusammenführen können" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." -msgstr "Es gibt keine Zusammenführung zum Abbrechen (vermisse MERGE_HEAD)" +msgstr "Es gibt keinen Merge zum Abbrechen (vermisse MERGE_HEAD)" -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" -"Sie haben Ihre Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert).\n" -"Bitte tragen Sie Ihre Änderungen ein, bevor Sie zusammenführen können." +"Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n" +"Bitte committen Sie Ihre Änderungen, bevor Sie \"merge\" ausführen können." -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." -msgstr "" -"Sie haben Ihre Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert)." +msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)." -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n" -"Bitte tragen Sie Ihre Änderungen ein, bevor Sie zusammenführen können." +"Bitte committen Sie Ihre Änderungen, bevor Sie \"merge\" ausführen können." -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "" "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)." -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "Sie können --squash nicht mit --no-ff kombinieren." -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "Sie können --no-ff nicht mit --ff--only kombinieren." - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." -msgstr "Keine Version angegeben und merge.defaultToUpstream ist nicht gesetzt." +msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt." -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" -msgstr "Kann nur exakt eine Version in einem leeren Zweig zusammenführen." +msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen." -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" -msgstr "Bin auf einem Zweig, der noch geboren wird; kann nicht quetschen." +msgstr "" +"Bin auf einem Commit, der noch geboren wird; kann \"squash\" nicht ausführen." -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "" -"Nicht vorzuspulende Version kann nicht in einem leeren Zweig verwendet " +"Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet " "werden." -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - nichts was wir zusammenführen können" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" -"Version %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s." +"Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s." -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." -msgstr "Version %s hat eine ungültige GPG-Signatur, angeblich von %s." +msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s." #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." -msgstr "Version %s hat keine GPG-Signatur." +msgstr "Commit %s hat keine GPG-Signatur." -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" -msgstr "Version %s hat eine gültige GPG-Signatur von %s\n" +msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "Aktualisiere %s..%s\n" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" -msgstr "Probiere wirklich triviale \"in-index\"-Zusammenführung...\n" +msgstr "Probiere wirklich trivialen \"in-index\"-Merge...\n" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "Nein.\n" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "Vorspulen nicht möglich, breche ab." -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" -msgstr "Rücklauf des Zweiges bis zum Ursprung...\n" +msgstr "Rücklauf des Verzeichnisses bis zum Ursprung...\n" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" -msgstr "Probiere Zusammenführungsstrategie %s...\n" +msgstr "Probiere Merge-Strategie %s...\n" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" -msgstr "Keine Zusammenführungsstrategie behandelt diese Zusammenführung.\n" +msgstr "Keine Merge-Strategie behandelt diesen Merge.\n" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" -msgstr "Zusammenführung mit Strategie %s fehlgeschlagen.\n" +msgstr "Merge mit Strategie %s fehlgeschlagen.\n" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "Benutzen Sie \"%s\" um die Auflösung per Hand vorzubereiten.\n" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" -"Automatische Zusammenführung abgeschlossen; halte, wie gewünscht, vor der " -"Eintragung an\n" +"Automatischer Merge abgeschlossen; halte, wie gewünscht, vor dem Commit an\n" #: builtin/merge-base.c:26 msgid "git merge-base [-a|--all] <commit> <commit>..." -msgstr "git merge-base [-a|--all] <Version> <Version>..." +msgstr "git merge-base [-a|--all] <Commit> <Commit>..." #: builtin/merge-base.c:27 msgid "git merge-base [-a|--all] --octopus <commit>..." -msgstr "git merge-base [-a|--all] --octopus <Version>..." +msgstr "git merge-base [-a|--all] --octopus <Commit>..." #: builtin/merge-base.c:28 msgid "git merge-base --independent <commit>..." -msgstr "git merge-base --independent <Version>..." +msgstr "git merge-base --independent <Commit>..." #: builtin/merge-base.c:29 msgid "git merge-base --is-ancestor <commit> <commit>" -msgstr "git merge-base --is-ancestor <Version> <Version>" +msgstr "git merge-base --is-ancestor <Commit> <Commit>" #: builtin/merge-base.c:98 msgid "output all common ancestors" -msgstr "Ausgabe aller gemeinsamen Vorfahren" +msgstr "Ausgabe aller gemeinsamen Vorgänger-Commits" #: builtin/merge-base.c:99 msgid "find ancestors for a single n-way merge" -msgstr "findet Vorfahren für eine einzelne n-Wege-Zusammenführung" +msgstr "findet Vorgänger-Commits für einen einzelnen n-Wege-Merge" #: builtin/merge-base.c:100 msgid "list revs not reachable from others" -msgstr "listet Versionen auf, die nicht durch Andere erreichbar sind" +msgstr "listet Commits auf, die nicht durch Andere erreichbar sind" #: builtin/merge-base.c:102 msgid "is the first one ancestor of the other?" -msgstr "ist der Erste ein Vorfahre von dem Anderen?" +msgstr "ist der Erste ein Vorgänger-Commit von dem Anderen?" #: builtin/merge-file.c:8 msgid "" @@ -6715,7 +6952,7 @@ msgstr "sendet Ergebnisse zur Standard-Ausgabe" #: builtin/merge-file.c:34 msgid "use a diff3 based merge" -msgstr "verwendet eine diff3 basierte Zusammenführung" +msgstr "verwendet einen diff3 basierten Merge" #: builtin/merge-file.c:35 msgid "for conflicts, use our version" @@ -6755,7 +6992,7 @@ msgstr "erlaubt fehlende Objekte" #: builtin/mktree.c:155 msgid "allow creation of more than one tree" -msgstr "erlaubt die Erstellung von mehr als einem Baum" +msgstr "erlaubt die Erstellung von mehr als einem \"Tree\"-Objekt" #: builtin/mv.c:14 msgid "git mv [options] <source>... <destination>" @@ -6789,7 +7026,7 @@ msgstr "kann Verzeichnis nicht über Datei verschieben" #: builtin/mv.c:128 #, c-format msgid "Huh? %.*s is in index?" -msgstr "Huh? %.*s ist in der Bereitstellung?" +msgstr "Huh? %.*s ist zum Commit vorgemerkt?" #: builtin/mv.c:140 msgid "source directory is empty" @@ -6831,47 +7068,51 @@ msgstr "Benenne %s nach %s um\n" msgid "renaming '%s' failed" msgstr "Umbenennung von '%s' fehlgeschlagen" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." -msgstr "git name-rev [Optionen] <Version>..." +msgstr "git name-rev [Optionen] <Commit>..." -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "git name-rev [Optionen] --all" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "git name-rev [Optionen] --stdin" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "zeigt nur Namen an (keine SHA-1)" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" -msgstr "verwendet nur Markierungen um die Versionen zu benennen" +msgstr "verwendet nur Tags um die Commits zu benennen" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "verwendet nur Referenzen die <Muster> entsprechen" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" -msgstr "listet alle Versionen auf, die von allen Referenzen erreichbar sind" +msgstr "listet alle Commits auf, die von allen Referenzen erreichbar sind" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "liest von der Standard-Eingabe" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "erlaubt Ausgabe von `undefinierten` Namen" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "dereferenziert Tags in der Eingabe (interne Verwendung)" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "git notes [--ref <Notiz-Referenz>] [list [<Objekt>]]" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6879,12 +7120,12 @@ msgstr "" "git notes [--ref <Notiz-Referenz>] add [-f] [-m <Nachricht> | -F <Datei> | (-" "c | -C) <Objekt>] [<Objekt>]" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "" "git notes [--ref <Notiz-Referenz>] copy [-f] <von-Objekt> <nach-Objekt>" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6892,223 +7133,201 @@ msgstr "" "git notes [--ref <Notiz-Referenz>] append [-m <Nachricht> | -F <Datei> | (-c " "| -C) <Objekt>] [<Objekt>]" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "git notes [--ref <Notiz-Referenz>] edit [<Objekt>]" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "git notes [--ref <Notiz-Referenz>] show [<Objekt>]" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "" "git notes [--ref <Notiz-Referenz>] merge [-v | -q] [-s <Strategie> ] <Notiz-" "Referenz>" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "git notes merge --commit [-v | -q]" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "git notes merge --abort [-v | -q]" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "git notes [--ref <Notiz-Referenz>] remove [<Objekt>...]" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "git notes [--ref <Notiz-Referenz>] prune [-n | -v]" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "git notes [--ref <Notiz-Referenz>] get-ref" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "git notes [list [<Objekt>]]" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "git notes add [<Optionen>] [<Objekt>]" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "git notes copy [<Optionen>] <von-Objekt> <nach-Objekt>" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "git notes copy --stdin [<von-Objekt> <nach-Objekt>]..." -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "git notes append [<Optionen>] [<Objekt>]" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "git notes edit [<Objekt>]" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "git notes show [<Objekt>]" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "git notes merge [<Optionen>] <Notiz-Referenz>" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "git notes merge --commit [<Optionen>]" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "git notes merge --abort [<Optionen>]" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "git notes remove [<Objekt>]" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "git notes prune [<Optionen>]" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "git notes get-ref" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "konnte 'show' für Objekt '%s' nicht starten" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "Konnte Ausgabe von 'show' nicht lesen." -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "konnte 'show' für Objekt '%s' nicht abschließen" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "konnte Datei '%s' nicht erstellen" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "" "Bitte liefern Sie den Notiz-Inhalt unter Verwendung der Option -m oder -F." -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "Entferne Notiz für Objekt %s\n" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "Konnte Notiz-Objekt nicht schreiben" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "Die Notiz-Inhalte wurden in %s belassen" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "kann '%s' nicht lesen" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "konnte '%s' nicht öffnen oder lesen" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "Konnte '%s' nicht als gültige Referenz auflösen." -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "Fehler beim Lesen des Objektes '%s'." -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "Kann uninitialisierten/unreferenzierten Notiz-Baum nicht eintragen." - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "Ungültiger notes.rewriteMode Wert: '%s'" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "" -"Umschreiben 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:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "Ungültiger %s Wert: '%s'" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "Fehlerhafte Eingabezeile: '%s'." -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "zu viele Parameter" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "Kein Notiz für Objekt %s gefunden." -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "Notizinhalte als Zeichenkette" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "Notizinhalte in einer Datei" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "Objekt" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "Wiederverwendung und Bearbeitung des angegebenen Notiz-Objektes" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "Wiederverwendung des angegebenen Notiz-Objektes" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "ersetzt existierende Notizen" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -7117,26 +7336,26 @@ msgstr "" "Konnte Notizen nicht hinzufügen. Existierende Notizen für Objekt %s " "gefunden. Verwenden Sie '-f' um die existierenden Notizen zu überschreiben." -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "Ãœberschreibe existierende Notizen für Objekt %s\n" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "liest Objekte von der Standard-Eingabe" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "" "lädt Konfiguration für <Kommando> beim Umschreiben von Versionen (impliziert " "--stdin)" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "zu wenig Parameter" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -7145,12 +7364,12 @@ msgstr "" "Kann Notizen nicht kopieren. Existierende Notizen für Objekt %s gefunden. " "Verwenden Sie '-f' um die existierenden Notizen zu überschreiben." -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "Keine Notizen für Quell-Objekt %s. Kopie nicht möglich." -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" @@ -7159,15 +7378,15 @@ msgstr "" "Die Optionen -m/-F/-c/-C sind für das Unterkommando 'edit' veraltet.\n" "Bitte benutzen Sie stattdessen 'git notes add -f -m/-F/-c/-C'.\n" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "Allgemeine Optionen" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" -msgstr "Optionen für Zusammenführung" +msgstr "Merge-Optionen" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" @@ -7175,46 +7394,46 @@ msgstr "" "löst Konflikte bei Notizen mit der angegebenen Strategie auf (manual/ours/" "theirs/union/cat_sort_uniq)" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "trägt nicht zusammengeführte Notizen ein" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "" -"schließt Zusammenführung von Notizen ab, in dem nicht zusammengeführte " -"Notizen eingetragen werden" +"schließt Merge von Notizen ab, in dem nicht zusammengeführte Notizen " +"committet werden" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" -msgstr "bricht Konfliktauflösung bei Zusammenführung von Notizen ab" +msgstr "bricht Konfliktauflösung beim Merge von Notizen ab" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" -msgstr "bricht Zusammenführung von Notizen ab" +msgstr "bricht Merge von Notizen ab" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "Objekt %s hat keine Notiz\n" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "der Versuch, eine nicht existierende Notiz zu löschen, ist kein Fehler" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "liest Objektnamen von der Standard-Eingabe" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "Notiz-Referenz" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "verwendet Notizen von <Notiz-Referenz>" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "Unbekanntes Unterkommando: %s" @@ -7237,12 +7456,12 @@ msgstr "Fehler beim Komprimieren (%d)" #: builtin/pack-objects.c:2397 #, c-format msgid "unsupported index version %s" -msgstr "Nicht unterstützte Bereitstellungsversion %s" +msgstr "Nicht unterstützte Staging-Area-Version %s" #: builtin/pack-objects.c:2401 #, c-format msgid "bad index version '%s'" -msgstr "Ungültige Bereitstellungsversion '%s'" +msgstr "Ungültige Staging-Area-Version '%s'" #: builtin/pack-objects.c:2424 #, c-format @@ -7328,7 +7547,7 @@ msgstr "erzeugt keine leeren Pakete" #: builtin/pack-objects.c:2481 msgid "read revision arguments from standard input" -msgstr "liest Argumente bezüglich Revisionen von der Standard-Eingabe" +msgstr "liest Argumente bezüglich Commits von der Standard-Eingabe" #: builtin/pack-objects.c:2483 msgid "limit the objects to those that are not yet packed" @@ -7341,8 +7560,7 @@ msgstr "schließt Objekte ein, die von jeder Referenz erreichbar sind" #: builtin/pack-objects.c:2489 msgid "include objects referred by reflog entries" msgstr "" -"schließt Objekte ein, die von Einträgen des Referenzprotokolls referenziert " -"werden" +"schließt Objekte ein, die von Einträgen des Reflogs referenziert werden" #: builtin/pack-objects.c:2492 msgid "output pack to stdout" @@ -7350,8 +7568,7 @@ msgstr "schreibt Paket in die Standard-Ausgabe" #: builtin/pack-objects.c:2494 msgid "include tag objects that refer to objects to be packed" -msgstr "" -"schließt Markierungsobjekte ein, die auf gepackte Objekte referenzieren" +msgstr "schließt Tag-Objekte ein, die auf gepackte Objekte referenzieren" #: builtin/pack-objects.c:2496 msgid "keep unreachable objects" @@ -7379,7 +7596,7 @@ msgstr "Komprimierungsgrad für Paketierung" #: builtin/pack-objects.c:2507 msgid "do not hide commits by grafts" -msgstr "verbirgt keine Versionen mit künstlichen Vorgängern (\"grafts\")" +msgstr "verbirgt keine Commits mit künstlichen Vorgängern (\"grafts\")" #: builtin/pack-refs.c:6 msgid "git pack-refs [options]" @@ -7399,7 +7616,7 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]" #: builtin/prune.c:12 msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]" -msgstr "git prune [-n] [-v] [--expire <Zeit>] [--] [<Zweigspitze>...]" +msgstr "git prune [-n] [-v] [--expire <Zeit>] [--] [<head>...]" #: builtin/prune.c:132 msgid "do not remove, show only" @@ -7415,11 +7632,11 @@ msgstr "lässt Objekte älter als <Zeit> verfallen" #: builtin/push.c:14 msgid "git push [<options>] [<repository> [<refspec>...]]" -msgstr "git push [<Optionen>] [<Projektarchiv> [<Referenzspezifikation>...]]" +msgstr "git push [<Optionen>] [<Repository> [<Refspec>...]]" #: builtin/push.c:45 msgid "tag shorthand without <tag>" -msgstr "Kurzschrift für Markierung ohne <Markierung>" +msgstr "Kurzschrift für Tag ohne <Tag>" #: builtin/push.c:64 msgid "--delete only accepts plain target ref names" @@ -7448,19 +7665,19 @@ msgid "" " git push %s %s\n" "%s" msgstr "" -"Der Name des externen Ãœbernahmezweiges stimmt nicht mit dem Namen Ihres\n" -"aktuellen Zweiges überein. Um auf den Ãœbernahmezweig in dem externen\n" -"Projektarchiv zu versenden, benutzen Sie:\n" +"Der Name des Upstream-Branches stimmt nicht mit dem Namen Ihres\n" +"aktuellen Branches überein. Um auf den Upstream-Branch in dem Remote-\n" +"Repository zu versenden, benutzen Sie:\n" "\n" " git push %s HEAD:%s\n" "\n" -"Um auf den Zweig mit dem selben Namen in dem externen Projekarchiv\n" -"zu versenden, benutzen Sie:\n" +"Um auf den Branch mit dem selben Namen im Remote-Repository zu versenden,\n" +"benutzen Sie:\n" "\n" " git push %s %s\n" "%s" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7469,13 +7686,13 @@ msgid "" "\n" " git push %s HEAD:<name-of-remote-branch>\n" msgstr "" -"Sie befinden sich im Moment auf keinem Zweig.\n" -"Um die Historie, führend zum aktuellen (freistehende Zweigspitze (HEAD))\n" +"Sie befinden sich im Moment auf keinem Branch.\n" +"Um die Historie, führend zum aktuellen (losgelöster HEAD)\n" "Status zu versenden, benutzen Sie\n" "\n" -" git push %s HEAD:<Name-des-externen-Zweiges>\n" +" git push %s HEAD:<Name-des-Remote-Branches>\n" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7483,29 +7700,30 @@ msgid "" "\n" " git push --set-upstream %s %s\n" msgstr "" -"Der aktuelle Zweig %s hat keinen Zweig im externen Projektarchiv.\n" -"Um den aktuellen Zweig zu versenden und das Fernarchiv als externes\n" -"Projektarchiv zu verwenden, benutzen Sie\n" +"Der aktuelle Branch %s hat keinen Upstream-Branch.\n" +"Um den aktuellen Branch zu versenden und den Remote-Branch\n" +"als Upstream-Branch zu setzen, benutzen Sie\n" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." -msgstr "Der aktuelle Zweig %s hat mehrere externe Zweige, Versand verweigert." +msgstr "" +"Der aktuelle Branch %s hat mehrere Upstream-Branches, \"push\" verweigert." -#: builtin/push.c:139 +#: builtin/push.c:142 #, 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 "" -"Sie versenden nach '%s', welches kein externes Projektarchiv Ihres\n" -"aktuellen Zweiges '%s' ist, ohne mir mitzuteilen, was ich versenden\n" -"soll, um welchen externen Zweig zu aktualisieren." +"Sie versenden nach '%s', welches kein Upstream-Repository Ihres aktuellen\n" +"Branches '%s' ist, ohne mir mitzuteilen, was ich versenden soll, um welchen\n" +"Remote-Branch zu aktualisieren." -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7526,6 +7744,7 @@ msgstr "" "wird in Git 2.0 von 'matching' nach 'simple' geändert. Um diese Meldung zu\n" "unterdrücken und das aktuelle Verhalten nach Änderung des Standardwertes\n" "beizubehalten, benutzen Sie:\n" +"\n" " git config --global push.default matching\n" "\n" "Um diese Meldung zu unterdrücken und das neue Verhalten jetzt zu übernehmen, " @@ -7539,28 +7758,28 @@ msgstr "" "Modus 'current' anstatt 'simple', falls Sie gelegentlich ältere Versionen " "von Git benutzen.)" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" -"Sie haben keine Referenzspezifikationen zum Versenden angegeben, und push." -"default ist \"nothing\"." +"Sie haben keine Refspec für \"push\" angegeben, und push.default ist " +"\"nothing\"." -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "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" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Aktualisierungen wurden zurückgewiesen, weil die Spitze Ihres aktuellen\n" -"Zweiges hinter seinem externen Gegenstück zurückgefallen ist. Führen Sie\n" -"die externen Änderungen zusammen (z.B. 'git pull') bevor Sie erneut\n" -"versenden.\n" +"Branches hinter seinem externen Gegenstück zurückgefallen ist. Führen Sie\n" +"die externen Änderungen zusammen (z.B. 'git pull ...') bevor Sie \"push\"\n" +"erneut ausführen.\n" "Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n" "für weitere Details." -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "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" @@ -7568,80 +7787,79 @@ msgid "" "to 'simple', 'current' or 'upstream' to push only the current branch." msgstr "" "Aktualisierungen wurden zurückgewiesen, weil die Spitze eines versendeten\n" -"Zweiges hinter seinem externen Gegenstück zurückgefallen ist. Wenn Sie " +"Branches hinter seinem externen Gegenstück zurückgefallen ist. Wenn Sie " "nicht\n" -"beabsichtigt haben, diesen Zweig zu versenden, können Sie auch den zu " +"beabsichtigt haben, diesen Branch zu versenden, können Sie auch den zu " "versendenden\n" -"Zweig spezifizieren oder die Konfigurationsvariable 'push.default' zu " +"Branch spezifizieren oder die Konfigurationsvariable 'push.default' zu " "'simple', 'current'\n" -"oder 'upstream' setzen, um nur den aktuellen Zweig zu versenden." +"oder 'upstream' setzen, um nur den aktuellen Branch zu versenden." -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "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" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Aktualisierungen wurden zurückgewiesen, weil die Spitze eines versendeten\n" -"Zweiges hinter seinem externen Gegenstück zurückgefallen ist. Checken Sie\n" -"diesen Zweig aus und führen Sie die externen Änderungen zusammen\n" -"(z.B. 'git pull') bevor Sie erneut versenden.\n" +"Branches hinter seinem externen Gegenstück zurückgefallen ist. Checken Sie\n" +"diesen Branch aus und führen Sie die externen Änderungen zusammen\n" +"(z.B. 'git pull ...') bevor Sie erneut \"push\" ausführen.\n" "Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n" "für weitere Details." -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" -"Aktualisierungen wurden zurückgewiesen, weil das Fernarchiv Versionen " +"Aktualisierungen wurden zurückgewiesen, weil das Remote-Repository Commits " "enthält,\n" -"die lokal nicht vorhanden sind. Das wird üblicherweise durch das Versenden " +"die lokal nicht vorhanden sind. Das wird üblicherweise durch einen \"push\" " "von\n" -"Versionen auf dieselbe Referenz von einem anderen Projektarchiv aus " -"verursacht.\n" +"Commits auf dieselbe Referenz von einem anderen Repository aus verursacht.\n" "Vielleicht müssen Sie die externen Änderungen zusammenzuführen (z.B. 'git " -"pull')\n" -"bevor Sie erneut versenden.\n" +"pull ...')\n" +"bevor Sie erneut \"push\" ausführen.\n" "Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n" "für weitere Details." -#: builtin/push.c:231 +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "" -"Aktualisierungen wurden zurückgewiesen, weil die Markierung bereits\n" -"im Fernarchiv existiert." +"Aktualisierungen wurden zurückgewiesen, weil der Tag bereits\n" +"im Remote-Repository existiert." -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" "without using the '--force' option.\n" msgstr "" -"Sie können keine externe Referenz aktualisieren, die auf ein Objekt zeigt,\n" -"das keine Version ist, oder es auf ein solches Objekt zeigen lassen, ohne\n" +"Sie können keine Remote-Referenz aktualisieren, die auf ein Objekt zeigt,\n" +"das kein Commit ist, oder es auf ein solches Objekt zeigen lassen, ohne\n" "die Option '--force' zu verwenden.\n" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "Versende nach %s\n" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "Fehler beim Versenden einiger Referenzen nach '%s'" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" -msgstr "ungültiges Projektarchiv '%s'" +msgstr "ungültiges Repository '%s'" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7653,100 +7871,97 @@ msgid "" "\n" " git push <name>\n" msgstr "" -"Kein Ziel zum Versenden konfiguriert.\n" +"Kein Ziel für \"push\" konfiguriert.\n" "Entweder spezifizieren Sie die URL von der Kommandozeile oder konfigurieren " -"ein externes Projektarchiv unter Benutzung von\n" +"ein Remote-Repository unter Benutzung von\n" "\n" " git remote add <Name> <URL>\n" "\n" -"und versenden dann unter Benutzung dieses Namens\n" +"und führen \"push\" dann unter Benutzung dieses Namens aus\n" "\n" " git push <Name>\n" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "Die Optionen --all und --tags sind inkompatibel." -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" -msgstr "" -"Die Option --all kann nicht mit Referenzspezifikationen kombiniert werden." +msgstr "Die Option --all kann nicht mit Refspecs kombiniert werden." -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "Die Optionen --mirror und --tags sind inkompatibel." -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" -msgstr "" -"Die Option --mirror kann nicht mit Referenzspezifikationen kombiniert werden." +msgstr "Die Option --mirror kann nicht mit Refspecs kombiniert werden." -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "Die Optionen --all und --mirror sind inkompatibel." -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" -msgstr "Projektarchiv" +msgstr "Repository" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "versendet alle Referenzen" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "spiegelt alle Referenzen" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "löscht Referenzen" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" -msgstr "" -"versendet Markierungen (kann nicht mit --all oder --mirror verwendet werden)" +msgstr "versendet Tags (kann nicht mit --all oder --mirror verwendet werden)" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "erzwingt Aktualisierung" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" -msgstr "steuert rekursives Versenden von Unterprojekten" +msgstr "steuert rekursiven \"push\" von Submodulen" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "verwendet kleinere Pakete" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "'receive pack' Programm" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" -msgstr "setzt externes Projektarchiv für \"git pull/status\"" +msgstr "setzt Upstream für \"git pull/status\"" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "entfernt lokal gelöschte Referenzen" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "umgeht \"pre-push hook\"" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" -msgstr "versendet fehlende, aber relevante Markierungen" +msgstr "versendet fehlende, aber relevante Tags" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags." -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "Die Option --delete kann nur mit Referenzen verwendet werden." @@ -7758,76 +7973,83 @@ msgid "" msgstr "" "git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<Prefix>] " "[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" -"index-output=<Datei>] (--empty | <Versionsreferenz1> [<Versionsreferenz2> " -"[<Versionsreferenz3>]])" +"index-output=<Datei>] (--empty | <Commit-Referenz1> [<Commit-Referenz2> " +"[<Commit-Referenz3>]])" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" -msgstr "schreibt resultierende Bereitstellung nach <Datei>" +msgstr "schreibt resultierende Staging-Area nach <Datei>" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" -msgstr "leert die Bereitstellung" +msgstr "leert die Staging-Area" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" -msgstr "Zusammenführung" +msgstr "Merge" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" -msgstr "führt eine Zusammenführung zusätzlich zum Lesen aus" +msgstr "führt einen Merge zusätzlich zum Lesen aus" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" -msgstr "" -"3-Wege-Zusammenführung, wenn keine Zusammenführung auf Dateiebene " -"erforderlich ist" +msgstr "3-Wege-Merge, wenn kein Merge auf Dateiebene erforderlich ist" -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" -msgstr "" -"3-Wege-Zusammenführung bei Vorhandensein von hinzugefügten/entfernten Zeilen" +msgstr "3-Wege-Merge bei Vorhandensein von hinzugefügten/entfernten Zeilen" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "genau wie -m, verwirft aber nicht zusammengeführte Einträge" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "<Unterverzeichnis>/" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" -msgstr "liest den Baum in die Bereitstellung unter <Unterverzeichnis>/" +msgstr "liest das Verzeichnis in die Staging-Area unter <Unterverzeichnis>/" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" -msgstr "aktualisiert Arbeitsbaum mit Ergebnis der Zusammenführung" +msgstr "aktualisiert Arbeitsverzeichnis mit dem Ergebnis des Merges" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "gitignore" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "erlaubt explizit ignorierte Dateien zu überschreiben" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" -msgstr "prüft nicht den Arbeitsbaum nach der Zusammenführung" +msgstr "prüft nicht das Arbeitsverzeichnis nach dem Merge" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" -msgstr "aktualisiert weder die Bereitstellung, noch den Arbeitsbaum" +msgstr "aktualisiert weder die Staging-Area, noch das Arbeitsverzeichnis" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "überspringt Anwendung des Filters für spärliches Auschecken" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "protokolliert Entpacken der Bäume" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "'%s' für '%s' ist kein gültiger Zeitstempel" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "'%s' ist kein gültiger Zeitstempel" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "git remote [-v | --verbose]" @@ -7837,7 +8059,7 @@ msgid "" "git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--" "mirror=<fetch|push>] <name> <url>" msgstr "" -"git remote add [-t <Zweig>] [-m <master>] [-f] [--tags|--no-tags] [--" +"git remote add [-t <Branch>] [-m <master>] [-f] [--tags|--no-tags] [--" "mirror=<fetch|push>] <Name> <URL>" #: builtin/remote.c:13 builtin/remote.c:32 @@ -7850,7 +8072,7 @@ msgstr "git remote remove <Name>" #: builtin/remote.c:15 builtin/remote.c:42 msgid "git remote set-head <name> (-a | -d | <branch>)" -msgstr "git remote set-head <Name> (-a | -d | <Zweig>)" +msgstr "git remote set-head <Name> (-a | -d | <Branch>)" #: builtin/remote.c:16 msgid "git remote [-v | --verbose] show [-n] <name>" @@ -7864,12 +8086,11 @@ msgstr "git remote prune [-n | --dry-run] <Name>" msgid "" "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]" msgstr "" -"git remote [-v | --verbose] update [-p | --prune] [(<Gruppe> | " -"<externesProjektarchiv>)...]" +"git remote [-v | --verbose] update [-p | --prune] [(<Gruppe> | <Remote>)...]" #: builtin/remote.c:19 msgid "git remote set-branches [--add] <name> <branch>..." -msgstr "git remote set-branches [--add] <Name> <Zweig>..." +msgstr "git remote set-branches [--add] <Name> <Branch>..." #: builtin/remote.c:20 builtin/remote.c:68 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]" @@ -7889,11 +8110,11 @@ msgstr "git remote add [<Optionen>] <Name> <URL>" #: builtin/remote.c:47 msgid "git remote set-branches <name> <branch>..." -msgstr "git remote set-branches <Name> <Zweig>..." +msgstr "git remote set-branches <Name> <Branch>..." #: builtin/remote.c:48 msgid "git remote set-branches --add <name> <branch>..." -msgstr "git remote set-branches --add <Name> <Zweig>..." +msgstr "git remote set-branches --add <Name> <Branch>..." #: builtin/remote.c:53 msgid "git remote show [<options>] <name>" @@ -7905,7 +8126,7 @@ msgstr "git remote prune [<Optionen>] <Name>" #: builtin/remote.c:63 msgid "git remote update [<options>] [<group> | <remote>]..." -msgstr "git remote update [<Optionen>] [<Gruppe> | <externesProjektarchiv>]..." +msgstr "git remote update [<Optionen>] [<Gruppe> | <externesRepository>]..." #: builtin/remote.c:98 #, c-format @@ -7927,11 +8148,11 @@ msgstr "unbekanntes Argument für Option --mirror: %s" #: builtin/remote.c:163 msgid "fetch the remote branches" -msgstr "fordert die externen Zweige an" +msgstr "fordert die Remote-Branches an" #: builtin/remote.c:165 msgid "import all tags and associated objects when fetching" -msgstr "importiert alle Markierungen und verbundene Objekte beim Anfordern" +msgstr "importiert alle Tags und verbundene Objekte beim Anfordern" #: builtin/remote.c:168 msgid "or do not fetch any tag at all (--no-tags)" @@ -7939,11 +8160,11 @@ msgstr "oder fordere gar keine Zweige an (--no-tags)" #: builtin/remote.c:170 msgid "branch(es) to track" -msgstr "Zweige zur Ãœbernahme" +msgstr "Branch(es) zur Ãœbernahme" #: builtin/remote.c:171 msgid "master branch" -msgstr "Hauptzweig" +msgstr "Hauptbranch" #: builtin/remote.c:172 msgid "push|fetch" @@ -7952,34 +8173,35 @@ msgstr "push|fetch" #: builtin/remote.c:173 msgid "set up remote as a mirror to push to or fetch from" msgstr "" -"Aufsetzen des Fernarchivs als Spiegelarchiv zum Versenden und Anfordern" +"Aufsetzen des Remote-Repositories als Spiegel-Repository für \"push\" und " +"\"fetch\"" #: builtin/remote.c:185 msgid "specifying a master branch makes no sense with --mirror" msgstr "" -"Die Option --mirror kann nicht mit der Angabe eines Hauptzweiges verwendet " +"Die Option --mirror kann nicht mit der Angabe eines Hauptbranches verwendet " "werden." #: builtin/remote.c:187 msgid "specifying branches to track makes sense only with fetch mirrors" msgstr "" -"Die Angabe von zu folgenden Zweigen kann nur mit dem Anfordern von " +"Die Angabe von zu folgenden Branches kann nur mit dem Anfordern von " "Spiegelarchiven verwendet werden." #: builtin/remote.c:195 builtin/remote.c:646 #, c-format msgid "remote %s already exists." -msgstr "externes Projektarchiv %s existiert bereits" +msgstr "externes Repository %s existiert bereits" #: builtin/remote.c:199 builtin/remote.c:650 #, c-format msgid "'%s' is not a valid remote name" -msgstr "'%s' ist kein gültiger Name für ein externes Projektarchiv" +msgstr "'%s' ist kein gültiger Name für ein Remote-Repository" #: builtin/remote.c:243 #, c-format msgid "Could not setup master '%s'" -msgstr "Konnte symbolische Referenz für Hauptzweig von '%s' nicht einrichten" +msgstr "Konnte symbolische Referenz für Hauptbranch von '%s' nicht einrichten" #: builtin/remote.c:299 #, c-format @@ -7989,7 +8211,7 @@ msgstr "mehr als ein %s" #: builtin/remote.c:339 #, c-format msgid "Could not get fetch map for refspec %s" -msgstr "Konnte Abholungszuordnung für Referenzspezifikation %s nicht bekommen" +msgstr "Konnte Fetch-Map für Refspec %s nicht bekommen" #: builtin/remote.c:440 builtin/remote.c:448 msgid "(matching)" @@ -8007,7 +8229,7 @@ msgstr "Konnte '%s' nicht an '%s' anhängen." #: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890 #, c-format msgid "No such remote: %s" -msgstr "Kein solches externes Archiv: %s" +msgstr "Kein solches Remote-Repository: %s" #: builtin/remote.c:656 #, c-format @@ -8026,8 +8248,7 @@ msgid "" "\t%s\n" "\tPlease update the configuration manually if necessary." msgstr "" -"Keine Aktualisierung der nicht standardmäßigen Referenzspezifikation zum " -"Abholen\n" +"Keine Aktualisierung der nicht standardmäßigen Refspec für \"fetch\"\n" "\t%s\n" "\tBitte aktualisieren Sie, falls notwendig, die Konfiguration manuell." @@ -8054,7 +8275,7 @@ msgstr "Konnte '%s' nicht erstellen" #: builtin/remote.c:764 #, c-format msgid "Could not remove branch %s" -msgstr "Konnte Zweig %s nicht löschen" +msgstr "Konnte Branch %s nicht löschen" #: builtin/remote.c:834 msgid "" @@ -8064,18 +8285,18 @@ msgid_plural "" "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" "to delete them, use:" msgstr[0] "" -"Hinweis: Ein Zweig außerhalb der /refs/remotes/ Hierachie wurde nicht " +"Hinweis: Ein Branch außerhalb der refs/remotes/ Hierachie wurde nicht " "gelöscht;\n" "um diesen zu löschen, benutzen Sie:" msgstr[1] "" -"Hinweis: Einige Zweige außer der /refs/remotes/ Hierarchie wurden nicht " +"Hinweis: Einige Branches außer der refs/remotes/ Hierarchie wurden nicht " "entfernt;\n" "um diese zu entfernen, benutzen Sie:" #: builtin/remote.c:943 #, c-format msgid " new (next fetch will store in remotes/%s)" -msgstr " neu (wird bei nächster Abholung in remotes/%s gespeichert)" +msgstr " neu (wird bei nächstem \"fetch\" in remotes/%s gespeichert)" #: builtin/remote.c:946 msgid " tracked" @@ -8092,30 +8313,30 @@ msgstr " ???" #: builtin/remote.c:991 #, c-format msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch" -msgstr "ungültiges branch.%s.merge; kann nicht auf > 1 Zweig neu aufbauen" +msgstr "ungültiges branch.%s.merge; kann Rebase nicht auf > 1 Branch ausführen" #: builtin/remote.c:998 #, c-format msgid "rebases onto remote %s" -msgstr "baut neu auf externen Zweig %s auf" +msgstr "Rebase auf Remote-Branch %s" #: builtin/remote.c:1001 #, c-format msgid " merges with remote %s" -msgstr " führt mit externem Zweig %s zusammen" +msgstr " führt mit Remote-Branch %s zusammen" #: builtin/remote.c:1002 msgid " and with remote" -msgstr " und mit externem Zweig" +msgstr " und mit Remote-Branch" #: builtin/remote.c:1004 #, c-format msgid "merges with remote %s" -msgstr "führt mit externem Zweig %s zusammen" +msgstr "führt mit Remote-Branch %s zusammen" #: builtin/remote.c:1005 msgid " and with remote" -msgstr " und mit externem Zweig" +msgstr " und mit Remote-Branch" #: builtin/remote.c:1051 msgid "create" @@ -8159,12 +8380,12 @@ msgstr " %-*s versendet nach %s" #: builtin/remote.c:1091 msgid "do not query remotes" -msgstr "keine Abfrage von Fernarchiven" +msgstr "keine Abfrage von Remote-Repositories" #: builtin/remote.c:1118 #, c-format msgid "* remote %s" -msgstr "* externes Projektarchiv %s" +msgstr "* Remote-Repository %s" #: builtin/remote.c:1119 #, c-format @@ -8183,22 +8404,22 @@ msgstr " URL zum Versenden: %s" #: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137 #, c-format msgid " HEAD branch: %s" -msgstr " Hauptzweig: %s" +msgstr " Hauptbranch: %s" #: builtin/remote.c:1139 #, c-format msgid "" " HEAD branch (remote HEAD is ambiguous, may be one of the following):\n" msgstr "" -" Hauptzweig (externer Hauptzweig ist mehrdeutig, könnte einer der folgenden " +" Hauptbranch (externer HEAD ist mehrdeutig, könnte einer der folgenden " "sein):\n" #: builtin/remote.c:1151 #, c-format msgid " Remote branch:%s" msgid_plural " Remote branches:%s" -msgstr[0] " externer Zweig:%s" -msgstr[1] " externe Zweige:%s" +msgstr[0] " Remote-Branch:%s" +msgstr[1] " Remote-Branches:%s" #: builtin/remote.c:1154 builtin/remote.c:1181 msgid " (status not queried)" @@ -8207,8 +8428,8 @@ msgstr " (Zustand nicht abgefragt)" #: builtin/remote.c:1163 msgid " Local branch configured for 'git pull':" msgid_plural " Local branches configured for 'git pull':" -msgstr[0] " Lokaler Zweig konfiguriert für 'git pull':" -msgstr[1] " Lokale Zweige konfiguriert für 'git pull':" +msgstr[0] " Lokaler Branch konfiguriert für 'git pull':" +msgstr[1] " Lokale Branches konfiguriert für 'git pull':" #: builtin/remote.c:1171 msgid " Local refs will be mirrored by 'git push'" @@ -8223,7 +8444,7 @@ msgstr[1] " Lokale Referenzen konfiguriert für 'git push'%s:" #: builtin/remote.c:1199 msgid "set refs/remotes/<name>/HEAD according to remote" -msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Fernarchiv" +msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Remote-Repository" #: builtin/remote.c:1201 msgid "delete refs/remotes/<name>/HEAD" @@ -8231,13 +8452,13 @@ msgstr "entfernt refs/remotes/<Name>/HEAD" #: builtin/remote.c:1216 msgid "Cannot determine remote HEAD" -msgstr "Kann Hauptzweig des externen Projektarchivs nicht bestimmen" +msgstr "Kann HEAD des Remote-Repositories nicht bestimmen" #: builtin/remote.c:1218 msgid "Multiple remote HEAD branches. Please choose one explicitly with:" msgstr "" -"Mehrere Hauptzweige im externen Projektarchiv. Bitte wählen Sie explizit " -"einen aus mit:" +"Mehrere Hauptbranches im Remote-Repository. Bitte wählen Sie explizit einen " +"aus mit:" #: builtin/remote.c:1228 #, c-format @@ -8267,7 +8488,7 @@ msgstr " %s wurde unreferenziert!" #: builtin/remote.c:1281 #, c-format msgid "Pruning %s" -msgstr "entferne veraltete Zweige von %s" +msgstr "entferne veraltete Branches von %s" #: builtin/remote.c:1282 #, c-format @@ -8277,33 +8498,33 @@ msgstr "URL: %s" #: builtin/remote.c:1295 #, c-format msgid " * [would prune] %s" -msgstr " * [würde veralteten Zweig entfernen] %s" +msgstr " * [würde veralteten Branch entfernen] %s" #: builtin/remote.c:1298 #, c-format msgid " * [pruned] %s" -msgstr "* [veralteten Zweig entfernt] %s" +msgstr "* [veralteten Branch entfernt] %s" #: builtin/remote.c:1321 msgid "prune remotes after fetching" -msgstr "entfernt veraltete Zweige im Fernarchiv nach dem Abholen" +msgstr "entfernt veraltete Branches im Remote-Repository nach \"fetch\"" #: builtin/remote.c:1387 builtin/remote.c:1461 #, c-format msgid "No such remote '%s'" -msgstr "Kein solches externes Projektarchiv '%s'" +msgstr "Kein solches Remote-Repository '%s'" #: builtin/remote.c:1407 msgid "add branch" -msgstr "fügt Zweig hinzu" +msgstr "fügt Branch hinzu" #: builtin/remote.c:1414 msgid "no remote specified" -msgstr "kein externes Projektarchiv angegeben" +msgstr "kein Remote-Repository angegeben" #: builtin/remote.c:1436 msgid "manipulate push URLs" -msgstr "manipuliert URLs zum Versenden" +msgstr "manipuliert URLs für \"push\"" #: builtin/remote.c:1438 msgid "add URL" @@ -8330,7 +8551,7 @@ msgstr "Keine solche URL gefunden: %s" #: builtin/remote.c:1497 msgid "Will not delete all non-push URLs" -msgstr "Werde keine URLs entfernen, die nicht für den Versand bestimmt sind" +msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind" #: builtin/remote.c:1569 msgid "be verbose; must be placed before a subcommand" @@ -8366,21 +8587,21 @@ msgstr "git rerere [clean | forget path... | status | remaining | diff | gc]" #: builtin/rerere.c:56 msgid "register clean resolutions in index" -msgstr "registriert saubere Auflösungen in der Bereitstellung" +msgstr "registriert saubere Auflösungen in der Staging-Area" #: builtin/reset.c:25 msgid "" "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]" msgstr "" -"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<Version>]" +"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<Commit>]" #: builtin/reset.c:26 msgid "git reset [-q] <tree-ish> [--] <paths>..." -msgstr "git reset [-q] <Versionsreferenz> [--] <Pfade>..." +msgstr "git reset [-q] <Commit-Referenz> [--] <Pfade>..." #: builtin/reset.c:27 msgid "git reset --patch [<tree-ish>] [--] [<paths>...]" -msgstr "git reset --patch [<Versionsreferenz>] [--] [<Pfade>...]" +msgstr "git reset --patch [<Commit-Referenz>] [--] [<Pfade>...]" #: builtin/reset.c:33 msgid "mixed" @@ -8404,110 +8625,108 @@ msgstr "keep" #: builtin/reset.c:73 msgid "You do not have a valid HEAD." -msgstr "Sie haben keine gültige Zweigspitze (HEAD)." +msgstr "Sie haben keinen gültigen HEAD." #: builtin/reset.c:75 msgid "Failed to find tree of HEAD." -msgstr "Fehler beim Finden des Baumes der Zweigspitze (HEAD)." +msgstr "Fehler beim Finden des \"Tree\"-Objektes von HEAD." #: builtin/reset.c:81 #, c-format msgid "Failed to find tree of %s." -msgstr "Fehler beim Finden des Baumes von %s." +msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s." -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" -msgstr "Zweigspitze (HEAD) ist jetzt bei %s" +msgstr "HEAD ist jetzt bei %s" -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." -msgstr "" -"Kann keine '%s' Zurücksetzung durchführen, während eine Zusammenführung im " -"Gange ist." +msgstr "Kann keinen '%s'-Reset durchführen, während ein Merge im Gange ist." -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "weniger Ausgaben, meldet nur Fehler" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" -msgstr "setzt Zweigspitze (HEAD) und Bereitstellung neu" +msgstr "setzt HEAD und Staging-Area um" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" -msgstr "setzt nur Zweigspitze (HEAD) neu" +msgstr "setzt nur HEAD um" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" -msgstr "setzt Zweigspitze (HEAD), Bereitstellung und Arbeitsbaum neu" +msgstr "setzt HEAD, Staging-Area und Arbeitsverzeichnis um" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" -msgstr "setzt Zweigspitze (HEAD) neu, behält aber lokale Änderungen" +msgstr "setzt HEAD um, behält aber lokale Änderungen" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." -msgstr "Konnte '%s' nicht als gültige Revision auflösen." +msgstr "Konnte '%s' nicht als gültigen Commit auflösen." -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "Konnte Objekt '%s' nicht parsen." -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." -msgstr "Konnte '%s' nicht als gültigen Baum auflösen." +msgstr "Konnte '%s' nicht als gültiges \"Tree\"-Objekt auflösen." -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "--patch ist inkompatibel mit --{hard,mixed,soft}" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "" "--mixed mit Pfaden ist veraltet; benutzen Sie stattdessen 'git reset -- " "<Pfade>'." -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." -msgstr "Eine '%s' Zurücksetzung mit Pfaden ist nicht möglich." +msgstr "Ein '%s'-Reset mit Pfaden ist nicht möglich." -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" -msgstr "'%s' Zurücksetzung ist in einem bloßen Projektarchiv nicht erlaubt" +msgstr "'%s'-Reset ist in einem Bare-Repository nicht erlaubt" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." -msgstr "Konnte Bereitstellungsdatei nicht zu Revision '%s' setzen." +msgstr "Konnte Staging-Area-Datei nicht zu Commit '%s' setzen." -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" -msgstr "Nicht bereitgestellte Änderungen nach Zurücksetzung:" +msgstr "Nicht zum Commit vorgemerkte Änderungen nach Zurücksetzung:" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." -msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." +msgstr "Konnte neue Staging-Area-Datei nicht schreiben." -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "git rev-parse --parseopt [Optionen] -- [<Argumente>...]" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "lässt `--` als Argument" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "stoppt das Parsen nach dem ersten Argument was keine Option ist" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -8524,7 +8743,7 @@ msgstr "" #: builtin/revert.c:22 msgid "git revert [options] <commit-ish>..." -msgstr "git revert [Optionen] <Versionsangabe>..." +msgstr "git revert [Optionen] <Commit-Angabe>..." #: builtin/revert.c:23 msgid "git revert <subcommand>" @@ -8532,185 +8751,212 @@ msgstr "git revert <Unterkommando>" #: builtin/revert.c:28 msgid "git cherry-pick [options] <commit-ish>..." -msgstr "git cherry-pick [Optionen] <Versionsangabe>..." +msgstr "git cherry-pick [Optionen] <Commit-Angabe>..." #: builtin/revert.c:29 msgid "git cherry-pick <subcommand>" msgstr "git cherry-pick <Unterkommando>" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "%s: %s kann nicht mit %s verwendet werden" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "beendet \"revert\" oder \"cherry-pick\" Ablauf" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "setzt \"revert\" oder \"cherry-pick\" Ablauf fort" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "bricht \"revert\" oder \"cherry-pick\" Ablauf ab" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" -msgstr "trägt nicht automatisch ein" +msgstr "committet nicht automatisch" -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" -msgstr "Bearbeitung der Versionsbeschreibung" +msgstr "Bearbeitung der Commit-Beschreibung" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "Nummer des Elternteils" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" -msgstr "Zusammenführungsstrategie" +msgstr "Merge-Strategie" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "Option" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" -msgstr "Option für Zusammenführungsstrategie" +msgstr "Option für Merge-Strategie" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" -msgstr "hängt Versionsnamen an" +msgstr "hängt Commit-Namen an" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "erlaubt Vorspulen" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" -msgstr "erhält ursprüngliche, leere Versionen" +msgstr "erhält ursprüngliche, leere Commits" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" -msgstr "erlaubt Version mit leerer Beschreibung" +msgstr "erlaubt Commits mit leerer Beschreibung" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" -msgstr "behält redundante, leere Versionen" +msgstr "behält redundante, leere Commits" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "Programmfehler" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "\"revert\" fehlgeschlagen" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "\"cherry-pick\" fehlgeschlagen" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "git rm [Optionen] [--] [<Datei>...]" -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "" +"das folgende Submodul (oder ein geschachteltes Submodul hiervon)\n" +"benutzt ein .git-Verzeichnis:" +msgstr[1] "" +"die folgenden Submodule (oder ein geschachteltes Submodul hiervon)\n" +"benutzen ein .git-Verzeichnis:" + +#: builtin/rm.c:70 +msgid "" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"Unterprojekt '%s' (oder ein geschachteltes Unterprojekt hiervon) verwendet\n" -"ein .git-Verzeichnis (benutzen Sie 'rm -rf' wenn Sie dieses wirklich " -"mitsamt\n" +"\n" +"(benutzen Sie 'rm -rf' wenn Sie dieses Submodul wirklich mitsamt\n" "seiner Historie löschen möchten)" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 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) (benutzen Sie -f um die Entfernung zu erzwingen)" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "" +"die folgende Datei hat zum Commit vorgemerkte Änderungen unterschiedlich\n" +"zu der Datei und HEAD:" +msgstr[1] "" +"die folgenden Dateien haben zum Commit vorgemerkte Änderungen " +"unterschiedlich\n" +"zu der Datei und HEAD:" -#: builtin/rm.c:180 -#, c-format +#: builtin/rm.c:235 msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" +"\n" +"(use -f to force removal)" msgstr "" -"'%s' hat Änderungen in der Bereitstellung\n" -"(benutzen Sie --cached um die Datei zu behalten, oder -f um die Entfernung " -"zu erzwingen)" +"\n" +"(benutzen Sie -f um die Löschung zu erzwingen)" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "die folgende Datei hat zum Commit vorgemerkte Änderungen:" +msgstr[1] "die folgenden Dateien haben zum Commit vorgemerkte Änderungen:" + +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"'%s' hat lokale Modifikationen\n" +"\n" "(benutzen Sie --cached um die Datei zu behalten, oder -f um die Entfernung " "zu erzwingen)" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "die folgende Datei hat lokale Änderungen:" +msgstr[1] "die folgenden Dateien haben lokale Änderungen:" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "listet keine gelöschten Dateien auf" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" -msgstr "entfernt nur aus der Bereitstellung" +msgstr "entfernt nur aus der Staging-Area" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "überschreibt die \"up-to-date\" Prüfung" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "erlaubt rekursive Entfernung" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "beendet mit Rückgabewert 0, wenn keine Ãœbereinstimmung gefunden wurde" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "'%s' wird nicht ohne -r rekursiv entfernt" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "git rm: konnte %s nicht löschen" #: builtin/shortlog.c:13 msgid "git shortlog [<options>] [<revision range>] [[--] [<path>...]]" -msgstr "git shortlog [<Optionen>] [Revisionsbereich] [[--] <Pfad>...]" +msgstr "git shortlog [<Optionen>] [Commitbereich] [[--] <Pfad>...]" #: builtin/shortlog.c:131 #, c-format msgid "Missing author: %s" msgstr "fehlender Autor: %s" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" -msgstr "sortiert die Ausgabe entsprechend der Anzahl von Versionen pro Autor" +msgstr "sortiert die Ausgabe entsprechend der Anzahl von Commits pro Autor" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" -msgstr "Unterdrückt Versionsbeschreibungen, liefert nur Anzahl der Versionen" +msgstr "Unterdrückt Commit-Beschreibungen, liefert nur Anzahl der Commits" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "Zeigt die Email-Adresse von jedem Autor" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "w[,i1[,i2]]" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "Ausgabe mit Zeilenumbrüchen" @@ -8723,8 +8969,8 @@ msgid "" msgstr "" "git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--" "current] [--color[=<Wann>] | --no-color] [--sparse] [--more=<n> | --list | --" -"independent | --merge-base] [--no-name | --sha1-name] [--topics] " -"[(<Revision> | <glob>)...]" +"independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<Commit> " +"| <glob>)...]" #: builtin/show-branch.c:10 msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]" @@ -8732,19 +8978,19 @@ msgstr "git show-branch (-g|--reflog)[=<n>[,<Basis>]] [--list] [<Referenz>]" #: builtin/show-branch.c:650 msgid "show remote-tracking and local branches" -msgstr "zeigt externe Ãœbernahmezweige und lokale Zweige an" +msgstr "zeigt Remote-Tracking und lokale Branches an" #: builtin/show-branch.c:652 msgid "show remote-tracking branches" -msgstr "zeigt externe Ãœbernahmezweige an" +msgstr "zeigt Remote-Tracking-Branches an" #: builtin/show-branch.c:654 msgid "color '*!+-' corresponding to the branch" -msgstr "färbt '*!+-' entsprechend des Zweiges ein" +msgstr "färbt '*!+-' entsprechend des Branches ein" #: builtin/show-branch.c:656 msgid "show <n> more commits after the common ancestor" -msgstr "zeigt <n> weitere Versionen nach dem gemeinsamen Vorfahren" +msgstr "zeigt <n> weitere Commits nach dem gemeinsamen Vorgänger-Commit" #: builtin/show-branch.c:658 msgid "synonym to more=-1" @@ -8756,15 +9002,15 @@ msgstr "unterdrückt Namen" #: builtin/show-branch.c:661 msgid "include the current branch" -msgstr "bezieht den aktuellen Zweig ein" +msgstr "bezieht den aktuellen Branch ein" #: builtin/show-branch.c:663 msgid "name commits with their object names" -msgstr "benennt Versionen nach ihren Objektnamen" +msgstr "benennt Commits nach ihren Objektnamen" #: builtin/show-branch.c:665 msgid "show possible merge bases" -msgstr "zeigt mögliche Basen für Zusammenführung" +msgstr "zeigt mögliche Merge-Basen an" #: builtin/show-branch.c:667 msgid "show refs unreachable from any other ref" @@ -8772,29 +9018,27 @@ msgstr "zeigt Referenzen die unerreichbar von allen anderen Referenzen sind" #: builtin/show-branch.c:669 msgid "show commits in topological order" -msgstr "zeigt Versionen in topologischer Ordnung" +msgstr "zeigt Commits in topologischer Ordnung" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" -msgstr "zeigt nur Versionen, die sich nicht im ersten Zweig befinden" +msgstr "zeigt nur Commits, die sich nicht im ersten Branch befinden" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" -msgstr "" -"zeigt Zusammenführungen, die nur von einer Zweigspitze aus erreichbar sind" +msgstr "zeigt Merges, die nur von einem Branch aus erreichbar sind" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" -msgstr "zeigt Versionen, wo kein Elternteil vor seinem Kind kommt" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" +msgstr "topologische Sortierung, Beibehaltung Datumsordnung wo möglich" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "<n>[,<Basis>]" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" -msgstr "" -"zeigt die <n> jüngsten Einträge im Referenzprotokoll beginnend an der Basis" +msgstr "zeigt die <n> jüngsten Einträge im Reflog beginnend an der Basis" #: builtin/show-ref.c:10 msgid "" @@ -8808,40 +9052,40 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "git show-ref --exclude-existing[=Muster] < ref-list" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" -msgstr "zeigt nur Markierungen (kann mit \"heads\" kombiniert werden)" +msgstr "zeigt nur Tags (kann mit \"heads\" kombiniert werden)" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" -msgstr "zeigt nur Zweigspitzen (kann mit \"tags\" kombiniert werden)" +msgstr "zeigt nur Branches (kann mit \"tags\" kombiniert werden)" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "strengere Referenzprüfung, erfordert exakten Referenzpfad" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" -msgstr "zeigt Referenz der Zweigspitze (HEAD)" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" +msgstr "zeigt die HEAD-Referenz, selbst wenn diese ausgefiltert werden würde" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" -msgstr "dereferenziert Markierungen in Objekt-Identifikationen" +msgstr "dereferenziert Tags in Objekt-Identifikationen" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "zeigt nur SHA1 Hash mit <n> Ziffern" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "" "keine Ausgabe der Ergebnisse in die Standard-Ausgabe (nützlich mit --verify)" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "" "zeigt Referenzen von der Standard-Eingabe, die sich nicht im lokalen " -"Projektarchiv befinden, an" +"Repository befinden, an" #: builtin/symbolic-ref.c:7 msgid "git symbolic-ref [options] name [ref]" @@ -8876,24 +9120,24 @@ msgstr "Grund für die Aktualisierung" msgid "" "git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]" msgstr "" -"git tag [-a|-s|-u <Schlüssel-id>] [-f] [-m <Nachricht>|-F <Datei>] " -"<Markierungsname> [<Zweig>]" +"git tag [-a|-s|-u <Schlüssel-id>] [-f] [-m <Nachricht>|-F <Datei>] <Tagname> " +"[<Commit>]" #: builtin/tag.c:23 msgid "git tag -d <tagname>..." -msgstr "git tag -d <Markierungsname>..." +msgstr "git tag -d <Tagname>..." #: builtin/tag.c:24 msgid "" "git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \n" "\t\t[<pattern>...]" msgstr "" -"git tag -l [-n[<Nummer>]] [--contains <Version>] [--points-at <Objekt>] \n" +"git tag -l [-n[<Nummer>]] [--contains <Commit>] [--points-at <Objekt>] \n" "\t\t[<Muster>...]" #: builtin/tag.c:26 msgid "git tag -v <tagname>..." -msgstr "git tag -v <Markierungsname>..." +msgstr "git tag -v <Tagname>..." #: builtin/tag.c:60 #, c-format @@ -8903,22 +9147,22 @@ msgstr "fehlerhaftes Objekt bei '%s'" #: builtin/tag.c:207 #, c-format msgid "tag name too long: %.*s..." -msgstr "Markierungsname zu lang: %.*s..." +msgstr "Tagname zu lang: %.*s..." #: builtin/tag.c:212 #, c-format msgid "tag '%s' not found." -msgstr "Markierung '%s' nicht gefunden." +msgstr "Tag '%s' nicht gefunden." #: builtin/tag.c:227 #, c-format msgid "Deleted tag '%s' (was %s)\n" -msgstr "Gelöschte Markierung '%s' (war %s)\n" +msgstr "Tag '%s' gelöscht (war %s)\n" #: builtin/tag.c:239 #, c-format msgid "could not verify the tag '%s'" -msgstr "Konnte Markierung '%s' nicht verifizieren" +msgstr "Konnte Tag '%s' nicht verifizieren" #: builtin/tag.c:249 #, c-format @@ -8928,7 +9172,7 @@ msgid "" "Lines starting with '%c' will be ignored.\n" msgstr "" "\n" -"Geben Sie eine Markierungsbeschreibung ein.\n" +"Geben Sie eine Tag-Beschreibung ein.\n" "Zeilen, die mit '%c' beginnen, werden ignoriert.\n" #: builtin/tag.c:253 @@ -8940,17 +9184,17 @@ msgid "" "want to.\n" msgstr "" "\n" -"Geben Sie eine Markierungsbeschreibung ein.\n" +"Geben Sie eine Tag-Beschreibung ein.\n" "Zeilen, die mit '%c' beginnen, werden behalten; Sie dürfen diese\n" "selbst entfernen wenn Sie möchten.\n" #: builtin/tag.c:292 msgid "unable to sign the tag" -msgstr "konnte Markierung nicht signieren" +msgstr "konnte Tag nicht signieren" #: builtin/tag.c:294 msgid "unable to write tag file" -msgstr "konnte Markierungsdatei nicht schreiben" +msgstr "konnte Tag-Datei nicht schreiben" #: builtin/tag.c:319 msgid "bad object type." @@ -8958,16 +9202,16 @@ msgstr "ungültiger Objekt-Typ" #: builtin/tag.c:332 msgid "tag header too big." -msgstr "Markierungskopf zu groß." +msgstr "Tag-Kopf zu groß." #: builtin/tag.c:368 msgid "no tag message?" -msgstr "keine Markierungsbeschreibung?" +msgstr "keine Tag-Beschreibung?" #: builtin/tag.c:374 #, c-format msgid "The tag message has been left in %s\n" -msgstr "Die Markierungsbeschreibung wurde gelassen in %s\n" +msgstr "Die Tag-Beschreibung wurde gelassen in %s\n" #: builtin/tag.c:423 msgid "switch 'points-at' requires an object" @@ -8980,59 +9224,59 @@ msgstr "fehlerhafter Objekt-Name '%s'" #: builtin/tag.c:445 msgid "list tag names" -msgstr "listet Markierungsnamen auf" +msgstr "listet Tagnamen auf" #: builtin/tag.c:447 msgid "print <n> lines of each tag message" -msgstr "zeigt <n> Zeilen jeder Markierungsbeschreibung" +msgstr "zeigt <n> Zeilen jeder Tag-Beschreibung" #: builtin/tag.c:449 msgid "delete tags" -msgstr "löscht Markierungen" +msgstr "löscht Tags" #: builtin/tag.c:450 msgid "verify tags" -msgstr "überprüft Markierungen" +msgstr "überprüft Tags" #: builtin/tag.c:452 msgid "Tag creation options" -msgstr "Optionen für Erstellung von Markierungen" +msgstr "Optionen für Erstellung von Tags" #: builtin/tag.c:454 msgid "annotated tag, needs a message" -msgstr "annotierte Markierung, benötigt eine Beschreibung" +msgstr "annotierter Tag, benötigt eine Beschreibung" #: builtin/tag.c:456 msgid "tag message" -msgstr "Markierungsbeschreibung" +msgstr "Tag-Beschreibung" #: builtin/tag.c:458 msgid "annotated and GPG-signed tag" -msgstr "annotierte und GPG-signierte Markierung" +msgstr "annotierter und GPG-signierter Tag" #: builtin/tag.c:462 msgid "use another key to sign the tag" -msgstr "verwendet einen anderen Schlüssel um die Markierung zu signieren" +msgstr "verwendet einen anderen Schlüssel um den Tag zu signieren" #: builtin/tag.c:463 msgid "replace the tag if exists" -msgstr "ersetzt die Markierung, wenn sie existiert" +msgstr "ersetzt den Tag, wenn er existiert" #: builtin/tag.c:464 msgid "show tag list in columns" -msgstr "zeigt Liste der Markierungen in Spalten" +msgstr "zeigt Liste der Tags in Spalten" #: builtin/tag.c:466 msgid "Tag listing options" -msgstr "Optionen für Auflistung der Markierungen" +msgstr "Optionen für Auflistung der Tags" #: builtin/tag.c:469 msgid "print only tags that contain the commit" -msgstr "gibt nur Markierungen aus, die diese Version beinhalten" +msgstr "gibt nur Tags aus, die diesen Commit beinhalten" #: builtin/tag.c:475 msgid "print only tags of the object" -msgstr "gibt nur Markierungen von dem Objekt aus" +msgstr "gibt nur Tags von dem Objekt aus" #: builtin/tag.c:504 msgid "--column and -n are incompatible" @@ -9061,12 +9305,12 @@ msgstr "zu viele Parameter" #: builtin/tag.c:559 #, c-format msgid "'%s' is not a valid tag name." -msgstr "'%s' ist kein gültiger Markierungsname." +msgstr "'%s' ist kein gültiger Tagname." #: builtin/tag.c:564 #, c-format msgid "tag '%s' already exists" -msgstr "Markierung '%s' existiert bereits" +msgstr "Tag '%s' existiert bereits" #: builtin/tag.c:582 #, c-format @@ -9081,7 +9325,7 @@ msgstr "%s: kann Referenz nicht aktualisieren" #: builtin/tag.c:586 #, c-format msgid "Updated tag '%s' (was %s)\n" -msgstr "Aktualisierte Markierung '%s' (war %s)\n" +msgstr "Tag '%s' aktualisiert (war %s)\n" #: builtin/update-index.c:401 msgid "git update-index [options] [--] [<file>...]" @@ -9090,12 +9334,12 @@ msgstr "git update-index [Optionen] [--] [<Datei>...]" #: builtin/update-index.c:718 msgid "continue refresh even when index needs update" msgstr "" -"Aktualisierung fortsetzen, auch wenn die Bereitstellung aktualisiert werden " +"Aktualisierung fortsetzen, auch wenn die Staging-Area aktualisiert werden " "muss" #: builtin/update-index.c:721 msgid "refresh: ignore submodules" -msgstr "Aktualisierung: ignoriert Unterprojekte" +msgstr "Aktualisierung: ignoriert Submodule" #: builtin/update-index.c:724 msgid "do not ignore new files" @@ -9107,12 +9351,12 @@ msgstr "lässt Dateien Verzeichnisse ersetzen, und umgedreht" #: builtin/update-index.c:728 msgid "notice files missing from worktree" -msgstr "beachtet fehlende Dateien im Arbeitsbaum" +msgstr "beachtet fehlende Dateien im Arbeitsverzeichnis" #: builtin/update-index.c:730 msgid "refresh even if index contains unmerged entries" msgstr "" -"aktualisiert, auch wenn die Bereitstellung nicht zusammengeführte Einträge " +"aktualisiert, auch wenn die Staging-Area nicht zusammengeführte Einträge " "beinhaltet" #: builtin/update-index.c:733 @@ -9129,7 +9373,7 @@ msgstr "<Modus> <Objekt> <Pfad>" #: builtin/update-index.c:742 msgid "add the specified entry to the index" -msgstr "stellt den angegebenen Eintrag zur Eintragung bereit" +msgstr "merkt den angegebenen Eintrag zum Commit vor" #: builtin/update-index.c:746 msgid "(+/-)x" @@ -9158,12 +9402,13 @@ msgstr "löscht \"skip-worktree\"-Bit" #: builtin/update-index.c:763 msgid "add to index only; do not add content to object database" msgstr "" -"fügt nur der Bereitstellung hinzu; Inhalt wird nicht der Objekt-Datenbank " -"hinzugefügt" +"merkt die Änderungen nur zum Commit vor; Inhalt wird nicht der Objekt-" +"Datenbank hinzugefügt" #: builtin/update-index.c:765 msgid "remove named paths even if present in worktree" -msgstr "löscht benannte Pfade, auch wenn sie sich im Arbeitsbaum befinden" +msgstr "" +"löscht benannte Pfade, auch wenn sie sich im Arbeitsverzeichnis befinden" #: builtin/update-index.c:767 msgid "with --stdin: input lines are terminated by null bytes" @@ -9175,7 +9420,7 @@ msgstr "liest Liste der zu aktualisierenden Pfade von der Standard-Eingabe" #: builtin/update-index.c:773 msgid "add entries from standard input to the index" -msgstr "fügt Einträge von der Standard-Eingabe der Bereitstellung hinzu" +msgstr "merkt Einträge von der Standard-Eingabe zum Commit vor" #: builtin/update-index.c:777 msgid "repopulate stages #2 and #3 for the listed paths" @@ -9184,12 +9429,11 @@ msgstr "" #: builtin/update-index.c:781 msgid "only update entries that differ from HEAD" -msgstr "" -"aktualisiert nur Einträge, die unterschiedlich zur Zweigspitze (HEAD) sind" +msgstr "aktualisiert nur Einträge, die unterschiedlich zu HEAD sind" #: builtin/update-index.c:785 msgid "ignore files missing from worktree" -msgstr "ignoriert fehlende Dateien im Arbeitsbaum" +msgstr "ignoriert fehlende Dateien im Arbeitsverzeichnis" #: builtin/update-index.c:788 msgid "report actions to standard output" @@ -9201,7 +9445,7 @@ msgstr "(für Fremdprogramme) keine gespeicherten, nicht aufgelöste Konflikte" #: builtin/update-index.c:794 msgid "write index in this format" -msgstr "schreibt Bereitstellungsdatei in diesem Format" +msgstr "schreibt Staging-Area-Datei in diesem Format" #: builtin/update-ref.c:7 msgid "git update-ref [options] -d <refname> [<oldval>]" @@ -9241,11 +9485,11 @@ msgstr "zeigt nur Statistiken" #: builtin/verify-tag.c:17 msgid "git verify-tag [-v|--verbose] <tag>..." -msgstr "git verify-tag [-v|--verbose] <Markierung>..." +msgstr "git verify-tag [-v|--verbose] <Tag>..." #: builtin/verify-tag.c:73 msgid "print tag contents" -msgstr "gibt Markierungsinhalte aus" +msgstr "gibt Tag-Inhalte aus" #: builtin/write-tree.c:13 msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]" @@ -9257,13 +9501,13 @@ msgstr "<Prefix>/" #: builtin/write-tree.c:27 msgid "write tree object for a subdirectory <prefix>" -msgstr "schreibt das Baumobjekt für ein Unterverzeichnis <Prefix>" +msgstr "schreibt das \"Tree\"-Objekt für ein Unterverzeichnis <Prefix>" #: builtin/write-tree.c:30 msgid "only useful for debugging" msgstr "nur nützlich für Fehlersuche" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" @@ -9274,25 +9518,29 @@ msgstr "" "oder 'git help <Konzept>' um mehr über ein spezifisches Kommando oder\n" "Konzept zu erfahren." -#: parse-options.h:156 +#: parse-options.h:144 +msgid "expiry date" +msgstr "Verfallsdatum" + +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "Kein Effekt (Rückwärtskompatibilität)" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "erweiterte Ausgaben" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "weniger Ausgaben" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "benutze <n> Ziffern zur Anzeige von SHA-1s" #: common-cmds.h:8 msgid "Add file contents to the index" -msgstr "stellt Dateiinhalte zur Eintragung bereit" +msgstr "merkt Dateiinhalte zum Commit vor" #: common-cmds.h:9 msgid "Find by binary search the change that introduced a bug" @@ -9301,27 +9549,28 @@ msgstr "" #: common-cmds.h:10 msgid "List, create, or delete branches" -msgstr "Zeigt an, erstellt oder entfernt Zweige" +msgstr "Zeigt an, erstellt oder entfernt Branches" #: common-cmds.h:11 msgid "Checkout a branch or paths to the working tree" -msgstr "Checkt Zweige oder Pfade im Arbeitszweig aus" +msgstr "Checkt Branches oder Pfade im Arbeitsverzeichnis aus" #: common-cmds.h:12 msgid "Clone a repository into a new directory" -msgstr "Klont ein Projektarchiv in einem neuen Verzeichnis" +msgstr "Klont ein Repository in einem neuen Verzeichnis" #: common-cmds.h:13 msgid "Record changes to the repository" -msgstr "Trägt Änderungen in das Projektarchiv ein" +msgstr "Trägt Änderungen in das Repository ein" #: common-cmds.h:14 msgid "Show changes between commits, commit and working tree, etc" -msgstr "Zeigt Änderungen zwischen Versionen, Version und Arbeitszweig, etc. an" +msgstr "" +"Zeigt Änderungen zwischen Commits, Commit und Arbeitsverzeichnis, etc. an" #: common-cmds.h:15 msgid "Download objects and refs from another repository" -msgstr "Lädt Objekte und Referenzen von einem anderen Projektarchiv herunter" +msgstr "Lädt Objekte und Referenzen von einem anderen Repository herunter" #: common-cmds.h:16 msgid "Print lines matching a pattern" @@ -9330,11 +9579,11 @@ msgstr "Stellt Zeilen dar, die einem Muster entsprechen" #: common-cmds.h:17 msgid "Create an empty Git repository or reinitialize an existing one" msgstr "" -"Erstellt ein leeres Git-Projektarchiv oder initialisiert ein bestehendes neu" +"Erstellt ein leeres Git-Repository oder initialisiert ein bestehendes neu" #: common-cmds.h:18 msgid "Show commit logs" -msgstr "Zeigt Versionshistorie an" +msgstr "Zeigt Commit-Historie an" #: common-cmds.h:19 msgid "Join two or more development histories together" @@ -9343,30 +9592,30 @@ msgstr "Führt zwei oder mehr Entwicklungszweige zusammen" #: common-cmds.h:20 msgid "Move or rename a file, a directory, or a symlink" msgstr "" -"Verschiebt oder benennt eine Datei, ein Verzeichnis, oder eine symbolische " -"Verknüpfung um" +"Verschiebt oder benennt eine Datei, ein Verzeichnis, oder einen symbolischen " +"Verweis um" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" +msgid "Fetch from and integrate with another repository or a local branch" msgstr "" -"Fordert Objekte von einem externen Projektarchiv an und führt sie mit einem " -"anderen Projektarchiv oder einem lokalen Zweig zusammen" +"Fordert Objekte von einem externen Repository an und führt sie mit einem " +"anderen Repository oder einem lokalen Branch zusammen" #: common-cmds.h:22 msgid "Update remote refs along with associated objects" -msgstr "Aktualisiert externe Referenzen mitsamt den verbundenen Objekten" +msgstr "Aktualisiert Remote-Referenzen mitsamt den verbundenen Objekten" #: common-cmds.h:23 msgid "Forward-port local commits to the updated upstream head" -msgstr "Baut lokale Versionen auf einem aktuellerem externen Zweig neu auf" +msgstr "Baut lokale Commits auf einem aktuellerem Upstream-Branch neu auf" #: common-cmds.h:24 msgid "Reset current HEAD to the specified state" -msgstr "Setzt die aktuelle Zweigspitze (HEAD) zu einem spezifizierten Zustand" +msgstr "Setzt aktuellen HEAD zu einem spezifizierten Zustand" #: common-cmds.h:25 msgid "Remove files from the working tree and from the index" -msgstr "Löscht Dateien im Arbeitszweig und von der Bereitstellung" +msgstr "Löscht Dateien im Arbeitsverzeichnis und von der Staging-Area" #: common-cmds.h:26 msgid "Show various types of objects" @@ -9374,54 +9623,53 @@ msgstr "Zeigt verschiedene Arten von Objekten an" #: common-cmds.h:27 msgid "Show the working tree status" -msgstr "Zeigt den Zustand des Arbeitszweiges an" +msgstr "Zeigt den Zustand des Arbeitsverzeichnisses an" #: common-cmds.h:28 msgid "Create, list, delete or verify a tag object signed with GPG" msgstr "" -"Erzeugt, listet auf, löscht oder verifiziert ein mit GPG signiertes " -"Markierungsobjekt" +"Erzeugt, listet auf, löscht oder verifiziert ein mit GPG signiertes Tag-" +"Objekt" #: git-am.sh:50 msgid "You need to set your committer info first" -msgstr "Sie müssen zuerst die Informationen des Eintragenden setzen." +msgstr "Sie müssen zuerst die Informationen zum Commit-Ersteller setzen." #: git-am.sh:95 msgid "" "You seem to have moved HEAD since the last 'am' failure.\n" "Not rewinding to ORIG_HEAD" msgstr "" -"Sie scheinen seit dem letzten gescheiterten 'am' die Zweigspitze (HEAD)\n" -"geändert zu haben.\n" +"Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n" "Keine Zurücksetzung zu ORIG_HEAD." #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" -"Wenn Sie das Problem gelöst haben, führen Sie \"$cmdline --resolved\" aus.\n" +"Wenn Sie das Problem gelöst haben, führen Sie \"$cmdline --continue\" aus.\n" "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen\n" "\"$cmdline --skip\" aus.\n" -"Um den ursprünglichen Zweig wiederherzustellen und die Anwendung der\n" +"Um den ursprünglichen Branch wiederherzustellen und die Anwendung der\n" "Patches abzubrechen, führen Sie \"$cmdline --abort\" aus." #: git-am.sh:121 msgid "Cannot fall back to three-way merge." -msgstr "Kann nicht zu 3-Wege-Zusammenführung zurückfallen." +msgstr "Kann nicht zu 3-Wege-Merge zurückfallen." #: git-am.sh:137 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 " +"Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge " "zurückzufallen." #: git-am.sh:139 msgid "Using index info to reconstruct a base tree..." msgstr "" -"Verwende Informationen aus der Bereitstellung um einen Basisbaum " +"Verwende Informationen aus der Staging-Area um einen Basisverzeichnis " "nachzustellen" #: git-am.sh:154 @@ -9434,11 +9682,11 @@ msgstr "" #: git-am.sh:163 msgid "Falling back to patching base and 3-way merge..." -msgstr "Falle zurück zum Patchen der Basis und der 3-Wege-Zusammenführung..." +msgstr "Falle zurück zum Patchen der Basis und des 3-Wege-Merges..." #: git-am.sh:179 msgid "Failed to merge in the changes." -msgstr "Zusammenführung der Änderungen fehlgeschlagen" +msgstr "Merge der Änderungen fehlgeschlagen" #: git-am.sh:274 msgid "Only one StGIT patch series can be applied at once" @@ -9461,28 +9709,35 @@ msgstr "" "Die -b/--binary Option hat seit Langem keinen Effekt und wird\n" "entfernt. Bitte nicht mehr verwenden." -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "" -"Vorheriges Verzeichnis des Neuaufbaus $dotest existiert noch, aber mbox " -"gegeben." +"Vorheriges Rebase-Verzeichnis $dotest existiert noch, aber mbox gegeben." -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "Bitte werden Sie sich klar. --skip oder --abort?" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" +"Stray $dotest Verzeichnis gefunden.\n" +"Benutzen Sie \"git am --abort\" um es zu entfernen." + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt." -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" -msgstr "" -"Unsaubere Bereitstellung: kann Patches nicht anwenden (unsauber: $files)" +msgstr "Geänderte Staging-Area: kann Patches nicht anwenden (geändert: $files)" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -9492,65 +9747,65 @@ msgstr "" "Patch ist leer. Wurde er falsch aufgeteilt?\n" "Wenn Sie diesen Patch auslassen möchten, führen Sie stattdessen\n" "\"$cmdline --skip\" aus.\n" -"Um den ursprünglichen Zweig wiederherzustellen und die Anwendung der " +"Um den ursprünglichen Branch wiederherzustellen und die Anwendung der " "Patches\n" "abzubrechen, führen Sie \"$cmdline --abort\" aus." -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "Patch enthält keine gültige Email-Adresse." -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "Kann nicht interaktiv sein, ohne dass die Standard-Eingabe mit einem " "Terminal verbunden ist." -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" -msgstr "Beschreibung der Eintragung ist:" +msgstr "Commit-Beschreibung 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:764 +#: git-am.sh:783 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:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "Wende an: $FIRSTLINE" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" "already introduced the same changes; you might want to skip this patch." msgstr "" "Keine Änderungen - haben Sie vergessen 'git add' zu benutzen?\n" -"Wenn keine Änderungen mehr zum Bereitstellen vorhanden sind, könnten\n" +"Wenn keine Änderungen mehr zum Commit vorzumerken sind, könnten\n" "diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n" "auslassen." -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" msgstr "" -"Sie haben immer noch nicht zusammengeführte Pfade in der Bereitstellung.\n" +"Sie haben immer noch nicht zusammengeführte Pfade in der Staging-Area.\n" "Haben Sie vergessen 'git add' zu benutzen?" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "Keine Änderungen -- Patches bereits angewendet." -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "Anwendung des Patches fehlgeschlagen bei $msgnum $FIRSTLINE" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" @@ -9559,7 +9814,7 @@ msgstr "" "Die Kopie des fehlgeschlagenen Patches befindet sich in:\n" " $dotest/patch" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "wende zu leerer Historie an" @@ -9582,11 +9837,11 @@ 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 Revision zu sein" +msgstr "'$arg' scheint kein gültiger Commit zu sein" #: git-bisect.sh:117 msgid "Bad HEAD - I need a HEAD" -msgstr "Ungültige Zweigspitze (HEAD) - Zweigspitze (HEAD) wird benötigt" +msgstr "Ungültiger HEAD - HEAD wird benötigt" #: git-bisect.sh:130 #, sh-format @@ -9594,15 +9849,15 @@ msgid "" "Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." msgstr "" "Auschecken von '$start_head' fehlgeschlagen. Versuchen Sie 'git bisect reset " -"<gueltigerzweig>'." +"<gueltigerbranch>'." #: git-bisect.sh:140 msgid "won't bisect on seeked tree" -msgstr "binäre Suche auf gesuchtem Zweig nicht möglich" +msgstr "binäre Suche auf gesuchtem Branch nicht möglich" #: git-bisect.sh:144 msgid "Bad HEAD - strange symbolic ref" -msgstr "Ungültige Zweigspitze (HEAD) - merkwürdige symbolische Referenz" +msgstr "Ungültiger HEAD - merkwürdige symbolische Referenz" #: git-bisect.sh:189 #, sh-format @@ -9631,7 +9886,7 @@ msgstr "'git bisect bad' kann nur ein Argument entgegennehmen." #. this is less optimum. #: git-bisect.sh:273 msgid "Warning: bisecting only with a bad commit." -msgstr "Warnung: binäre Suche nur mit einer fehlerhaften Version" +msgstr "Warnung: binäre Suche nur mit einem fehlerhaften Commit" #. TRANSLATORS: Make sure to include [Y] and [n] in your #. translation. The program will only accept English input @@ -9645,7 +9900,8 @@ msgid "" "You need to give me at least one good and one bad revisions.\n" "(You can use \"git bisect bad\" and \"git bisect good\" for that.)" msgstr "" -"Sie müssen mindestens eine korrekte und eine fehlerhafte Revision angeben.\n" +"Sie müssen mindestens einen korrekten und einen fehlerhaften Commit " +"angeben.\n" "(Sie können dafür \"git bisect bad\" und \"git bisect good\" benutzen.)" #: git-bisect.sh:292 @@ -9655,7 +9911,7 @@ msgid "" "(You can use \"git bisect bad\" and \"git bisect good\" for that.)" msgstr "" "Sie müssen mit \"git bisect start\" beginnen.\n" -"Danach müssen Sie mindestens eine korrekte und eine fehlerhafte Revision " +"Danach müssen Sie mindestens einen korrekten und einen fehlerhaften Commit " "angeben.\n" "(Sie können dafür \"git bisect bad\" und \"git bisect good\" benutzen.)" @@ -9666,7 +9922,7 @@ msgstr "keine binäre Suche im Gange" #: git-bisect.sh:370 #, sh-format msgid "'$invalid' is not a valid commit" -msgstr "'$invalid' ist keine gültige Version" +msgstr "'$invalid' ist kein gültiger Commit" #: git-bisect.sh:379 #, sh-format @@ -9674,8 +9930,8 @@ msgid "" "Could not check out original HEAD '$branch'.\n" "Try 'git bisect reset <commit>'." msgstr "" -"Konnte die ursprüngliche Zweigspitze (HEAD) '$branch' nicht auschecken.\n" -"Versuchen Sie 'git bisect reset <Version>'." +"Konnte den ursprünglichen HEAD '$branch' nicht auschecken.\n" +"Versuchen Sie 'git bisect reset <Commit>'." #: git-bisect.sh:406 msgid "No logfile given" @@ -9728,10 +9984,9 @@ msgid "" "as appropriate to mark resolution, or use 'git commit -a'." msgstr "" "\"pull\" ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben.\n" -"Bitte korrigieren Sie dies im Arbeitsbaum und benutzen Sie dann 'git add/rm " -"<Datei>'\n" -"um die Auflösung entsprechend zu markieren, oder benutzen Sie 'git commit -" -"a'." +"Bitte korrigieren Sie dies im Arbeitsverzeichnis und benutzen Sie dann \n" +"'git add/rm <Datei>' um die Auflösung entsprechend zu markieren, oder\n" +"benutzen Sie 'git commit -a'." #: git-pull.sh:25 msgid "Pull is not possible because you have unmerged files." @@ -9741,8 +9996,8 @@ msgstr "" #: git-pull.sh:203 msgid "updating an unborn branch with changes added to the index" msgstr "" -"Aktualisiere eine ungeborenen Zweig mit Änderungen, die zur Bereitstellung " -"hinzugefügt wurden" +"Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit " +"vorgemerkt sind" #. The fetch involved updating the current branch. #. The working tree and the index file is still based on the @@ -9755,18 +10010,18 @@ msgid "" "Warning: fast-forwarding your working tree from\n" "Warning: commit $orig_head." msgstr "" -"Warnung: Die Anforderung aktualisierte die Spitze des aktuellen Zweiges.\n" -"Warnung: Spule Ihren Arbeitszweig von Version $orig_head vor." +"Warnung: \"fetch\" aktualisierte die Spitze des aktuellen Branches.\n" +"Warnung: Spule Ihr Arbeitsverzeichnis von Commit $orig_head vor." #: git-pull.sh:260 msgid "Cannot merge multiple branches into empty head" -msgstr "Kann nicht mehrere Zweige in einen ungeborenen Zweig zusammenführen" +msgstr "Kann nicht mehrere Branches in einen ungeborenen Branch zusammenführen" #: git-pull.sh:264 msgid "Cannot rebase onto multiple branches" -msgstr "kann nicht auf mehrere Zweige neu aufbauen" +msgstr "kann Rebase nicht auf mehrere Branches ausführen" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9777,50 +10032,68 @@ msgstr "" "aus.\n" "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"git " "rebase --skip\" aus.\n" -"Um den ursprünglichen Zweig wiederherzustellen und den Neuaufbau " -"abzubrechen,\n" +"Um den ursprünglichen Branch wiederherzustellen und den Rebase abzubrechen,\n" "führen Sie \"git rebase --abort\" aus." +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "\"autostash\" angewendet." + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "Kann $stash_sha1 nicht speichern." + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"Anwendung von \"autostash\" resultierte in Konflikten.\n" +"Ihre Änderungen sind im Stash sicher.\n" +"Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." -msgstr "Der \"pre-rebase hook\" hat den Neuaufbau zurückgewiesen." +msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen." -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." -msgstr "\"git-am\" scheint im Gange zu sein. Kann nicht neu aufbauen." +msgstr "\"git-am\" scheint im Gange zu sein. Kann Rebase nicht durchführen." -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "Die Option --exec muss mit --interactive verwendet werden." -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" -msgstr "Kein Neuaufbau im Gange?" +msgstr "Kein Rebase im Gange?" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "" -"Die --edit-todo Aktion kann nur während eines interaktiven Neuaufbaus " -"verwendet werden." +"Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet " +"werden." -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" -msgstr "Kann Zweigspitze (HEAD) nicht lesen" +msgstr "Kann HEAD nicht lesen" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" msgstr "" -"Sie müssen alle Zusammenführungskonflikte editieren und diese dann\n" +"Sie müssen alle Merge-Konflikte editieren und diese dann\n" "mittels \"git add\" als aufgelöst markieren" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "Konnte nicht zu $head_name zurückgehen" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9833,7 +10106,7 @@ msgid "" "valuable there." msgstr "" "Es sieht so aus, als ob es das Verzeichnis $state_dir_base bereits gibt\n" -"und es könnte ein anderer Neuaufbau im Gange sein. Wenn das der Fall ist,\n" +"und es könnte ein anderer Rebase im Gange sein. Wenn das der Fall ist,\n" "probieren Sie bitte\n" "\t$cmd_live_rebase\n" "Wenn das nicht der Fall ist, probieren Sie bitte\n" @@ -9841,59 +10114,68 @@ msgstr "" "und führen Sie dieses Kommando nochmal aus. Es wird angehalten, falls noch\n" "etwas Schützenswertes vorhanden ist." -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" -msgstr "ungültiger Ãœbernahmezweig $upstream_name" +msgstr "ungültiger Upstream-Branch $upstream_name" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" -msgstr "$onto_name: es gibt mehr als eine Zusammenführungsbasis" +msgstr "$onto_name: es gibt mehr als eine Merge-Basis" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" -msgstr "$onto_name: es gibt keine Zusammenführungsbasis" +msgstr "$onto_name: es gibt keine Merge-Basis" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" -msgstr "$onto_name zeigt auf keine gültige Version" +msgstr "$onto_name zeigt auf keinen gültigen Commit" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" -msgstr "fatal: Zweig $branch_name nicht gefunden" +msgstr "fatal: Branch $branch_name nicht gefunden" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "Kann \"autostash\" nicht ausführen." + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "\"autostash\" erzeugt: $stash_abbrev" + +#: git-rebase.sh:528 msgid "Please commit or stash them." -msgstr "Bitte tragen Sie die Änderungen ein oder benutzen Sie \"stash\"." +msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"." -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." -msgstr "Aktueller Zweig $branch_name ist auf dem neusten Stand." +msgstr "Aktueller Branch $branch_name ist auf dem neusten Stand." -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "" -"Aktueller Zweig $branch_name ist auf dem neusten Stand, Neuaufbau erzwungen." +"Aktueller Branch $branch_name ist auf dem neusten Stand, Rebase erzwungen." -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "Änderungen von $mb zu $onto:" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "" -"Zunächst wird die Zweigspitze zurückgespult, um Ihre Änderungen\n" +"Zunächst wird der Branch zurückgespult, um Ihre Änderungen\n" "darauf neu anzuwenden..." -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "$branch_name zu $onto_name vorgespult." @@ -9904,15 +10186,15 @@ msgstr "git stash clear mit Parametern ist nicht implementiert" #: git-stash.sh:74 msgid "You do not have the initial commit yet" -msgstr "Sie haben bisher noch keine initiale Version" +msgstr "Sie haben bisher noch keinen initialen Commit" #: git-stash.sh:89 msgid "Cannot save the current index state" -msgstr "Kann den aktuellen Zustand der Bereitstellung nicht speichern" +msgstr "Kann den aktuellen Zustand der Staging-Area 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" +msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern" #: git-stash.sh:140 msgid "No changes selected" @@ -9920,11 +10202,16 @@ msgstr "Keine Änderungen ausgewählt" #: git-stash.sh:143 msgid "Cannot remove temporary index (can't happen)" -msgstr "Kann temporäre Bereitstellung nicht löschen (kann nicht passieren)" +msgstr "Kann temporäre Staging-Area nicht löschen (kann nicht passieren)" #: git-stash.sh:156 msgid "Cannot record working tree state" -msgstr "Kann Zustand des Arbeitsbaumes nicht aufzeichnen" +msgstr "Kann Zustand des Arbeitsverzeichnisses nicht aufzeichnen" + +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "Kann $ref_stash nicht mit $w_commit aktualisieren." #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the @@ -9936,7 +10223,7 @@ msgstr "Kann Zustand des Arbeitsbaumes nicht aufzeichnen" #. $ 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' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" @@ -9946,122 +10233,140 @@ msgstr "" " Um eine Beschreibung anzugeben, benutzen Sie \"git stash save -- " "'$option'\"" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "Keine lokalen Änderungen zum Speichern" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "" +"Die folgenden unbeobachteten Dateien würden NICHT gespeichert werden,\n" +"müssen aber durch \"stash save\" entfernt werden:" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "" +"Abgebrochen. Benutzen Sie entweder die Option --force oder --include-" +"untracked." + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "Kann \"stash\" nicht initialisieren" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "Kann den aktuellen Status nicht speichern" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" -msgstr "Kann Änderungen am Arbeitsbaum nicht löschen" +msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "Kein \"stash\" gefunden." -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" -msgstr "Zu viele Revisionen angegeben: $REV" +msgstr "Zu viele Commits angegeben: $REV" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "$reference ist keine gültige Referenz" -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" -msgstr "'$args' ist keine \"stash\"-artige Version" +msgstr "'$args' ist kein \"stash\"-artiger Commit" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "'$args' ist keine \"stash\"-Referenz" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" -msgstr "unfähig die Bereitstellung zu aktualisieren" +msgstr "unfähig die Staging-Area zu aktualisieren" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" -msgstr "" -"Kann \"stash\" nicht anwenden, solang eine Zusammenführung im Gange ist" +msgstr "Kann \"stash\" nicht anwenden, solang ein Merge im Gange ist" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." -msgstr "Konflikte in der Bereitstellung. Versuchen Sie es ohne --index." +msgstr "Konflikte in der Staging-Area. Versuchen Sie es ohne --index." -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" -msgstr "Konnte Bereitstellungsbaum nicht speichern" +msgstr "Konnte Staging-Area-Verzeichnis nicht speichern" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" -msgstr "Kann geänderte Dateien nicht aus der Bereitstellung herausnehmen" +msgstr "Kann geänderte Dateien nicht aus der Staging-Area entfernen" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." -msgstr "Bereitstellung wurde nicht ausgelagert." +msgstr "Staging-Area wurde nicht aus dem Stash zurückgeladen." -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" msgstr "Gelöscht ${REV} ($s)" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "${REV}: Konnte \"stash\"-Eintrag nicht löschen" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" -msgstr "Kein Zweigname spezifiziert" +msgstr "Kein Branchname spezifiziert" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "(Zur Wiederherstellung geben Sie \"git stash apply\" ein)" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "Kann eine Komponente von URL '$remoteurl' nicht extrahieren" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" -msgstr "" -"Keine Unterprojekt-Zuordnung in .gitmodules für Pfad '$sm_path' gefunden" +msgstr "Keine Submodul-Zuordnung in .gitmodules für Pfad '$sm_path' gefunden" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" -msgstr "Klonen von '$url' in Unterprojekt-Pfad '$sm_path' fehlgeschlagen" +msgstr "Klonen von '$url' in Submodul-Pfad '$sm_path' fehlgeschlagen" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Git-Verzeichnis '$a' ist Teil des Submodul-Pfades '$b', oder umgekehrt" + +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" msgstr "" -"Git-Verzeichnis '$a' ist Teil des Unterprojekt-Pfades '$b', oder umgekehrt" +"Relative Pfade können nur von der obersten Ebene des Arbeitsverzeichnisses " +"benutzt werden." -#: git-submodule.sh:349 +#: git-submodule.sh:413 #, 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:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" -msgstr "'$sm_path' existiert bereits in der Bereitstellung" +msgstr "'$sm_path' ist bereits zum Commit vorgemerkt" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -10072,25 +10377,24 @@ msgstr "" "$sm_path\n" "Benutzen Sie -f wenn Sie diesen wirklich hinzufügen möchten." -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" -msgstr "" -"Füge existierendes Projektarchiv in '$sm_path' der Bereitstellung hinzu." +msgstr "Füge existierendes Repository in '$sm_path' der Staging-Area hinzu." -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" -msgstr "'$sm_path' existiert bereits und ist kein gültiges Git-Projektarchiv" +msgstr "'$sm_path' existiert bereits und ist kein gültiges Git-Repository" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "" -"Ein Git-Verzeichnis für '$sm_name' wurde lokal gefunden mit den Fernarchiv" -"(en):" +"Ein Git-Verzeichnis für '$sm_name' wurde lokal gefunden mit den Remote-" +"Repositories:" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" @@ -10098,15 +10402,15 @@ msgstr "" "Wenn Sie dieses lokale Git-Verzeichnis wiederverwenden möchtest, anstatt " "erneut zu klonen" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "" "benutzen Sie die Option '--force'. Wenn das lokale Git-Verzeichnis nicht das " -"korrekte Projektarchiv ist" +"korrekte Repository ist" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " @@ -10115,228 +10419,282 @@ msgstr "" "oder Sie sich unsicher sind, was das bedeutet, wählen Sie einen anderen " "Namenmit der Option '--name'." -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." -msgstr "Reaktiviere lokales Git-Verzeichnis für Unterprojekt '$sm_name'." +msgstr "Reaktiviere lokales Git-Verzeichnis für Submodul '$sm_name'." -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" -msgstr "Unfähig Unterprojekt '$sm_path' auszuchecken" +msgstr "Unfähig Submodul '$sm_path' auszuchecken" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" -msgstr "Hinzufügen von Unterprojekt '$sm_path' fehlgeschlagen" +msgstr "Hinzufügen von Submodul '$sm_path' fehlgeschlagen" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" -msgstr "" -"Fehler beim Eintragen von Unterprojekt '$sm_path' in die Konfiguration." +msgstr "Fehler beim Eintragen von Submodul '$sm_path' in die Konfiguration." -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" -msgstr "Betrete '$prefix$sm_path'" +msgid "Entering '$prefix$displaypath'" +msgstr "Betrete '$prefix$displaypath'" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." -msgstr "Stoppe bei '$sm_path'; Skript gab nicht-Null Status zurück." +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." +msgstr "Stoppe bei '$prefix$displaypath'; Skript gab nicht-Null Status zurück." -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" -msgstr "Keine URL für Unterprojekt-Pfad '$sm_path' in .gitmodules gefunden" +msgid "No url found for submodule path '$displaypath' in .gitmodules" +msgstr "Keine URL für Submodul-Pfad '$displaypath' in .gitmodules gefunden" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" +msgid "Failed to register url for submodule path '$displaypath'" msgstr "" -"Fehler beim Eintragen der URL für Unterprojekt-Pfad '$sm_path' in die " +"Fehler beim Eintragen der URL für Submodul-Pfad '$displaypath' in die " "Konfiguration." -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" msgstr "" -"Unterprojekt '$name' ($url) für Pfad '$sm_path' in die Konfiguration " -"eingetragen" +"Submodul '$name' ($url) für Pfad '$displaypath' in die Konfiguration " +"eingetragen." -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" +msgid "Failed to register update mode for submodule path '$displaypath'" msgstr "" -"Fehler bei Änderung des Aktualisierungsmodus für Unterprojekt-Pfad " -"'$sm_path' in der Konfiguration." +"Fehler bei Änderung des Aktualisierungsmodus für Submodul-Pfad " +"'$displaypath' in der Konfiguration." -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "" -"Verwenden Sie '.' wenn Sie wirklich alle Unterprojekte\n" +"Verwenden Sie '.' wenn Sie wirklich alle Submodule\n" "deinitialisieren möchten." -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" +msgid "Submodule work tree '$displaypath' contains a .git directory" msgstr "" -"Arbeitsbaum des Unterprojekts in '$sm_path' enthält ein .git-Verzeichnis" +"Arbeitsverzeichnis des Submoduls in '$displaypath' enthält ein .git-" +"Verzeichnis" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"(benutzen Sie 'rm -rf' wenn Sie dieses Unterprojekt wirklich mitsamt\n" +"(benutzen Sie 'rm -rf' wenn Sie dieses Submodul wirklich mitsamt\n" "seiner Historie löschen möchten)" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" msgstr "" -"Arbeitsbaum von Unterprojekt in '$sm_path' enthält lokale Änderungen; " +"Arbeitsverzeichnis von Submodul in '$displaypath' enthält lokale Änderungen; " "verwenden Sie '-f' um diese zu verwerfen" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" -msgstr "Verzeichnis '$sm_path' bereinigt." +msgid "Cleared directory '$displaypath'" +msgstr "Verzeichnis '$displaypath' bereinigt." -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" -msgstr "Konnte Arbeitsbaum des Unterprojektes in '$sm_path' nicht löschen." +msgid "Could not remove submodule work tree '$displaypath'" +msgstr "" +"Konnte Arbeitsverzeichnis des Submoduls in '$displaypath' nicht löschen." -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" +msgid "Could not create empty submodule directory '$displaypath'" msgstr "" -"Konnte kein leeres Verzeichnis für Unterprojekt in '$sm_path' erstellen." +"Konnte kein leeres Verzeichnis für Submodul in '$displaypath' erstellen." -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" msgstr "" -"Unterprojekt '$name' ($url) für Pfad '$sm_path' wurde aus der Konfiguration " +"Submodul '$name' ($url) für Pfad '$displaypath' wurde aus der Konfiguration " "entfernt." -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -"Unterprojekt-Pfad '$prefix$sm_path' ist nicht initialisiert.\n" +"Submodul-Pfad '$displaypath' ist nicht initialisiert.\n" "Vielleicht möchten Sie 'update --init' benutzen?" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" -msgstr "" -"Konnte aktuelle Revision in Unterprojekt-Pfad '$prefix$sm_path' nicht finden." +msgid "Unable to find current revision in submodule path '$displaypath'" +msgstr "Konnte aktuellen Commit in Submodul-Pfad '$displaypath' nicht finden." -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" -msgstr "Konnte in Unterprojekt-Pfad '$sm_path' nicht anfordern" +msgstr "Konnte \"fetch\" in Submodul-Pfad '$sm_path' nicht ausführen" -#: git-submodule.sh:777 +#: git-submodule.sh:857 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" -msgstr "Konnte in Unterprojekt-Pfad '$prefix$sm_path' nicht anfordern" +msgid "Unable to fetch in submodule path '$displaypath'" +msgstr "Konnte \"fetch\" in Submodul-Pfad '$displaypath' nicht ausführen" -#: git-submodule.sh:791 +#: git-submodule.sh:871 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" -msgstr "" -"Neuaufbau von '$sha1' in Unterprojekt-Pfad '$prefix$sm_path' nicht möglich" +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" +msgstr "Rebase auf '$sha1' in Submodul-Pfad '$displaypath' nicht möglich" -#: git-submodule.sh:792 +#: git-submodule.sh:872 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" -msgstr "Unterprojekt-Pfad '$prefix$sm_path': neu aufgebaut in '$sha1'" +msgid "Submodule path '$displaypath': rebased into '$sha1'" +msgstr "Submodul-Pfad '$displaypath': Rebase auf '$sha1'" -#: git-submodule.sh:797 +#: git-submodule.sh:877 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" +msgstr "Merge von '$sha1' in Submodul-Pfad '$displaypath' fehlgeschlagen" + +#: git-submodule.sh:878 +#, sh-format +msgid "Submodule path '$displaypath': merged in '$sha1'" +msgstr "Submodul-Pfad '$displaypath': zusammengeführt in '$sha1'" + +#: git-submodule.sh:883 +#, sh-format +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" msgstr "" -"Zusammenführung von '$sha1' in Unterprojekt-Pfad '$prefix$sm_path' " +"Ausführung von '$command $sha1' in Submodul-Pfad '$prefix$sm_path' " "fehlgeschlagen" -#: git-submodule.sh:798 +#: git-submodule.sh:884 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" -msgstr "Unterprojekt-Pfad '$prefix$sm_path': zusammengeführt in '$sha1'" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" +msgstr "Submodul-Pfad '$prefix$sm_path': '$command $sha1'" -#: git-submodule.sh:803 +#: git-submodule.sh:889 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" -msgstr "" -"Konnte '$sha1' in Unterprojekt-Pfad '$prefix$sm_path' nicht auschecken." +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" +msgstr "Konnte '$sha1' in Submodul-Pfad '$displaypath' nicht auschecken." -#: git-submodule.sh:804 +#: git-submodule.sh:890 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" -msgstr "Unterprojekt-Pfad: '$prefix$sm_path': '$sha1' ausgecheckt" +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "Submodul-Pfad: '$displaypath': '$sha1' ausgecheckt" -#: git-submodule.sh:831 +#: git-submodule.sh:917 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" -msgstr "Fehler bei Rekursion in Unterprojekt-Pfad '$prefix$sm_path'" +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "Fehler bei Rekursion in Submodul-Pfad '$displaypath'" -#: git-submodule.sh:939 +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "" "Die Optionen --cached und --files können nicht gemeinsam verwendet werden." #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "unerwarteter Modus $mod_dst" -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" -msgstr " Warnung: $name beinhaltet nicht Version $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" +msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_src" -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" -msgstr " Warnung: $name beinhaltet nicht Version $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" +msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_dst" -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" msgstr "" -" Warnung: $name beinhaltet nicht die Versionen $sha1_src und $sha1_dst" +" Warnung: $display_name beinhaltet nicht die Commits $sha1_src und $sha1_dst" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "Blob" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" -msgstr "Unterprojekte geändert, aber nicht aktualisiert:" +msgstr "Submodule geändert, aber nicht aktualisiert:" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" -msgstr "Änderungen in Unterprojekt zum Eintragen:" +msgstr "Änderungen in Submodul zum Committen:" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" -msgstr "Fehler bei Rekursion in Unterprojekt-Pfad '$sm_path'" +msgstr "Fehler bei Rekursion in Submodul-Pfad '$sm_path'" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" -msgstr "Synchronisiere Unterprojekt-URL für '$prefix$sm_path'" +msgid "Synchronizing submodule url for '$displaypath'" +msgstr "Synchronisiere Submodul-URL für '$displaypath'" + +#~ msgid " (fix conflicts and then run \"git am --resolved\")" +#~ msgstr "" +#~ " (beheben Sie die Konflikte und führen Sie dann \"git am --resolved\" " +#~ "aus)" + +#~ msgid " (all conflicts fixed: run \"git commit\")" +#~ msgstr " (alle Konflikte behoben: führen Sie \"git commit\" aus)" + +#~ msgid "more than %d trees given: '%s'" +#~ msgstr "Mehr als %d \"Tree\"-Objekte angegeben: '%s'" + +#~ msgid "You cannot combine --no-ff with --ff-only." +#~ msgstr "Sie können --no-ff nicht mit --ff--only kombinieren." + +#~ msgid "" +#~ "submodule '%s' (or one of its nested submodules) uses a .git directory\n" +#~ "(use 'rm -rf' if you really want to remove it including all of its " +#~ "history)" +#~ msgstr "" +#~ "Submodul '%s' (oder ein geschachteltes Submodul hiervon) verwendet\n" +#~ "ein .git-Verzeichnis (benutzen Sie 'rm -rf' wenn Sie dieses wirklich " +#~ "mitsamt\n" +#~ "seiner Historie löschen möchten)" + +#~ msgid "" +#~ "'%s' has changes staged in the index\n" +#~ "(use --cached to keep the file, or -f to force removal)" +#~ msgstr "" +#~ "'%s' hat zum Commit vorgemerkte Änderungen\n" +#~ "(benutzen Sie --cached um die Datei zu behalten, oder -f um die " +#~ "Entfernung zu erzwingen)" + +#~ msgid "show commits where no parent comes before its children" +#~ msgstr "" +#~ "zeigt Commits, bei denen kein Eltern-Commit vor seinem Kind-Commit kommt" + +#~ msgid "show the HEAD reference" +#~ msgstr "zeigt Referenz von HEAD" + +#~ msgid "Unable to fetch in submodule path '$prefix$sm_path'" +#~ msgstr "Konnte \"fetch\" in Submodul-Pfad '$prefix$sm_path' nicht ausführen" + +#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'" +#~ msgstr "Fehler bei Rekursion in Submodul-Pfad '$prefix$sm_path'" #~ msgid "It took %.2f seconds to enumerate untracked files. 'status -uno'" #~ msgstr "" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000000..2cdb6f93a3 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,9823 @@ +# French translations for Git. +# Copyright (C) 2013 Jean-Noël Avila <jn.avila@free.fr> +# This file is distributed under the same license as the Git package. +# Jean-Noël Avila <jn.avila@free.fr>, 2013. +# Sébastien Helleu <flashcode@flashtux.org>, 2013. +# +# French translations of common Git words used in this file: +# +# English | French +# -----------------+--------------------------------- +# #NN | n°NN +# a commit | un commit +# backward | +# compatibility | rétrocompatibilité +# bare repository | dépôt nu +# bisect | bissection +# blob | blob +# bug | bogue +# bundle | colis +# cherry-pick | picorer +# dangling | en suspens +# debugging | débogage +# fast-forward | avance rapide +# fast-forwarded | mis à jour en avance rapide +# glob | glob +# hash | hachage +# HEAD | HEAD (genre féminin) +# hook | hook +# hunk | section +# merge | fusion +# pattern | motif +# repository | dépôt +# remote | distante (ou serveur distant) +# revision | révision +# stash | remisage +# tag | étiquette +# template | modèle +# to checkout | extraire +# to commit | valider +# to fetch | rapatrier +# to prune | élaguer +# to push | pousser +# to rebase | rebaser +# to stash | remiser +# to track | suivre +# to unstage | désindexer +# tree-ish | arbre +# upstream | amont +# worktree / | +# work(ing) tree | copie de travail +# +msgid "" +msgstr "" +"Project-Id-Version: git\n" +"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" +"POT-Creation-Date: 2013-04-30 08:25+0800\n" +"PO-Revision-Date: 2013-08-27 19:43+0200\n" +"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n" +"Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n" +"Language: fr\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 ?0 : 1;\n" +"X-Generator: Poedit 1.5.4\n" + +#: advice.c:53 +#, c-format +msgid "hint: %.*s\n" +msgstr "astuce: %.*s\n" + +#. +#. * Message used both when 'git commit' fails and when +#. * other commands doing a merge do. +#. +#: advice.c:83 +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 "" +"Corrigez-les dans la copie de travail,\n" +"et utilisez 'git add/rm <fichier>' si\n" +"nécessaire pour marquer la résolution et valider,\n" +"ou utilisez 'git commit -a'." + +#: archive.c:10 +msgid "git archive [options] <tree-ish> [<path>...]" +msgstr "git archive [options] <arbre> [<chemin>...]" + +#: archive.c:11 +msgid "git archive --list" +msgstr "git archive --list" + +#: archive.c:12 +msgid "" +"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]" +msgstr "git archive --remote <dépôt> [--exec <commande>] [options] <arbre> [<chemin>...]" + +#: archive.c:13 +msgid "git archive --remote <repo> [--exec <cmd>] --list" +msgstr "git archive --remote <dépôt> [--exec <commande>] --list" + +#: archive.c:323 +msgid "fmt" +msgstr "fmt" + +#: archive.c:323 +msgid "archive format" +msgstr "format d'archive" + +#: archive.c:324 builtin/log.c:1126 +msgid "prefix" +msgstr "préfixe" + +#: archive.c:325 +msgid "prepend prefix to each pathname in the archive" +msgstr "préfixer chaque chemin de fichier dans l'archive" + +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 +#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 +#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 +#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 +#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +msgid "file" +msgstr "fichier" + +#: archive.c:327 builtin/archive.c:89 +msgid "write the archive to this file" +msgstr "écrire l'archive dans ce fichier" + +#: archive.c:329 +msgid "read .gitattributes in working directory" +msgstr "lire .gitattributes dans le répertoire de travail" + +#: archive.c:330 +msgid "report archived files on stderr" +msgstr "afficher les fichiers archivés sur stderr" + +#: archive.c:331 +msgid "store only" +msgstr "stockage seulement" + +#: archive.c:332 +msgid "compress faster" +msgstr "compression rapide" + +#: archive.c:340 +msgid "compress better" +msgstr "compression efficace" + +#: archive.c:343 +msgid "list supported archive formats" +msgstr "lister les formats d'archive supportés" + +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +msgid "repo" +msgstr "dépôt" + +#: archive.c:346 builtin/archive.c:91 +msgid "retrieve the archive from remote repository <repo>" +msgstr "récupérer l'archive depuis le dépôt distant <dépôt>" + +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +msgid "command" +msgstr "commande" + +#: archive.c:348 builtin/archive.c:93 +msgid "path to the remote git-upload-archive command" +msgstr "chemin vers la commande distante git-upload-archive" + +#: attr.c:259 +msgid "" +"Negative patterns are ignored in git attributes\n" +"Use '\\!' for literal leading exclamation." +msgstr "" +"Les motifs de négation sont ignorés dans les attributs git\n" +"Utilisez '\\!' pour un point d'exclamation littéral." + +#: branch.c:60 +#, c-format +msgid "Not setting branch %s as its own upstream." +msgstr "La branche %s ne peut pas être sa propre branche amont." + +#: branch.c:82 +#, c-format +msgid "Branch %s set up to track remote branch %s from %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la branche distante %s de %s en rebasant." + +#: branch.c:83 +#, c-format +msgid "Branch %s set up to track remote branch %s from %s." +msgstr "La branche %s est paramétrée pour suivre la branche distante %s depuis %s." + +#: branch.c:87 +#, c-format +msgid "Branch %s set up to track local branch %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la branche locale %s en rebasant." + +#: branch.c:88 +#, c-format +msgid "Branch %s set up to track local branch %s." +msgstr "La branche %s est paramétrée pour suivre la branche locale %s." + +#: branch.c:92 +#, c-format +msgid "Branch %s set up to track remote ref %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la référence distante %s en rebasant." + +#: branch.c:93 +#, c-format +msgid "Branch %s set up to track remote ref %s." +msgstr "La branche %s est paramétrée pour suivre la référence distante %s." + +#: branch.c:97 +#, c-format +msgid "Branch %s set up to track local ref %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la référence locale %s en rebasant." + +#: branch.c:98 +#, c-format +msgid "Branch %s set up to track local ref %s." +msgstr "La branche %s est paramétrée pour suivre la référence locale %s." + +#: branch.c:118 +#, c-format +msgid "Tracking not set up: name too long: %s" +msgstr "Suivi de branche non paramétré : le nom est trop long : %s" + +#: branch.c:137 +#, c-format +msgid "Not tracking: ambiguous information for ref %s" +msgstr "Pas de suivi : information ambiguë pour la référence %s" + +#: branch.c:182 +#, c-format +msgid "'%s' is not a valid branch name." +msgstr "'%s' n'est pas un nom de branche valide." + +#: branch.c:187 +#, c-format +msgid "A branch named '%s' already exists." +msgstr "Une branche nommée '%s' existe déjà ." + +#: branch.c:195 +msgid "Cannot force update the current branch." +msgstr "Impossible de forcer la mise à jour de la branche courante." + +#: branch.c:201 +#, c-format +msgid "Cannot setup tracking information; starting point '%s' is not a branch." +msgstr "Impossible de paramétrer le suivi de branche ; le point de départ '%s' n'est pas une branche." + +#: branch.c:203 +#, c-format +msgid "the requested upstream branch '%s' does not exist" +msgstr "la branche amont demandée '%s' n'existe pas" + +#: branch.c:205 +msgid "" +"\n" +"If you are planning on basing your work on an upstream\n" +"branch that already exists at the remote, you may need to\n" +"run \"git fetch\" to retrieve it.\n" +"\n" +"If you are planning to push out a new local branch that\n" +"will track its remote counterpart, you may want to use\n" +"\"git push -u\" to set the upstream config as you push." +msgstr "" +"\n" +"Si vous comptez baser votre travail sur une branche\n" +"amont qui existe déjà sur le serveur distant, vous pourriez\n" +"devoir lancer \"git fetch\" pour la récupérer.\n" +"\n" +"Si vous comptez pousser une nouvelle branche locale qui suivra\n" +"sa jumelle distante, vous souhaiterez utiliser \"git push -u\"\n" +"pour paramétrer le suivi distant en même temps que vous poussez." + +#: branch.c:250 +#, c-format +msgid "Not a valid object name: '%s'." +msgstr "Nom d'objet invalide : '%s'." + +#: branch.c:270 +#, c-format +msgid "Ambiguous object name: '%s'." +msgstr "Nom d'objet ambigu : '%s'." + +#: branch.c:275 +#, c-format +msgid "Not a valid branch point: '%s'." +msgstr "Point d'embranchement invalide : '%s'." + +#: branch.c:281 +msgid "Failed to lock ref for update" +msgstr "Échec du verrouillage de la référence pour mise à jour" + +#: branch.c:299 +msgid "Failed to write ref" +msgstr "Échec de l'écriture de la référence" + +#: bundle.c:36 +#, c-format +msgid "'%s' does not look like a v2 bundle file" +msgstr "'%s' ne semble pas être un fichier bundle v2" + +#: bundle.c:63 +#, c-format +msgid "unrecognized header: %s%s (%d)" +msgstr "en-tête non reconnu : %s%s (%d)" + +#: bundle.c:89 builtin/commit.c:676 +#, c-format +msgid "could not open '%s'" +msgstr "impossible d'ouvrir '%s'" + +#: bundle.c:140 +msgid "Repository lacks these prerequisite commits:" +msgstr "Le dépôt ne dispose pas des commits prérequis :" + +#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 +#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 +#: builtin/shortlog.c:155 +msgid "revision walk setup failed" +msgstr "échec de la préparation du parcours des révisions" + +#: bundle.c:186 +#, c-format +msgid "The bundle contains this ref:" +msgid_plural "The bundle contains these %d refs:" +msgstr[0] "Le colis contient cette référence :" +msgstr[1] "Le colis contient ces %d références :" + +#: bundle.c:193 +msgid "The bundle records a complete history." +msgstr "Le colis enregistre l'historique complet." + +#: bundle.c:195 +#, c-format +msgid "The bundle requires this ref:" +msgid_plural "The bundle requires these %d refs:" +msgstr[0] "Le colis exige cette référence :" +msgstr[1] "Le colis exige ces %d références :" + +#: bundle.c:294 +msgid "rev-list died" +msgstr "rev-list a disparu" + +#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#, c-format +msgid "unrecognized argument: %s" +msgstr "argument non reconnu : %s" + +#: bundle.c:335 +#, c-format +msgid "ref '%s' is excluded by the rev-list options" +msgstr "la référence '%s' est exclue par les options de rev-list" + +#: bundle.c:380 +msgid "Refusing to create empty bundle." +msgstr "Refus de créer un colis vide." + +#: bundle.c:398 +msgid "Could not spawn pack-objects" +msgstr "Impossible de créer des objets groupés" + +#: bundle.c:416 +msgid "pack-objects died" +msgstr "les objets groupés ont disparu" + +#: bundle.c:419 +#, c-format +msgid "cannot create '%s'" +msgstr "impossible de créer '%s'" + +#: bundle.c:441 +msgid "index-pack died" +msgstr "l'index de groupe a disparu" + +#: commit.c:50 +#, c-format +msgid "could not parse %s" +msgstr "impossible d'analyser %s" + +#: commit.c:52 +#, c-format +msgid "%s %s is not a commit!" +msgstr "%s %s n'est pas un commit !" + +#: compat/obstack.c:406 compat/obstack.c:408 +msgid "memory exhausted" +msgstr "plus de mémoire" + +#: connected.c:39 +msgid "Could not run 'git rev-list'" +msgstr "Impossible de lancer 'git rev-list'" + +#: connected.c:48 +#, c-format +msgid "failed write to rev-list: %s" +msgstr "impossible d'écrire dans la rev-list : %s" + +#: connected.c:56 +#, c-format +msgid "failed to close rev-list's stdin: %s" +msgstr "impossible de fermer le stdin du rev-list : %s" + +#: date.c:95 +msgid "in the future" +msgstr "dans le futur" + +#: date.c:101 +#, c-format +msgid "%lu second ago" +msgid_plural "%lu seconds ago" +msgstr[0] "il y a %lu seconde" +msgstr[1] "il y a %lu secondes" + +#: date.c:108 +#, c-format +msgid "%lu minute ago" +msgid_plural "%lu minutes ago" +msgstr[0] "il y a %lu minute" +msgstr[1] "il y a %lu minutes" + +#: date.c:115 +#, c-format +msgid "%lu hour ago" +msgid_plural "%lu hours ago" +msgstr[0] "il y a %lu heure" +msgstr[1] "il y a %lu heures" + +#: date.c:122 +#, c-format +msgid "%lu day ago" +msgid_plural "%lu days ago" +msgstr[0] "il y a %lu jour" +msgstr[1] "il y a %lu jours" + +#: date.c:128 +#, c-format +msgid "%lu week ago" +msgid_plural "%lu weeks ago" +msgstr[0] "il y a %lu semaine" +msgstr[1] "il y a %lu semaines" + +#: date.c:135 +#, c-format +msgid "%lu month ago" +msgid_plural "%lu months ago" +msgstr[0] "il y a %lu mois" +msgstr[1] "il y a %lu mois" + +#: date.c:146 +#, c-format +msgid "%lu year" +msgid_plural "%lu years" +msgstr[0] "%lu an" +msgstr[1] "%lu ans" + +#: date.c:149 +#, c-format +msgid "%s, %lu month ago" +msgid_plural "%s, %lu months ago" +msgstr[0] "il y a %s et %lu mois" +msgstr[1] "il y a %s et %lu mois" + +#: date.c:154 date.c:159 +#, c-format +msgid "%lu year ago" +msgid_plural "%lu years ago" +msgstr[0] "il y a %lu an" +msgstr[1] "il y a %lu ans" + +#: diff.c:112 +#, c-format +msgid " Failed to parse dirstat cut-off percentage '%s'\n" +msgstr " Impossible d'analyser le pourcentage de modification de dirstat '%s'\n" + +#: diff.c:117 +#, c-format +msgid " Unknown dirstat parameter '%s'\n" +msgstr " Paramètre dirstat inconnu '%s'\n" + +#: diff.c:210 +#, c-format +msgid "Unknown value for 'diff.submodule' config variable: '%s'" +msgstr "Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'" + +#: diff.c:260 +#, c-format +msgid "" +"Found errors in 'diff.dirstat' config variable:\n" +"%s" +msgstr "Erreurs dans la variable de configuration 'diff.dirstat' :\n" +"%s" + +#: diff.c:3481 +#, c-format +msgid "" +"Failed to parse --dirstat/-X option parameter:\n" +"%s" +msgstr "Impossible d'analyser le paramètre de l'option --dirstat/-X :\n" +"%s" + +#: diff.c:3495 +#, c-format +msgid "Failed to parse --submodule option parameter: '%s'" +msgstr "Impossible d'analyser le paramètre de l'option --submodule : '%s'" + +#: gpg-interface.c:59 gpg-interface.c:131 +msgid "could not run gpg." +msgstr "impossible de lancer gpg." + +#: gpg-interface.c:71 +msgid "gpg did not accept the data" +msgstr "gpg n'a pas accepté les données" + +#: gpg-interface.c:82 +msgid "gpg failed to sign the data" +msgstr "gpg n'a pas pu signer les données" + +#: gpg-interface.c:115 +#, c-format +msgid "could not create temporary file '%s': %s" +msgstr "impossible de créer un fichier temporaire '%s' : %s" + +#: gpg-interface.c:118 +#, c-format +msgid "failed writing detached signature to '%s': %s" +msgstr "impossible d'écrire la signature détachée dans '%s' : %s" + +#: grep.c:1623 +#, c-format +msgid "'%s': unable to read %s" +msgstr "'%s' : lecture de %s impossible" + +#: grep.c:1640 +#, c-format +msgid "'%s': %s" +msgstr "'%s' : %s" + +#: grep.c:1651 +#, c-format +msgid "'%s': short read %s" +msgstr "'%s' : lecture tronquée %s" + +#: help.c:212 +#, c-format +msgid "available git commands in '%s'" +msgstr "commandes git disponibles dans '%s'" + +#: help.c:219 +msgid "git commands available from elsewhere on your $PATH" +msgstr "commandes git disponibles depuis un autre endroit de votre $PATH" + +#: help.c:235 +msgid "The most commonly used git commands are:" +msgstr "Les commandes git les plus utilisées sont :" + +#: help.c:292 +#, 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' semble être une commande git, mais elle n'a pas pu\n" +"être exécutée. Peut-être git-%s est-elle cassée ?" + +#: help.c:349 +msgid "Uh oh. Your system reports no Git commands at all." +msgstr "Ahem. Votre système n'indique aucune commande Git." + +#: help.c:371 +#, c-format +msgid "" +"WARNING: You called a Git command named '%s', which does not exist.\n" +"Continuing under the assumption that you meant '%s'" +msgstr "ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe pas.\n" +"Poursuite en supposant que vous avez voulu dire '%s'" + +#: help.c:376 +#, c-format +msgid "in %0.1f seconds automatically..." +msgstr "dans %0.1f secondes automatiquement..." + +#: help.c:383 +#, c-format +msgid "git: '%s' is not a git command. See 'git --help'." +msgstr "git : '%s' n'est pas une commande git. Voir 'git --help'." + +#: help.c:387 +msgid "" +"\n" +"Did you mean this?" +msgid_plural "" +"\n" +"Did you mean one of these?" +msgstr[0] "\n" +"Vouliez-vous dire cela ?" +msgstr[1] "\nVouliez-vous dire un de ceux-là ?" + +#: merge.c:56 +msgid "failed to read the cache" +msgstr "impossible de lire le cache" + +#: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 +#: builtin/clone.c:645 +msgid "unable to write new index file" +msgstr "impossible d'écrire le nouveau fichier d'index" + +#: merge-recursive.c:190 +#, c-format +msgid "(bad commit)\n" +msgstr "(mauvais commit)\n" + +#: merge-recursive.c:206 +#, c-format +msgid "addinfo_cache failed for path '%s'" +msgstr "échec de addinfo_cache pour le chemin '%s'" + +#: merge-recursive.c:268 +msgid "error building trees" +msgstr "erreur de construction des arbres" + +#: merge-recursive.c:672 +#, c-format +msgid "failed to create path '%s'%s" +msgstr "impossible de créer le chemin '%s' %s" + +#: merge-recursive.c:683 +#, c-format +msgid "Removing %s to make room for subdirectory\n" +msgstr "Suppression de %s pour faire de la place pour le sous-répertoire\n" + +#. something else exists +#. .. but not some other error (who really cares what?) +#: merge-recursive.c:697 merge-recursive.c:718 +msgid ": perhaps a D/F conflict?" +msgstr ": peut-être un conflit D/F ?" + +#: merge-recursive.c:708 +#, c-format +msgid "refusing to lose untracked file at '%s'" +msgstr "refus de perdre le fichier non suivi '%s'" + +#: merge-recursive.c:748 +#, c-format +msgid "cannot read object %s '%s'" +msgstr "impossible de lire l'objet %s '%s'" + +#: merge-recursive.c:750 +#, c-format +msgid "blob expected for %s '%s'" +msgstr "blob attendu pour %s '%s'" + +#: merge-recursive.c:773 builtin/clone.c:313 +#, c-format +msgid "failed to open '%s'" +msgstr "échec à l'ouverture de '%s'" + +#: merge-recursive.c:781 +#, c-format +msgid "failed to symlink '%s'" +msgstr "échec à la création du lien symbolique '%s'" + +#: merge-recursive.c:784 +#, c-format +msgid "do not know what to do with %06o %s '%s'" +msgstr "ne sait pas traiter %06o %s '%s'" + +#: merge-recursive.c:922 +msgid "Failed to execute internal merge" +msgstr "Échec à l'exécution de la fusion interne" + +#: merge-recursive.c:926 +#, c-format +msgid "Unable to add %s to database" +msgstr "Impossible d'ajouter %s à la base de données" + +#: merge-recursive.c:942 +msgid "unsupported object type in the tree" +msgstr "type d'objet non supporté dans l'arbre" + +#: merge-recursive.c:1021 merge-recursive.c:1035 +#, c-format +msgid "" +"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " +"in tree." +msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre." + +#: merge-recursive.c:1027 merge-recursive.c:1040 +#, c-format +msgid "" +"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " +"in tree at %s." +msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre dans le fichier %s." + +#: merge-recursive.c:1081 +msgid "rename" +msgstr "renommage" + +#: merge-recursive.c:1081 +msgid "renamed" +msgstr "renommé" + +#: merge-recursive.c:1137 +#, c-format +msgid "%s is a directory in %s adding as %s instead" +msgstr "%s est un répertoire dans %s ajouté plutôt comme %s" + +#: merge-recursive.c:1159 +#, c-format +msgid "" +"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" +"\"->\"%s\" in \"%s\"%s" +msgstr "CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche \"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s" + +#: merge-recursive.c:1164 +msgid " (left unresolved)" +msgstr " (laissé non résolu)" + +#: merge-recursive.c:1218 +#, c-format +msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" +msgstr "CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'->'%s' dans %s" + +#: merge-recursive.c:1248 +#, c-format +msgid "Renaming %s to %s and %s to %s instead" +msgstr "Renommage de %s en %s et de %s en %s à la place" + +#: merge-recursive.c:1447 +#, c-format +msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" +msgstr "CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s" + +#: merge-recursive.c:1457 +#, c-format +msgid "Adding merged %s" +msgstr "Ajout de %s fusionné" + +#: merge-recursive.c:1462 merge-recursive.c:1660 +#, c-format +msgid "Adding as %s instead" +msgstr "Ajout plutôt comme %s" + +#: merge-recursive.c:1513 +#, c-format +msgid "cannot read object %s" +msgstr "impossible de lire l'objet %s" + +#: merge-recursive.c:1516 +#, c-format +msgid "object %s is not a blob" +msgstr "l'objet %s n'est pas un blob" + +#: merge-recursive.c:1564 +msgid "modify" +msgstr "modification" + +#: merge-recursive.c:1564 +msgid "modified" +msgstr "modifié" + +#: merge-recursive.c:1574 +msgid "content" +msgstr "contenu" + +#: merge-recursive.c:1581 +msgid "add/add" +msgstr "ajout/ajout" + +#: merge-recursive.c:1615 +#, c-format +msgid "Skipped %s (merged same as existing)" +msgstr "%s ignoré (fusion identique à l'existant)" + +#: merge-recursive.c:1629 +#, c-format +msgid "Auto-merging %s" +msgstr "Fusion automatique de %s" + +#: merge-recursive.c:1633 git-submodule.sh:1029 +msgid "submodule" +msgstr "sous-module" + +#: merge-recursive.c:1634 +#, c-format +msgid "CONFLICT (%s): Merge conflict in %s" +msgstr "CONFLIT (%s) : Conflit de fusion dans %s" + +#: merge-recursive.c:1724 +#, c-format +msgid "Removing %s" +msgstr "Suppression de %s" + +#: merge-recursive.c:1749 +msgid "file/directory" +msgstr "fichier/répertoire" + +#: merge-recursive.c:1755 +msgid "directory/file" +msgstr "répertoire/fichier" + +#: merge-recursive.c:1760 +#, c-format +msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" +msgstr "CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s" + +#: merge-recursive.c:1770 +#, c-format +msgid "Adding %s" +msgstr "Ajout de %s" + +#: merge-recursive.c:1787 +msgid "Fatal merge failure, shouldn't happen." +msgstr "Échec fatal de fusion, qui ne devrait jamais arriver." + +#: merge-recursive.c:1806 +msgid "Already up-to-date!" +msgstr "Déjà à jour !" + +#: merge-recursive.c:1815 +#, c-format +msgid "merging of trees %s and %s failed" +msgstr "échec de fusion des arbres %s et %s" + +#: merge-recursive.c:1845 +#, c-format +msgid "Unprocessed path??? %s" +msgstr "Chemin non traité ??? %s" + +#: merge-recursive.c:1890 +msgid "Merging:" +msgstr "Fusion :" + +#: merge-recursive.c:1903 +#, c-format +msgid "found %u common ancestor:" +msgid_plural "found %u common ancestors:" +msgstr[0] "%u ancêtre commun trouvé :" +msgstr[1] "%u ancêtres communs trouvés :" + +#: merge-recursive.c:1940 +msgid "merge returned no commit" +msgstr "la fusion n'a pas retourné de commit" + +#: merge-recursive.c:1997 +#, c-format +msgid "Could not parse object '%s'" +msgstr "Impossible d'analyser l'objet '%s'" + +#: merge-recursive.c:2009 builtin/merge.c:658 +msgid "Unable to write index." +msgstr "Impossible d'écrire l'index." + +#: object.c:195 +#, c-format +msgid "unable to parse object: %s" +msgstr "impossible d'analyser l'objet : %s" + +#: parse-options.c:489 +msgid "..." +msgstr "..." + +#: parse-options.c:507 +#, c-format +msgid "usage: %s" +msgstr "usage : %s" + +#. TRANSLATORS: the colon here should align with the +#. one in "usage: %s" translation +#: parse-options.c:511 +#, c-format +msgid " or: %s" +msgstr " ou : %s" + +#: parse-options.c:514 +#, c-format +msgid " %s" +msgstr " %s" + +#: parse-options.c:548 +msgid "-NUM" +msgstr "-NUM" + +#: pathspec.c:83 +#, c-format +msgid "Path '%s' is in submodule '%.*s'" +msgstr "Le chemin '%s' est dans le sous-module '%.*s'" + +#: pathspec.c:99 +#, c-format +msgid "'%s' is beyond a symbolic link" +msgstr "'%s' est au delà d'un lien symbolique" + +#: remote.c:1781 +#, 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] "Votre branche est en avance sur '%s' de %d commit.\n" +msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n" + +#: remote.c:1787 +msgid " (use \"git push\" to publish your local commits)\n" +msgstr " (utilisez \"git push\" pour publier vos commits locaux)\n" + +#: remote.c:1790 +#, 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] "Votre branche est en retard sur '%s' de %d commit, et peut être mise à jour en avance rapide.\n" +msgstr[1] "Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour en avance rapide.\n" + +#: remote.c:1798 +msgid " (use \"git pull\" to update your local branch)\n" +msgstr " (utilisez \"git pull\" pour mettre à jour votre branche locale)\n" + +#: remote.c:1801 +#, 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] "Votre branche et '%s' ont divergé,\n" +"et ont %d et %d commit différent chacune respectivement.\n" +msgstr[1] "Votre branche et '%s' ont divergé,\n" +"et ont %d et %d commits différents chacune respectivement.\n" + +#: remote.c:1811 +msgid " (use \"git pull\" to merge the remote branch into yours)\n" +msgstr " (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n" + +#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 +#: builtin/merge.c:1009 +#, c-format +msgid "Could not open '%s' for writing" +msgstr "Impossible d'ouvrir '%s' en écriture" + +#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 +#: builtin/merge.c:1001 builtin/merge.c:1014 +#, c-format +msgid "Could not write to '%s'" +msgstr "Impossible d'écrire dans '%s'" + +#: sequencer.c:229 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'" +msgstr "après résolution des conflits, marquez les chemins corrigés\n" +"avec 'git add <chemins>' ou 'git rm <chemins>'" + +#: sequencer.c:232 +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 "" +"après résolution des conflits, marquez les chemins corrigés\n" +"avec 'git add <chemins>' ou 'git rm <chemins>'\n" +"puis validez le résultat avec 'git commit'" + +#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#, c-format +msgid "Could not write to %s" +msgstr "Impossible d'écrire dans %s" + +#: sequencer.c:248 +#, c-format +msgid "Error wrapping up %s" +msgstr "Erreur à l'emballage de %s" + +#: sequencer.c:263 +msgid "Your local changes would be overwritten by cherry-pick." +msgstr "Vos modifications locales seraient écrasées par cherry-pick." + +#: sequencer.c:265 +msgid "Your local changes would be overwritten by revert." +msgstr "Vos modifications locales seraient écrasées par revert." + +#: sequencer.c:268 +msgid "Commit your changes or stash them to proceed." +msgstr "Validez vos modifications ou remisez-les pour continuer." + +#. TRANSLATORS: %s will be "revert" or "cherry-pick" +#: sequencer.c:319 +#, c-format +msgid "%s: Unable to write new index file" +msgstr "%s: Impossible d'écrire le nouveau fichier index" + +#: sequencer.c:350 +msgid "Could not resolve HEAD commit\n" +msgstr "Impossible de résoudre le commit HEAD\n" + +#: sequencer.c:371 +msgid "Unable to update cache tree\n" +msgstr "Impossible de mettre à jour l'arbre de cache\n" + +#: sequencer.c:416 +#, c-format +msgid "Could not parse commit %s\n" +msgstr "Impossible d'analyser le commit %s\n" + +#: sequencer.c:421 +#, c-format +msgid "Could not parse parent commit %s\n" +msgstr "Impossible d'analyser le commit parent %s\n" + +#: sequencer.c:487 +msgid "Your index file is unmerged." +msgstr "Votre fichier d'index n'est pas fusionné." + +#: sequencer.c:506 +#, c-format +msgid "Commit %s is a merge but no -m option was given." +msgstr "Le commit %s est une fusion mais l'option -m n'a pas été spécifiée." + +#: sequencer.c:514 +#, c-format +msgid "Commit %s does not have parent %d" +msgstr "Le commit %s n'a pas le parent %d" + +#: sequencer.c:518 +#, c-format +msgid "Mainline was specified but commit %s is not a merge." +msgstr "Une branche principale a été spécifiée mais le commit %s n'est pas une fusion." + +#. TRANSLATORS: The first %s will be "revert" or +#. "cherry-pick", the second %s a SHA1 +#: sequencer.c:531 +#, c-format +msgid "%s: cannot parse parent commit %s" +msgstr "%s : impossible d'analyser le commit parent %s" + +#: sequencer.c:535 +#, c-format +msgid "Cannot get commit message for %s" +msgstr "Impossible d'obtenir un message de validation pour %s" + +#: sequencer.c:621 +#, c-format +msgid "could not revert %s... %s" +msgstr "impossible d'annuler %s... %s" + +#: sequencer.c:622 +#, c-format +msgid "could not apply %s... %s" +msgstr "impossible d'appliquer %s... %s" + +#: sequencer.c:654 +msgid "empty commit set passed" +msgstr "l'ensemble de commits spéficifié est vide" + +#: sequencer.c:662 +#, c-format +msgid "git %s: failed to read the index" +msgstr "git %s : échec à la lecture de l'index" + +#: sequencer.c:667 +#, c-format +msgid "git %s: failed to refresh the index" +msgstr "git %s : échec du raffraîchissement de l'index" + +#: sequencer.c:725 +#, c-format +msgid "Cannot %s during a %s" +msgstr "Impossible de %s pendant un %s" + +#: sequencer.c:747 +#, c-format +msgid "Could not parse line %d." +msgstr "Impossible d'analyser la ligne %d." + +#: sequencer.c:752 +msgid "No commits parsed." +msgstr "Aucun commit analysé." + +#: sequencer.c:765 +#, c-format +msgid "Could not open %s" +msgstr "Impossible d'ouvrir %s" + +#: sequencer.c:769 +#, c-format +msgid "Could not read %s." +msgstr "Impossible de lire %s." + +#: sequencer.c:776 +#, c-format +msgid "Unusable instruction sheet: %s" +msgstr "Feuille d'instruction inutilisable : %s" + +#: sequencer.c:804 +#, c-format +msgid "Invalid key: %s" +msgstr "Clé invalide: %s" + +#: sequencer.c:807 +#, c-format +msgid "Invalid value for %s: %s" +msgstr "Valeur invalide pour %s : %s" + +#: sequencer.c:819 +#, c-format +msgid "Malformed options sheet: %s" +msgstr "Feuille d'options malformée : %s" + +#: sequencer.c:840 +msgid "a cherry-pick or revert is already in progress" +msgstr "un picorage ou un retour est déjà en cours" + +#: sequencer.c:841 +msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" +msgstr "essayez \"git cherry-pick (--continue|--quit|-- abort)\"" + +#: sequencer.c:845 +#, c-format +msgid "Could not create sequencer directory %s" +msgstr "Impossible de créer le répertoire de séquenceur %s" + +#: sequencer.c:861 sequencer.c:946 +#, c-format +msgid "Error wrapping up %s." +msgstr "Erreur lors de l'emballage de %s." + +#: sequencer.c:880 sequencer.c:1014 +msgid "no cherry-pick or revert in progress" +msgstr "aucun picorage ou retour en cours" + +#: sequencer.c:882 +msgid "cannot resolve HEAD" +msgstr "impossible de résoudre HEAD" + +#: sequencer.c:884 +msgid "cannot abort from a branch yet to be born" +msgstr "impossible d'abandonner depuis une branche non encore créée" + +#: sequencer.c:906 builtin/apply.c:4060 +#, c-format +msgid "cannot open %s: %s" +msgstr "impossible d'ouvrir %s : %s" + +#: sequencer.c:909 +#, c-format +msgid "cannot read %s: %s" +msgstr "impossible de lire %s : %s" + +#: sequencer.c:910 +msgid "unexpected end of file" +msgstr "fin de fichier inattendue" + +#: sequencer.c:916 +#, c-format +msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" +msgstr "le fichier HEAD de préparation de picorage '%s' est corrompu" + +#: sequencer.c:939 +#, c-format +msgid "Could not format %s." +msgstr "Impossible de formater %s." + +#: sequencer.c:1083 +#, c-format +msgid "%s: can't cherry-pick a %s" +msgstr "%s : impossible de picorer un %s" + +#: sequencer.c:1085 +#, c-format +msgid "%s: bad revision" +msgstr "%s : mauvaise révision" + +#: sequencer.c:1119 +msgid "Can't revert as initial commit" +msgstr "Impossible d'annuler en tant que commit initial" + +#: sequencer.c:1120 +msgid "Can't cherry-pick into empty head" +msgstr "Impossible de picorer vers une HEAD vide" + +#: sha1_name.c:1036 +msgid "HEAD does not point to a branch" +msgstr "HEAD ne pointe pas sur une branche" + +#: sha1_name.c:1039 +#, c-format +msgid "No such branch: '%s'" +msgstr "Branche inconnue : '%s'" + +#: sha1_name.c:1041 +#, c-format +msgid "No upstream configured for branch '%s'" +msgstr "Aucune branche amont configurée pour la branche '%s'" + +#: sha1_name.c:1044 +#, c-format +msgid "Upstream branch '%s' not stored as a remote-tracking branch" +msgstr "La branche amont '%s' n'est pas stockée comme branche de suivi" + +#: wrapper.c:408 +#, c-format +msgid "unable to access '%s': %s" +msgstr "impossible d'accéder à '%s' : %s" + +#: wrapper.c:423 +#, c-format +msgid "unable to access '%s'" +msgstr "impossible d'accéder à '%s'" + +#: wrapper.c:434 +#, c-format +msgid "unable to look up current user in the passwd file: %s" +msgstr "impossible de rechercher l'utilisateur actuel dans le fichier de mots de passe : %s" + +#: wrapper.c:435 +msgid "no such user" +msgstr "utilisateur inconnu" + +#: wt-status.c:140 +msgid "Unmerged paths:" +msgstr "Chemins non fusionnés :" + +#: wt-status.c:167 wt-status.c:194 +#, c-format +msgid " (use \"git reset %s <file>...\" to unstage)" +msgstr " (utilisez \"git reset %s <fichier>...\" pour désindexer)" + +#: wt-status.c:169 wt-status.c:196 +msgid " (use \"git rm --cached <file>...\" to unstage)" +msgstr " (utilisez \"git rm --cached <fichier>...\" pour désindexer)" + +#: wt-status.c:173 +msgid " (use \"git add <file>...\" to mark resolution)" +msgstr " (utilisez \"git add <fichier>...\" pour marquer comme résolu)" + +#: wt-status.c:175 wt-status.c:179 +msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" +msgstr " (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme résolu)" + +#: wt-status.c:177 +msgid " (use \"git rm <file>...\" to mark resolution)" +msgstr " (utilisez \"git rm <fichier>...\" pour marquer comme résolu)" + +#: wt-status.c:188 +msgid "Changes to be committed:" +msgstr "Modifications qui seront validées :" + +#: wt-status.c:206 +msgid "Changes not staged for commit:" +msgstr "Modifications qui ne seront pas validées :" + +#: wt-status.c:210 +msgid " (use \"git add <file>...\" to update what will be committed)" +msgstr " (utilisez \"git add <fichier>...\" pour mettre à jour ce qui sera validé)" + +#: wt-status.c:212 +msgid " (use \"git add/rm <file>...\" to update what will be committed)" +msgstr " (utilisez \"git add/rm <fichier>...\" pour mettre à jour ce qui sera validé)" + +#: wt-status.c:213 +msgid "" +" (use \"git checkout -- <file>...\" to discard changes in working directory)" +msgstr " (utilisez \"git checkout -- <fichier>...\" pour annuler les modifications dans la copie de travail)" + +#: wt-status.c:215 +msgid " (commit or discard the untracked or modified content in submodules)" +msgstr " (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)" + +#: wt-status.c:227 +#, c-format +msgid " (use \"git %s <file>...\" to include in what will be committed)" +msgstr " (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)" + +#: wt-status.c:244 +msgid "bug" +msgstr "bogue" + +#: wt-status.c:249 +msgid "both deleted:" +msgstr "supprimé des deux côtés :" + +#: wt-status.c:250 +msgid "added by us:" +msgstr "ajouté par nous :" + +#: wt-status.c:251 +msgid "deleted by them:" +msgstr "supprimé par eux :" + +#: wt-status.c:252 +msgid "added by them:" +msgstr "ajouté par eux :" + +#: wt-status.c:253 +msgid "deleted by us:" +msgstr "supprimé par nous :" + +#: wt-status.c:254 +msgid "both added:" +msgstr "ajouté de deux côtés :" + +#: wt-status.c:255 +msgid "both modified:" +msgstr "modifié des deux côtés :" + +#: wt-status.c:285 +msgid "new commits, " +msgstr "nouveaux commits, " + +#: wt-status.c:287 +msgid "modified content, " +msgstr "contenu modifié, " + +#: wt-status.c:289 +msgid "untracked content, " +msgstr "contenu non suivi, " + +#: wt-status.c:306 +#, c-format +msgid "new file: %s" +msgstr "nouveau : %s" + +#: wt-status.c:309 +#, c-format +msgid "copied: %s -> %s" +msgstr "copié : %s -> %s" + +#: wt-status.c:312 +#, c-format +msgid "deleted: %s" +msgstr "supprimé : %s" + +#: wt-status.c:315 +#, c-format +msgid "modified: %s" +msgstr "modifié : %s" + +#: wt-status.c:318 +#, c-format +msgid "renamed: %s -> %s" +msgstr "renommé : %s -> %s" + +#: wt-status.c:321 +#, c-format +msgid "typechange: %s" +msgstr "nv type : %s" + +#: wt-status.c:324 +#, c-format +msgid "unknown: %s" +msgstr "inconnu : %s" + +#: wt-status.c:327 +#, c-format +msgid "unmerged: %s" +msgstr "non fus. : %s" + +#: wt-status.c:330 +#, c-format +msgid "bug: unhandled diff status %c" +msgstr "bogue : état de diff non géré %c" + +#: wt-status.c:803 +msgid "You have unmerged paths." +msgstr "Vous avez des chemins non fusionnés." + +#: wt-status.c:806 wt-status.c:958 +msgid " (fix conflicts and run \"git commit\")" +msgstr " (réglez les conflits et lancez \"git commit\")" + +#: wt-status.c:809 +msgid "All conflicts fixed but you are still merging." +msgstr "Tous les conflits sont réglés mais la fusion n'est pas terminée." + +#: wt-status.c:812 +msgid " (use \"git commit\" to conclude merge)" +msgstr " (utilisez \"git commit\" pour terminer la fusion)" + +#: wt-status.c:822 +msgid "You are in the middle of an am session." +msgstr "Vous êtes au milieu d'une session am." + +#: wt-status.c:825 +msgid "The current patch is empty." +msgstr "Le patch actuel est vide." + +#: wt-status.c:829 +msgid " (fix conflicts and then run \"git am --resolved\")" +msgstr " (réglez les conflits puis lancez \"git am --resolved\")" + +#: wt-status.c:831 +msgid " (use \"git am --skip\" to skip this patch)" +msgstr " (utilisez \"git am --skip\" pour sauter ce patch)" + +#: wt-status.c:833 +msgid " (use \"git am --abort\" to restore the original branch)" +msgstr " (utilisez \"git am --abort\" pour restaurer la branche d'origine)" + +#: wt-status.c:893 wt-status.c:910 +#, c-format +msgid "You are currently rebasing branch '%s' on '%s'." +msgstr "Vous êtes en train de rebaser la branche '%s' sur '%s'." + +#: wt-status.c:898 wt-status.c:915 +msgid "You are currently rebasing." +msgstr "Vous êtes en train de rebaser." + +#: wt-status.c:901 +msgid " (fix conflicts and then run \"git rebase --continue\")" +msgstr " (résolvez les conflits puis lancez \"git rebase --continue\")" + +#: wt-status.c:903 +msgid " (use \"git rebase --skip\" to skip this patch)" +msgstr " (utilisez \"git rebase --skip\" pour sauter ce patch)" + +#: wt-status.c:905 +msgid " (use \"git rebase --abort\" to check out the original branch)" +msgstr " (utilisez \"git rebase --abort\" pour extraire la branche d'origine)" + +#: wt-status.c:918 +msgid " (all conflicts fixed: run \"git rebase --continue\")" +msgstr " (tous les conflits sont résolus : lancez \"git rebase --continue\")" + +#: wt-status.c:922 +#, c-format +msgid "" +"You are currently splitting a commit while rebasing branch '%s' on '%s'." +msgstr "Vous êtes actuellement en train de fractionner un commit pendant un rebasage de la branche '%s' sur '%s'." + +#: wt-status.c:927 +msgid "You are currently splitting a commit during a rebase." +msgstr "Vous êtes actuellement en train de fractionner un commit pendant un rebasage." + +#: wt-status.c:930 +msgid " (Once your working directory is clean, run \"git rebase --continue\")" +msgstr " (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")" + +#: wt-status.c:934 +#, c-format +msgid "You are currently editing a commit while rebasing branch '%s' on '%s'." +msgstr "Vous êtes actuellement en train d'éditer un commit pendant un rebasage de la branche '%s' sur '%s'." + +#: wt-status.c:939 +msgid "You are currently editing a commit during a rebase." +msgstr "Vous êtes actuellement en train d'éditer un commit pendant un rebasage." + +#: wt-status.c:942 +msgid " (use \"git commit --amend\" to amend the current commit)" +msgstr " (utilisez \"git commit --amend\" pour corriger le commit actuel)" + +#: wt-status.c:944 +msgid "" +" (use \"git rebase --continue\" once you are satisfied with your changes)" +msgstr " (utilisez \"git rebase --continue\" quand vous êtes satisfait de vos modifications)" + +#: wt-status.c:954 +msgid "You are currently cherry-picking." +msgstr "Vous êtes actuellement en train de picorer." + +#: wt-status.c:961 +msgid " (all conflicts fixed: run \"git commit\")" +msgstr " (tous les conflits sont résolus : lancez \"git commit\")" + +#: wt-status.c:970 +#, c-format +msgid "You are currently reverting commit %s." +msgstr "Vous êtes actuellement en train de rétablir le commit %s." + +#: wt-status.c:975 +msgid " (fix conflicts and run \"git revert --continue\")" +msgstr " (résolvez les conflits et lancez \"git revert --continue\")" + +#: wt-status.c:978 +msgid " (all conflicts fixed: run \"git revert --continue\")" +msgstr " (tous les conflits sont résolus : lancez \"git revert --continue\")" + +#: wt-status.c:980 +msgid " (use \"git revert --abort\" to cancel the revert operation)" +msgstr " (utilisez \"git revert --abort\" pour annuler le rétablissement)" + +#: wt-status.c:991 +#, c-format +msgid "You are currently bisecting, started from branch '%s'." +msgstr "Vous êtes en cours de bissection, depuis la branche '%s'." + +#: wt-status.c:995 +msgid "You are currently bisecting." +msgstr "Vous êtes en cours de bissection." + +#: wt-status.c:998 +msgid " (use \"git bisect reset\" to get back to the original branch)" +msgstr " (utilisez \"git bisect reset\" pour revenir à la branche d'origine)" + +#: wt-status.c:1173 +msgid "On branch " +msgstr "Sur la branche " + +#: wt-status.c:1184 +msgid "HEAD detached at " +msgstr "HEAD détachée sur " + +#: wt-status.c:1186 +msgid "HEAD detached from " +msgstr "HEAD détachée depuis " + +#: wt-status.c:1189 +msgid "Not currently on any branch." +msgstr "Actuellement sur aucun branche." + +#: wt-status.c:1206 +msgid "Initial commit" +msgstr "Validation initiale" + +#: wt-status.c:1220 +msgid "Untracked files" +msgstr "Fichiers non suivis" + +#: wt-status.c:1222 +msgid "Ignored files" +msgstr "Fichiers ignorés" + +#: wt-status.c:1226 +#, c-format +msgid "" +"It took %.2f seconds to enumerate untracked files. 'status -uno'\n" +"may speed it up, but you have to be careful not to forget to add\n" +"new files yourself (see 'git help status')." +msgstr "L'énumération des fichiers non suivis a duré %.2f secondes. 'status -uno'\n" +"peut l'accélerer, mais vous devez alors faire attention à ne pas\n" +"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help status')." + +#: wt-status.c:1232 +#, c-format +msgid "Untracked files not listed%s" +msgstr "Fichiers non suivis non listés%s" + +#: wt-status.c:1234 +msgid " (use -u option to show untracked files)" +msgstr " (utilisez -u pour afficher les fichiers non suivis)" + +#: wt-status.c:1240 +msgid "No changes" +msgstr "Aucune modification" + +#: wt-status.c:1245 +#, c-format +msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" +msgstr "aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou \"git commit -a\")\n" + +#: wt-status.c:1248 +#, c-format +msgid "no changes added to commit\n" +msgstr "aucune modification ajoutée à la validation\n" + +#: wt-status.c:1251 +#, c-format +msgid "" +"nothing added to commit but untracked files present (use \"git add\" to " +"track)\n" +msgstr "aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez \"git add\" pour les suivre)\n" + +#: wt-status.c:1254 +#, c-format +msgid "nothing added to commit but untracked files present\n" +msgstr "aucune modification ajoutée à la validation mais des fichiers non suivis sont présents\n" + +#: wt-status.c:1257 +#, c-format +msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" +msgstr "rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les suivre)\n" + +#: wt-status.c:1260 wt-status.c:1265 +#, c-format +msgid "nothing to commit\n" +msgstr "rien à valider\n" + +#: wt-status.c:1263 +#, c-format +msgid "nothing to commit (use -u to show untracked files)\n" +msgstr "rien à valider (utilisez -u pour afficher les fichiers non suivis)\n" + +#: wt-status.c:1267 +#, c-format +msgid "nothing to commit, working directory clean\n" +msgstr "rien à valider, la copie de travail est propre\n" + +#: wt-status.c:1375 +msgid "HEAD (no branch)" +msgstr "HEAD (aucune branche)" + +#: wt-status.c:1381 +msgid "Initial commit on " +msgstr "Validation initiale sur " + +#: wt-status.c:1396 +msgid "behind " +msgstr "derrière " + +#: wt-status.c:1399 wt-status.c:1402 +msgid "ahead " +msgstr "devant " + +#: wt-status.c:1404 +msgid ", behind " +msgstr ", derrière " + +#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#, c-format +msgid "failed to unlink '%s'" +msgstr "echec lors de l'unlink de '%s'" + +#: builtin/add.c:20 +msgid "git add [options] [--] <pathspec>..." +msgstr "git add [options] [--] <chemin>..." + +#. +#. * To be consistent with "git add -p" and most Git +#. * commands, we should default to being tree-wide, but +#. * this is not the original behavior and can't be +#. * changed until users trained themselves not to type +#. * "git add -u" or "git add -A". For now, we warn and +#. * keep the old behavior. Later, the behavior can be changed +#. * to tree-wide, keeping the warning for a while, and +#. * eventually we can drop the warning. +#. +#: builtin/add.c:58 +#, c-format +msgid "" +"The behavior of 'git add %s (or %s)' with no path argument from a\n" +"subdirectory of the tree will change in Git 2.0 and should not be used " +"anymore.\n" +"To add content for the whole tree, run:\n" +"\n" +" git add %s :/\n" +" (or git add %s :/)\n" +"\n" +"To restrict the command to the current directory, run:\n" +"\n" +" git add %s .\n" +" (or git add %s .)\n" +"\n" +"With the current Git version, the command is restricted to the current " +"directory.\n" +msgstr "" +"Le comportement de 'git add %s (ou %s)' sans argument de chemin depuis un\n" +"sous-répertoire du projet va changer dans Git 2.0 et ne doit plus être utilisé.\n" +"Pour ajouter le contenu de toute l'arborescence, lancez :\n" +"\n" +" git add %s :/\n" +" (ou git add %s :/)\n" +"\n" +"Pour restreindre la commande au répertoire courant, lancez :\n" +"\n" +" git add %s .\n" +" (ou git add %s .)\n" +"\n" +"Avec la version actuelle de Git, la commande est restreinte au répertoire courant.\n" + +#: builtin/add.c:100 +#, c-format +msgid "" +"You ran 'git add' with neither '-A (--all)' or '--ignore-removal',\n" +"whose behaviour will change in Git 2.0 with respect to paths you removed.\n" +"Paths like '%s' that are\n" +"removed from your working tree are ignored with this version of Git.\n" +"\n" +"* 'git add --ignore-removal <pathspec>', which is the current default,\n" +" ignores paths you removed from your working tree.\n" +"\n" +"* 'git add --all <pathspec>' will let you also record the removals.\n" +"\n" +"Run 'git status' to check the paths you removed from your working tree.\n" +msgstr "" +"Vous avez lancé 'git add' sans '-A (--all)' ni '--ignore-removal',\n" +"dont le comportement va changer dans Git 2.0 avec le respect des chemins que vous supprimez.\n" +"Les chemins tels que '%s' qui ont été\n" +"retirés de votre copie de travail sont ignorés avec cette version de Git.\n" +"\n" +"* 'git add --ignore-removal <chemin>', qui est l'option par défaut actuelle,\n" +" ignore les chemins que vous avez supprimés de votre copie de travail.\n" +"\n" +"* 'git add --all <chemin>' permet d'enregistrer aussi les suppressions.\n" +"\n" +"Lancez 'git status' pour vérifier les chemins que vous avez supprimés de votre copie de travail.\n" + +#: builtin/add.c:144 +#, c-format +msgid "unexpected diff status %c" +msgstr "status de diff inattendu %c" + +#: builtin/add.c:149 builtin/commit.c:233 +msgid "updating files failed" +msgstr "échec de la mise à jour des fichiers" + +#: builtin/add.c:163 +#, c-format +msgid "remove '%s'\n" +msgstr "suppression de '%s'\n" + +#: builtin/add.c:253 +msgid "Unstaged changes after refreshing the index:" +msgstr "Modifications non indexées après rafraîchissement de l'index :" + +#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#, c-format +msgid "pathspec '%s' did not match any files" +msgstr "le chemin '%s' ne correspond à aucun fichier" + +#: builtin/add.c:339 +msgid "Could not read the index" +msgstr "Impossible de lire l'index" + +#: builtin/add.c:349 +#, c-format +msgid "Could not open '%s' for writing." +msgstr "Impossible d'ouvrir '%s' en écriture." + +#: builtin/add.c:353 +msgid "Could not write patch" +msgstr "Impossible d'écrire le patch" + +#: builtin/add.c:358 +#, c-format +msgid "Could not stat '%s'" +msgstr "Stat de '%s' impossible" + +#: builtin/add.c:360 +msgid "Empty patch. Aborted." +msgstr "Patch vide. Abandon." + +#: builtin/add.c:366 +#, c-format +msgid "Could not apply '%s'" +msgstr "Impossible d'appliquer '%s'" + +#: builtin/add.c:376 +msgid "The following paths are ignored by one of your .gitignore files:\n" +msgstr "Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n" + +#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 +#: builtin/rm.c:206 +msgid "dry run" +msgstr "à vide" + +#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 +#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +msgid "be verbose" +msgstr "mode verbeux" + +#: builtin/add.c:396 +msgid "interactive picking" +msgstr "sélection interactive" + +#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +msgid "select hunks interactively" +msgstr "sélection interactive des sections" + +#: builtin/add.c:398 +msgid "edit current diff and apply" +msgstr "édition du diff actuel et application" + +#: builtin/add.c:399 +msgid "allow adding otherwise ignored files" +msgstr "permettre l'ajout de fichiers ignorés" + +#: builtin/add.c:400 +msgid "update tracked files" +msgstr "mettre à jour les fichiers suivis" + +#: builtin/add.c:401 +msgid "record only the fact that the path will be added later" +msgstr "enregistrer seulement le fait que le chemin sera ajouté plus tard" + +#: builtin/add.c:402 +msgid "add changes from all tracked and untracked files" +msgstr "ajouter les modifications de tous les fichiers suivis et non suivis" + +#. takes no arguments +#: builtin/add.c:405 +msgid "ignore paths removed in the working tree (same as --no-all)" +msgstr "ignorer les chemins effacés dans la copie de travail (identique à --no-all)" + +#: builtin/add.c:407 +msgid "don't add, only refresh the index" +msgstr "ne pas ajouter, juste rafraîchir l'index" + +#: builtin/add.c:408 +msgid "just skip files which cannot be added because of errors" +msgstr "sauter seulement les fichiers qui ne peuvent pas être ajoutés du fait d'erreurs" + +#: builtin/add.c:409 +msgid "check if - even missing - files are ignored in dry run" +msgstr "vérifier si des fichiers - même manquants - sont ignorés, à vide" + +#: builtin/add.c:431 +#, c-format +msgid "Use -f if you really want to add them.\n" +msgstr "Utilisez -f si vous voulez réellement les ajouter.\n" + +#: builtin/add.c:432 +msgid "no files added" +msgstr "aucun fichier ajouté" + +#: builtin/add.c:438 +msgid "adding files failed" +msgstr "échec de l'ajout de fichiers" + +#: builtin/add.c:477 +msgid "-A and -u are mutually incompatible" +msgstr "-A et -u sont mutuellement incompatibles" + +#: builtin/add.c:495 +msgid "Option --ignore-missing can only be used together with --dry-run" +msgstr "L'option --ignore-missing ne peut être utilisée qu'en complément de --dry-run" + +#: builtin/add.c:525 +#, c-format +msgid "Nothing specified, nothing added.\n" +msgstr "Rien de spécifié, rien n'a été ajouté.\n" + +#: builtin/add.c:526 +#, c-format +msgid "Maybe you wanted to say 'git add .'?\n" +msgstr "Vous vouliez sûrement dire 'git add .' ?\n" + +#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 +#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +msgid "index file corrupt" +msgstr "fichier d'index corrompu" + +#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +msgid "Unable to write new index file" +msgstr "Impossible d'écrire le nouveau fichier d'index" + +#: builtin/apply.c:57 +msgid "git apply [options] [<patch>...]" +msgstr "git apply [options] [<patch>...]" + +#: builtin/apply.c:110 +#, c-format +msgid "unrecognized whitespace option '%s'" +msgstr "option d'espace non reconnue '%s'" + +#: builtin/apply.c:125 +#, c-format +msgid "unrecognized whitespace ignore option '%s'" +msgstr "option d'ignorance d'espce non reconnue '%s'" + +#: builtin/apply.c:823 +#, c-format +msgid "Cannot prepare timestamp regexp %s" +msgstr "Impossible de préparer la regexp d'horodatage %s" + +#: builtin/apply.c:832 +#, c-format +msgid "regexec returned %d for input: %s" +msgstr "regexec a retourné %d pour l'entrée : %s" + +#: builtin/apply.c:913 +#, c-format +msgid "unable to find filename in patch at line %d" +msgstr "nom de fichier du patch introuvable à la ligne %d" + +#: builtin/apply.c:945 +#, c-format +msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d" +msgstr "git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé à la ligne %d" + +#: builtin/apply.c:949 +#, c-format +msgid "git apply: bad git-diff - inconsistent new filename on line %d" +msgstr "git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant à la ligne %d" + +#: builtin/apply.c:950 +#, c-format +msgid "git apply: bad git-diff - inconsistent old filename on line %d" +msgstr "git apply : mauvais format de git-diff - ancien nom de fichier inconsistant à la ligne %d" + +#: builtin/apply.c:957 +#, c-format +msgid "git apply: bad git-diff - expected /dev/null on line %d" +msgstr "git apply : mauvais format de git-diff - /dev/null attendu à la ligne %d" + +#: builtin/apply.c:1422 +#, c-format +msgid "recount: unexpected line: %.*s" +msgstr "recount : ligne inattendue : %.*s" + +#: builtin/apply.c:1479 +#, c-format +msgid "patch fragment without header at line %d: %.*s" +msgstr "fragment de patch sans en-tête à la ligne %d : %.*s" + +#: builtin/apply.c:1496 +#, c-format +msgid "" +"git diff header lacks filename information when removing %d leading pathname " +"component (line %d)" +msgid_plural "" +"git diff header lacks filename information when removing %d leading pathname " +"components (line %d)" +msgstr[0] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composant de préfixe de chemin (ligne %d)" +msgstr[1] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composants de préfixe de chemin (ligne %d)" + +#: builtin/apply.c:1656 +msgid "new file depends on old contents" +msgstr "le nouveau fichier dépend de contenus anciens" + +#: builtin/apply.c:1658 +msgid "deleted file still has contents" +msgstr "le fichier supprimé a encore du contenu" + +#: builtin/apply.c:1684 +#, c-format +msgid "corrupt patch at line %d" +msgstr "patch corrompu à la ligne %d" + +#: builtin/apply.c:1720 +#, c-format +msgid "new file %s depends on old contents" +msgstr "le nouveau fichier %s dépend de contenus anciens" + +#: builtin/apply.c:1722 +#, c-format +msgid "deleted file %s still has contents" +msgstr "le fichier supprimé %s a encore du contenu" + +#: builtin/apply.c:1725 +#, c-format +msgid "** warning: file %s becomes empty but is not deleted" +msgstr "** attention : le fichier %s devient vide mais n'est pas supprimé" + +#: builtin/apply.c:1871 +#, c-format +msgid "corrupt binary patch at line %d: %.*s" +msgstr "patch binaire corrompu à la ligne %d : %.*s" + +#. there has to be one hunk (forward hunk) +#: builtin/apply.c:1900 +#, c-format +msgid "unrecognized binary patch at line %d" +msgstr "patch binaire non reconnu à la ligne %d" + +#: builtin/apply.c:1986 +#, c-format +msgid "patch with only garbage at line %d" +msgstr "patch totalement incompréhensible à la ligne %d" + +#: builtin/apply.c:2076 +#, c-format +msgid "unable to read symlink %s" +msgstr "lecture du lien symbolique %s impossible" + +#: builtin/apply.c:2080 +#, c-format +msgid "unable to open or read %s" +msgstr "ouverture ou lecture de %s impossible" + +#: builtin/apply.c:2688 +#, c-format +msgid "invalid start of line: '%c'" +msgstr "début de ligne invalide : '%c'" + +#: builtin/apply.c:2806 +#, c-format +msgid "Hunk #%d succeeded at %d (offset %d line)." +msgid_plural "Hunk #%d succeeded at %d (offset %d lines)." +msgstr[0] "La section n°%d a réussi à la ligne %d (offset %d ligne)." +msgstr[1] "La section n°%d a réussi à la ligne %d (offset %d lignes)." + +#: builtin/apply.c:2818 +#, c-format +msgid "Context reduced to (%ld/%ld) to apply fragment at %d" +msgstr "Contexte réduit à (%ld/%ld) pour appliquer le fragment à la ligne %d" + +#: builtin/apply.c:2824 +#, c-format +msgid "" +"while searching for:\n" +"%.*s" +msgstr "pendant la recherche de :\n" +"%.*s" + +#: builtin/apply.c:2843 +#, c-format +msgid "missing binary patch data for '%s'" +msgstr "données de patch binaire manquantes pour '%s'" + +#: builtin/apply.c:2946 +#, c-format +msgid "binary patch does not apply to '%s'" +msgstr "le patch binaire ne s'applique par correctement à '%s'" + +#: builtin/apply.c:2952 +#, c-format +msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)" +msgstr "le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s trouvé)" + +#: builtin/apply.c:2973 +#, c-format +msgid "patch failed: %s:%ld" +msgstr "le patch a échoué : %s:%ld" + +#: builtin/apply.c:3095 +#, c-format +msgid "cannot checkout %s" +msgstr "extraction de %s impossible" + +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#, c-format +msgid "read of %s failed" +msgstr "echec de la lecture de %s" + +#: builtin/apply.c:3173 builtin/apply.c:3395 +#, c-format +msgid "path %s has been renamed/deleted" +msgstr "le chemin %s a été renommé/supprimé" + +#: builtin/apply.c:3254 builtin/apply.c:3409 +#, c-format +msgid "%s: does not exist in index" +msgstr "%s : n'existe pas dans l'index" + +#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#, c-format +msgid "%s: %s" +msgstr "%s : %s" + +#: builtin/apply.c:3263 builtin/apply.c:3417 +#, c-format +msgid "%s: does not match index" +msgstr "%s : ne correspond pas à l'index" + +#: builtin/apply.c:3365 +msgid "removal patch leaves file contents" +msgstr "le patch de suppression laisse un contenu dans le fichier" + +#: builtin/apply.c:3434 +#, c-format +msgid "%s: wrong type" +msgstr "%s : type erroné" + +#: builtin/apply.c:3436 +#, c-format +msgid "%s has type %o, expected %o" +msgstr "%s est de type %o, mais %o attendu" + +#: builtin/apply.c:3537 +#, c-format +msgid "%s: already exists in index" +msgstr "%s : existe déjà dans l'index" + +#: builtin/apply.c:3540 +#, c-format +msgid "%s: already exists in working directory" +msgstr "%s : existe déjà dans la copie de travail" + +#: builtin/apply.c:3560 +#, c-format +msgid "new mode (%o) of %s does not match old mode (%o)" +msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o)" + +#: builtin/apply.c:3565 +#, c-format +msgid "new mode (%o) of %s does not match old mode (%o) of %s" +msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o) de %s" + +#: builtin/apply.c:3573 +#, c-format +msgid "%s: patch does not apply" +msgstr "%s : le patch ne s'applique pas" + +#: builtin/apply.c:3586 +#, c-format +msgid "Checking patch %s..." +msgstr "Vérification du patch %s..." + +#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#, c-format +msgid "make_cache_entry failed for path '%s'" +msgstr "echec de make_cache_entry pour le chemin '%s'" + +#: builtin/apply.c:3822 +#, c-format +msgid "unable to remove %s from index" +msgstr "suppression de %s dans l'index impossible" + +#: builtin/apply.c:3850 +#, c-format +msgid "corrupt patch for subproject %s" +msgstr "patch corrompu pour le sous-projet %s" + +#: builtin/apply.c:3854 +#, c-format +msgid "unable to stat newly created file '%s'" +msgstr "stat du fichier nouvellement créé '%s' impossible" + +#: builtin/apply.c:3859 +#, c-format +msgid "unable to create backing store for newly created file %s" +msgstr "création du magasin de stockage pour le fichier nouvellement créé %s impossible" + +#: builtin/apply.c:3862 builtin/apply.c:3970 +#, c-format +msgid "unable to add cache entry for %s" +msgstr "ajout de l'entrée de cache %s impossible" + +#: builtin/apply.c:3895 +#, c-format +msgid "closing file '%s'" +msgstr "fermeture du fichier '%s'" + +#: builtin/apply.c:3944 +#, c-format +msgid "unable to write file '%s' mode %o" +msgstr "écriture du fichier '%s' mode %o impossible" + +#: builtin/apply.c:4031 +#, c-format +msgid "Applied patch %s cleanly." +msgstr "Patch %s appliqué proprement." + +#: builtin/apply.c:4039 +msgid "internal error" +msgstr "erreur interne" + +#. Say this even without --verbose +#: builtin/apply.c:4042 +#, c-format +msgid "Applying patch %%s with %d reject..." +msgid_plural "Applying patch %%s with %d rejects..." +msgstr[0] "Application du patch %%s avec %d rejet..." +msgstr[1] "Application du patch %%s avec %d rejets..." + +#: builtin/apply.c:4052 +#, c-format +msgid "truncating .rej filename to %.*s.rej" +msgstr "troncature du nom de fichier .rej en %.*s.rej" + +#: builtin/apply.c:4073 +#, c-format +msgid "Hunk #%d applied cleanly." +msgstr "Section n°%d appliquée proprement." + +#: builtin/apply.c:4076 +#, c-format +msgid "Rejected hunk #%d." +msgstr "Section n°%d rejetée." + +#: builtin/apply.c:4226 +msgid "unrecognized input" +msgstr "entrée non reconnue" + +#: builtin/apply.c:4237 +msgid "unable to read index file" +msgstr "lecture du fichier d'index impossible" + +#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/fetch.c:63 +msgid "path" +msgstr "chemin" + +#: builtin/apply.c:4357 +msgid "don't apply changes matching the given path" +msgstr "ne pas appliquer les modifications qui correspondent au chemin donné" + +#: builtin/apply.c:4360 +msgid "apply changes matching the given path" +msgstr "appliquer les modifications qui correspondent au chemin donné" + +#: builtin/apply.c:4362 +msgid "num" +msgstr "num" + +#: builtin/apply.c:4363 +msgid "remove <num> leading slashes from traditional diff paths" +msgstr "supprimer <num> barres obliques des chemins traditionnels de diff" + +#: builtin/apply.c:4366 +msgid "ignore additions made by the patch" +msgstr "ignorer les additions réalisées par le patch" + +#: builtin/apply.c:4368 +msgid "instead of applying the patch, output diffstat for the input" +msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée" + +#: builtin/apply.c:4372 +msgid "show number of added and deleted lines in decimal notation" +msgstr "afficher le nombre de lignes ajoutées et supprimées en notation décimale" + +#: builtin/apply.c:4374 +msgid "instead of applying the patch, output a summary for the input" +msgstr "au lieu d'appliquer le patch, afficher un résumer de l'entrée" + +#: builtin/apply.c:4376 +msgid "instead of applying the patch, see if the patch is applicable" +msgstr "au lieu d'appliquer le patch, voir si le patch est applicable" + +#: builtin/apply.c:4378 +msgid "make sure the patch is applicable to the current index" +msgstr "s'assurer que le patch est applicable sur l'index actuel" + +#: builtin/apply.c:4380 +msgid "apply a patch without touching the working tree" +msgstr "appliquer les patch sans toucher à la copie de travail" + +#: builtin/apply.c:4382 +msgid "also apply the patch (use with --stat/--summary/--check)" +msgstr "appliquer aussi le patch (à utiliser avec ---stat/--summary/--check)" + +#: builtin/apply.c:4384 +msgid "attempt three-way merge if a patch does not apply" +msgstr "tenter une fusion à 3 points si le patch ne s'applique pas proprement" + +#: builtin/apply.c:4386 +msgid "build a temporary index based on embedded index information" +msgstr "construire un index temporaire fondé sur l'information de l'index embarqué" + +#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +msgid "paths are separated with NUL character" +msgstr "les chemins sont séparés par un caractère NUL" + +#: builtin/apply.c:4391 +msgid "ensure at least <n> lines of context match" +msgstr "s'assurer d'au moins <n> lignes de correspondance de contexte" + +#: builtin/apply.c:4392 +msgid "action" +msgstr "action" + +#: builtin/apply.c:4393 +msgid "detect new or modified lines that have whitespace errors" +msgstr "détecter des lignes nouvelles ou modifiées qui contiennent des erreurs d'espace" + +#: builtin/apply.c:4396 builtin/apply.c:4399 +msgid "ignore changes in whitespace when finding context" +msgstr "ignorer des modifications d'espace lors de la recherche de contexte" + +#: builtin/apply.c:4402 +msgid "apply the patch in reverse" +msgstr "appliquer le patch en sens inverse" + +#: builtin/apply.c:4404 +msgid "don't expect at least one line of context" +msgstr "ne pas s'attendre à au moins une ligne de contexte" + +#: builtin/apply.c:4406 +msgid "leave the rejected hunks in corresponding *.rej files" +msgstr "laisser les sections rejetées dans les fichiers *.rej correspondants" + +#: builtin/apply.c:4408 +msgid "allow overlapping hunks" +msgstr "accepter les recouvrements de sections" + +#: builtin/apply.c:4411 +msgid "tolerate incorrectly detected missing new-line at the end of file" +msgstr "tolérer des erreurs de détection de retours chariot manquants en fin de fichier" + +#: builtin/apply.c:4414 +msgid "do not trust the line counts in the hunk headers" +msgstr "ne pas se fier au compte de lignes dans les en-têtes de section" + +#: builtin/apply.c:4416 +msgid "root" +msgstr "racine" + +#: builtin/apply.c:4417 +msgid "prepend <root> to all filenames" +msgstr "préfixer tous les noms de fichier avec <root>" + +#: builtin/apply.c:4439 +msgid "--3way outside a repository" +msgstr "--3way hors d'un dépôt" + +#: builtin/apply.c:4447 +msgid "--index outside a repository" +msgstr "--index hors d'un dépôt" + +#: builtin/apply.c:4450 +msgid "--cached outside a repository" +msgstr "--cached hors d'un dépôt" + +#: builtin/apply.c:4466 +#, c-format +msgid "can't open patch '%s'" +msgstr "ouverture impossible du patch '%s'" + +#: builtin/apply.c:4480 +#, c-format +msgid "squelched %d whitespace error" +msgid_plural "squelched %d whitespace errors" +msgstr[0] "%d erreur d'espace ignorée" +msgstr[1] "%d erreurs d'espace ignorées" + +#: builtin/apply.c:4486 builtin/apply.c:4496 +#, c-format +msgid "%d line adds whitespace errors." +msgid_plural "%d lines add whitespace errors." +msgstr[0] "%d ligne a ajouté des erreurs d'espace." +msgstr[1] "%d lignes ont ajouté des erreurs d'espace." + +#: builtin/archive.c:17 +#, c-format +msgid "could not create archive file '%s'" +msgstr "création impossible du fichier d'archive '%s'" + +#: builtin/archive.c:20 +msgid "could not redirect output" +msgstr "impossible de rediriger la sortie" + +#: builtin/archive.c:37 +msgid "git archive: Remote with no URL" +msgstr "git archive : Dépôt distant sans URL" + +#: builtin/archive.c:58 +msgid "git archive: expected ACK/NAK, got EOF" +msgstr "git archive : ACK/NACK attendu, EOF reçu" + +#: builtin/archive.c:61 +#, c-format +msgid "git archive: NACK %s" +msgstr "git archive : NACK %s" + +#: builtin/archive.c:63 +#, c-format +msgid "remote error: %s" +msgstr "erreur distante : %s" + +#: builtin/archive.c:64 +msgid "git archive: protocol error" +msgstr "git archive : erreur de protocole" + +#: builtin/archive.c:68 +msgid "git archive: expected a flush" +msgstr "git archive : vidage attendu" + +#: builtin/bisect--helper.c:7 +msgid "git bisect--helper --next-all [--no-checkout]" +msgstr "git bisect --helper --next-all [--no-checkout]" + +#: builtin/bisect--helper.c:17 +msgid "perform 'git bisect next'" +msgstr "effectuer 'git bisect next'" + +#: builtin/bisect--helper.c:19 +msgid "update BISECT_HEAD instead of checking out the current commit" +msgstr "mettre à jour BISECT_HEAD au lieu d'extraire le commit actuel" + +#: builtin/blame.c:25 +msgid "git blame [options] [rev-opts] [rev] [--] file" +msgstr "git blame [options] [options-de-révision] [rev] [--] fichier" + +#: builtin/blame.c:30 +msgid "[rev-opts] are documented in git-rev-list(1)" +msgstr "[options-de-révision] sont documentés dans git-rev-list(1)" + +#: builtin/blame.c:2355 +msgid "Show blame entries as we find them, incrementally" +msgstr "Montrer les entrée de blâme au fur et à mesure de leur découverte, de manière incrémentale" + +#: builtin/blame.c:2356 +msgid "Show blank SHA-1 for boundary commits (Default: off)" +msgstr "Montrer un SHA-1 blanc pour les commits de limite (Défaut : désactivé)" + +#: builtin/blame.c:2357 +msgid "Do not treat root commits as boundaries (Default: off)" +msgstr "Ne pas traiter les commits racine comme des limites (Défaut : désactivé)" + +#: builtin/blame.c:2358 +msgid "Show work cost statistics" +msgstr "Montrer les statistiques de coût d'activité" + +#: builtin/blame.c:2359 +msgid "Show output score for blame entries" +msgstr "Montrer le score de sortie pour les entrées de blâme" + +#: builtin/blame.c:2360 +msgid "Show original filename (Default: auto)" +msgstr "Montrer les noms de fichier originaux (Défaut : auto)" + +#: builtin/blame.c:2361 +msgid "Show original linenumber (Default: off)" +msgstr "Montrer les numéros de lignes originaux (Défaut : désactivé)" + +#: builtin/blame.c:2362 +msgid "Show in a format designed for machine consumption" +msgstr "Afficher dans un format propice à la consommation par machine" + +#: builtin/blame.c:2363 +msgid "Show porcelain format with per-line commit information" +msgstr "Afficher en format porcelaine avec l'information de commit par ligne" + +#: builtin/blame.c:2364 +msgid "Use the same output mode as git-annotate (Default: off)" +msgstr "Utiliser le même mode de sortie que git-annotate (Défaut : désactivé)" + +#: builtin/blame.c:2365 +msgid "Show raw timestamp (Default: off)" +msgstr "Afficher les horodatages bruts (Défaut: désactivé)" + +#: builtin/blame.c:2366 +msgid "Show long commit SHA1 (Default: off)" +msgstr "Afficher les longs SHA1 de commits (Défaut : désactivé)" + +#: builtin/blame.c:2367 +msgid "Suppress author name and timestamp (Default: off)" +msgstr "Supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)" + +#: builtin/blame.c:2368 +msgid "Show author email instead of name (Default: off)" +msgstr "Afficher l'e-mail de l'auteur au lieu du nom (Défaut : désactivé)" + +#: builtin/blame.c:2369 +msgid "Ignore whitespace differences" +msgstr "Ignorer les différences d'espace" + +#: builtin/blame.c:2370 +msgid "Spend extra cycles to find better match" +msgstr "Dépenser des cycles supplémentaires pour trouver une meilleure correspondance" + +#: builtin/blame.c:2371 +msgid "Use revisions from <file> instead of calling git-rev-list" +msgstr "Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list" + +#: builtin/blame.c:2372 +msgid "Use <file>'s contents as the final image" +msgstr "Utiliser le contenu de <fichier> comme image finale" + +#: builtin/blame.c:2373 builtin/blame.c:2374 +msgid "score" +msgstr "score" + +#: builtin/blame.c:2373 +msgid "Find line copies within and across files" +msgstr "Trouver les copies de ligne dans et entre les fichiers" + +#: builtin/blame.c:2374 +msgid "Find line movements within and across files" +msgstr "Trouver les mouvements de ligne dans et entre les fichiers" + +#: builtin/blame.c:2375 +msgid "n,m" +msgstr "n,m" + +#: builtin/blame.c:2375 +msgid "Process only line range n,m, counting from 1" +msgstr "Traiter seulement l'intervalle de ligne n,m en commençant le compte à 1" + +#: builtin/branch.c:24 +msgid "git branch [options] [-r | -a] [--merged | --no-merged]" +msgstr "git branch [options] [-r | -a] [--merged | --no-merged]" + +#: builtin/branch.c:25 +msgid "git branch [options] [-l] [-f] <branchname> [<start-point>]" +msgstr "git branch [options] [-l] [-f] <nomdebranch> [<point-de-départ>]" + +#: builtin/branch.c:26 +msgid "git branch [options] [-r] (-d | -D) <branchname>..." +msgstr "git branch [options] [-r] (-d | -D) <nomdebranche>..." + +#: builtin/branch.c:27 +msgid "git branch [options] (-m | -M) [<oldbranch>] <newbranch>" +msgstr "git branch [options] (-m | -M) [<anciennebranche>] <nouvellebranche>" + +#: builtin/branch.c:150 +#, c-format +msgid "" +"deleting branch '%s' that has been merged to\n" +" '%s', but not yet merged to HEAD." +msgstr "" +"suppression de la branche '%s' qui a été fusionnée dans\n" +" '%s', mais pas dans HEAD." + +#: builtin/branch.c:154 +#, c-format +msgid "" +"not deleting branch '%s' that is not yet merged to\n" +" '%s', even though it is merged to HEAD." +msgstr "" +"branche '%s' non supprimée car elle n'a pas été fusionnée dans\n" +" '%s', même si elle est fusionnée dans HEAD." + +#: builtin/branch.c:168 +#, c-format +msgid "Couldn't look up commit object for '%s'" +msgstr "Impossible de rechercher l'objet commit pour '%s'" + +#: builtin/branch.c:172 +#, 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 "" +"La branche '%s' n'est pas totalement fusionnée.\n" +"Si vous êtes sur que vous voulez la supprimer, lancez 'git branch -D %s'." + +#: builtin/branch.c:185 +msgid "Update of config-file failed" +msgstr "Échec de la mise à jour du fichier de config" + +#: builtin/branch.c:213 +msgid "cannot use -a with -d" +msgstr "impossible d'utiliser -a avec -d" + +#: builtin/branch.c:219 +msgid "Couldn't look up commit object for HEAD" +msgstr "Impossible de rechercher l'objet commit pour HEAD" + +#: builtin/branch.c:227 +#, c-format +msgid "Cannot delete the branch '%s' which you are currently on." +msgstr "Impossible de supprimer la branche '%s' sur laquelle vous êtes." + +#: builtin/branch.c:240 +#, c-format +msgid "remote branch '%s' not found." +msgstr "branche distante %s' non trouvée." + +#: builtin/branch.c:241 +#, c-format +msgid "branch '%s' not found." +msgstr "branche '%s' non trouvée." + +#: builtin/branch.c:255 +#, c-format +msgid "Error deleting remote branch '%s'" +msgstr "Erreur lors de la suppression de la branche distante '%s'" + +#: builtin/branch.c:256 +#, c-format +msgid "Error deleting branch '%s'" +msgstr "Erreur lors de la suppression de la branche '%s'" + +#: builtin/branch.c:263 +#, c-format +msgid "Deleted remote branch %s (was %s).\n" +msgstr "Branche distante %s supprimée (précédemment %s).\n" + +#: builtin/branch.c:264 +#, c-format +msgid "Deleted branch %s (was %s).\n" +msgstr "Branche %s supprimée (précédemment %s).\n" + +#: builtin/branch.c:366 +#, c-format +msgid "branch '%s' does not point at a commit" +msgstr "la branche '%s' ne pointe pas sur un commit" + +#: builtin/branch.c:453 +#, c-format +msgid "[%s: behind %d]" +msgstr "[%s: en retard de %d]" + +#: builtin/branch.c:455 +#, c-format +msgid "[behind %d]" +msgstr "[en retard de %d]" + +#: builtin/branch.c:459 +#, c-format +msgid "[%s: ahead %d]" +msgstr "[%s : en avance de %d]" + +#: builtin/branch.c:461 +#, c-format +msgid "[ahead %d]" +msgstr "[en avance de %d]" + +#: builtin/branch.c:464 +#, c-format +msgid "[%s: ahead %d, behind %d]" +msgstr "[%s : en avance de %d, en retard de %d]" + +#: builtin/branch.c:467 +#, c-format +msgid "[ahead %d, behind %d]" +msgstr "[en avance de %d, en retard de %d]" + +#: builtin/branch.c:490 +msgid " **** invalid ref ****" +msgstr " **** référence invalide ****" + +#: builtin/branch.c:582 +#, c-format +msgid "(no branch, rebasing %s)" +msgstr "(aucune branche, rebasage de %s)" + +#: builtin/branch.c:585 +#, c-format +msgid "(no branch, bisect started on %s)" +msgstr "(aucune branche, bisect a démarré sur %s)" + +#: builtin/branch.c:588 +#, c-format +msgid "(detached from %s)" +msgstr "(détaché de %s)" + +#: builtin/branch.c:591 +msgid "(no branch)" +msgstr "(aucune branche)" + +#: builtin/branch.c:637 +#, c-format +msgid "object '%s' does not point to a commit" +msgstr "l'objet '%s' ne pointe pas sur un commit" + +#: builtin/branch.c:669 +msgid "some refs could not be read" +msgstr "des références n'ont pas pu être lues" + +#: builtin/branch.c:682 +msgid "cannot rename the current branch while not on any." +msgstr "impossible de renommer la branche actuelle, il n'y en a pas." + +#: builtin/branch.c:692 +#, c-format +msgid "Invalid branch name: '%s'" +msgstr "Nom de branche invalide : '%s'" + +#: builtin/branch.c:707 +msgid "Branch rename failed" +msgstr "Echec de renommage de la branche" + +#: builtin/branch.c:711 +#, c-format +msgid "Renamed a misnamed branch '%s' away" +msgstr "Renommage d'un branche mal nommée '%s'" + +#: builtin/branch.c:715 +#, c-format +msgid "Branch renamed to %s, but HEAD is not updated!" +msgstr "La branche a été renommée en %s, mais HEAD n'est pas mise à jour !" + +#: builtin/branch.c:722 +msgid "Branch is renamed, but update of config-file failed" +msgstr "La branche est renommée, mais la mise à jour du fichier de config a échoué" + +#: builtin/branch.c:737 +#, c-format +msgid "malformed object name %s" +msgstr "nom d'objet malformé %s" + +#: builtin/branch.c:761 +#, c-format +msgid "could not write branch description template: %s" +msgstr "impossible d'écrire le modèle de description de branche : %s" + +#: builtin/branch.c:791 +msgid "Generic options" +msgstr "Options génériques" + +#: builtin/branch.c:793 +msgid "show hash and subject, give twice for upstream branch" +msgstr "afficher le hachage et le sujet, doublé pour la branche amont" + +#: builtin/branch.c:794 +msgid "suppress informational messages" +msgstr "supprimer les messages d'information" + +#: builtin/branch.c:795 +msgid "set up tracking mode (see git-pull(1))" +msgstr "régler le mode de suivi (voir git-pull(1))" + +#: builtin/branch.c:797 +msgid "change upstream info" +msgstr "modifier l'information amont" + +#: builtin/branch.c:801 +msgid "use colored output" +msgstr "utiliser la coloration dans la sortie" + +#: builtin/branch.c:802 +msgid "act on remote-tracking branches" +msgstr "agir sur les branches de suivi distantes" + +#: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 +#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 +#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +msgid "commit" +msgstr "valider" + +#: builtin/branch.c:806 builtin/branch.c:812 +msgid "print only branches that contain the commit" +msgstr "afficher seulement les branches qui contiennent le commit" + +#: builtin/branch.c:818 +msgid "Specific git-branch actions:" +msgstr "Actions spécifiques à git-branch :" + +#: builtin/branch.c:819 +msgid "list both remote-tracking and local branches" +msgstr "afficher à la fois les branches de suivi et les branches locales" + +#: builtin/branch.c:821 +msgid "delete fully merged branch" +msgstr "supprimer une branche totalement fusionnée" + +#: builtin/branch.c:822 +msgid "delete branch (even if not merged)" +msgstr "supprimer une branche (même non fusionnée)" + +#: builtin/branch.c:823 +msgid "move/rename a branch and its reflog" +msgstr "déplacer/renommer une branche et son reflog" + +#: builtin/branch.c:824 +msgid "move/rename a branch, even if target exists" +msgstr "déplacer/renommer une branche, même si la cible existe" + +#: builtin/branch.c:825 +msgid "list branch names" +msgstr "afficher les noms des branches" + +#: builtin/branch.c:826 +msgid "create the branch's reflog" +msgstr "créer le reflog de la branche" + +#: builtin/branch.c:828 +msgid "edit the description for the branch" +msgstr "éditer la description de la branche" + +#: builtin/branch.c:829 +msgid "force creation (when already exists)" +msgstr "forcer la création (même si la cible existe)" + +#: builtin/branch.c:832 +msgid "print only not merged branches" +msgstr "afficher seulement les branches non fusionnées" + +#: builtin/branch.c:838 +msgid "print only merged branches" +msgstr "afficher seulement les branches fusionnées" + +#: builtin/branch.c:842 +msgid "list branches in columns" +msgstr "afficher les branches en colonnes" + +#: builtin/branch.c:855 +msgid "Failed to resolve HEAD as a valid ref." +msgstr "Échec de résolution de HEAD comme référence valide." + +#: builtin/branch.c:860 builtin/clone.c:619 +msgid "HEAD not found below refs/heads!" +msgstr "HEAD non trouvée sous refs/heads !" + +#: builtin/branch.c:883 +msgid "--column and --verbose are incompatible" +msgstr "--column et --verbose sont incompatibles" + +#: builtin/branch.c:889 builtin/branch.c:928 +msgid "branch name required" +msgstr "le nom de branche est requis" + +#: builtin/branch.c:904 +msgid "Cannot give description to detached HEAD" +msgstr "Impossible de décrire une HEAD détachée" + +#: builtin/branch.c:909 +msgid "cannot edit description of more than one branch" +msgstr "impossible d'éditer la description de plus d'une branche" + +#: builtin/branch.c:916 +#, c-format +msgid "No commit on branch '%s' yet." +msgstr "Aucun commit sur la branche '%s'." + +#: builtin/branch.c:919 +#, c-format +msgid "No branch named '%s'." +msgstr "Aucune branche nommée '%s'." + +#: builtin/branch.c:934 +msgid "too many branches for a rename operation" +msgstr "trop de branches pour une opération de renommage" + +#: builtin/branch.c:939 +msgid "too many branches to set new upstream" +msgstr "trop de branches pour spécifier une branche amont" + +#: builtin/branch.c:943 +#, c-format +msgid "" +"could not set upstream of HEAD to %s when it does not point to any branch." +msgstr "impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur aucune branche." + +#: builtin/branch.c:946 builtin/branch.c:968 builtin/branch.c:990 +#, c-format +msgid "no such branch '%s'" +msgstr "pas de branche '%s'" + +#: builtin/branch.c:950 +#, c-format +msgid "branch '%s' does not exist" +msgstr "la branche '%s' n'existe pas" + +#: builtin/branch.c:962 +msgid "too many branches to unset upstream" +msgstr "trop de branches pour désactiver un amont" + +#: builtin/branch.c:966 +msgid "could not unset upstream of HEAD when it does not point to any branch." +msgstr "impossible de désactiver une branche amont de HEAD quand elle ne pointe sur aucune branche." + +#: builtin/branch.c:972 +#, c-format +msgid "Branch '%s' has no upstream information" +msgstr "La branche '%s' n'a aucune information de branche amont" + +#: builtin/branch.c:987 +msgid "it does not make sense to create 'HEAD' manually" +msgstr "créer manuellement 'HEAD' n'a aucun sens" + +#: builtin/branch.c:993 +msgid "-a and -r options to 'git branch' do not make sense with a branch name" +msgstr "les options -a et -r de 'git branch' n'ont pas de sens avec un nom de branche" + +#: builtin/branch.c:996 +#, c-format +msgid "" +"The --set-upstream flag is deprecated and will be removed. Consider using --" +"track or --set-upstream-to\n" +msgstr "l'option --set-upstream est obsolète et va disparaître. Utilisez plutôt --track ou --set-upstream-to\n" + +#: builtin/branch.c:1013 +#, c-format +msgid "" +"\n" +"If you wanted to make '%s' track '%s', do this:\n" +"\n" +msgstr "\n" +"Si vous vouliez que '%s' suive '%s', faîtes ceci :\n" +"\n" + +#: builtin/branch.c:1014 +#, c-format +msgid " git branch -d %s\n" +msgstr " git branch -d %s\n" + +#: builtin/branch.c:1015 +#, c-format +msgid " git branch --set-upstream-to %s\n" +msgstr " git branch -set-upstream-to %s\n" + +#: builtin/bundle.c:47 +#, c-format +msgid "%s is okay\n" +msgstr "%s est correct\n" + +#: builtin/bundle.c:56 +msgid "Need a repository to create a bundle." +msgstr "La création d'un colis requiert un dépôt." + +#: builtin/bundle.c:60 +msgid "Need a repository to unbundle." +msgstr "Le dépaquetage d'un colis requiert un dépôt." + +#: builtin/cat-file.c:176 +msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" +msgstr "git cat-file (-t|-s|-e|-p|<type>|--textconv) <objet>" + +#: builtin/cat-file.c:177 +msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" +msgstr "git cat-file (--batch|--batch-check) < <liste_d_objets>" + +#: builtin/cat-file.c:195 +msgid "<type> can be one of: blob, tree, commit, tag" +msgstr "<type> peut être : blob, tree, commit ou tag" + +#: builtin/cat-file.c:196 +msgid "show object type" +msgstr "afficher le type de l'objet" + +#: builtin/cat-file.c:197 +msgid "show object size" +msgstr "afficher la taille de l'objet" + +#: builtin/cat-file.c:199 +msgid "exit with zero when there's no error" +msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur" + +#: builtin/cat-file.c:200 +msgid "pretty-print object's content" +msgstr "afficher avec mise en forme le contenu de l'objet" + +#: builtin/cat-file.c:202 +msgid "for blob objects, run textconv on object's content" +msgstr "pour les objets blob, lancer textconv sur le contenu de l'objet" + +#: builtin/cat-file.c:204 +msgid "show info and content of objects fed from the standard input" +msgstr "afficher l'information et le contenu des objets passés en entrée standard" + +#: builtin/cat-file.c:207 +msgid "show info about objects fed from the standard input" +msgstr "afficher l'information des objets passés en entrée standard" + +#: builtin/check-attr.c:11 +msgid "git check-attr [-a | --all | attr...] [--] pathname..." +msgstr "git check-attr [-a | --all | attr...] [--] chemin..." + +#: builtin/check-attr.c:12 +msgid "git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>" +msgstr "git check-attr --stdin [-z] [-a | --all | attr...] < <liste-de-chemins>" + +#: builtin/check-attr.c:19 +msgid "report all attributes set on file" +msgstr "afficher tous les attributs associés au fichier" + +#: builtin/check-attr.c:20 +msgid "use .gitattributes only from the index" +msgstr "utiliser .gitattributes seulement depuis l'index" + +#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75 +msgid "read file names from stdin" +msgstr "lire les noms de fichier depuis stdin" + +#: builtin/check-attr.c:23 builtin/check-ignore.c:24 +msgid "input paths are terminated by a null character" +msgstr "les chemins en entrée sont terminés par le caractère nul" + +#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +msgid "suppress progress reporting" +msgstr "supprimer l'état d'avancement" + +#: builtin/check-ignore.c:146 +msgid "cannot specify pathnames with --stdin" +msgstr "impossible de spécifier les chemins avec --stdin" + +#: builtin/check-ignore.c:149 +msgid "-z only makes sense with --stdin" +msgstr "-z n'a de sens qu'avec l'option --stdin" + +#: builtin/check-ignore.c:151 +msgid "no path specified" +msgstr "aucun chemin spécifié" + +#: builtin/check-ignore.c:155 +msgid "--quiet is only valid with a single pathname" +msgstr "--quiet n'est valide qu'avec un seul chemin" + +#: builtin/check-ignore.c:157 +msgid "cannot have both --quiet and --verbose" +msgstr "impossible d'avoir --quiet et --verbose" + +#: builtin/checkout-index.c:126 +msgid "git checkout-index [options] [--] [<file>...]" +msgstr "git checkout-index [options] [--] [<fichier>...]" + +#: builtin/checkout-index.c:187 +msgid "check out all files in the index" +msgstr "extraire tous les fichiers présents dans l'index" + +#: builtin/checkout-index.c:188 +msgid "force overwrite of existing files" +msgstr "forcer l'écrasement des fichiers existants" + +#: builtin/checkout-index.c:190 +msgid "no warning for existing files and files not in index" +msgstr "pas d'avertissement pour les fichiers existants et les fichiers absents de l'index" + +#: builtin/checkout-index.c:192 +msgid "don't checkout new files" +msgstr "ne pas extraire les nouveaux fichiers" + +#: builtin/checkout-index.c:194 +msgid "update stat information in the index file" +msgstr "mettre à jour l'information de stat dans le fichier d'index" + +#: builtin/checkout-index.c:200 +msgid "read list of paths from the standard input" +msgstr "lire la liste des chemins depuis l'entrée standard" + +#: builtin/checkout-index.c:202 +msgid "write the content to temporary files" +msgstr "écrire le contenu dans des fichiers temporaires" + +#: builtin/checkout-index.c:203 builtin/column.c:30 +msgid "string" +msgstr "chaîne" + +#: builtin/checkout-index.c:204 +msgid "when creating files, prepend <string>" +msgstr "lors de la création de fichiers, préfixer par <chaîne>" + +#: builtin/checkout-index.c:207 +msgid "copy out the files from named stage" +msgstr "copier les fichiers depuis l'index nommé" + +#: builtin/checkout.c:25 +msgid "git checkout [options] <branch>" +msgstr "git checkout [options] <branche>" + +#: builtin/checkout.c:26 +msgid "git checkout [options] [<branch>] -- <file>..." +msgstr "git checkout [options] [<branche>] -- <fichier>..." + +#: builtin/checkout.c:117 builtin/checkout.c:150 +#, c-format +msgid "path '%s' does not have our version" +msgstr "le chemin '%s' n'a pas notre version" + +#: builtin/checkout.c:119 builtin/checkout.c:152 +#, c-format +msgid "path '%s' does not have their version" +msgstr "le chemin '%s' n'a pas leur version" + +#: builtin/checkout.c:135 +#, c-format +msgid "path '%s' does not have all necessary versions" +msgstr "le chemin '%s' n'a aucune des versions nécessaires" + +#: builtin/checkout.c:179 +#, c-format +msgid "path '%s' does not have necessary versions" +msgstr "le chemin '%s' n'a pas les versions nécessaires" + +#: builtin/checkout.c:196 +#, c-format +msgid "path '%s': cannot merge" +msgstr "chemin '%s' : impossible de fusionner" + +#: builtin/checkout.c:213 +#, c-format +msgid "Unable to add merge result for '%s'" +msgstr "Impossible d'ajouter le résultat de fusion pour '%s'" + +#: builtin/checkout.c:237 builtin/checkout.c:240 builtin/checkout.c:243 +#: builtin/checkout.c:246 +#, c-format +msgid "'%s' cannot be used with updating paths" +msgstr "'%s' ne peut pas être utilisé avec des mises à jour de chemins" + +#: builtin/checkout.c:249 builtin/checkout.c:252 +#, c-format +msgid "'%s' cannot be used with %s" +msgstr "'%s' ne peut pas être utilisé avec %s" + +#: builtin/checkout.c:255 +#, c-format +msgid "Cannot update paths and switch to branch '%s' at the same time." +msgstr "Impossible de mettre à jour les chemins et basculer sur la branche '%s' en même temps." + +#: builtin/checkout.c:266 builtin/checkout.c:458 +msgid "corrupt index file" +msgstr "fichier d'index corrompu" + +#: builtin/checkout.c:329 builtin/checkout.c:336 +#, c-format +msgid "path '%s' is unmerged" +msgstr "le chemin '%s' n'est pas fusionné" + +#: builtin/checkout.c:480 +msgid "you need to resolve your current index first" +msgstr "vous devez d'abord résoudre votre index courant" + +#: builtin/checkout.c:601 +#, c-format +msgid "Can not do reflog for '%s'\n" +msgstr "Impossible de faire un reflog pour '%s'\n" + +#: builtin/checkout.c:634 +msgid "HEAD is now at" +msgstr "HEAD est maintenant sur" + +#: builtin/checkout.c:641 +#, c-format +msgid "Reset branch '%s'\n" +msgstr "Remise à zéro de la branche '%s'\n" + +#: builtin/checkout.c:644 +#, c-format +msgid "Already on '%s'\n" +msgstr "Déjà sur '%s'\n" + +#: builtin/checkout.c:648 +#, c-format +msgid "Switched to and reset branch '%s'\n" +msgstr "Basculement et remise à zéro de la branche '%s'\n" + +#: builtin/checkout.c:650 builtin/checkout.c:987 +#, c-format +msgid "Switched to a new branch '%s'\n" +msgstr "Basculement sur la nouvelle branche '%s'\n" + +#: builtin/checkout.c:652 +#, c-format +msgid "Switched to branch '%s'\n" +msgstr "Basculement sur la branche '%s'\n" + +#: builtin/checkout.c:708 +#, c-format +msgid " ... and %d more.\n" +msgstr " ... et %d en plus.\n" + +#. The singular version +#: builtin/checkout.c:714 +#, 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] "" +"Attention : vous laissez %d commit en retard, non connectés à \n" +"une branche :\n" +"\n" +"%s\n" +msgstr[1] "" +"Attention : vous laissez %d commits en retard, non connectés à \n" +"une branche :\n" +"\n" +"%s\n" + +#: builtin/checkout.c:732 +#, 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 "" +"Si vous souhaitez les garder en créant une nouvelle branche, c'est le bon moment\n" +"de le faire avec :\n" +"\n" +"git branche nouvelle_branche %s\n" +"\n" + +#: builtin/checkout.c:762 +msgid "internal error in revision walk" +msgstr "erreur interne lors du parcours des révisions" + +#: builtin/checkout.c:766 +msgid "Previous HEAD position was" +msgstr "La position précédente de HEAD était" + +#: builtin/checkout.c:793 builtin/checkout.c:982 +msgid "You are on a branch yet to be born" +msgstr "Vous êtes sur une branche qui doit encore naître" + +#. case (1) +#: builtin/checkout.c:918 +#, c-format +msgid "invalid reference: %s" +msgstr "référence invalide : %s" + +#. case (1): want a tree +#: builtin/checkout.c:957 +#, c-format +msgid "reference is not a tree: %s" +msgstr "la référence n'est pas un arbre : %s" + +#: builtin/checkout.c:996 +msgid "paths cannot be used with switching branches" +msgstr "impossible d'utiliser des chemins avec un basculement de branches" + +#: builtin/checkout.c:999 builtin/checkout.c:1003 +#, c-format +msgid "'%s' cannot be used with switching branches" +msgstr "'%s' ne peut pas être utilisé avec un basculement de branches" + +#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 +#: builtin/checkout.c:1018 +#, c-format +msgid "'%s' cannot be used with '%s'" +msgstr "'%s' ne peut pas être utilisé avec '%s'" + +#: builtin/checkout.c:1023 +#, c-format +msgid "Cannot switch branch to a non-commit '%s'" +msgstr "Impossible de basculer de branche vers '%s' qui n'est pas un commit" + +#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/remote.c:169 builtin/remote.c:171 +msgid "branch" +msgstr "branche" + +#: builtin/checkout.c:1046 +msgid "create and checkout a new branch" +msgstr "créer et extraire une nouvelle branche" + +#: builtin/checkout.c:1048 +msgid "create/reset and checkout a branch" +msgstr "créer/réinitialiser et extraire une branche" + +#: builtin/checkout.c:1049 +msgid "create reflog for new branch" +msgstr "créer un refog pour une nouvelle branche" + +#: builtin/checkout.c:1050 +msgid "detach the HEAD at named commit" +msgstr "détacher la HEAD à la validation nommée" + +#: builtin/checkout.c:1051 +msgid "set upstream info for new branch" +msgstr "paramétrer l'information de branche amont pour une nouvelle branche" + +#: builtin/checkout.c:1053 +msgid "new branch" +msgstr "nouvelle branche" + +#: builtin/checkout.c:1053 +msgid "new unparented branch" +msgstr "nouvelle branche sans parent" + +#: builtin/checkout.c:1054 +msgid "checkout our version for unmerged files" +msgstr "extraire notre version pour les fichiers non fusionnés" + +#: builtin/checkout.c:1056 +msgid "checkout their version for unmerged files" +msgstr "extraire leur version pour les fichiers non fusionnés" + +#: builtin/checkout.c:1058 +msgid "force checkout (throw away local modifications)" +msgstr "forcer l'extraction (laisser tomber les modifications locales)" + +#: builtin/checkout.c:1059 +msgid "perform a 3-way merge with the new branch" +msgstr "réaliser une fusion à 3 points avec la nouvelle branche" + +#: builtin/checkout.c:1060 builtin/merge.c:217 +msgid "update ignored files (default)" +msgstr "mettre à jour les fichiers ignorés (par défaut)" + +#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +msgid "style" +msgstr "style" + +#: builtin/checkout.c:1062 +msgid "conflict style (merge or diff3)" +msgstr "style de conflit (fusion ou diff3)" + +#: builtin/checkout.c:1065 +msgid "do not limit pathspecs to sparse entries only" +msgstr "ne pas limiter les spécificateurs de chemins aux seules entrées creuses" + +#: builtin/checkout.c:1067 +msgid "second guess 'git checkout no-such-branch'" +msgstr "deuxième chance 'git checkout branche-inexistante'" + +#: builtin/checkout.c:1091 +msgid "-b, -B and --orphan are mutually exclusive" +msgstr "-b, -B et --orphan sont mutuellement exclusifs" + +#: builtin/checkout.c:1108 +msgid "--track needs a branch name" +msgstr "--track requiert un nom de branche" + +#: builtin/checkout.c:1115 +msgid "Missing branch name; try -b" +msgstr "Nom de branche manquant ; essayez -b" + +#: builtin/checkout.c:1150 +msgid "invalid path specification" +msgstr "spécification de chemin invalide" + +#: builtin/checkout.c:1157 +#, c-format +msgid "" +"Cannot update paths and switch to branch '%s' at the same time.\n" +"Did you intend to checkout '%s' which can not be resolved as commit?" +msgstr "" +"Impossible de mettre à jour les chemins et de basculer sur la branche '%s' en même temps.\n" +"Souhaitiez-vous extraire '%s' qui ne peut être résolu comme commit ?" + +#: builtin/checkout.c:1162 +#, c-format +msgid "git checkout: --detach does not take a path argument '%s'" +msgstr "git checkout: --detach n'accepte pas un argument de chemin '%s'" + +#: builtin/checkout.c:1166 +msgid "" +"git checkout: --ours/--theirs, --force and --merge are incompatible when\n" +"checking out of the index." +msgstr "" +"git checkout: --ours/--theirs, --force et --merge sont incompatibles lors\n" +"de l'extraction de l'index." + +#: builtin/clean.c:20 +msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +msgstr "git clean [-d] [-f] [-n] [-q] [-e <motif>] [-x | -X] [--] <chemins>..." + +#: builtin/clean.c:24 +#, c-format +msgid "Removing %s\n" +msgstr "Suppression de %s\n" + +#: builtin/clean.c:25 +#, c-format +msgid "Would remove %s\n" +msgstr "Supprimerait %s\n" + +#: builtin/clean.c:26 +#, c-format +msgid "Skipping repository %s\n" +msgstr "Ignore le dépôt %s\n" + +#: builtin/clean.c:27 +#, c-format +msgid "Would skip repository %s\n" +msgstr "Ignorerait le dépôt %s\n" + +#: builtin/clean.c:28 +#, c-format +msgid "failed to remove %s" +msgstr "échec de la suppression de %s" + +#: builtin/clean.c:160 +msgid "do not print names of files removed" +msgstr "ne pas afficher les noms des fichiers supprimés" + +#: builtin/clean.c:162 +msgid "force" +msgstr "forcer" + +#: builtin/clean.c:164 +msgid "remove whole directories" +msgstr "supprimer les répertoires entiers" + +#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 +#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +msgid "pattern" +msgstr "motif" + +#: builtin/clean.c:166 +msgid "add <pattern> to ignore rules" +msgstr "ajouter <motif> aux règles ignore" + +#: builtin/clean.c:167 +msgid "remove ignored files, too" +msgstr "supprimer les fichiers ignorés, aussi" + +#: builtin/clean.c:169 +msgid "remove only ignored files" +msgstr "supprimer seulement les fichiers ignorés" + +#: builtin/clean.c:187 +msgid "-x and -X cannot be used together" +msgstr "-x et -X ne peuvent pas être utilisés ensemble" + +#: builtin/clean.c:191 +msgid "" +"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +msgstr "clean.requireForce positionné à true et ni -n ni -f fourni ; refus de nettoyer" + +#: builtin/clean.c:194 +msgid "" +"clean.requireForce defaults to true and neither -n nor -f given; refusing to " +"clean" +msgstr "clean.requireForce à true par défaut et ni -n ni -f fourni ; refus de nettoyer" + +#: builtin/clone.c:37 +msgid "git clone [options] [--] <repo> [<dir>]" +msgstr "git clone [options] [--] <dépôt> [<répertoire>]" + +#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 +#: builtin/push.c:436 +msgid "force progress reporting" +msgstr "forcer l'état d'avancement" + +#: builtin/clone.c:67 +msgid "don't create a checkout" +msgstr "ne pas créer d'extraction" + +#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +msgid "create a bare repository" +msgstr "créer un dépôt nu" + +#: builtin/clone.c:73 +msgid "create a mirror repository (implies bare)" +msgstr "créer un dépôt miroir (implique dépôt nu)" + +#: builtin/clone.c:75 +msgid "to clone from a local repository" +msgstr "pour cloner depuis un dépôt local" + +#: builtin/clone.c:77 +msgid "don't use local hardlinks, always copy" +msgstr "ne pas utiliser de liens durs locaux, toujours copier" + +#: builtin/clone.c:79 +msgid "setup as shared repository" +msgstr "régler comme dépôt partagé" + +#: builtin/clone.c:81 builtin/clone.c:83 +msgid "initialize submodules in the clone" +msgstr "initialiser les sous-modules dans le clone" + +#: builtin/clone.c:84 builtin/init-db.c:485 +msgid "template-directory" +msgstr "répertoire-modèle" + +#: builtin/clone.c:85 builtin/init-db.c:486 +msgid "directory from which templates will be used" +msgstr "répertoire depuis lequel les modèles vont être utilisés" + +#: builtin/clone.c:87 +msgid "reference repository" +msgstr "dépôt de référence" + +#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +msgid "name" +msgstr "nom" + +#: builtin/clone.c:89 +msgid "use <name> instead of 'origin' to track upstream" +msgstr "utiliser <nom> au lieu de 'origin' pour suivre la branche amont" + +#: builtin/clone.c:91 +msgid "checkout <branch> instead of the remote's HEAD" +msgstr "extraire <branche> au lieu de la HEAD du répertoire distant" + +#: builtin/clone.c:93 +msgid "path to git-upload-pack on the remote" +msgstr "chemin vers git-upload-pack sur le serveur distant" + +#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +msgid "depth" +msgstr "profondeur" + +#: builtin/clone.c:95 +msgid "create a shallow clone of that depth" +msgstr "créer un clone superficiel de cette profondeur" + +#: builtin/clone.c:97 +msgid "clone only one branch, HEAD or --branch" +msgstr "cloner seulement une branche, HEAD ou --branch" + +#: builtin/clone.c:98 builtin/init-db.c:494 +msgid "gitdir" +msgstr "gitdir" + +#: builtin/clone.c:99 builtin/init-db.c:495 +msgid "separate git dir from working tree" +msgstr "séparer le répertoire git de la copie de travail" + +#: builtin/clone.c:100 +msgid "key=value" +msgstr "clé=valeur" + +#: builtin/clone.c:101 +msgid "set config inside the new repository" +msgstr "régler la configuration dans le nouveau dépôt" + +#: builtin/clone.c:254 +#, c-format +msgid "reference repository '%s' is not a local repository." +msgstr "le dépôt de référence '%s' n'est pas un dépôt local." + +#: builtin/clone.c:317 +#, c-format +msgid "failed to create directory '%s'" +msgstr "échec de la création du répertoire '%s'" + +#: builtin/clone.c:319 builtin/diff.c:77 +#, c-format +msgid "failed to stat '%s'" +msgstr "échec du stat de '%s'" + +#: builtin/clone.c:321 +#, c-format +msgid "%s exists and is not a directory" +msgstr "%s existe et n'est pas un répertoire" + +#: builtin/clone.c:335 +#, c-format +msgid "failed to stat %s\n" +msgstr "échec du stat de %s\n" + +#: builtin/clone.c:357 +#, c-format +msgid "failed to create link '%s'" +msgstr "échec de la création du lien '%s'" + +#: builtin/clone.c:361 +#, c-format +msgid "failed to copy file to '%s'" +msgstr "échec de la copie vers '%s'" + +#: builtin/clone.c:384 +#, c-format +msgid "done.\n" +msgstr "fait.\n" + +#: builtin/clone.c:397 +msgid "" +"Clone succeeded, but checkout failed.\n" +"You can inspect what was checked out with 'git status'\n" +"and retry the checkout with 'git checkout -f HEAD'\n" +msgstr "Le clone a réussi, mais l'extraction a échoué.\n" +"Vous pouvez inspecter ce qui a été extrait avec 'git status'\n" +"et réessayer l'extraction avec 'git checkout -f HEAD'\n" + +#: builtin/clone.c:476 +#, c-format +msgid "Could not find remote branch %s to clone." +msgstr "Impossible de trouver la branche distante '%s' à cloner." + +#: builtin/clone.c:550 +msgid "remote did not send all necessary objects" +msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires" + +#: builtin/clone.c:610 +msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" +msgstr "la HEAD distante réfère à une référence non existante, impossible de l'extraire.\n" + +#: builtin/clone.c:641 +msgid "unable to checkout working tree" +msgstr "inpossible d'extraire la copie de travail" + +#: builtin/clone.c:749 +msgid "Too many arguments." +msgstr "Trop d'arguments." + +#: builtin/clone.c:753 +msgid "You must specify a repository to clone." +msgstr "Vous devez spécifier un dépôt à cloner." + +#: builtin/clone.c:764 +#, c-format +msgid "--bare and --origin %s options are incompatible." +msgstr "les options --bare et --origin %s sont incompatibles." + +#: builtin/clone.c:767 +msgid "--bare and --separate-git-dir are incompatible." +msgstr "--bare et --separate-git-dir sont incompatibles." + +#: builtin/clone.c:780 +#, c-format +msgid "repository '%s' does not exist" +msgstr "le dépôt '%s' n'existe pas" + +#: builtin/clone.c:785 +msgid "--depth is ignored in local clones; use file:// instead." +msgstr "--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"." + +#: builtin/clone.c:795 +#, c-format +msgid "destination path '%s' already exists and is not an empty directory." +msgstr "le chemin de destination '%s' existe déjà et n'est pas un répertoire vide." + +#: builtin/clone.c:805 +#, c-format +msgid "working tree '%s' already exists." +msgstr "la copie de travail '%s' existe déjà ." + +#: builtin/clone.c:818 builtin/clone.c:830 +#, c-format +msgid "could not create leading directories of '%s'" +msgstr "impossible de créer les répertoires de premier niveau dans '%s'" + +#: builtin/clone.c:821 +#, c-format +msgid "could not create work tree dir '%s'." +msgstr "impossible de créer le répertoire de la copie de travail '%s'." + +#: builtin/clone.c:840 +#, c-format +msgid "Cloning into bare repository '%s'...\n" +msgstr "Clonage dans le dépôt nu '%s'\n" + +#: builtin/clone.c:842 +#, c-format +msgid "Cloning into '%s'...\n" +msgstr "Clonage dans '%s'...\n" + +#: builtin/clone.c:877 +#, c-format +msgid "Don't know how to clone %s" +msgstr "Je ne sais pas cloner %s" + +#: builtin/clone.c:926 +#, c-format +msgid "Remote branch %s not found in upstream %s" +msgstr "La branche distante %s n'a pas été trouvée dans le dépôt amont %s" + +#: builtin/clone.c:933 +msgid "You appear to have cloned an empty repository." +msgstr "Vous semblez avoir cloné un dépôt vide." + +#: builtin/column.c:9 +msgid "git column [options]" +msgstr "git column [options]" + +#: builtin/column.c:26 +msgid "lookup config vars" +msgstr "rechercher les variables de configuration" + +#: builtin/column.c:27 builtin/column.c:28 +msgid "layout to use" +msgstr "mise en page à utiliser" + +#: builtin/column.c:29 +msgid "Maximum width" +msgstr "Largeur maximale" + +#: builtin/column.c:30 +msgid "Padding space on left border" +msgstr "Remplissage d'espace sur la bordure gauche" + +#: builtin/column.c:31 +msgid "Padding space on right border" +msgstr "Remplissage d'espace sur le côté droit" + +#: builtin/column.c:32 +msgid "Padding space between columns" +msgstr "Remplissage d'espace entre les colonnes" + +#: builtin/column.c:51 +msgid "--command must be the first argument" +msgstr "--command doit être le premier argument" + +#: builtin/commit.c:34 +msgid "git commit [options] [--] <pathspec>..." +msgstr "git commit [options] [--] <spécification-de-chemin>..." + +#: builtin/commit.c:39 +msgid "git status [options] [--] <pathspec>..." +msgstr "git status [options] [--] <spécification-de-chemin>..." + +#: builtin/commit.c:44 +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 "" +"Votre nom et votre adresse e-mail ont été configurés automatiquement en se fondant\n" +"sur votre nom d'utilisateur et votre nom d'ordinateur. Veuillez vérifier qu'ils sont corrects.\n" +"Vous pouvez supprimer ce message en les paramétrant explicitement :\n" +"\n" +" git config --global user.name \"Votre Nom\"\n" +" git config --global user.email vous@exemple.com\n" +"\n" +"Après ceci, vous pouvez corriger l'identité utilisée pour ce commit avec :\n" +"\n" +" git commit --amend --reset-author\n" + +#: builtin/commit.c:56 +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 "Vous avez demandé de corriger le commit le plus récent, mais le faire le rendrait\n" +"vide. Vous pouvez répéter votre commande avec --allow-empty, ou vous pouvez\n" +"supprimer complètement le commit avec \"git reset HEAD^\".\n" + +#: builtin/commit.c:61 +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 "" +"Le picorage précédent est à présent vide, vraisemblablement dû à une résolution de conflit.\n" +"Si vous souhaitez tout de même le valider, utilisez :\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Sinon, utilisez 'git reset'\n" + +#: builtin/commit.c:260 +msgid "failed to unpack HEAD tree object" +msgstr "échec du dépaquetage de l'objet arbre HEAD" + +#: builtin/commit.c:302 +msgid "unable to create temporary index" +msgstr "impossible de créer l'index temporaire" + +#: builtin/commit.c:308 +msgid "interactive add failed" +msgstr "échec de l'ajout interactif" + +#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +msgid "unable to write new_index file" +msgstr "impossible d'écrire le fichier new_index" + +#: builtin/commit.c:393 +msgid "cannot do a partial commit during a merge." +msgstr "impossible de faire une validation partielle pendant une fusion." + +#: builtin/commit.c:395 +msgid "cannot do a partial commit during a cherry-pick." +msgstr "impossible de faire une validation partielle pendant un picorage." + +#: builtin/commit.c:405 +msgid "cannot read the index" +msgstr "impossible de lire l'index" + +#: builtin/commit.c:425 +msgid "unable to write temporary index file" +msgstr "impossible d'écrire le fichier d'index temporaire" + +#: builtin/commit.c:513 builtin/commit.c:519 +#, c-format +msgid "invalid commit: %s" +msgstr "commit invalide : %s" + +#: builtin/commit.c:542 +msgid "malformed --author parameter" +msgstr "paramètre --author mal formé" + +#: builtin/commit.c:562 +#, c-format +msgid "Malformed ident string: '%s'" +msgstr "Chaîne ident mal formée : '%s'" + +#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#, c-format +msgid "could not lookup commit %s" +msgstr "impossible de rechercher le commit %s" + +#: builtin/commit.c:612 builtin/shortlog.c:270 +#, c-format +msgid "(reading log message from standard input)\n" +msgstr "(lecture du message de journal depuis l'entrée standard)\n" + +#: builtin/commit.c:614 +msgid "could not read log from standard input" +msgstr "impossible de lire le journal depuis l'entrée standard" + +#: builtin/commit.c:618 +#, c-format +msgid "could not read log file '%s'" +msgstr "impossible de lire le fichier de journal '%s'" + +#: builtin/commit.c:624 +msgid "commit has empty message" +msgstr "le commit a un message vide" + +#: builtin/commit.c:640 +msgid "could not read MERGE_MSG" +msgstr "impossible de lire MERGE_MSG" + +#: builtin/commit.c:644 +msgid "could not read SQUASH_MSG" +msgstr "impossible de lire SQUASH_MSG" + +#: builtin/commit.c:648 +#, c-format +msgid "could not read '%s'" +msgstr "impossible de lire '%s'" + +#: builtin/commit.c:709 +msgid "could not write commit template" +msgstr "impossible d'écrire le modèle de commit" + +#: builtin/commit.c:720 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a merge.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" +"\n" +"Il semble que vous validiez une fusion.\n" +"Si ce n'est pas le cas, veuillez supprimer le fichier\n" +"\t%s\n" +"et essayez à nouveau.\n" + +#: builtin/commit.c:725 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a cherry-pick.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" +"\n" +"Il semble que vous validiez un picorage.\n" +"Si ce n'est pas le cas, veuillez supprimer le fichier\n" +"\t%s\n" +"et essayez à nouveau.\n" + +#: builtin/commit.c:737 +#, c-format +msgid "" +"Please enter the commit message for your changes. Lines starting\n" +"with '%c' will be ignored, and an empty message aborts the commit.\n" +msgstr "" +"Veuillez saisir le message de validation pour vos modifications. Les lignes\n" +"commençant par '%c' seront ignorées, et un message vide abandonne la validation.\n" + +#: builtin/commit.c:742 +#, c-format +msgid "" +"Please enter the commit message for your changes. Lines starting\n" +"with '%c' will be kept; you may remove them yourself if you want to.\n" +"An empty message aborts the commit.\n" +msgstr "" +"Veuillez saisir le message de validation pour vos modifications. Les lignes\n" +"commençant par '%c' seront conservées ; vous pouvez les supprimer vous-même\n" +"si vous le souhaitez. Un message vide abandonne la validation.\n" + +#: builtin/commit.c:755 +#, c-format +msgid "%sAuthor: %s" +msgstr "%sAuteur : %s" + +#: builtin/commit.c:762 +#, c-format +msgid "%sCommitter: %s" +msgstr "%sValidateur : %s" + +#: builtin/commit.c:782 +msgid "Cannot read index" +msgstr "Impossible de lire l'index" + +#: builtin/commit.c:819 +msgid "Error building trees" +msgstr "Erreur lors de la construction des arbres" + +#: builtin/commit.c:834 builtin/tag.c:359 +#, c-format +msgid "Please supply the message using either -m or -F option.\n" +msgstr "Veuillez fournir le message en utilisant l'option -m ou -F.\n" + +#: builtin/commit.c:931 +#, c-format +msgid "No existing author found with '%s'" +msgstr "Aucun auteur existant trouvé avec '%s'" + +#: builtin/commit.c:946 builtin/commit.c:1140 +#, c-format +msgid "Invalid untracked files mode '%s'" +msgstr "Mode de fichier non suivi invalide '%s'" + +#: builtin/commit.c:976 +msgid "Using both --reset-author and --author does not make sense" +msgstr "L'utilisation simultanée de --reset-author et --author n'a pas de sens" + +#: builtin/commit.c:987 +msgid "You have nothing to amend." +msgstr "Il n'y a rien à corriger." + +#: builtin/commit.c:990 +msgid "You are in the middle of a merge -- cannot amend." +msgstr "Vous êtes en pleine fusion -- impossible de corriger (amend)." + +#: builtin/commit.c:992 +msgid "You are in the middle of a cherry-pick -- cannot amend." +msgstr "Vous êtes en plein picorage -- impossible de corriger (amend)." + +#: builtin/commit.c:995 +msgid "Options --squash and --fixup cannot be used together" +msgstr "Les options --squash et --fixup ne peuvent pas être utilisées ensemble" + +#: builtin/commit.c:1005 +msgid "Only one of -c/-C/-F/--fixup can be used." +msgstr "Une seule option parmi -c/-C/-F/--fixup peut être utilisée." + +#: builtin/commit.c:1007 +msgid "Option -m cannot be combined with -c/-C/-F/--fixup." +msgstr "L'option -m ne peut pas être combinée avec -c/-C/-F/--fixup." + +#: builtin/commit.c:1015 +msgid "--reset-author can be used only with -C, -c or --amend." +msgstr "--reset-author ne peut être utilisé qu'avec -C, -c ou --amend." + +#: builtin/commit.c:1032 +msgid "Only one of --include/--only/--all/--interactive/--patch can be used." +msgstr "Une seule option parmi --include/--only/--all/--interactive/--patch peut être utilisée." + +#: builtin/commit.c:1034 +msgid "No paths with --include/--only does not make sense." +msgstr "Aucun chemin avec les options --include/--only n'a pas de sens." + +#: builtin/commit.c:1036 +msgid "Clever... amending the last one with dirty index." +msgstr "Malin... correction du dernier avec un index sale." + +#: builtin/commit.c:1038 +msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +msgstr "" + +#: builtin/commit.c:1048 builtin/tag.c:575 +#, c-format +msgid "Invalid cleanup mode %s" +msgstr "" + +#: builtin/commit.c:1053 +msgid "Paths with -a does not make sense." +msgstr "" + +#: builtin/commit.c:1059 builtin/commit.c:1194 +msgid "--long and -z are incompatible" +msgstr "" + +#: builtin/commit.c:1154 builtin/commit.c:1390 +msgid "show status concisely" +msgstr "" + +#: builtin/commit.c:1156 builtin/commit.c:1392 +msgid "show branch information" +msgstr "" + +#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +msgid "machine-readable output" +msgstr "" + +#: builtin/commit.c:1161 builtin/commit.c:1396 +msgid "show status in long format (default)" +msgstr "" + +#: builtin/commit.c:1164 builtin/commit.c:1399 +msgid "terminate entries with NUL" +msgstr "" + +#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 +#: builtin/fast-export.c:662 builtin/tag.c:459 +msgid "mode" +msgstr "" + +#: builtin/commit.c:1167 builtin/commit.c:1402 +msgid "show untracked files, optional modes: all, normal, no. (Default: all)" +msgstr "" + +#: builtin/commit.c:1170 +msgid "show ignored files" +msgstr "" + +#: builtin/commit.c:1171 parse-options.h:151 +msgid "when" +msgstr "" + +#: builtin/commit.c:1172 +msgid "" +"ignore changes to submodules, optional when: all, dirty, untracked. " +"(Default: all)" +msgstr "" + +#: builtin/commit.c:1174 +msgid "list untracked files in columns" +msgstr "" + +#: builtin/commit.c:1248 +msgid "couldn't look up newly created commit" +msgstr "" + +#: builtin/commit.c:1250 +msgid "could not parse newly created commit" +msgstr "" + +#: builtin/commit.c:1291 +msgid "detached HEAD" +msgstr "" + +#: builtin/commit.c:1293 +msgid " (root-commit)" +msgstr "" + +#: builtin/commit.c:1360 +msgid "suppress summary after successful commit" +msgstr "" + +#: builtin/commit.c:1361 +msgid "show diff in commit message template" +msgstr "" + +#: builtin/commit.c:1363 +msgid "Commit message options" +msgstr "" + +#: builtin/commit.c:1364 builtin/tag.c:457 +msgid "read message from file" +msgstr "" + +#: builtin/commit.c:1365 +msgid "author" +msgstr "" + +#: builtin/commit.c:1365 +msgid "override author for commit" +msgstr "" + +#: builtin/commit.c:1366 builtin/gc.c:178 +msgid "date" +msgstr "" + +#: builtin/commit.c:1366 +msgid "override date for commit" +msgstr "" + +#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 +#: builtin/notes.c:690 builtin/tag.c:455 +msgid "message" +msgstr "" + +#: builtin/commit.c:1367 +msgid "commit message" +msgstr "" + +#: builtin/commit.c:1368 +msgid "reuse and edit message from specified commit" +msgstr "" + +#: builtin/commit.c:1369 +msgid "reuse message from specified commit" +msgstr "" + +#: builtin/commit.c:1370 +msgid "use autosquash formatted message to fixup specified commit" +msgstr "" + +#: builtin/commit.c:1371 +msgid "use autosquash formatted message to squash specified commit" +msgstr "" + +#: builtin/commit.c:1372 +msgid "the commit is authored by me now (used with -C/-c/--amend)" +msgstr "" + +#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +msgid "add Signed-off-by:" +msgstr "" + +#: builtin/commit.c:1374 +msgid "use specified template file" +msgstr "" + +#: builtin/commit.c:1375 +msgid "force edit of commit" +msgstr "" + +#: builtin/commit.c:1376 +msgid "default" +msgstr "" + +#: builtin/commit.c:1376 builtin/tag.c:460 +msgid "how to strip spaces and #comments from message" +msgstr "" + +#: builtin/commit.c:1377 +msgid "include status in commit message template" +msgstr "" + +#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +msgid "key id" +msgstr "" + +#: builtin/commit.c:1379 builtin/merge.c:216 +msgid "GPG sign commit" +msgstr "" + +#. end commit message options +#: builtin/commit.c:1382 +msgid "Commit contents options" +msgstr "" + +#: builtin/commit.c:1383 +msgid "commit all changed files" +msgstr "" + +#: builtin/commit.c:1384 +msgid "add specified files to index for commit" +msgstr "" + +#: builtin/commit.c:1385 +msgid "interactively add files" +msgstr "" + +#: builtin/commit.c:1386 +msgid "interactively add changes" +msgstr "" + +#: builtin/commit.c:1387 +msgid "commit only specified files" +msgstr "" + +#: builtin/commit.c:1388 +msgid "bypass pre-commit hook" +msgstr "" + +#: builtin/commit.c:1389 +msgid "show what would be committed" +msgstr "" + +#: builtin/commit.c:1400 +msgid "amend previous commit" +msgstr "" + +#: builtin/commit.c:1401 +msgid "bypass post-rewrite hook" +msgstr "" + +#: builtin/commit.c:1406 +msgid "ok to record an empty change" +msgstr "" + +#: builtin/commit.c:1409 +msgid "ok to record a change with an empty message" +msgstr "" + +#: builtin/commit.c:1441 +msgid "could not parse HEAD commit" +msgstr "" + +#: builtin/commit.c:1479 builtin/merge.c:510 +#, c-format +msgid "could not open '%s' for reading" +msgstr "" + +#: builtin/commit.c:1486 +#, c-format +msgid "Corrupt MERGE_HEAD file (%s)" +msgstr "" + +#: builtin/commit.c:1493 +msgid "could not read MERGE_MODE" +msgstr "" + +#: builtin/commit.c:1512 +#, c-format +msgid "could not read commit message: %s" +msgstr "" + +#: builtin/commit.c:1526 +#, c-format +msgid "Aborting commit; you did not edit the message.\n" +msgstr "" + +#: builtin/commit.c:1531 +#, c-format +msgid "Aborting commit due to empty commit message.\n" +msgstr "" + +#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +msgid "failed to write commit object" +msgstr "" + +#: builtin/commit.c:1567 +msgid "cannot lock HEAD ref" +msgstr "" + +#: builtin/commit.c:1571 +msgid "cannot update HEAD ref" +msgstr "" + +#: builtin/commit.c:1582 +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/config.c:7 +msgid "git config [options]" +msgstr "" + +#: builtin/config.c:51 +msgid "Config file location" +msgstr "" + +#: builtin/config.c:52 +msgid "use global config file" +msgstr "" + +#: builtin/config.c:53 +msgid "use system config file" +msgstr "" + +#: builtin/config.c:54 +msgid "use repository config file" +msgstr "" + +#: builtin/config.c:55 +msgid "use given config file" +msgstr "" + +#: builtin/config.c:56 +msgid "Action" +msgstr "" + +#: builtin/config.c:57 +msgid "get value: name [value-regex]" +msgstr "" + +#: builtin/config.c:58 +msgid "get all values: key [value-regex]" +msgstr "" + +#: builtin/config.c:59 +msgid "get values for regexp: name-regex [value-regex]" +msgstr "" + +#: builtin/config.c:60 +msgid "replace all matching variables: name value [value_regex]" +msgstr "" + +#: builtin/config.c:61 +msgid "add a new variable: name value" +msgstr "" + +#: builtin/config.c:62 +msgid "remove a variable: name [value-regex]" +msgstr "" + +#: builtin/config.c:63 +msgid "remove all matches: name [value-regex]" +msgstr "" + +#: builtin/config.c:64 +msgid "rename section: old-name new-name" +msgstr "" + +#: builtin/config.c:65 +msgid "remove a section: name" +msgstr "" + +#: builtin/config.c:66 +msgid "list all" +msgstr "" + +#: builtin/config.c:67 +msgid "open an editor" +msgstr "" + +#: builtin/config.c:68 builtin/config.c:69 +msgid "slot" +msgstr "" + +#: builtin/config.c:68 +msgid "find the color configured: [default]" +msgstr "" + +#: builtin/config.c:69 +msgid "find the color setting: [stdout-is-tty]" +msgstr "" + +#: builtin/config.c:70 +msgid "Type" +msgstr "" + +#: builtin/config.c:71 +msgid "value is \"true\" or \"false\"" +msgstr "" + +#: builtin/config.c:72 +msgid "value is decimal number" +msgstr "" + +#: builtin/config.c:73 +msgid "value is --bool or --int" +msgstr "" + +#: builtin/config.c:74 +msgid "value is a path (file or directory name)" +msgstr "" + +#: builtin/config.c:75 +msgid "Other" +msgstr "" + +#: builtin/config.c:76 +msgid "terminate values with NUL byte" +msgstr "" + +#: builtin/config.c:77 +msgid "respect include directives on lookup" +msgstr "" + +#: builtin/count-objects.c:82 +msgid "git count-objects [-v] [-H | --human-readable]" +msgstr "" + +#: builtin/count-objects.c:97 +msgid "print sizes in human readable format" +msgstr "" + +#: builtin/describe.c:15 +msgid "git describe [options] <committish>*" +msgstr "" + +#: builtin/describe.c:16 +msgid "git describe [options] --dirty" +msgstr "" + +#: builtin/describe.c:233 +#, c-format +msgid "annotated tag %s not available" +msgstr "" + +#: builtin/describe.c:237 +#, c-format +msgid "annotated tag %s has no embedded name" +msgstr "" + +#: builtin/describe.c:239 +#, c-format +msgid "tag '%s' is really '%s' here" +msgstr "" + +#: builtin/describe.c:266 +#, c-format +msgid "Not a valid object name %s" +msgstr "" + +#: builtin/describe.c:269 +#, c-format +msgid "%s is not a valid '%s' object" +msgstr "%s n'est pas un objet '%s' valide" + +#: builtin/describe.c:286 +#, c-format +msgid "no tag exactly matches '%s'" +msgstr "" + +#: builtin/describe.c:288 +#, c-format +msgid "searching to describe %s\n" +msgstr "" + +#: builtin/describe.c:328 +#, c-format +msgid "finished search at %s\n" +msgstr "" + +#: builtin/describe.c:352 +#, c-format +msgid "" +"No annotated tags can describe '%s'.\n" +"However, there were unannotated tags: try --tags." +msgstr "" + +#: builtin/describe.c:356 +#, c-format +msgid "" +"No tags can describe '%s'.\n" +"Try --always, or create some tags." +msgstr "" + +#: builtin/describe.c:377 +#, c-format +msgid "traversed %lu commits\n" +msgstr "" + +#: builtin/describe.c:380 +#, c-format +msgid "" +"more than %i tags found; listed %i most recent\n" +"gave up search at %s\n" +msgstr "" + +#: builtin/describe.c:402 +msgid "find the tag that comes after the commit" +msgstr "" + +#: builtin/describe.c:403 +msgid "debug search strategy on stderr" +msgstr "" + +#: builtin/describe.c:404 +msgid "use any ref" +msgstr "" + +#: builtin/describe.c:405 +msgid "use any tag, even unannotated" +msgstr "" + +#: builtin/describe.c:406 +msgid "always use long format" +msgstr "" + +#: builtin/describe.c:409 +msgid "only output exact matches" +msgstr "" + +#: builtin/describe.c:411 +msgid "consider <n> most recent tags (default: 10)" +msgstr "" + +#: builtin/describe.c:413 +msgid "only consider tags matching <pattern>" +msgstr "" + +#: builtin/describe.c:415 builtin/name-rev.c:238 +msgid "show abbreviated commit object as fallback" +msgstr "" + +#: builtin/describe.c:416 +msgid "mark" +msgstr "" + +#: builtin/describe.c:417 +msgid "append <mark> on dirty working tree (default: \"-dirty\")" +msgstr "" + +#: builtin/describe.c:435 +msgid "--long is incompatible with --abbrev=0" +msgstr "" + +#: builtin/describe.c:461 +msgid "No names found, cannot describe anything." +msgstr "" + +#: builtin/describe.c:481 +msgid "--dirty is incompatible with committishes" +msgstr "" + +#: builtin/diff.c:79 +#, c-format +msgid "'%s': not a regular file or symlink" +msgstr "" + +#: builtin/diff.c:228 +#, c-format +msgid "invalid option: %s" +msgstr "" + +#: builtin/diff.c:305 +msgid "Not a git repository" +msgstr "" + +#: builtin/diff.c:348 +#, c-format +msgid "invalid object '%s' given." +msgstr "" + +#: builtin/diff.c:353 +#, c-format +msgid "more than %d trees given: '%s'" +msgstr "" + +#: builtin/diff.c:363 +#, c-format +msgid "more than two blobs given: '%s'" +msgstr "" + +#: builtin/diff.c:371 +#, c-format +msgid "unhandled object '%s' given." +msgstr "" + +#: builtin/fast-export.c:22 +msgid "git fast-export [rev-list-opts]" +msgstr "" + +#: builtin/fast-export.c:658 +msgid "show progress after <n> objects" +msgstr "" + +#: builtin/fast-export.c:660 +msgid "select handling of signed tags" +msgstr "" + +#: builtin/fast-export.c:663 +msgid "select handling of tags that tag filtered objects" +msgstr "" + +#: builtin/fast-export.c:666 +msgid "Dump marks to this file" +msgstr "" + +#: builtin/fast-export.c:668 +msgid "Import marks from this file" +msgstr "" + +#: builtin/fast-export.c:670 +msgid "Fake a tagger when tags lack one" +msgstr "" + +#: builtin/fast-export.c:672 +msgid "Output full tree for each commit" +msgstr "" + +#: builtin/fast-export.c:674 +msgid "Use the done feature to terminate the stream" +msgstr "" + +#: builtin/fast-export.c:675 +msgid "Skip output of blob data" +msgstr "" + +#: builtin/fetch.c:20 +msgid "git fetch [<options>] [<repository> [<refspec>...]]" +msgstr "" + +#: builtin/fetch.c:21 +msgid "git fetch [<options>] <group>" +msgstr "" + +#: builtin/fetch.c:22 +msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]" +msgstr "" + +#: builtin/fetch.c:23 +msgid "git fetch --all [<options>]" +msgstr "" + +#: builtin/fetch.c:60 +msgid "fetch from all remotes" +msgstr "" + +#: builtin/fetch.c:62 +msgid "append to .git/FETCH_HEAD instead of overwriting" +msgstr "" + +#: builtin/fetch.c:64 +msgid "path to upload pack on remote end" +msgstr "" + +#: builtin/fetch.c:65 +msgid "force overwrite of local branch" +msgstr "" + +#: builtin/fetch.c:67 +msgid "fetch from multiple remotes" +msgstr "" + +#: builtin/fetch.c:69 +msgid "fetch all tags and associated objects" +msgstr "" + +#: builtin/fetch.c:71 +msgid "do not fetch all tags (--no-tags)" +msgstr "" + +#: builtin/fetch.c:73 +msgid "prune remote-tracking branches no longer on remote" +msgstr "" + +#: builtin/fetch.c:74 +msgid "on-demand" +msgstr "" + +#: builtin/fetch.c:75 +msgid "control recursive fetching of submodules" +msgstr "" + +#: builtin/fetch.c:79 +msgid "keep downloaded pack" +msgstr "" + +#: builtin/fetch.c:81 +msgid "allow updating of HEAD ref" +msgstr "" + +#: builtin/fetch.c:84 +msgid "deepen history of shallow clone" +msgstr "" + +#: builtin/fetch.c:86 +msgid "convert to a complete repository" +msgstr "" + +#: builtin/fetch.c:88 builtin/log.c:1130 +msgid "dir" +msgstr "" + +#: builtin/fetch.c:89 +msgid "prepend this to submodule path output" +msgstr "" + +#: builtin/fetch.c:92 +msgid "default mode for recursion" +msgstr "" + +#: builtin/fetch.c:204 +msgid "Couldn't find remote ref HEAD" +msgstr "" + +#: builtin/fetch.c:257 +#, c-format +msgid "object %s not found" +msgstr "" + +#: builtin/fetch.c:262 +msgid "[up to date]" +msgstr "" + +#: builtin/fetch.c:276 +#, c-format +msgid "! %-*s %-*s -> %s (can't fetch in current branch)" +msgstr "" + +#: builtin/fetch.c:277 builtin/fetch.c:363 +msgid "[rejected]" +msgstr "" + +#: builtin/fetch.c:288 +msgid "[tag update]" +msgstr "" + +#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +msgid " (unable to update local ref)" +msgstr "" + +#: builtin/fetch.c:308 +msgid "[new tag]" +msgstr "" + +#: builtin/fetch.c:311 +msgid "[new branch]" +msgstr "" + +#: builtin/fetch.c:314 +msgid "[new ref]" +msgstr "" + +#: builtin/fetch.c:359 +msgid "unable to update local ref" +msgstr "" + +#: builtin/fetch.c:359 +msgid "forced update" +msgstr "" + +#: builtin/fetch.c:365 +msgid "(non-fast-forward)" +msgstr "" + +#: builtin/fetch.c:396 builtin/fetch.c:688 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "impossible d'ouvrir %s : %s\n" + +#: builtin/fetch.c:405 +#, c-format +msgid "%s did not send all necessary objects\n" +msgstr "%s n'a pas envoyé tous les objets nécessaires\n" + +#: builtin/fetch.c:491 +#, c-format +msgid "From %.*s\n" +msgstr "" + +#: builtin/fetch.c:502 +#, 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:552 +#, c-format +msgid " (%s will become dangling)" +msgstr "" + +#: builtin/fetch.c:553 +#, c-format +msgid " (%s has become dangling)" +msgstr "" + +#: builtin/fetch.c:560 +msgid "[deleted]" +msgstr "" + +#: builtin/fetch.c:561 builtin/remote.c:1055 +msgid "(none)" +msgstr "" + +#: builtin/fetch.c:678 +#, c-format +msgid "Refusing to fetch into current branch %s of non-bare repository" +msgstr "" + +#: builtin/fetch.c:712 +#, c-format +msgid "Don't know how to fetch from %s" +msgstr "" + +#: builtin/fetch.c:789 +#, c-format +msgid "Option \"%s\" value \"%s\" is not valid for %s" +msgstr "" + +#: builtin/fetch.c:792 +#, c-format +msgid "Option \"%s\" is ignored for %s\n" +msgstr "" + +#: builtin/fetch.c:894 +#, c-format +msgid "Fetching %s\n" +msgstr "" + +#: builtin/fetch.c:896 builtin/remote.c:100 +#, c-format +msgid "Could not fetch %s" +msgstr "" + +#: builtin/fetch.c:915 +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:935 +msgid "You need to specify a tag name." +msgstr "" + +#: builtin/fetch.c:981 +msgid "--depth and --unshallow cannot be used together" +msgstr "" + +#: builtin/fetch.c:983 +msgid "--unshallow on a complete repository does not make sense" +msgstr "" + +#: builtin/fetch.c:1002 +msgid "fetch --all does not take a repository argument" +msgstr "" + +#: builtin/fetch.c:1004 +msgid "fetch --all does not make sense with refspecs" +msgstr "" + +#: builtin/fetch.c:1015 +#, c-format +msgid "No such remote or remote group: %s" +msgstr "" + +#: builtin/fetch.c:1023 +msgid "Fetching a group and specifying refspecs does not make sense" +msgstr "" + +#: builtin/fmt-merge-msg.c:13 +msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" +msgstr "" + +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 +#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +msgid "n" +msgstr "" + +#: builtin/fmt-merge-msg.c:664 +msgid "populate log with at most <n> entries from shortlog" +msgstr "" + +#: builtin/fmt-merge-msg.c:667 +msgid "alias for --log (deprecated)" +msgstr "" + +#: builtin/fmt-merge-msg.c:670 +msgid "text" +msgstr "" + +#: builtin/fmt-merge-msg.c:671 +msgid "use <text> as start of message" +msgstr "" + +#: builtin/fmt-merge-msg.c:672 +msgid "file to read from" +msgstr "" + +#: builtin/for-each-ref.c:979 +msgid "git for-each-ref [options] [<pattern>]" +msgstr "" + +#: builtin/for-each-ref.c:994 +msgid "quote placeholders suitably for shells" +msgstr "" + +#: builtin/for-each-ref.c:996 +msgid "quote placeholders suitably for perl" +msgstr "" + +#: builtin/for-each-ref.c:998 +msgid "quote placeholders suitably for python" +msgstr "" + +#: builtin/for-each-ref.c:1000 +msgid "quote placeholders suitably for tcl" +msgstr "" + +#: builtin/for-each-ref.c:1003 +msgid "show only <n> matched refs" +msgstr "" + +#: builtin/for-each-ref.c:1004 +msgid "format" +msgstr "" + +#: builtin/for-each-ref.c:1004 +msgid "format to use for the output" +msgstr "" + +#: builtin/for-each-ref.c:1005 +msgid "key" +msgstr "" + +#: builtin/for-each-ref.c:1006 +msgid "field name to sort on" +msgstr "" + +#: builtin/fsck.c:608 +msgid "git fsck [options] [<object>...]" +msgstr "" + +#: builtin/fsck.c:614 +msgid "show unreachable objects" +msgstr "" + +#: builtin/fsck.c:615 +msgid "show dangling objects" +msgstr "" + +#: builtin/fsck.c:616 +msgid "report tags" +msgstr "" + +#: builtin/fsck.c:617 +msgid "report root nodes" +msgstr "" + +#: builtin/fsck.c:618 +msgid "make index objects head nodes" +msgstr "" + +#: builtin/fsck.c:619 +msgid "make reflogs head nodes (default)" +msgstr "" + +#: builtin/fsck.c:620 +msgid "also consider packs and alternate objects" +msgstr "" + +#: builtin/fsck.c:621 +msgid "enable more strict checking" +msgstr "" + +#: builtin/fsck.c:623 +msgid "write dangling objects in .git/lost-found" +msgstr "" + +#: builtin/fsck.c:624 builtin/prune.c:134 +msgid "show progress" +msgstr "" + +#: builtin/gc.c:22 +msgid "git gc [options]" +msgstr "" + +#: builtin/gc.c:63 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "" + +#: builtin/gc.c:90 +#, c-format +msgid "insanely long object directory %.*s" +msgstr "" + +#: builtin/gc.c:179 +msgid "prune unreferenced objects" +msgstr "" + +#: builtin/gc.c:181 +msgid "be more thorough (increased runtime)" +msgstr "" + +#: builtin/gc.c:182 +msgid "enable auto-gc mode" +msgstr "" + +#: builtin/gc.c:222 +#, 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:249 +msgid "" +"There are too many unreachable loose objects; run 'git prune' to remove them." +msgstr "" + +#: builtin/grep.c:22 +msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]" +msgstr "" + +#: builtin/grep.c:217 +#, c-format +msgid "grep: failed to create thread: %s" +msgstr "" + +#: builtin/grep.c:365 +#, c-format +msgid "Failed to chdir: %s" +msgstr "" + +#: builtin/grep.c:443 builtin/grep.c:478 +#, c-format +msgid "unable to read tree (%s)" +msgstr "" + +#: builtin/grep.c:493 +#, c-format +msgid "unable to grep from object of type %s" +msgstr "" + +#: builtin/grep.c:551 +#, c-format +msgid "switch `%c' expects a numerical value" +msgstr "" + +#: builtin/grep.c:568 +#, c-format +msgid "cannot open '%s'" +msgstr "" + +#: builtin/grep.c:643 +msgid "search in index instead of in the work tree" +msgstr "" + +#: builtin/grep.c:645 +msgid "find in contents not managed by git" +msgstr "" + +#: builtin/grep.c:647 +msgid "search in both tracked and untracked files" +msgstr "" + +#: builtin/grep.c:649 +msgid "search also in ignored files" +msgstr "" + +#: builtin/grep.c:652 +msgid "show non-matching lines" +msgstr "" + +#: builtin/grep.c:654 +msgid "case insensitive matching" +msgstr "" + +#: builtin/grep.c:656 +msgid "match patterns only at word boundaries" +msgstr "" + +#: builtin/grep.c:658 +msgid "process binary files as text" +msgstr "" + +#: builtin/grep.c:660 +msgid "don't match patterns in binary files" +msgstr "" + +#: builtin/grep.c:663 +msgid "descend at most <depth> levels" +msgstr "" + +#: builtin/grep.c:667 +msgid "use extended POSIX regular expressions" +msgstr "" + +#: builtin/grep.c:670 +msgid "use basic POSIX regular expressions (default)" +msgstr "" + +#: builtin/grep.c:673 +msgid "interpret patterns as fixed strings" +msgstr "" + +#: builtin/grep.c:676 +msgid "use Perl-compatible regular expressions" +msgstr "" + +#: builtin/grep.c:679 +msgid "show line numbers" +msgstr "" + +#: builtin/grep.c:680 +msgid "don't show filenames" +msgstr "" + +#: builtin/grep.c:681 +msgid "show filenames" +msgstr "" + +#: builtin/grep.c:683 +msgid "show filenames relative to top directory" +msgstr "" + +#: builtin/grep.c:685 +msgid "show only filenames instead of matching lines" +msgstr "" + +#: builtin/grep.c:687 +msgid "synonym for --files-with-matches" +msgstr "" + +#: builtin/grep.c:690 +msgid "show only the names of files without match" +msgstr "" + +#: builtin/grep.c:692 +msgid "print NUL after filenames" +msgstr "" + +#: builtin/grep.c:694 +msgid "show the number of matches instead of matching lines" +msgstr "" + +#: builtin/grep.c:695 +msgid "highlight matches" +msgstr "" + +#: builtin/grep.c:697 +msgid "print empty line between matches from different files" +msgstr "" + +#: builtin/grep.c:699 +msgid "show filename only once above matches from same file" +msgstr "" + +#: builtin/grep.c:702 +msgid "show <n> context lines before and after matches" +msgstr "" + +#: builtin/grep.c:705 +msgid "show <n> context lines before matches" +msgstr "" + +#: builtin/grep.c:707 +msgid "show <n> context lines after matches" +msgstr "" + +#: builtin/grep.c:708 +msgid "shortcut for -C NUM" +msgstr "" + +#: builtin/grep.c:711 +msgid "show a line with the function name before matches" +msgstr "" + +#: builtin/grep.c:713 +msgid "show the surrounding function" +msgstr "" + +#: builtin/grep.c:716 +msgid "read patterns from file" +msgstr "" + +#: builtin/grep.c:718 +msgid "match <pattern>" +msgstr "" + +#: builtin/grep.c:720 +msgid "combine patterns specified with -e" +msgstr "" + +#: builtin/grep.c:732 +msgid "indicate hit with exit status without output" +msgstr "" + +#: builtin/grep.c:734 +msgid "show only matches from files that match all patterns" +msgstr "" + +#: builtin/grep.c:736 +msgid "show parse tree for grep expression" +msgstr "" + +#: builtin/grep.c:740 +msgid "pager" +msgstr "" + +#: builtin/grep.c:740 +msgid "show matching files in the pager" +msgstr "" + +#: builtin/grep.c:743 +msgid "allow calling of grep(1) (ignored by this build)" +msgstr "" + +#: builtin/grep.c:744 builtin/show-ref.c:184 +msgid "show usage" +msgstr "" + +#: builtin/grep.c:811 +msgid "no pattern given." +msgstr "" + +#: builtin/grep.c:866 +msgid "--open-files-in-pager only works on the worktree" +msgstr "" + +#: builtin/grep.c:889 +msgid "--cached or --untracked cannot be used with --no-index." +msgstr "" + +#: builtin/grep.c:894 +msgid "--no-index or --untracked cannot be used with revs." +msgstr "" + +#: builtin/grep.c:897 +msgid "--[no-]exclude-standard cannot be used for tracked contents." +msgstr "" + +#: builtin/grep.c:905 +msgid "both --cached and trees are given." +msgstr "" + +#: builtin/hash-object.c:60 +msgid "" +"git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] " +"<file>..." +msgstr "" + +#: builtin/hash-object.c:61 +msgid "git hash-object --stdin-paths < <list-of-paths>" +msgstr "" + +#: builtin/hash-object.c:72 +msgid "type" +msgstr "" + +#: builtin/hash-object.c:72 +msgid "object type" +msgstr "" + +#: builtin/hash-object.c:73 +msgid "write the object into the object database" +msgstr "" + +#: builtin/hash-object.c:74 +msgid "read the object from stdin" +msgstr "" + +#: builtin/hash-object.c:76 +msgid "store file as is without filters" +msgstr "" + +#: builtin/hash-object.c:77 +msgid "process file as it were from this path" +msgstr "" + +#: builtin/help.c:43 +msgid "print all available commands" +msgstr "" + +#: builtin/help.c:44 +msgid "print list of useful guides" +msgstr "" + +#: builtin/help.c:45 +msgid "show man page" +msgstr "" + +#: builtin/help.c:46 +msgid "show manual in web browser" +msgstr "" + +#: builtin/help.c:48 +msgid "show info page" +msgstr "" + +#: builtin/help.c:54 +msgid "git help [--all] [--guides] [--man|--web|--info] [command]" +msgstr "" + +#: builtin/help.c:66 +#, c-format +msgid "unrecognized help format '%s'" +msgstr "" + +#: builtin/help.c:94 +msgid "Failed to start emacsclient." +msgstr "" + +#: builtin/help.c:107 +msgid "Failed to parse emacsclient version." +msgstr "" + +#: builtin/help.c:115 +#, c-format +msgid "emacsclient version '%d' too old (< 22)." +msgstr "" + +#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#, c-format +msgid "failed to exec '%s': %s" +msgstr "" + +#: builtin/help.c:218 +#, c-format +msgid "" +"'%s': path for unsupported man viewer.\n" +"Please consider using 'man.<tool>.cmd' instead." +msgstr "" + +#: builtin/help.c:230 +#, c-format +msgid "" +"'%s': cmd for supported man viewer.\n" +"Please consider using 'man.<tool>.path' instead." +msgstr "" + +#: builtin/help.c:351 +#, c-format +msgid "'%s': unknown man viewer." +msgstr "" + +#: builtin/help.c:368 +msgid "no man viewer handled the request" +msgstr "" + +#: builtin/help.c:376 +msgid "no info viewer handled the request" +msgstr "" + +#: builtin/help.c:422 +msgid "Defining attributes per path" +msgstr "" + +#: builtin/help.c:423 +msgid "A Git glossary" +msgstr "" + +#: builtin/help.c:424 +msgid "Specifies intentionally untracked files to ignore" +msgstr "" + +#: builtin/help.c:425 +msgid "Defining submodule properties" +msgstr "" + +#: builtin/help.c:426 +msgid "Specifying revisions and ranges for Git" +msgstr "" + +#: builtin/help.c:427 +msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" +msgstr "" + +#: builtin/help.c:428 +msgid "An overview of recommended workflows with Git" +msgstr "" + +#: builtin/help.c:440 +msgid "The common Git guides are:\n" +msgstr "" + +#: builtin/help.c:462 builtin/help.c:478 +#, c-format +msgid "usage: %s%s" +msgstr "" + +#: builtin/help.c:494 +#, c-format +msgid "`git %s' is aliased to `%s'" +msgstr "" + +#: builtin/index-pack.c:182 +#, c-format +msgid "object type mismatch at %s" +msgstr "" + +#: builtin/index-pack.c:202 +msgid "object of unexpected type" +msgstr "" + +#: builtin/index-pack.c:239 +#, c-format +msgid "cannot fill %d byte" +msgid_plural "cannot fill %d bytes" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:249 +msgid "early EOF" +msgstr "" + +#: builtin/index-pack.c:250 +msgid "read error on input" +msgstr "" + +#: builtin/index-pack.c:262 +msgid "used more bytes than were available" +msgstr "" + +#: builtin/index-pack.c:269 +msgid "pack too large for current definition of off_t" +msgstr "" + +#: builtin/index-pack.c:285 +#, c-format +msgid "unable to create '%s'" +msgstr "" + +#: builtin/index-pack.c:290 +#, c-format +msgid "cannot open packfile '%s'" +msgstr "" + +#: builtin/index-pack.c:304 +msgid "pack signature mismatch" +msgstr "" + +#: builtin/index-pack.c:306 +#, c-format +msgid "pack version %<PRIu32> unsupported" +msgstr "" + +#: builtin/index-pack.c:324 +#, c-format +msgid "pack has bad object at offset %lu: %s" +msgstr "" + +#: builtin/index-pack.c:446 +#, c-format +msgid "inflate returned %d" +msgstr "" + +#: builtin/index-pack.c:495 +msgid "offset value overflow for delta base object" +msgstr "" + +#: builtin/index-pack.c:503 +msgid "delta base offset is out of bound" +msgstr "" + +#: builtin/index-pack.c:511 +#, c-format +msgid "unknown object type %d" +msgstr "" + +#: builtin/index-pack.c:542 +msgid "cannot pread pack file" +msgstr "" + +#: builtin/index-pack.c:544 +#, c-format +msgid "premature end of pack file, %lu byte missing" +msgid_plural "premature end of pack file, %lu bytes missing" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:570 +msgid "serious inflate inconsistency" +msgstr "" + +#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 +#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#, c-format +msgid "SHA1 COLLISION FOUND WITH %s !" +msgstr "" + +#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/pack-objects.c:262 +#, c-format +msgid "unable to read %s" +msgstr "" + +#: builtin/index-pack.c:730 +#, c-format +msgid "cannot read existing object %s" +msgstr "" + +#: builtin/index-pack.c:744 +#, c-format +msgid "invalid blob object %s" +msgstr "" + +#: builtin/index-pack.c:759 +#, c-format +msgid "invalid %s" +msgstr "" + +#: builtin/index-pack.c:761 +msgid "Error in object" +msgstr "" + +#: builtin/index-pack.c:763 +#, c-format +msgid "Not all child objects of %s are reachable" +msgstr "" + +#: builtin/index-pack.c:833 builtin/index-pack.c:863 +msgid "failed to apply delta" +msgstr "" + +#: builtin/index-pack.c:1004 +msgid "Receiving objects" +msgstr "" + +#: builtin/index-pack.c:1004 +msgid "Indexing objects" +msgstr "" + +#: builtin/index-pack.c:1030 +msgid "pack is corrupted (SHA1 mismatch)" +msgstr "" + +#: builtin/index-pack.c:1035 +msgid "cannot fstat packfile" +msgstr "" + +#: builtin/index-pack.c:1038 +msgid "pack has junk at the end" +msgstr "" + +#: builtin/index-pack.c:1049 +msgid "confusion beyond insanity in parse_pack_objects()" +msgstr "" + +#: builtin/index-pack.c:1072 +msgid "Resolving deltas" +msgstr "" + +#: builtin/index-pack.c:1082 +#, c-format +msgid "unable to create thread: %s" +msgstr "" + +#: builtin/index-pack.c:1124 +msgid "confusion beyond insanity" +msgstr "" + +#: builtin/index-pack.c:1132 +#, c-format +msgid "completed with %d local objects" +msgstr "" + +#: builtin/index-pack.c:1142 +#, c-format +msgid "Unexpected tail checksum for %s (disk corruption?)" +msgstr "" + +#: builtin/index-pack.c:1146 +#, c-format +msgid "pack has %d unresolved delta" +msgid_plural "pack has %d unresolved deltas" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:1171 +#, c-format +msgid "unable to deflate appended object (%d)" +msgstr "" + +#: builtin/index-pack.c:1250 +#, c-format +msgid "local object %s is corrupt" +msgstr "" + +#: builtin/index-pack.c:1274 +msgid "error while closing pack file" +msgstr "" + +#: builtin/index-pack.c:1287 +#, c-format +msgid "cannot write keep file '%s'" +msgstr "" + +#: builtin/index-pack.c:1295 +#, c-format +msgid "cannot close written keep file '%s'" +msgstr "" + +#: builtin/index-pack.c:1308 +msgid "cannot store pack file" +msgstr "" + +#: builtin/index-pack.c:1319 +msgid "cannot store index file" +msgstr "" + +#: builtin/index-pack.c:1352 +#, c-format +msgid "bad pack.indexversion=%<PRIu32>" +msgstr "" + +#: builtin/index-pack.c:1358 +#, c-format +msgid "invalid number of threads specified (%d)" +msgstr "" + +#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#, c-format +msgid "no threads support, ignoring %s" +msgstr "" + +#: builtin/index-pack.c:1420 +#, c-format +msgid "Cannot open existing pack file '%s'" +msgstr "" + +#: builtin/index-pack.c:1422 +#, c-format +msgid "Cannot open existing pack idx file for '%s'" +msgstr "" + +#: builtin/index-pack.c:1469 +#, c-format +msgid "non delta: %d object" +msgid_plural "non delta: %d objects" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:1476 +#, c-format +msgid "chain length = %d: %lu object" +msgid_plural "chain length = %d: %lu objects" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:1503 +msgid "Cannot come back to cwd" +msgstr "" + +#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 +#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#, c-format +msgid "bad %s" +msgstr "" + +#: builtin/index-pack.c:1580 +msgid "--fix-thin cannot be used without --stdin" +msgstr "" + +#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#, c-format +msgid "packfile name '%s' does not end with '.pack'" +msgstr "" + +#: builtin/index-pack.c:1603 +msgid "--verify with no packfile name 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:323 builtin/init-db.c:326 +#, c-format +msgid "%s already exists" +msgstr "%s existe déjà " + +#: builtin/init-db.c:355 +#, c-format +msgid "unable to handle file type %d" +msgstr "" + +#: builtin/init-db.c:358 +#, c-format +msgid "unable to move %s to %s" +msgstr "" + +#: builtin/init-db.c:363 +#, 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:420 +#, c-format +msgid "%s%s Git repository in %s%s\n" +msgstr "%s%s Dépôt git dans %s%s\n" + +#: builtin/init-db.c:421 +msgid "Reinitialized existing" +msgstr "" + +#: builtin/init-db.c:421 +msgid "Initialized empty" +msgstr "" + +#: builtin/init-db.c:422 +msgid " shared" +msgstr "" + +#: builtin/init-db.c:441 +msgid "cannot tell cwd" +msgstr "" + +#: builtin/init-db.c:467 +msgid "" +"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--" +"shared[=<permissions>]] [directory]" +msgstr "" + +#: builtin/init-db.c:490 +msgid "permissions" +msgstr "" + +#: builtin/init-db.c:491 +msgid "specify that the git repository is to be shared amongst several users" +msgstr "" + +#: builtin/init-db.c:493 builtin/prune-packed.c:77 +msgid "be quiet" +msgstr "" + +#: builtin/init-db.c:522 builtin/init-db.c:529 +#, c-format +msgid "cannot mkdir %s" +msgstr "" + +#: builtin/init-db.c:533 +#, c-format +msgid "cannot chdir to %s" +msgstr "" + +#: builtin/init-db.c:555 +#, c-format +msgid "" +"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-" +"dir=<directory>)" +msgstr "" + +#: builtin/init-db.c:579 +msgid "Cannot access current working directory" +msgstr "" + +#: builtin/init-db.c:586 +#, c-format +msgid "Cannot access work tree '%s'" +msgstr "" + +#: builtin/log.c:40 +msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" +msgstr "" + +#: builtin/log.c:41 +msgid " or: git show [options] <object>..." +msgstr "" + +#: builtin/log.c:103 +msgid "suppress diff output" +msgstr "" + +#: builtin/log.c:104 +msgid "show source" +msgstr "" + +#: builtin/log.c:105 +msgid "Use mail map file" +msgstr "" + +#: builtin/log.c:106 +msgid "decorate options" +msgstr "" + +#: builtin/log.c:199 +#, c-format +msgid "Final output: %d %s\n" +msgstr "" + +#: builtin/log.c:422 builtin/log.c:514 +#, c-format +msgid "Could not read object %s" +msgstr "" + +#: builtin/log.c:538 +#, c-format +msgid "Unknown type: %d" +msgstr "" + +#: builtin/log.c:638 +msgid "format.headers without value" +msgstr "" + +#: builtin/log.c:720 +msgid "name of output directory is too long" +msgstr "" + +#: builtin/log.c:736 +#, c-format +msgid "Cannot open patch file %s" +msgstr "" + +#: builtin/log.c:750 +msgid "Need exactly one range." +msgstr "" + +#: builtin/log.c:758 +msgid "Not a range." +msgstr "" + +#: builtin/log.c:860 +msgid "Cover letter needs email format" +msgstr "" + +#: builtin/log.c:936 +#, c-format +msgid "insane in-reply-to: %s" +msgstr "" + +#: builtin/log.c:964 +msgid "git format-patch [options] [<since> | <revision range>]" +msgstr "" + +#: builtin/log.c:1009 +msgid "Two output directories?" +msgstr "" + +#: builtin/log.c:1108 +msgid "use [PATCH n/m] even with a single patch" +msgstr "" + +#: builtin/log.c:1111 +msgid "use [PATCH] even with multiple patches" +msgstr "" + +#: builtin/log.c:1115 +msgid "print patches to standard out" +msgstr "" + +#: builtin/log.c:1117 +msgid "generate a cover letter" +msgstr "" + +#: builtin/log.c:1119 +msgid "use simple number sequence for output file names" +msgstr "" + +#: builtin/log.c:1120 +msgid "sfx" +msgstr "" + +#: builtin/log.c:1121 +msgid "use <sfx> instead of '.patch'" +msgstr "" + +#: builtin/log.c:1123 +msgid "start numbering patches at <n> instead of 1" +msgstr "" + +#: builtin/log.c:1125 +msgid "mark the series as Nth re-roll" +msgstr "" + +#: builtin/log.c:1127 +msgid "Use [<prefix>] instead of [PATCH]" +msgstr "" + +#: builtin/log.c:1130 +msgid "store resulting files in <dir>" +msgstr "" + +#: builtin/log.c:1133 +msgid "don't strip/add [PATCH]" +msgstr "" + +#: builtin/log.c:1136 +msgid "don't output binary diffs" +msgstr "" + +#: builtin/log.c:1138 +msgid "don't include a patch matching a commit upstream" +msgstr "" + +#: builtin/log.c:1140 +msgid "show patch format instead of default (patch + stat)" +msgstr "" + +#: builtin/log.c:1142 +msgid "Messaging" +msgstr "" + +#: builtin/log.c:1143 +msgid "header" +msgstr "" + +#: builtin/log.c:1144 +msgid "add email header" +msgstr "" + +#: builtin/log.c:1145 builtin/log.c:1147 +msgid "email" +msgstr "" + +#: builtin/log.c:1145 +msgid "add To: header" +msgstr "" + +#: builtin/log.c:1147 +msgid "add Cc: header" +msgstr "" + +#: builtin/log.c:1149 +msgid "message-id" +msgstr "" + +#: builtin/log.c:1150 +msgid "make first mail a reply to <message-id>" +msgstr "" + +#: builtin/log.c:1151 builtin/log.c:1154 +msgid "boundary" +msgstr "" + +#: builtin/log.c:1152 +msgid "attach the patch" +msgstr "" + +#: builtin/log.c:1155 +msgid "inline the patch" +msgstr "" + +#: builtin/log.c:1159 +msgid "enable message threading, styles: shallow, deep" +msgstr "" + +#: builtin/log.c:1161 +msgid "signature" +msgstr "" + +#: builtin/log.c:1162 +msgid "add a signature" +msgstr "" + +#: builtin/log.c:1164 +msgid "don't print the patch filenames" +msgstr "" + +#: builtin/log.c:1248 +msgid "-n and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1250 +msgid "--subject-prefix and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1258 +msgid "--name-only does not make sense" +msgstr "" + +#: builtin/log.c:1260 +msgid "--name-status does not make sense" +msgstr "" + +#: builtin/log.c:1262 +msgid "--check does not make sense" +msgstr "" + +#: builtin/log.c:1285 +msgid "standard output, or directory, which one?" +msgstr "" + +#: builtin/log.c:1287 +#, c-format +msgid "Could not create directory '%s'" +msgstr "" + +#: builtin/log.c:1435 +msgid "Failed to create output files" +msgstr "" + +#: builtin/log.c:1484 +msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" +msgstr "" + +#: builtin/log.c:1539 +#, c-format +msgid "" +"Could not find a tracked remote branch, please specify <upstream> manually.\n" +msgstr "" + +#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#, c-format +msgid "Unknown commit %s" +msgstr "" + +#: builtin/ls-files.c:402 +msgid "git ls-files [options] [<file>...]" +msgstr "" + +#: builtin/ls-files.c:459 +msgid "identify the file status with tags" +msgstr "" + +#: builtin/ls-files.c:461 +msgid "use lowercase letters for 'assume unchanged' files" +msgstr "" + +#: builtin/ls-files.c:463 +msgid "show cached files in the output (default)" +msgstr "" + +#: builtin/ls-files.c:465 +msgid "show deleted files in the output" +msgstr "" + +#: builtin/ls-files.c:467 +msgid "show modified files in the output" +msgstr "" + +#: builtin/ls-files.c:469 +msgid "show other files in the output" +msgstr "" + +#: builtin/ls-files.c:471 +msgid "show ignored files in the output" +msgstr "" + +#: builtin/ls-files.c:474 +msgid "show staged contents' object name in the output" +msgstr "" + +#: builtin/ls-files.c:476 +msgid "show files on the filesystem that need to be removed" +msgstr "" + +#: builtin/ls-files.c:478 +msgid "show 'other' directories' name only" +msgstr "" + +#: builtin/ls-files.c:481 +msgid "don't show empty directories" +msgstr "" + +#: builtin/ls-files.c:484 +msgid "show unmerged files in the output" +msgstr "" + +#: builtin/ls-files.c:486 +msgid "show resolve-undo information" +msgstr "" + +#: builtin/ls-files.c:488 +msgid "skip files matching pattern" +msgstr "" + +#: builtin/ls-files.c:491 +msgid "exclude patterns are read from <file>" +msgstr "" + +#: builtin/ls-files.c:494 +msgid "read additional per-directory exclude patterns in <file>" +msgstr "" + +#: builtin/ls-files.c:496 +msgid "add the standard git exclusions" +msgstr "" + +#: builtin/ls-files.c:499 +msgid "make the output relative to the project top directory" +msgstr "" + +#: builtin/ls-files.c:502 +msgid "if any <file> is not in the index, treat this as an error" +msgstr "" + +#: builtin/ls-files.c:503 +msgid "tree-ish" +msgstr "" + +#: builtin/ls-files.c:504 +msgid "pretend that paths removed since <tree-ish> are still present" +msgstr "" + +#: builtin/ls-files.c:506 +msgid "show debugging data" +msgstr "" + +#: builtin/ls-tree.c:27 +msgid "git ls-tree [<options>] <tree-ish> [<path>...]" +msgstr "" + +#: builtin/ls-tree.c:125 +msgid "only show trees" +msgstr "" + +#: builtin/ls-tree.c:127 +msgid "recurse into subtrees" +msgstr "" + +#: builtin/ls-tree.c:129 +msgid "show trees when recursing" +msgstr "" + +#: builtin/ls-tree.c:132 +msgid "terminate entries with NUL byte" +msgstr "" + +#: builtin/ls-tree.c:133 +msgid "include object size" +msgstr "" + +#: builtin/ls-tree.c:135 builtin/ls-tree.c:137 +msgid "list only filenames" +msgstr "" + +#: builtin/ls-tree.c:140 +msgid "use full path names" +msgstr "" + +#: builtin/ls-tree.c:142 +msgid "list entire tree; not just current directory (implies --full-name)" +msgstr "" + +#: builtin/merge.c:43 +msgid "git merge [options] [<commit>...]" +msgstr "" + +#: builtin/merge.c:44 +msgid "git merge [options] <msg> HEAD <commit>" +msgstr "" + +#: builtin/merge.c:45 +msgid "git merge --abort" +msgstr "" + +#: builtin/merge.c:90 +msgid "switch `m' requires a value" +msgstr "" + +#: builtin/merge.c:127 +#, c-format +msgid "Could not find merge strategy '%s'.\n" +msgstr "" + +#: builtin/merge.c:128 +#, c-format +msgid "Available strategies are:" +msgstr "" + +#: builtin/merge.c:133 +#, c-format +msgid "Available custom strategies are:" +msgstr "" + +#: builtin/merge.c:183 +msgid "do not show a diffstat at the end of the merge" +msgstr "" + +#: builtin/merge.c:186 +msgid "show a diffstat at the end of the merge" +msgstr "" + +#: builtin/merge.c:187 +msgid "(synonym to --stat)" +msgstr "" + +#: builtin/merge.c:189 +msgid "add (at most <n>) entries from shortlog to merge commit message" +msgstr "" + +#: builtin/merge.c:192 +msgid "create a single commit instead of doing a merge" +msgstr "" + +#: builtin/merge.c:194 +msgid "perform a commit if the merge succeeds (default)" +msgstr "" + +#: builtin/merge.c:196 +msgid "edit message before committing" +msgstr "" + +#: builtin/merge.c:198 +msgid "allow fast-forward (default)" +msgstr "" + +#: builtin/merge.c:200 +msgid "abort if fast-forward is not possible" +msgstr "" + +#: builtin/merge.c:203 +msgid "Verify that the named commit has a valid GPG signature" +msgstr "" + +#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +msgid "strategy" +msgstr "" + +#: builtin/merge.c:205 +msgid "merge strategy to use" +msgstr "" + +#: builtin/merge.c:206 +msgid "option=value" +msgstr "" + +#: builtin/merge.c:207 +msgid "option for selected merge strategy" +msgstr "" + +#: builtin/merge.c:209 +msgid "merge commit message (for a non-fast-forward merge)" +msgstr "" + +#: builtin/merge.c:213 +msgid "abort the current in-progress merge" +msgstr "" + +#: builtin/merge.c:242 +msgid "could not run stash." +msgstr "" + +#: builtin/merge.c:247 +msgid "stash failed" +msgstr "" + +#: builtin/merge.c:252 +#, c-format +msgid "not a valid object: %s" +msgstr "" + +#: builtin/merge.c:271 builtin/merge.c:288 +msgid "read-tree failed" +msgstr "" + +#: builtin/merge.c:318 +msgid " (nothing to squash)" +msgstr " (rien à compresser)" + +#: builtin/merge.c:331 +#, c-format +msgid "Squash commit -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:363 +msgid "Writing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:365 +msgid "Finishing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:388 +#, c-format +msgid "No merge message -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:438 +#, c-format +msgid "'%s' does not point to a commit" +msgstr "" + +#: builtin/merge.c:550 +#, c-format +msgid "Bad branch.%s.mergeoptions string: %s" +msgstr "" + +#: builtin/merge.c:643 +msgid "git write-tree failed to write a tree" +msgstr "" + +#: builtin/merge.c:671 +msgid "Not handling anything other than two heads merge." +msgstr "" + +#: builtin/merge.c:685 +#, c-format +msgid "Unknown option for merge-recursive: -X%s" +msgstr "" + +#: builtin/merge.c:699 +#, c-format +msgid "unable to write %s" +msgstr "" + +#: builtin/merge.c:788 +#, c-format +msgid "Could not read from '%s'" +msgstr "" + +#: builtin/merge.c:797 +#, c-format +msgid "Not committing merge; use 'git commit' to complete the merge.\n" +msgstr "" + +#: builtin/merge.c:803 +#, c-format +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 '%c' will be ignored, and an empty message aborts\n" +"the commit.\n" +msgstr "" + +#: builtin/merge.c:827 +msgid "Empty commit message." +msgstr "" + +#: builtin/merge.c:839 +#, c-format +msgid "Wonderful.\n" +msgstr "" + +#: builtin/merge.c:904 +#, c-format +msgid "Automatic merge failed; fix conflicts and then commit the result.\n" +msgstr "" + +#: builtin/merge.c:920 +#, c-format +msgid "'%s' is not a commit" +msgstr "" + +#: builtin/merge.c:961 +msgid "No current branch." +msgstr "" + +#: builtin/merge.c:963 +msgid "No remote for the current branch." +msgstr "" + +#: builtin/merge.c:965 +msgid "No default upstream defined for the current branch." +msgstr "" + +#: builtin/merge.c:970 +#, c-format +msgid "No remote tracking branch for %s from %s" +msgstr "" + +#: builtin/merge.c:1057 builtin/merge.c:1214 +#, c-format +msgid "%s - not something we can merge" +msgstr "" + +#: builtin/merge.c:1125 +msgid "There is no merge to abort (MERGE_HEAD missing)." +msgstr "" + +#: builtin/merge.c:1141 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:1144 git-pull.sh:34 +msgid "You have not concluded your merge (MERGE_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1148 +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:1151 +msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1160 +msgid "You cannot combine --squash with --no-ff." +msgstr "" + +#: builtin/merge.c:1165 +msgid "You cannot combine --no-ff with --ff-only." +msgstr "" + +#: builtin/merge.c:1172 +msgid "No commit specified and merge.defaultToUpstream not set." +msgstr "" + +#: builtin/merge.c:1204 +msgid "Can merge only exactly one commit into empty head" +msgstr "" + +#: builtin/merge.c:1207 +msgid "Squash commit into empty head not supported yet" +msgstr "" + +#: builtin/merge.c:1209 +msgid "Non-fast-forward commit does not make sense into an empty head" +msgstr "" + +#: builtin/merge.c:1265 +#, c-format +msgid "Commit %s has an untrusted GPG signature, allegedly by %s." +msgstr "" + +#: builtin/merge.c:1268 +#, c-format +msgid "Commit %s has a bad GPG signature allegedly by %s." +msgstr "" + +#. 'N' +#: builtin/merge.c:1271 +#, c-format +msgid "Commit %s does not have a GPG signature." +msgstr "" + +#: builtin/merge.c:1274 +#, c-format +msgid "Commit %s has a good GPG signature by %s\n" +msgstr "" + +#: builtin/merge.c:1358 +#, c-format +msgid "Updating %s..%s\n" +msgstr "" + +#: builtin/merge.c:1397 +#, c-format +msgid "Trying really trivial in-index merge...\n" +msgstr "" + +#: builtin/merge.c:1404 +#, c-format +msgid "Nope.\n" +msgstr "" + +#: builtin/merge.c:1436 +msgid "Not possible to fast-forward, aborting." +msgstr "" + +#: builtin/merge.c:1459 builtin/merge.c:1538 +#, c-format +msgid "Rewinding the tree to pristine...\n" +msgstr "" + +#: builtin/merge.c:1463 +#, c-format +msgid "Trying merge strategy %s...\n" +msgstr "" + +#: builtin/merge.c:1529 +#, c-format +msgid "No merge strategy handled the merge.\n" +msgstr "" + +#: builtin/merge.c:1531 +#, c-format +msgid "Merge with strategy %s failed.\n" +msgstr "" + +#: builtin/merge.c:1540 +#, c-format +msgid "Using the %s to prepare resolving by hand.\n" +msgstr "" + +#: builtin/merge.c:1552 +#, c-format +msgid "Automatic merge went well; stopped before committing as requested\n" +msgstr "" + +#: builtin/merge-base.c:26 +msgid "git merge-base [-a|--all] <commit> <commit>..." +msgstr "" + +#: builtin/merge-base.c:27 +msgid "git merge-base [-a|--all] --octopus <commit>..." +msgstr "" + +#: builtin/merge-base.c:28 +msgid "git merge-base --independent <commit>..." +msgstr "" + +#: builtin/merge-base.c:29 +msgid "git merge-base --is-ancestor <commit> <commit>" +msgstr "" + +#: builtin/merge-base.c:98 +msgid "output all common ancestors" +msgstr "" + +#: builtin/merge-base.c:99 +msgid "find ancestors for a single n-way merge" +msgstr "" + +#: builtin/merge-base.c:100 +msgid "list revs not reachable from others" +msgstr "" + +#: builtin/merge-base.c:102 +msgid "is the first one ancestor of the other?" +msgstr "" + +#: builtin/merge-file.c:8 +msgid "" +"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file " +"file2" +msgstr "" + +#: builtin/merge-file.c:33 +msgid "send results to standard output" +msgstr "" + +#: builtin/merge-file.c:34 +msgid "use a diff3 based merge" +msgstr "" + +#: builtin/merge-file.c:35 +msgid "for conflicts, use our version" +msgstr "" + +#: builtin/merge-file.c:37 +msgid "for conflicts, use their version" +msgstr "" + +#: builtin/merge-file.c:39 +msgid "for conflicts, use a union version" +msgstr "" + +#: builtin/merge-file.c:42 +msgid "for conflicts, use this marker size" +msgstr "" + +#: builtin/merge-file.c:43 +msgid "do not warn about conflicts" +msgstr "" + +#: builtin/merge-file.c:45 +msgid "set labels for file1/orig_file/file2" +msgstr "" + +#: builtin/mktree.c:67 +msgid "git mktree [-z] [--missing] [--batch]" +msgstr "" + +#: builtin/mktree.c:153 +msgid "input is NUL terminated" +msgstr "" + +#: builtin/mktree.c:154 builtin/write-tree.c:24 +msgid "allow missing objects" +msgstr "" + +#: builtin/mktree.c:155 +msgid "allow creation of more than one tree" +msgstr "" + +#: builtin/mv.c:14 +msgid "git mv [options] <source>... <destination>" +msgstr "" + +#: builtin/mv.c:64 +msgid "force move/rename even if target exists" +msgstr "" + +#: builtin/mv.c:65 +msgid "skip move/rename errors" +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 "%s, source=%s, destination=%s" + +#: builtin/mv.c:212 +#, c-format +msgid "Renaming %s to %s\n" +msgstr "" + +#: builtin/mv.c:215 builtin/remote.c:731 +#, c-format +msgid "renaming '%s' failed" +msgstr "" + +#: builtin/name-rev.c:175 +msgid "git name-rev [options] <commit>..." +msgstr "" + +#: builtin/name-rev.c:176 +msgid "git name-rev [options] --all" +msgstr "" + +#: builtin/name-rev.c:177 +msgid "git name-rev [options] --stdin" +msgstr "" + +#: builtin/name-rev.c:229 +msgid "print only names (no SHA-1)" +msgstr "" + +#: builtin/name-rev.c:230 +msgid "only use tags to name the commits" +msgstr "" + +#: builtin/name-rev.c:232 +msgid "only use refs matching <pattern>" +msgstr "" + +#: builtin/name-rev.c:234 +msgid "list all commits reachable from all refs" +msgstr "" + +#: builtin/name-rev.c:235 +msgid "read from stdin" +msgstr "" + +#: builtin/name-rev.c:236 +msgid "allow to print `undefined` names" +msgstr "" + +#: builtin/notes.c:26 +msgid "git notes [--ref <notes_ref>] [list [<object>]]" +msgstr "" + +#: builtin/notes.c:27 +msgid "" +"git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " +"<object>] [<object>]" +msgstr "" + +#: builtin/notes.c:28 +msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" +msgstr "" + +#: builtin/notes.c:29 +msgid "" +"git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " +"<object>] [<object>]" +msgstr "" + +#: builtin/notes.c:30 +msgid "git notes [--ref <notes_ref>] edit [<object>]" +msgstr "" + +#: builtin/notes.c:31 +msgid "git notes [--ref <notes_ref>] show [<object>]" +msgstr "" + +#: builtin/notes.c:32 +msgid "" +"git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" +msgstr "" + +#: builtin/notes.c:33 +msgid "git notes merge --commit [-v | -q]" +msgstr "" + +#: builtin/notes.c:34 +msgid "git notes merge --abort [-v | -q]" +msgstr "" + +#: builtin/notes.c:35 +msgid "git notes [--ref <notes_ref>] remove [<object>...]" +msgstr "" + +#: builtin/notes.c:36 +msgid "git notes [--ref <notes_ref>] prune [-n | -v]" +msgstr "" + +#: builtin/notes.c:37 +msgid "git notes [--ref <notes_ref>] get-ref" +msgstr "" + +#: builtin/notes.c:42 +msgid "git notes [list [<object>]]" +msgstr "" + +#: builtin/notes.c:47 +msgid "git notes add [<options>] [<object>]" +msgstr "" + +#: builtin/notes.c:52 +msgid "git notes copy [<options>] <from-object> <to-object>" +msgstr "" + +#: builtin/notes.c:53 +msgid "git notes copy --stdin [<from-object> <to-object>]..." +msgstr "" + +#: builtin/notes.c:58 +msgid "git notes append [<options>] [<object>]" +msgstr "" + +#: builtin/notes.c:63 +msgid "git notes edit [<object>]" +msgstr "" + +#: builtin/notes.c:68 +msgid "git notes show [<object>]" +msgstr "" + +#: builtin/notes.c:73 +msgid "git notes merge [<options>] <notes_ref>" +msgstr "" + +#: builtin/notes.c:74 +msgid "git notes merge --commit [<options>]" +msgstr "" + +#: builtin/notes.c:75 +msgid "git notes merge --abort [<options>]" +msgstr "" + +#: builtin/notes.c:80 +msgid "git notes remove [<object>]" +msgstr "" + +#: builtin/notes.c:85 +msgid "git notes prune [<options>]" +msgstr "" + +#: builtin/notes.c:90 +msgid "git notes get-ref" +msgstr "" + +#: builtin/notes.c:139 +#, c-format +msgid "unable to start 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:143 +msgid "could not read 'show' output" +msgstr "" + +#: builtin/notes.c:151 +#, c-format +msgid "failed to finish 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:169 builtin/tag.c:341 +#, c-format +msgid "could not create file '%s'" +msgstr "" + +#: builtin/notes.c:188 +msgid "Please supply the note contents using either -m or -F option" +msgstr "" + +#: builtin/notes.c:209 builtin/notes.c:972 +#, c-format +msgid "Removing note for object %s\n" +msgstr "" + +#: builtin/notes.c:214 +msgid "unable to write note object" +msgstr "" + +#: builtin/notes.c:216 +#, c-format +msgid "The note contents has been left in %s" +msgstr "" + +#: builtin/notes.c:250 builtin/tag.c:540 +#, c-format +msgid "cannot read '%s'" +msgstr "" + +#: builtin/notes.c:252 builtin/tag.c:543 +#, c-format +msgid "could not open or read '%s'" +msgstr "" + +#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 +#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 +#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 +#: builtin/notes.c:967 builtin/tag.c:556 +#, c-format +msgid "Failed to resolve '%s' as a valid ref." +msgstr "" + +#: builtin/notes.c:274 +#, c-format +msgid "Failed to read object '%s'." +msgstr "" + +#: builtin/notes.c:298 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" + +#: builtin/notes.c:339 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "" + +#: builtin/notes.c:349 +#, 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:376 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "" + +#: builtin/notes.c:440 +#, c-format +msgid "Malformed input line: '%s'." +msgstr "" + +#: builtin/notes.c:455 +#, c-format +msgid "Failed to copy notes from '%s' to '%s'" +msgstr "" + +#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 +#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 +#: builtin/notes.c:1032 +msgid "too many parameters" +msgstr "" + +#: builtin/notes.c:512 builtin/notes.c:771 +#, c-format +msgid "No note found for object %s." +msgstr "" + +#: builtin/notes.c:534 builtin/notes.c:691 +msgid "note contents as a string" +msgstr "" + +#: builtin/notes.c:537 builtin/notes.c:694 +msgid "note contents in a file" +msgstr "" + +#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 +#: builtin/notes.c:699 builtin/tag.c:474 +msgid "object" +msgstr "" + +#: builtin/notes.c:540 builtin/notes.c:697 +msgid "reuse and edit specified note object" +msgstr "" + +#: builtin/notes.c:543 builtin/notes.c:700 +msgid "reuse specified note object" +msgstr "" + +#: builtin/notes.c:545 builtin/notes.c:613 +msgid "replace existing notes" +msgstr "" + +#: builtin/notes.c:579 +#, c-format +msgid "" +"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:584 builtin/notes.c:661 +#, c-format +msgid "Overwriting existing notes for object %s\n" +msgstr "" + +#: builtin/notes.c:614 +msgid "read objects from stdin" +msgstr "" + +#: builtin/notes.c:616 +msgid "load rewriting config for <command> (implies --stdin)" +msgstr "" + +#: builtin/notes.c:634 +msgid "too few parameters" +msgstr "" + +#: builtin/notes.c:655 +#, c-format +msgid "" +"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:667 +#, c-format +msgid "Missing notes on source object %s. Cannot copy." +msgstr "" + +#: builtin/notes.c:716 +#, 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:863 +msgid "General options" +msgstr "" + +#: builtin/notes.c:865 +msgid "Merge options" +msgstr "" + +#: builtin/notes.c:867 +msgid "" +"resolve notes conflicts using the given strategy (manual/ours/theirs/union/" +"cat_sort_uniq)" +msgstr "" + +#: builtin/notes.c:869 +msgid "Committing unmerged notes" +msgstr "" + +#: builtin/notes.c:871 +msgid "finalize notes merge by committing unmerged notes" +msgstr "" + +#: builtin/notes.c:873 +msgid "Aborting notes merge resolution" +msgstr "" + +#: builtin/notes.c:875 +msgid "abort notes merge" +msgstr "" + +#: builtin/notes.c:970 +#, c-format +msgid "Object %s has no note\n" +msgstr "" + +#: builtin/notes.c:982 +msgid "attempt to remove non-existent note is not an error" +msgstr "" + +#: builtin/notes.c:985 +msgid "read object names from the standard input" +msgstr "" + +#: builtin/notes.c:1066 +msgid "notes_ref" +msgstr "" + +#: builtin/notes.c:1067 +msgid "use notes from <notes_ref>" +msgstr "" + +#: builtin/notes.c:1102 builtin/remote.c:1598 +#, c-format +msgid "Unknown subcommand: %s" +msgstr "" + +#: builtin/pack-objects.c:23 +msgid "git pack-objects --stdout [options...] [< ref-list | < object-list]" +msgstr "" + +#: builtin/pack-objects.c:24 +msgid "git pack-objects [options...] base-name [< ref-list | < object-list]" +msgstr "" + +#: builtin/pack-objects.c:183 builtin/pack-objects.c:186 +#, c-format +msgid "deflate error (%d)" +msgstr "" + +#: builtin/pack-objects.c:2397 +#, c-format +msgid "unsupported index version %s" +msgstr "" + +#: builtin/pack-objects.c:2401 +#, c-format +msgid "bad index version '%s'" +msgstr "" + +#: builtin/pack-objects.c:2424 +#, c-format +msgid "option %s does not accept negative form" +msgstr "" + +#: builtin/pack-objects.c:2428 +#, c-format +msgid "unable to parse value '%s' for option %s" +msgstr "" + +#: builtin/pack-objects.c:2447 +msgid "do not show progress meter" +msgstr "" + +#: builtin/pack-objects.c:2449 +msgid "show progress meter" +msgstr "" + +#: builtin/pack-objects.c:2451 +msgid "show progress meter during object writing phase" +msgstr "" + +#: builtin/pack-objects.c:2454 +msgid "similar to --all-progress when progress meter is shown" +msgstr "" + +#: builtin/pack-objects.c:2455 +msgid "version[,offset]" +msgstr "" + +#: builtin/pack-objects.c:2456 +msgid "write the pack index file in the specified idx format version" +msgstr "" + +#: builtin/pack-objects.c:2459 +msgid "maximum size of each output pack file" +msgstr "" + +#: builtin/pack-objects.c:2461 +msgid "ignore borrowed objects from alternate object store" +msgstr "" + +#: builtin/pack-objects.c:2463 +msgid "ignore packed objects" +msgstr "" + +#: builtin/pack-objects.c:2465 +msgid "limit pack window by objects" +msgstr "" + +#: builtin/pack-objects.c:2467 +msgid "limit pack window by memory in addition to object limit" +msgstr "" + +#: builtin/pack-objects.c:2469 +msgid "maximum length of delta chain allowed in the resulting pack" +msgstr "" + +#: builtin/pack-objects.c:2471 +msgid "reuse existing deltas" +msgstr "" + +#: builtin/pack-objects.c:2473 +msgid "reuse existing objects" +msgstr "" + +#: builtin/pack-objects.c:2475 +msgid "use OFS_DELTA objects" +msgstr "" + +#: builtin/pack-objects.c:2477 +msgid "use threads when searching for best delta matches" +msgstr "" + +#: builtin/pack-objects.c:2479 +msgid "do not create an empty pack output" +msgstr "" + +#: builtin/pack-objects.c:2481 +msgid "read revision arguments from standard input" +msgstr "" + +#: builtin/pack-objects.c:2483 +msgid "limit the objects to those that are not yet packed" +msgstr "" + +#: builtin/pack-objects.c:2486 +msgid "include objects reachable from any reference" +msgstr "" + +#: builtin/pack-objects.c:2489 +msgid "include objects referred by reflog entries" +msgstr "" + +#: builtin/pack-objects.c:2492 +msgid "output pack to stdout" +msgstr "" + +#: builtin/pack-objects.c:2494 +msgid "include tag objects that refer to objects to be packed" +msgstr "" + +#: builtin/pack-objects.c:2496 +msgid "keep unreachable objects" +msgstr "" + +#: builtin/pack-objects.c:2497 parse-options.h:141 +msgid "time" +msgstr "" + +#: builtin/pack-objects.c:2498 +msgid "unpack unreachable objects newer than <time>" +msgstr "" + +#: builtin/pack-objects.c:2501 +msgid "create thin packs" +msgstr "" + +#: builtin/pack-objects.c:2503 +msgid "ignore packs that have companion .keep file" +msgstr "" + +#: builtin/pack-objects.c:2505 +msgid "pack compression level" +msgstr "" + +#: builtin/pack-objects.c:2507 +msgid "do not hide commits by grafts" +msgstr "" + +#: builtin/pack-refs.c:6 +msgid "git pack-refs [options]" +msgstr "" + +#: builtin/pack-refs.c:14 +msgid "pack everything" +msgstr "" + +#: builtin/pack-refs.c:15 +msgid "prune loose refs (default)" +msgstr "" + +#: builtin/prune-packed.c:7 +msgid "git prune-packed [-n|--dry-run] [-q|--quiet]" +msgstr "" + +#: builtin/prune.c:12 +msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]" +msgstr "" + +#: builtin/prune.c:132 +msgid "do not remove, show only" +msgstr "" + +#: builtin/prune.c:133 +msgid "report pruned objects" +msgstr "" + +#: builtin/prune.c:136 +msgid "expire objects older than <time>" +msgstr "" + +#: builtin/push.c:14 +msgid "git push [<options>] [<repository> [<refspec>...]]" +msgstr "" + +#: builtin/push.c:45 +msgid "tag shorthand without <tag>" +msgstr "" + +#: builtin/push.c:64 +msgid "--delete only accepts plain target ref names" +msgstr "" + +#: builtin/push.c:99 +msgid "" +"\n" +"To choose either option permanently, see push.default in 'git help config'." +msgstr "" + +#: builtin/push.c:102 +#, c-format +msgid "" +"The upstream branch of your current branch does not match\n" +"the name of your current branch. To push to the upstream branch\n" +"on the remote, use\n" +"\n" +" git push %s HEAD:%s\n" +"\n" +"To push to the branch of the same name on the remote, use\n" +"\n" +" git push %s %s\n" +"%s" +msgstr "" + +#: builtin/push.c:121 +#, 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:128 +#, 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:136 +#, c-format +msgid "The current branch %s has multiple upstream branches, refusing to push." +msgstr "" + +#: builtin/push.c:139 +#, 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:151 +msgid "" +"push.default is unset; its implicit value is changing in\n" +"Git 2.0 from 'matching' to 'simple'. To squelch this message\n" +"and maintain the current behavior after the default changes, use:\n" +"\n" +" git config --global push.default matching\n" +"\n" +"To squelch this message and adopt the new behavior now, use:\n" +"\n" +" git config --global push.default simple\n" +"\n" +"See 'git help config' and search for 'push.default' for further " +"information.\n" +"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n" +"'current' instead of 'simple' if you sometimes use older versions of Git)" +msgstr "" + +#: builtin/push.c:199 +msgid "" +"You didn't specify any refspecs to push, and push.default is \"nothing\"." +msgstr "" + +#: builtin/push.c:206 +msgid "" +"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." +msgstr "" + +#: builtin/push.c:212 +msgid "" +"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 variable\n" +"to 'simple', 'current' or 'upstream' to push only the current branch." +msgstr "" + +#: builtin/push.c:218 +msgid "" +"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." +msgstr "" + +#: builtin/push.c:224 +msgid "" +"Updates were rejected because the remote contains work that you do\n" +"not have locally. This is usually caused by another repository pushing\n" +"to the same ref. You may want to first merge the remote changes (e.g.,\n" +"'git pull') before pushing again.\n" +"See the 'Note about fast-forwards' in 'git push --help' for details." +msgstr "" + +#: builtin/push.c:231 +msgid "Updates were rejected because the tag already exists in the remote." +msgstr "" + +#: builtin/push.c:234 +msgid "" +"You cannot update a remote ref that points at a non-commit object,\n" +"or update a remote ref to make it point at a non-commit object,\n" +"without using the '--force' option.\n" +msgstr "" + +#: builtin/push.c:294 +#, c-format +msgid "Pushing to %s\n" +msgstr "" + +#: builtin/push.c:298 +#, c-format +msgid "failed to push some refs to '%s'" +msgstr "" + +#: builtin/push.c:331 +#, c-format +msgid "bad repository '%s'" +msgstr "" + +#: builtin/push.c:332 +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:347 +msgid "--all and --tags are incompatible" +msgstr "" + +#: builtin/push.c:348 +msgid "--all can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:353 +msgid "--mirror and --tags are incompatible" +msgstr "" + +#: builtin/push.c:354 +msgid "--mirror can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:359 +msgid "--all and --mirror are incompatible" +msgstr "" + +#: builtin/push.c:419 +msgid "repository" +msgstr "" + +#: builtin/push.c:420 +msgid "push all refs" +msgstr "" + +#: builtin/push.c:421 +msgid "mirror all refs" +msgstr "" + +#: builtin/push.c:423 +msgid "delete refs" +msgstr "" + +#: builtin/push.c:424 +msgid "push tags (can't be used with --all or --mirror)" +msgstr "" + +#: builtin/push.c:427 +msgid "force updates" +msgstr "" + +#: builtin/push.c:428 +msgid "check" +msgstr "" + +#: builtin/push.c:429 +msgid "control recursive pushing of submodules" +msgstr "" + +#: builtin/push.c:431 +msgid "use thin pack" +msgstr "" + +#: builtin/push.c:432 builtin/push.c:433 +msgid "receive pack program" +msgstr "" + +#: builtin/push.c:434 +msgid "set upstream for git pull/status" +msgstr "" + +#: builtin/push.c:437 +msgid "prune locally removed refs" +msgstr "" + +#: builtin/push.c:439 +msgid "bypass pre-push hook" +msgstr "" + +#: builtin/push.c:440 +msgid "push missing but relevant tags" +msgstr "" + +#: builtin/push.c:450 +msgid "--delete is incompatible with --all, --mirror and --tags" +msgstr "" + +#: builtin/push.c:452 +msgid "--delete doesn't make sense without any refs" +msgstr "" + +#: builtin/read-tree.c:36 +msgid "" +"git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>] " +"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" +"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])" +msgstr "" + +#: builtin/read-tree.c:108 +msgid "write resulting index to <file>" +msgstr "" + +#: builtin/read-tree.c:111 +msgid "only empty the index" +msgstr "" + +#: builtin/read-tree.c:113 +msgid "Merging" +msgstr "" + +#: builtin/read-tree.c:115 +msgid "perform a merge in addition to a read" +msgstr "" + +#: builtin/read-tree.c:117 +msgid "3-way merge if no file level merging required" +msgstr "" + +#: builtin/read-tree.c:119 +msgid "3-way merge in presence of adds and removes" +msgstr "" + +#: builtin/read-tree.c:121 +msgid "same as -m, but discard unmerged entries" +msgstr "" + +#: builtin/read-tree.c:122 +msgid "<subdirectory>/" +msgstr "" + +#: builtin/read-tree.c:123 +msgid "read the tree into the index under <subdirectory>/" +msgstr "" + +#: builtin/read-tree.c:126 +msgid "update working tree with merge result" +msgstr "" + +#: builtin/read-tree.c:128 +msgid "gitignore" +msgstr "" + +#: builtin/read-tree.c:129 +msgid "allow explicitly ignored files to be overwritten" +msgstr "" + +#: builtin/read-tree.c:132 +msgid "don't check the working tree after merging" +msgstr "" + +#: builtin/read-tree.c:133 +msgid "don't update the index or the work tree" +msgstr "" + +#: builtin/read-tree.c:135 +msgid "skip applying sparse checkout filter" +msgstr "" + +#: builtin/read-tree.c:137 +msgid "debug unpack-trees" +msgstr "" + +#: builtin/remote.c:11 +msgid "git remote [-v | --verbose]" +msgstr "git remote [-v | --verbose]" + +#: builtin/remote.c:12 +msgid "" +"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--" +"mirror=<fetch|push>] <name> <url>" +msgstr "git remote add [-t <branche>] [-m <maîtresse>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <nom> <URL>" + +#: builtin/remote.c:13 builtin/remote.c:32 +msgid "git remote rename <old> <new>" +msgstr "git remote rename <ancienne> <nouvelle>" + +#: builtin/remote.c:14 builtin/remote.c:37 +msgid "git remote remove <name>" +msgstr "git remote remove <nom>" + +#: builtin/remote.c:15 builtin/remote.c:42 +msgid "git remote set-head <name> (-a | -d | <branch>)" +msgstr "git remote set-head <nom> (-a | -d | <branche>)" + +#: builtin/remote.c:16 +msgid "git remote [-v | --verbose] show [-n] <name>" +msgstr "git remote [-v | --verbose] show [-n] <nom>" + +#: builtin/remote.c:17 +msgid "git remote prune [-n | --dry-run] <name>" +msgstr "git remote prune [-n | --dry-run] <nom>" + +#: builtin/remote.c:18 +msgid "" +"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]" +msgstr "git remote [-v | --verbose] update [-p | --prune] [(<groupe> | <distante>)...]" + +#: builtin/remote.c:19 +msgid "git remote set-branches [--add] <name> <branch>..." +msgstr "git remote set-branches [--add] <nom> <branche>..." + +#: builtin/remote.c:20 builtin/remote.c:68 +msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]" +msgstr "git remote set-url [--push] <nom> <nouvelle-URL> [<ancienne-URL>]" + +#: builtin/remote.c:21 builtin/remote.c:69 +msgid "git remote set-url --add <name> <newurl>" +msgstr "git remote set-url --add <nom> <nouvelle-URL>" + +#: builtin/remote.c:22 builtin/remote.c:70 +msgid "git remote set-url --delete <name> <url>" +msgstr "git remote set-url --delete <nom> <URL>" + +#: builtin/remote.c:27 +msgid "git remote add [<options>] <name> <url>" +msgstr "git remote add [<options>] <nom> <URL>" + +#: builtin/remote.c:47 +msgid "git remote set-branches <name> <branch>..." +msgstr "git remote set-branches <nom> <branche>..." + +#: builtin/remote.c:48 +msgid "git remote set-branches --add <name> <branch>..." +msgstr "git remote set-branches --add <nom> <branche>..." + +#: builtin/remote.c:53 +msgid "git remote show [<options>] <name>" +msgstr "git remote show [<options>] <nom>" + +#: builtin/remote.c:58 +msgid "git remote prune [<options>] <name>" +msgstr "git remote prune [<options>] <nom>" + +#: builtin/remote.c:63 +msgid "git remote update [<options>] [<group> | <remote>]..." +msgstr "git remote update [<options>] [<groupe> | <distante>]..." + +#: builtin/remote.c:98 +#, c-format +msgid "Updating %s" +msgstr "Mise à jour de %s" + +#: builtin/remote.c:130 +msgid "" +"--mirror is dangerous and deprecated; please\n" +"\t use --mirror=fetch or --mirror=push instead" +msgstr "" +"--mirror est dangereux et obsolète ; merci\n" +"\t d'utiliser --mirror=fetch ou --mirror=push à la place" + +#: builtin/remote.c:147 +#, c-format +msgid "unknown mirror argument: %s" +msgstr "argument miroir inconnu : %s" + +#: builtin/remote.c:163 +msgid "fetch the remote branches" +msgstr "rapatrier les branches distantes" + +#: builtin/remote.c:165 +msgid "import all tags and associated objects when fetching" +msgstr "importer toutes les étiquettes et les objets associés lors du rapatriement" + +#: builtin/remote.c:168 +msgid "or do not fetch any tag at all (--no-tags)" +msgstr "ou ne rapatrier aucune étiquette (--no-tags)" + +#: builtin/remote.c:170 +msgid "branch(es) to track" +msgstr "branche(s) à suivre" + +#: builtin/remote.c:171 +msgid "master branch" +msgstr "branche maîtresse" + +#: builtin/remote.c:172 +msgid "push|fetch" +msgstr "push|fetch" + +#: builtin/remote.c:173 +msgid "set up remote as a mirror to push to or fetch from" +msgstr "paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis" + +#: builtin/remote.c:185 +msgid "specifying a master branch makes no sense with --mirror" +msgstr "spécifier une branche maîtresse n'a pas de sens avec --mirror" + +#: builtin/remote.c:187 +msgid "specifying branches to track makes sense only with fetch mirrors" +msgstr "spécifier les branches à suivre n'a de sens qu'avec des miroirs de rapatriement" + +#: builtin/remote.c:195 builtin/remote.c:646 +#, c-format +msgid "remote %s already exists." +msgstr "la distante %s existe déjà ." + +#: builtin/remote.c:199 builtin/remote.c:650 +#, c-format +msgid "'%s' is not a valid remote name" +msgstr "'%s' n'est pas un nom valide de distante" + +#: builtin/remote.c:243 +#, c-format +msgid "Could not setup master '%s'" +msgstr "Impossible de paramétrer la maîtresse '%s'" + +#: builtin/remote.c:299 +#, c-format +msgid "more than one %s" +msgstr "plus d'un %s" + +#: builtin/remote.c:339 +#, c-format +msgid "Could not get fetch map for refspec %s" +msgstr "" + +#: builtin/remote.c:440 builtin/remote.c:448 +msgid "(matching)" +msgstr "(correspond)" + +#: builtin/remote.c:452 +msgid "(delete)" +msgstr "(supprimer)" + +#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607 +#, c-format +msgid "Could not append '%s' to '%s'" +msgstr "Impossible d'ajouter '%s' à '%s'" + +#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890 +#, c-format +msgid "No such remote: %s" +msgstr "Distante inconnue : %s" + +#: builtin/remote.c:656 +#, c-format +msgid "Could not rename config section '%s' to '%s'" +msgstr "Impossible de renommer la section de configuration '%s' en '%s'" + +#: builtin/remote.c:662 builtin/remote.c:799 +#, c-format +msgid "Could not remove config section '%s'" +msgstr "Impossible de supprimer la section de configuration '%s'" + +#: builtin/remote.c:677 +#, c-format +msgid "" +"Not updating non-default fetch refspec\n" +"\t%s\n" +"\tPlease update the configuration manually if necessary." +msgstr "" +"Pas de mise à jour du refspec de rapatriement qui n'est pas par défaut\n" +"\t%s\n" +"\tMerci de mettre à jour la configuration si nécessaire." + +#: builtin/remote.c:683 +#, c-format +msgid "Could not append '%s'" +msgstr "Impossible d'ajouter '%s'" + +#: builtin/remote.c:694 +#, c-format +msgid "Could not set '%s'" +msgstr "Impossible de définir '%s'" + +#: builtin/remote.c:716 +#, c-format +msgid "deleting '%s' failed" +msgstr "échec de suppression de '%s'" + +#: builtin/remote.c:750 +#, c-format +msgid "creating '%s' failed" +msgstr "échec de création de '%s'" + +#: builtin/remote.c:764 +#, c-format +msgid "Could not remove branch %s" +msgstr "Impossible de supprimer la branche %s" + +#: builtin/remote.c:834 +msgid "" +"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n" +"to delete it, use:" +msgid_plural "" +"Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" +"to delete them, use:" +msgstr[0] "" +"Note : Une branche en dehors de refs/remotes/ n'a pas été supprimée ;\n" +"pour la supprimer, utilisez :" +msgstr[1] "" +"Note : Plusieurs branches en dehors de refs/remotes/ n'ont pas été supprimées ;\n" +"pour les supprimer, utilisez :" + +#: builtin/remote.c:943 +#, c-format +msgid " new (next fetch will store in remotes/%s)" +msgstr " nouveau (le prochain rapatriement (fetch) stockera dans remotes/%s)" + +#: builtin/remote.c:946 +msgid " tracked" +msgstr " suivi" + +#: builtin/remote.c:948 +msgid " stale (use 'git remote prune' to remove)" +msgstr " dépassé (utilisez 'git remote prune' pour supprimer)" + +#: builtin/remote.c:950 +msgid " ???" +msgstr " ???" + +#: builtin/remote.c:991 +#, c-format +msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch" +msgstr "branch.%s.merge invalide ; ne peut pas rebaser sur plus d'une branche" + +#: builtin/remote.c:998 +#, c-format +msgid "rebases onto remote %s" +msgstr "rebase sur la distante %s" + +#: builtin/remote.c:1001 +#, c-format +msgid " merges with remote %s" +msgstr " fusionne avec la distante %s" + +#: builtin/remote.c:1002 +msgid " and with remote" +msgstr " et avec la distante" + +#: builtin/remote.c:1004 +#, c-format +msgid "merges with remote %s" +msgstr "fusionne avec la distante %s" + +#: builtin/remote.c:1005 +msgid " and with remote" +msgstr " et avec la distante" + +#: builtin/remote.c:1051 +msgid "create" +msgstr "créer" + +#: builtin/remote.c:1054 +msgid "delete" +msgstr "supprimer" + +#: builtin/remote.c:1058 +msgid "up to date" +msgstr "à jour" + +#: builtin/remote.c:1061 +msgid "fast-forwardable" +msgstr "peut être mis à jour en avance rapide" + +#: builtin/remote.c:1064 +msgid "local out of date" +msgstr "le local n'est pas à jour" + +#: builtin/remote.c:1071 +#, c-format +msgid " %-*s forces to %-*s (%s)" +msgstr " %-*s force vers %-*s (%s)" + +#: builtin/remote.c:1074 +#, c-format +msgid " %-*s pushes to %-*s (%s)" +msgstr " %-*s pousse vers %-*s (%s)" + +#: builtin/remote.c:1078 +#, c-format +msgid " %-*s forces to %s" +msgstr " %-*s force vers %s" + +#: builtin/remote.c:1081 +#, c-format +msgid " %-*s pushes to %s" +msgstr " %-*s pousse vers %s" + +#: builtin/remote.c:1091 +msgid "do not query remotes" +msgstr "ne pas interroger les distantes" + +#: builtin/remote.c:1118 +#, c-format +msgid "* remote %s" +msgstr "* distante %s" + +#: builtin/remote.c:1119 +#, c-format +msgid " Fetch URL: %s" +msgstr " URL de rapatriement : %s" + +#: builtin/remote.c:1120 builtin/remote.c:1285 +msgid "(no URL)" +msgstr "(pas d'URL)" + +#: builtin/remote.c:1129 builtin/remote.c:1131 +#, c-format +msgid " Push URL: %s" +msgstr " URL push : %s" + +#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137 +#, c-format +msgid " HEAD branch: %s" +msgstr " Branche HEAD : %s" + +#: builtin/remote.c:1139 +#, c-format +msgid "" +" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n" +msgstr " Branche HEAD (la HEAD distante est ambiguë, peut être l'une des suivantes) :\n" + +#: builtin/remote.c:1151 +#, c-format +msgid " Remote branch:%s" +msgid_plural " Remote branches:%s" +msgstr[0] " Branche distante :%s" +msgstr[1] " Branches distantes :%s" + +#: builtin/remote.c:1154 builtin/remote.c:1181 +msgid " (status not queried)" +msgstr " (statut non demandé)" + +#: builtin/remote.c:1163 +msgid " Local branch configured for 'git pull':" +msgid_plural " Local branches configured for 'git pull':" +msgstr[0] " Branche locale configurée pour 'git pull' :" +msgstr[1] " Branches locales configurées pour 'git pull' :" + +#: builtin/remote.c:1171 +msgid " Local refs will be mirrored by 'git push'" +msgstr " Les références locales seront reflétées par 'git push'" + +#: builtin/remote.c:1178 +#, c-format +msgid " Local ref configured for 'git push'%s:" +msgid_plural " Local refs configured for 'git push'%s:" +msgstr[0] " Référence locale configurée pour 'git push'%s :" +msgstr[1] " Références locales configurées pour 'git push'%s :" + +#: builtin/remote.c:1199 +msgid "set refs/remotes/<name>/HEAD according to remote" +msgstr "définir refs/remotes/<nom>/HEAD selon la distante" + +#: builtin/remote.c:1201 +msgid "delete refs/remotes/<name>/HEAD" +msgstr "supprimer refs/remotes/<nom>/HEAD" + +#: builtin/remote.c:1216 +msgid "Cannot determine remote HEAD" +msgstr "Impossible de déterminer la HEAD distante" + +#: builtin/remote.c:1218 +msgid "Multiple remote HEAD branches. Please choose one explicitly with:" +msgstr "Il y a de multiples branches HEAD distantes. Merci d'en choisir une explicitement avec :" + +#: builtin/remote.c:1228 +#, c-format +msgid "Could not delete %s" +msgstr "Impossible de supprimer %s" + +#: builtin/remote.c:1236 +#, c-format +msgid "Not a valid ref: %s" +msgstr "Référence non valide : %s" + +#: builtin/remote.c:1238 +#, c-format +msgid "Could not setup %s" +msgstr "Impossible de paramétrer %s" + +#: builtin/remote.c:1274 +#, c-format +msgid " %s will become dangling!" +msgstr " %s deviendra en suspens !" + +#: builtin/remote.c:1275 +#, c-format +msgid " %s has become dangling!" +msgstr " %s est devenu en suspens !" + +#: builtin/remote.c:1281 +#, c-format +msgid "Pruning %s" +msgstr "Élagage de %s" + +#: builtin/remote.c:1282 +#, c-format +msgid "URL: %s" +msgstr "URL : %s" + +#: builtin/remote.c:1295 +#, c-format +msgid " * [would prune] %s" +msgstr " * [serait élagué] %s" + +#: builtin/remote.c:1298 +#, c-format +msgid " * [pruned] %s" +msgstr " * [élagué] %s" + +#: builtin/remote.c:1321 +msgid "prune remotes after fetching" +msgstr "élaguer les distants après le rapatriement" + +#: builtin/remote.c:1387 builtin/remote.c:1461 +#, c-format +msgid "No such remote '%s'" +msgstr "Pas de serveur remote '%s'" + +#: builtin/remote.c:1407 +msgid "add branch" +msgstr "ajouter une branche" + +#: builtin/remote.c:1414 +msgid "no remote specified" +msgstr "pas de serveur distant spécifié" + +#: builtin/remote.c:1436 +msgid "manipulate push URLs" +msgstr "manipuler les URLs push" + +#: builtin/remote.c:1438 +msgid "add URL" +msgstr "ajouter une URL" + +#: builtin/remote.c:1440 +msgid "delete URLs" +msgstr "supprimer des URLs" + +#: builtin/remote.c:1447 +msgid "--add --delete doesn't make sense" +msgstr "--add --delete n'a aucun sens" + +#: builtin/remote.c:1487 +#, c-format +msgid "Invalid old URL pattern: %s" +msgstr "Motif d'URL ancien invalide : %s" + +#: builtin/remote.c:1495 +#, c-format +msgid "No such URL found: %s" +msgstr "Pas d'URL trouvée : %s" + +#: builtin/remote.c:1497 +msgid "Will not delete all non-push URLs" +msgstr "" + +#: builtin/remote.c:1569 +msgid "be verbose; must be placed before a subcommand" +msgstr "être verbeux : doit être placé avant une sous-commande" + +#: builtin/replace.c:17 +msgid "git replace [-f] <object> <replacement>" +msgstr "git replace [-f] <objet> <remplacement>" + +#: builtin/replace.c:18 +msgid "git replace -d <object>..." +msgstr "git replace -d <objet>..." + +#: builtin/replace.c:19 +msgid "git replace -l [<pattern>]" +msgstr "git replace -l [<motif>]" + +#: builtin/replace.c:121 +msgid "list replace refs" +msgstr "afficher les références de remplacement" + +#: builtin/replace.c:122 +msgid "delete replace refs" +msgstr "supprimer les références de remplacement" + +#: builtin/replace.c:123 +msgid "replace the ref if it exists" +msgstr "remplacer la référence si elle existe" + +#: builtin/rerere.c:11 +msgid "git rerere [clear | forget path... | status | remaining | diff | gc]" +msgstr "git rerere [clear | forget chemin... | status | remaining | diff | gc]" + +#: builtin/rerere.c:56 +msgid "register clean resolutions in index" +msgstr "enregistrer des résolutions propres dans l'index" + +#: builtin/reset.c:25 +msgid "" +"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]" +msgstr "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]" + +#: builtin/reset.c:26 +msgid "git reset [-q] <tree-ish> [--] <paths>..." +msgstr "git reset [-q] <arbre> [--] <chemins>..." + +#: builtin/reset.c:27 +msgid "git reset --patch [<tree-ish>] [--] [<paths>...]" +msgstr "git reset --patch [<arbre>] [--] [<chemins>...]" + +#: builtin/reset.c:33 +msgid "mixed" +msgstr "mixed" + +#: builtin/reset.c:33 +msgid "soft" +msgstr "soft" + +#: builtin/reset.c:33 +msgid "hard" +msgstr "hard" + +#: builtin/reset.c:33 +msgid "merge" +msgstr "merge" + +#: builtin/reset.c:33 +msgid "keep" +msgstr "keep" + +#: builtin/reset.c:73 +msgid "You do not have a valid HEAD." +msgstr "Vous n'avez pas une HEAD valide." + +#: builtin/reset.c:75 +msgid "Failed to find tree of HEAD." +msgstr "Impossible de trouver l'arbre pour HEAD." + +#: builtin/reset.c:81 +#, c-format +msgid "Failed to find tree of %s." +msgstr "Impossible de trouver l'arbre pour %s." + +#: builtin/reset.c:98 +#, c-format +msgid "HEAD is now at %s" +msgstr "HEAD est maintenant à %s" + +#: builtin/reset.c:169 +#, c-format +msgid "Cannot do a %s reset in the middle of a merge." +msgstr "Impossible de faire un \"reset %s\" au milieu d'une fusion." + +#: builtin/reset.c:248 +msgid "be quiet, only report errors" +msgstr "être silencieux, afficher seulement les erreurs" + +#: builtin/reset.c:250 +msgid "reset HEAD and index" +msgstr "réinitialiser HEAD et l'index" + +#: builtin/reset.c:251 +msgid "reset only HEAD" +msgstr "réinitialiser seulement HEAD" + +#: builtin/reset.c:253 builtin/reset.c:255 +msgid "reset HEAD, index and working tree" +msgstr "réinitialiser HEAD, l'index et la copie de travail" + +#: builtin/reset.c:257 +msgid "reset HEAD but keep local changes" +msgstr "réinitialiser HEAD mais garder les changements locaux" + +#: builtin/reset.c:275 +#, c-format +msgid "Failed to resolve '%s' as a valid revision." +msgstr "Échec de résolution de '%s' comme une révision valide." + +#: builtin/reset.c:278 builtin/reset.c:286 +#, c-format +msgid "Could not parse object '%s'." +msgstr "Impossible d'analyser l'objet '%s'." + +#: builtin/reset.c:283 +#, c-format +msgid "Failed to resolve '%s' as a valid tree." +msgstr "Échec de résolution de '%s' comme un arbre valide." + +#: builtin/reset.c:292 +msgid "--patch is incompatible with --{hard,mixed,soft}" +msgstr "--patch est incompatible avec --{hard,mixed,soft}" + +#: builtin/reset.c:301 +msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." +msgstr "--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' à la place." + +#: builtin/reset.c:303 +#, c-format +msgid "Cannot do %s reset with paths." +msgstr "Impossible de faire un \"%s reset\" avec des chemins." + +#: builtin/reset.c:313 +#, c-format +msgid "%s reset is not allowed in a bare repository" +msgstr "Le \"%s reset\" n'est pas permis dans un dépôt nu" + +#: builtin/reset.c:333 +#, c-format +msgid "Could not reset index file to revision '%s'." +msgstr "Impossible de réinitialiser le fichier d'index à la révision '%s'." + +#: builtin/reset.c:339 +msgid "Unstaged changes after reset:" +msgstr "Modifications non indexées après reset :" + +#: builtin/reset.c:344 +msgid "Could not write new index file." +msgstr "Impossible d'écrire le nouveau fichier d'index." + +#: builtin/rev-parse.c:339 +msgid "git rev-parse --parseopt [options] -- [<args>...]" +msgstr "git rev-parse --parseopt [options] -- [<arguments>...]" + +#: builtin/rev-parse.c:344 +msgid "keep the `--` passed as an arg" +msgstr "garder le `--` passé en argument" + +#: builtin/rev-parse.c:346 +msgid "stop parsing after the first non-option argument" +msgstr "arrêt de l'analyse après le premier argument qui n'est pas une option" + +#: builtin/rev-parse.c:464 +msgid "" +"git rev-parse --parseopt [options] -- [<args>...]\n" +" or: git rev-parse --sq-quote [<arg>...]\n" +" or: git rev-parse [options] [<arg>...]\n" +"\n" +"Run \"git rev-parse --parseopt -h\" for more information on the first usage." +msgstr "" +"git rev-parse --parseopt [options] -- [<arguments>...]\n" +" ou : git rev-parse --sq-quote [<argument>...]\n" +" ou : git rev-parse [options] [<argument>...]\n" +"\n" +"Lancez \"git rev-parse --parseopt -h\" pour plus d'information sur l'utilisation principale." + +#: builtin/revert.c:22 +msgid "git revert [options] <commit-ish>..." +msgstr "git revert [options] <commit>..." + +#: builtin/revert.c:23 +msgid "git revert <subcommand>" +msgstr "git revert <sous-commande>" + +#: builtin/revert.c:28 +msgid "git cherry-pick [options] <commit-ish>..." +msgstr "git cherry-pick [options] <commit>..." + +#: builtin/revert.c:29 +msgid "git cherry-pick <subcommand>" +msgstr "git cherry-pick <sous-commande>" + +#: builtin/revert.c:70 builtin/revert.c:92 +#, c-format +msgid "%s: %s cannot be used with %s" +msgstr "%s : %s ne peut pas être utilisé avec %s" + +#: builtin/revert.c:103 +msgid "end revert or cherry-pick sequence" +msgstr "mettre fin au retour ou picorage" + +#: builtin/revert.c:104 +msgid "resume revert or cherry-pick sequence" +msgstr "reprendre le retour ou picorage" + +#: builtin/revert.c:105 +msgid "cancel revert or cherry-pick sequence" +msgstr "annuler le retour ou picorage" + +#: builtin/revert.c:106 +msgid "don't automatically commit" +msgstr "ne pas valider automatiquement" + +#: builtin/revert.c:107 +msgid "edit the commit message" +msgstr "éditer le message de validation" + +#: builtin/revert.c:110 +msgid "parent number" +msgstr "numéro de parent" + +#: builtin/revert.c:112 +msgid "merge strategy" +msgstr "stratégie de fusion" + +#: builtin/revert.c:113 +msgid "option" +msgstr "option" + +#: builtin/revert.c:114 +msgid "option for merge strategy" +msgstr "option pour la stratégie de fusion" + +#: builtin/revert.c:125 +msgid "append commit name" +msgstr "ajouter le nom de validation" + +#: builtin/revert.c:126 +msgid "allow fast-forward" +msgstr "autoriser l'avance rapide" + +#: builtin/revert.c:127 +msgid "preserve initially empty commits" +msgstr "préserver les validations vides initialement" + +#: builtin/revert.c:128 +msgid "allow commits with empty messages" +msgstr "autoriser les validations avec des messages vides" + +#: builtin/revert.c:129 +msgid "keep redundant, empty commits" +msgstr "garder les validations redondantes, vides" + +#: builtin/revert.c:133 +msgid "program error" +msgstr "erreur du programme" + +#: builtin/revert.c:223 +msgid "revert failed" +msgstr "revert a échoué" + +#: builtin/revert.c:238 +msgid "cherry-pick failed" +msgstr "le picorage a échoué" + +#: builtin/rm.c:15 +msgid "git rm [options] [--] <file>..." +msgstr "git rm [options] [--] <fichier>..." + +#: builtin/rm.c:64 builtin/rm.c:186 +#, c-format +msgid "" +"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"(use 'rm -rf' if you really want to remove it including all of its history)" +msgstr "" +"le sous-module '%s' (ou un des sous-modules imbriqués) utilise un répertoire .git\n" +"(utilisez 'rm -rf' si vous souhaitez vraiment le supprimer avec tout son historique)" + +#: builtin/rm.c:174 +#, c-format +msgid "" +"'%s' has staged content different from both the file and the HEAD\n" +"(use -f to force removal)" +msgstr "" +"'%s' a du contenu indexé différent du fichier et de HEAD\n" +"(utilisez -f pour forcer la suppression)" + +#: builtin/rm.c:180 +#, c-format +msgid "" +"'%s' has changes staged in the index\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" +"'%s' a des changements dans l'index\n" +"(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)" + +#: builtin/rm.c:191 +#, c-format +msgid "" +"'%s' has local modifications\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" +"'%s' a des modifications locales\n" +"(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)" + +#: builtin/rm.c:207 +msgid "do not list removed files" +msgstr "ne pas afficher les fichiers supprimés" + +#: builtin/rm.c:208 +msgid "only remove from the index" +msgstr "supprimer seulement de l'index" + +#: builtin/rm.c:209 +msgid "override the up-to-date check" +msgstr "outrepasser la vérification des fichiers à jour" + +#: builtin/rm.c:210 +msgid "allow recursive removal" +msgstr "autoriser la suppression récursive" + +#: builtin/rm.c:212 +msgid "exit with a zero status even if nothing matched" +msgstr "sortir avec un statut zéro même si rien ne correspondait" + +#: builtin/rm.c:283 +#, c-format +msgid "not removing '%s' recursively without -r" +msgstr "pas de suppression récursive de '%s' sans -r" + +#: builtin/rm.c:322 +#, c-format +msgid "git rm: unable to remove %s" +msgstr "git rm : impossible de supprimer %s" + +#: builtin/shortlog.c:13 +msgid "git shortlog [<options>] [<revision range>] [[--] [<path>...]]" +msgstr "git shortlog [<options>] [<intervalle révisions>] [[--] [<chemin>...]]" + +#: builtin/shortlog.c:131 +#, c-format +msgid "Missing author: %s" +msgstr "Auteur manquant : %s" + +#: builtin/shortlog.c:227 +msgid "sort output according to the number of commits per author" +msgstr "trier la sortie sur le nombre de validations par auteur" + +#: builtin/shortlog.c:229 +msgid "Suppress commit descriptions, only provides commit count" +msgstr "Supprimer les descriptions de validation, fournit seulement le nombre de validations" + +#: builtin/shortlog.c:231 +msgid "Show the email address of each author" +msgstr "Afficher l'adresse e-mail de chaque auteur" + +#: builtin/shortlog.c:232 +msgid "w[,i1[,i2]]" +msgstr "w[,i1[,i2]]" + +#: builtin/shortlog.c:233 +msgid "Linewrap output" +msgstr "Couper les lignes" + +#: builtin/show-branch.c:9 +msgid "" +"git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--" +"current] [--color[=<when>] | --no-color] [--sparse] [--more=<n> | --list | --" +"independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<rev> | " +"<glob>)...]" +msgstr "git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--current] [--color[=<quand>] | --no-color] [--sparse] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<révision> | <glob>)...]" + +#: builtin/show-branch.c:10 +msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]" +msgstr "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<référence>]" + +#: builtin/show-branch.c:650 +msgid "show remote-tracking and local branches" +msgstr "afficher les branches de suivi distantes et les branches locales" + +#: builtin/show-branch.c:652 +msgid "show remote-tracking branches" +msgstr "afficher les branches de suivi distantes" + +#: builtin/show-branch.c:654 +msgid "color '*!+-' corresponding to the branch" +msgstr "couleur '*!+-' correspondant à la branche" + +#: builtin/show-branch.c:656 +msgid "show <n> more commits after the common ancestor" +msgstr "afficher <n> validations de plus après l'ancêtre commun" + +#: builtin/show-branch.c:658 +msgid "synonym to more=-1" +msgstr "synonyme de more=-1" + +#: builtin/show-branch.c:659 +msgid "suppress naming strings" +msgstr "" + +#: builtin/show-branch.c:661 +msgid "include the current branch" +msgstr "inclure la branche courante" + +#: builtin/show-branch.c:663 +msgid "name commits with their object names" +msgstr "nommer les validations avec leurs noms d'objet" + +#: builtin/show-branch.c:665 +msgid "show possible merge bases" +msgstr "afficher les bases possibles de fusion" + +#: builtin/show-branch.c:667 +msgid "show refs unreachable from any other ref" +msgstr "afficher les références non accessibles depuis toute autre référence" + +#: builtin/show-branch.c:669 +msgid "show commits in topological order" +msgstr "afficher les validations dans l'ordre topologique" + +#: builtin/show-branch.c:671 +msgid "show only commits not on the first branch" +msgstr "afficher seulement les validations qui ne sont pas sur la première branche" + +#: builtin/show-branch.c:673 +msgid "show merges reachable from only one tip" +msgstr "afficher les fusions accessibles depuis une seule pointe" + +#: builtin/show-branch.c:675 +msgid "show commits where no parent comes before its children" +msgstr "afficher les validations où aucun parent ne vient avant ses enfants" + +#: builtin/show-branch.c:677 +msgid "<n>[,<base>]" +msgstr "<n>[,<base>]" + +#: builtin/show-branch.c:678 +msgid "show <n> most recent ref-log entries starting at base" +msgstr "afficher les <n> plus récentes entrées de ref-log en commençant à la base" + +#: builtin/show-ref.c:10 +msgid "" +"git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--" +"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] " +msgstr "git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [motif*] " + +#: builtin/show-ref.c:11 +msgid "git show-ref --exclude-existing[=pattern] < ref-list" +msgstr "git show-ref --exclude-existing[=motif] < liste-références" + +#: builtin/show-ref.c:165 +msgid "only show tags (can be combined with heads)" +msgstr "afficher seulement les étiquettes (peut être combiné avec des têtes)" + +#: builtin/show-ref.c:166 +msgid "only show heads (can be combined with tags)" +msgstr "afficher seulement les têtes (peut être combiné avec des étiquettes)" + +#: builtin/show-ref.c:167 +msgid "stricter reference checking, requires exact ref path" +msgstr "vérification de référence plus stricte, requiert un chemin de référence exact" + +#: builtin/show-ref.c:170 builtin/show-ref.c:172 +msgid "show the HEAD reference" +msgstr "afficher la référence HEAD" + +#: builtin/show-ref.c:174 +msgid "dereference tags into object IDs" +msgstr "déréférencer les étiquettes en IDs d'objet" + +#: builtin/show-ref.c:176 +msgid "only show SHA1 hash using <n> digits" +msgstr "afficher seulement le hachage SHA1 en utilisant <n> chiffres" + +#: builtin/show-ref.c:180 +msgid "do not print results to stdout (useful with --verify)" +msgstr "ne pas afficher les résultats sur la sortie standard (pratique avec --verify)" + +#: builtin/show-ref.c:182 +msgid "show refs from stdin that aren't in local repository" +msgstr "afficher les références de l'entrée standard qui ne sont pas dans le dépôt local" + +#: builtin/symbolic-ref.c:7 +msgid "git symbolic-ref [options] name [ref]" +msgstr "git symbolic-ref [options] nom [référence]" + +#: builtin/symbolic-ref.c:8 +msgid "git symbolic-ref -d [-q] name" +msgstr "git symbolic-ref -d [-q] nom" + +#: builtin/symbolic-ref.c:40 +msgid "suppress error message for non-symbolic (detached) refs" +msgstr "supprimer le message d'erreur pour une référence non symbolique (détachée)" + +#: builtin/symbolic-ref.c:41 +msgid "delete symbolic ref" +msgstr "supprimer la référence symbolique" + +#: builtin/symbolic-ref.c:42 +msgid "shorten ref output" +msgstr "raccourcir l'affichage de la référence" + +#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18 +msgid "reason" +msgstr "raison" + +#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18 +msgid "reason of the update" +msgstr "raison de la mise à jour" + +#: builtin/tag.c:22 +msgid "" +"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]" +msgstr "git tag [-a|-s|-u <id-clé>] [-f] [-m <msg>|-F <file>] <nométiquette> [<head>]" + +#: builtin/tag.c:23 +msgid "git tag -d <tagname>..." +msgstr "git tag -d <nométiquette>..." + +#: builtin/tag.c:24 +msgid "" +"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \n" +"\t\t[<pattern>...]" +msgstr "" +"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <objet>] \n" +"\t\t[<motif>...]" + +#: builtin/tag.c:26 +msgid "git tag -v <tagname>..." +msgstr "git tag -v <nométiquette>..." + +#: builtin/tag.c:60 +#, c-format +msgid "malformed object at '%s'" +msgstr "objet malformé à '%s'" + +#: builtin/tag.c:207 +#, c-format +msgid "tag name too long: %.*s..." +msgstr "nom d'étiquette trop long : %.*s..." + +#: builtin/tag.c:212 +#, c-format +msgid "tag '%s' not found." +msgstr "étiquette '%s' non trouvée." + +#: builtin/tag.c:227 +#, c-format +msgid "Deleted tag '%s' (was %s)\n" +msgstr "Étiquette '%s' supprimée (elle était %s)\n" + +#: builtin/tag.c:239 +#, c-format +msgid "could not verify the tag '%s'" +msgstr "impossible de vérifier l'étiquette '%s'" + +#: builtin/tag.c:249 +#, c-format +msgid "" +"\n" +"Write a tag message\n" +"Lines starting with '%c' will be ignored.\n" +msgstr "" +"\n" +"Écrire un message pour l'étiquette\n" +"Les lignes commençant par '%c' seront ignorées.\n" + +#: builtin/tag.c:253 +#, c-format +msgid "" +"\n" +"Write a tag message\n" +"Lines starting with '%c' will be kept; you may remove them yourself if you " +"want to.\n" +msgstr "" +"\n" +"Écrire un message pour l'étiquette\n" +"Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-même si vous le souhaitez.\n" + +#: builtin/tag.c:292 +msgid "unable to sign the tag" +msgstr "impossible de signer l'étiquette" + +#: builtin/tag.c:294 +msgid "unable to write tag file" +msgstr "impossible d'écrire le fichier d'étiquettes" + +#: builtin/tag.c:319 +msgid "bad object type." +msgstr "mauvais type d'objet." + +#: builtin/tag.c:332 +msgid "tag header too big." +msgstr "en-tête d'étiquette trop gros." + +#: builtin/tag.c:368 +msgid "no tag message?" +msgstr "pas de message pour l'étiquette ?" + +#: builtin/tag.c:374 +#, c-format +msgid "The tag message has been left in %s\n" +msgstr "Le message pour l'étiquette a été laissé dans %s\n" + +#: builtin/tag.c:423 +msgid "switch 'points-at' requires an object" +msgstr "le commutateur 'points-at' requiert un objet" + +#: builtin/tag.c:425 +#, c-format +msgid "malformed object name '%s'" +msgstr "nom d'objet malformé '%s'" + +#: builtin/tag.c:445 +msgid "list tag names" +msgstr "afficher les noms des étiquettes" + +#: builtin/tag.c:447 +msgid "print <n> lines of each tag message" +msgstr "affiche <n> lignes de chaque message d'étiquette" + +#: builtin/tag.c:449 +msgid "delete tags" +msgstr "supprimer des étiquettes" + +#: builtin/tag.c:450 +msgid "verify tags" +msgstr "vérifier des étiquettes" + +#: builtin/tag.c:452 +msgid "Tag creation options" +msgstr "Options de création de l'étiquette" + +#: builtin/tag.c:454 +msgid "annotated tag, needs a message" +msgstr "étiquette annotée, nécessite un message" + +#: builtin/tag.c:456 +msgid "tag message" +msgstr "message pour l'étiquette" + +#: builtin/tag.c:458 +msgid "annotated and GPG-signed tag" +msgstr "étiquette annotée et signée avec GPG" + +#: builtin/tag.c:462 +msgid "use another key to sign the tag" +msgstr "utiliser une autre clé pour signer l'étiquette" + +#: builtin/tag.c:463 +msgid "replace the tag if exists" +msgstr "remplacer l'étiquette si elle existe" + +#: builtin/tag.c:464 +msgid "show tag list in columns" +msgstr "afficher la liste des étiquettes sous forme de colonnes" + +#: builtin/tag.c:466 +msgid "Tag listing options" +msgstr "Options d'affichage des étiquettes" + +#: builtin/tag.c:469 +msgid "print only tags that contain the commit" +msgstr "afficher seulement les étiquettes qui contiennent la validation" + +#: builtin/tag.c:475 +msgid "print only tags of the object" +msgstr "afficher seulement les étiquettes de l'objet" + +#: builtin/tag.c:504 +msgid "--column and -n are incompatible" +msgstr "--column et -n sont incompatibles" + +#: builtin/tag.c:521 +msgid "-n option is only allowed with -l." +msgstr "l'option -n est autorisée seulement avec -l." + +#: builtin/tag.c:523 +msgid "--contains option is only allowed with -l." +msgstr "l'option --contains est autorisée seulement avec -l." + +#: builtin/tag.c:525 +msgid "--points-at option is only allowed with -l." +msgstr "l'option --points-at est autorisée seulement avec -l." + +#: builtin/tag.c:533 +msgid "only one -F or -m option is allowed." +msgstr "une seule option -F ou -m est autorisée." + +#: builtin/tag.c:553 +msgid "too many params" +msgstr "trop de paramètres" + +#: builtin/tag.c:559 +#, c-format +msgid "'%s' is not a valid tag name." +msgstr "'%s' n'est pas un nom d'étiquette valide." + +#: builtin/tag.c:564 +#, c-format +msgid "tag '%s' already exists" +msgstr "l'étiquette '%s' existe déjà " + +#: builtin/tag.c:582 +#, c-format +msgid "%s: cannot lock the ref" +msgstr "%s : impossible de verrouiller la référence" + +#: builtin/tag.c:584 +#, c-format +msgid "%s: cannot update the ref" +msgstr "%s : impossible de mettre à jour la référence" + +#: builtin/tag.c:586 +#, c-format +msgid "Updated tag '%s' (was %s)\n" +msgstr "Étiquette '%s' mise à jour (elle était %s)\n" + +#: builtin/update-index.c:401 +msgid "git update-index [options] [--] [<file>...]" +msgstr "git update-index [options] [--] [<fichier>...]" + +#: builtin/update-index.c:718 +msgid "continue refresh even when index needs update" +msgstr "continuer de rafraîchir même si l'index a besoin d'une mise à jour" + +#: builtin/update-index.c:721 +msgid "refresh: ignore submodules" +msgstr "rafraîchir : ignorer les sous-modules" + +#: builtin/update-index.c:724 +msgid "do not ignore new files" +msgstr "ne pas ignorer les nouveaux fichiers" + +#: builtin/update-index.c:726 +msgid "let files replace directories and vice-versa" +msgstr "laisser les fichiers remplacer des répertoires et vice-versa" + +#: builtin/update-index.c:728 +msgid "notice files missing from worktree" +msgstr "aviser des fichiers manquants dans la copie de travail" + +#: builtin/update-index.c:730 +msgid "refresh even if index contains unmerged entries" +msgstr "rafraîchir même si l'index contient des entrées non fusionnées" + +#: builtin/update-index.c:733 +msgid "refresh stat information" +msgstr "rafraîchir l'information de stat" + +#: builtin/update-index.c:737 +msgid "like --refresh, but ignore assume-unchanged setting" +msgstr "comme --refresh, mais en ignorant l'option assume-unchanged" + +#: builtin/update-index.c:741 +msgid "<mode> <object> <path>" +msgstr "<mode> <objet> <chemin>" + +#: builtin/update-index.c:742 +msgid "add the specified entry to the index" +msgstr "ajouter l'entrée spécifiée dans l'index" + +#: builtin/update-index.c:746 +msgid "(+/-)x" +msgstr "(+/-)x" + +#: builtin/update-index.c:747 +msgid "override the executable bit of the listed files" +msgstr "outrepasser le bit exécutable pour les fichiers listés" + +#: builtin/update-index.c:751 +msgid "mark files as \"not changing\"" +msgstr "marquer les fichiers comme \"non changeants\"" + +#: builtin/update-index.c:754 +msgid "clear assumed-unchanged bit" +msgstr "" + +#: builtin/update-index.c:757 +msgid "mark files as \"index-only\"" +msgstr "marquer les fichiers comme \"index seulement\"" + +#: builtin/update-index.c:760 +msgid "clear skip-worktree bit" +msgstr "" + +#: builtin/update-index.c:763 +msgid "add to index only; do not add content to object database" +msgstr "ajouter seulement à l'index ; ne pas ajouter le contenu dans la base de données des objets" + +#: builtin/update-index.c:765 +msgid "remove named paths even if present in worktree" +msgstr "supprimer les chemins nommés même s'ils sont présents dans la copie de travail" + +#: builtin/update-index.c:767 +msgid "with --stdin: input lines are terminated by null bytes" +msgstr "avec --stdin : les lignes en entrée sont terminées par des octets nuls" + +#: builtin/update-index.c:769 +msgid "read list of paths to be updated from standard input" +msgstr "lire la liste des chemins à mettre à jour depuis l'entrée standard" + +#: builtin/update-index.c:773 +msgid "add entries from standard input to the index" +msgstr "ajouter les entrées depuis l'entrée standard à l'index" + +#: builtin/update-index.c:777 +msgid "repopulate stages #2 and #3 for the listed paths" +msgstr "repeupler les étapes n°2 et n°3 pour les chemins listés" + +#: builtin/update-index.c:781 +msgid "only update entries that differ from HEAD" +msgstr "mettre à jour seulement les entrées qui diffèrent de HEAD" + +#: builtin/update-index.c:785 +msgid "ignore files missing from worktree" +msgstr "ignorer les fichiers manquants dans la copie de travail" + +#: builtin/update-index.c:788 +msgid "report actions to standard output" +msgstr "afficher les actions sur la sortie standard" + +#: builtin/update-index.c:790 +msgid "(for porcelains) forget saved unresolved conflicts" +msgstr "(pour porcelaines) oublier les conflits sauvés et non résolus" + +#: builtin/update-index.c:794 +msgid "write index in this format" +msgstr "écrire l'index dans ce format" + +#: builtin/update-ref.c:7 +msgid "git update-ref [options] -d <refname> [<oldval>]" +msgstr "git update-ref [options] -d <nomréférence> [<anciennevaleur>]" + +#: builtin/update-ref.c:8 +msgid "git update-ref [options] <refname> <newval> [<oldval>]" +msgstr "git update-ref [options] <nomréférence> <nouvellevaleur> [<anciennevaleur>]" + +#: builtin/update-ref.c:19 +msgid "delete the reference" +msgstr "supprimer la référence" + +#: builtin/update-ref.c:21 +msgid "update <refname> not the one it points to" +msgstr "" + +#: builtin/update-server-info.c:6 +msgid "git update-server-info [--force]" +msgstr "git update-server-info [--force]" + +#: builtin/update-server-info.c:14 +msgid "update the info files from scratch" +msgstr "mettre à jour les fichiers d'information à partir de zéro" + +#: builtin/verify-pack.c:56 +msgid "git verify-pack [-v|--verbose] [-s|--stat-only] <pack>..." +msgstr "git verify-pack [-v|--verbose] [-s|--stat-only] <pack>..." + +#: builtin/verify-pack.c:66 +msgid "verbose" +msgstr "verbeux" + +#: builtin/verify-pack.c:68 +msgid "show statistics only" +msgstr "afficher seulement les statistiques" + +#: builtin/verify-tag.c:17 +msgid "git verify-tag [-v|--verbose] <tag>..." +msgstr "git verify-tag [-v|--verbose] <étiquette>..." + +#: builtin/verify-tag.c:73 +msgid "print tag contents" +msgstr "afficher le contenu de l'étiquette" + +#: builtin/write-tree.c:13 +msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]" +msgstr "git write-tree [--missing-ok] [--prefix=<préfixe>/]" + +#: builtin/write-tree.c:26 +msgid "<prefix>/" +msgstr "<préfixe>/" + +#: builtin/write-tree.c:27 +msgid "write tree object for a subdirectory <prefix>" +msgstr "écrire l'objet arbre pour un sous-répertoire <préfixe>" + +#: builtin/write-tree.c:30 +msgid "only useful for debugging" +msgstr "seulement utile pour le débogage" + +#: git.c:16 +msgid "" +"'git help -a' and 'git help -g' lists available subcommands and some\n" +"concept guides. See 'git help <command>' or 'git help <concept>'\n" +"to read about a specific subcommand or concept." +msgstr "" +"'git help -a' et 'git help -g' listent les sous-commandes disponibles et\n" +"quelques concepts. Voir 'git help <command>' ou 'git help <concept>'\n" +"pour en lire plus à propos d'une commande spécifique ou d'un concept." + +#: parse-options.h:156 +msgid "no-op (backward compatibility)" +msgstr "sans action (rétrocompatibilité)" + +#: parse-options.h:232 +msgid "be more verbose" +msgstr "être plus verbeux" + +#: parse-options.h:234 +msgid "be more quiet" +msgstr "être plus silencieux" + +#: parse-options.h:240 +msgid "use <n> digits to display SHA-1s" +msgstr "utiliser <n> chiffres pour afficher les SHA-1s" + +#: common-cmds.h:8 +msgid "Add file contents to the index" +msgstr "Ajouter le contenu du fichier dans l'index" + +#: common-cmds.h:9 +msgid "Find by binary search the change that introduced a bug" +msgstr "Rechercher de manière binaire le changement qui a introduit un bogue" + +#: common-cmds.h:10 +msgid "List, create, or delete branches" +msgstr "Lister, créer ou supprimer des branches" + +#: common-cmds.h:11 +msgid "Checkout a branch or paths to the working tree" +msgstr "Extraire une branche ou des chemins dans la copie de travail" + +#: common-cmds.h:12 +msgid "Clone a repository into a new directory" +msgstr "Cloner un dépôt dans un nouveau répertoire" + +#: common-cmds.h:13 +msgid "Record changes to the repository" +msgstr "Enregistrer les changements dans le dépôt" + +#: common-cmds.h:14 +msgid "Show changes between commits, commit and working tree, etc" +msgstr "Afficher les changements entre les validations, entre validation et copie de travail, etc" + +#: common-cmds.h:15 +msgid "Download objects and refs from another repository" +msgstr "Télécharger les objets et références depuis un autre dépôt" + +#: common-cmds.h:16 +msgid "Print lines matching a pattern" +msgstr "Afficher les lignes correspondant à un motif" + +#: common-cmds.h:17 +msgid "Create an empty Git repository or reinitialize an existing one" +msgstr "Créer un dépôt Git vide ou réinitialiser un existant" + +#: common-cmds.h:18 +msgid "Show commit logs" +msgstr "Afficher l'historique des validations" + +#: common-cmds.h:19 +msgid "Join two or more development histories together" +msgstr "Joindre deux ou plusieurs historiques de développement ensemble" + +#: common-cmds.h:20 +msgid "Move or rename a file, a directory, or a symlink" +msgstr "Déplacer ou renommer un fichier, un répertoire, ou un lien symbolique" + +#: common-cmds.h:21 +msgid "Fetch from and merge with another repository or a local branch" +msgstr "Rapatrier et fusionner avec un autre dépôt ou une branche locale" + +#: common-cmds.h:22 +msgid "Update remote refs along with associated objects" +msgstr "Mettre à jour les références distantes ainsi que les objets associés" + +#: common-cmds.h:23 +msgid "Forward-port local commits to the updated upstream head" +msgstr "Reporter en avant les validations locales dans la tête en amont mise à jour" + +#: common-cmds.h:24 +msgid "Reset current HEAD to the specified state" +msgstr "Réinitialiser la HEAD courante à l'état spécifié" + +#: common-cmds.h:25 +msgid "Remove files from the working tree and from the index" +msgstr "Supprimer les fichiers de la copie de travail et de l'index" + +#: common-cmds.h:26 +msgid "Show various types of objects" +msgstr "Afficher différents types d'objects" + +#: common-cmds.h:27 +msgid "Show the working tree status" +msgstr "Afficher le statut de la copie de travail" + +#: common-cmds.h:28 +msgid "Create, list, delete or verify a tag object signed with GPG" +msgstr "Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG" + +#: git-am.sh:50 +msgid "You need to set your committer info first" +msgstr "Vous devez d'abord définir vos informations de validateur" + +#: git-am.sh:95 +msgid "" +"You seem to have moved HEAD since the last 'am' failure.\n" +"Not rewinding to ORIG_HEAD" +msgstr "" +"Vous semblez avoir déplacé la HEAD depuis le dernier échec de 'am'.\n" +"Pas de retour à ORIG_HEAD" + +#: git-am.sh:105 +#, sh-format +msgid "" +"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" +"To restore the original branch and stop patching, run \"$cmdline --abort\"." +msgstr "" +"Lorsque vous aurez résolu ce problème, lancez \"$cmdline --resolved\".\n" +"Si vous préférez sauter ce patch, lancez \"$cmdline --skip\" à la place.\n" +"Pour restaurer la branche d'origine et stopper le patchage, lancez \"$cmdline --abort\"." + +#: git-am.sh:121 +msgid "Cannot fall back to three-way merge." +msgstr "Impossible de retourner à une fusion 3-way." + +#: git-am.sh:137 +msgid "Repository lacks necessary blobs to fall back on 3-way merge." +msgstr "Le dépôt n'a pas les blobs nécessaires pour un retour à une fusion 3-way." + +#: git-am.sh:139 +msgid "Using index info to reconstruct a base tree..." +msgstr "Utilisation de l'information de l'index pour reconstruire un arbre de base..." + +#: git-am.sh:154 +msgid "" +"Did you hand edit your patch?\n" +"It does not apply to blobs recorded in its index." +msgstr "" +"Avez-vous édité le patch à la main ?\n" +"Il ne s'applique pas aux blobs enregistrés dans son index." + +#: git-am.sh:163 +msgid "Falling back to patching base and 3-way merge..." +msgstr "Retour à un patch de la base et fusion 3-way..." + +#: git-am.sh:179 +msgid "Failed to merge in the changes." +msgstr "Échec de fusion dans les changements." + +#: git-am.sh:274 +msgid "Only one StGIT patch series can be applied at once" +msgstr "Seulement une série de patches StGIT peut être appliquée à la fois" + +#: git-am.sh:361 +#, sh-format +msgid "Patch format $patch_format is not supported." +msgstr "Le format de patch $patch_format n'est pas supporté." + +#: git-am.sh:363 +msgid "Patch format detection failed." +msgstr "Échec de détection du format du patch." + +#: git-am.sh:389 +msgid "" +"The -b/--binary option has been a no-op for long time, and\n" +"it will be removed. Please do not use it anymore." +msgstr "" +"L'option -b/--binary ne fait plus rien depuis longtemps,\n" +"et elle sera supprimée. Merci de ne plus l'utiliser." + +#: git-am.sh:477 +#, sh-format +msgid "previous rebase directory $dotest still exists but mbox given." +msgstr "le répertoire précédent de rebasage $dotest existe toujours mais mbox donnée." + +#: git-am.sh:482 +msgid "Please make up your mind. --skip or --abort?" +msgstr "Décidez-vous. --skip ou --abort ?" + +#: git-am.sh:509 +msgid "Resolve operation not in progress, we are not resuming." +msgstr "Pas de résolution de l'opération en cours, nous ne sommes pas dans une reprise." + +#: git-am.sh:575 +#, sh-format +msgid "Dirty index: cannot apply patches (dirty: $files)" +msgstr "Index sale : impossible d'appliquer des patches (sales : $files)" + +#: git-am.sh:679 +#, sh-format +msgid "" +"Patch is empty. Was it split wrong?\n" +"If you would prefer to skip this patch, instead run \"$cmdline --skip\".\n" +"To restore the original branch and stop patching run \"$cmdline --abort\"." +msgstr "" +"Le patch est vide. Était-il mal découpé ?\n" +"Si vous préférez sauter ce patch, lancez plutôt \"$cmdline --skip\".\n" +"Pour restaurer la branche d'origine et stopper le patchage, lancez \"$cmdline --abort\"." + +#: git-am.sh:706 +msgid "Patch does not have a valid e-mail address." +msgstr "Le patch n'a pas d'adresse e-mail valide." + +#: git-am.sh:753 +msgid "cannot be interactive without stdin connected to a terminal." +msgstr "impossible d'être interactif sans entrée standard connectée à un terminal." + +#: git-am.sh:757 +msgid "Commit Body is:" +msgstr "Le corps de la validation est :" + +#. 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:764 +msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " +msgstr "Appliquer ? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " + +#: git-am.sh:800 +#, sh-format +msgid "Applying: $FIRSTLINE" +msgstr "Application : $FIRSTLINE" + +#: git-am.sh:821 +msgid "" +"No changes - did you forget to use 'git add'?\n" +"If there is nothing left to stage, chances are that something else\n" +"already introduced the same changes; you might want to skip this patch." +msgstr "" + +#: git-am.sh:829 +msgid "" +"You still have unmerged paths in your index\n" +"did you forget to use 'git add'?" +msgstr "" +"Vous avez toujours des chemins non fusionnés dans votre index\n" +"auriez-vous oublié de faire 'git add' ?" + +#: git-am.sh:845 +msgid "No changes -- Patch already applied." +msgstr "Pas de changement -- Patch déjà appliqué." + +#: git-am.sh:855 +#, sh-format +msgid "Patch failed at $msgnum $FIRSTLINE" +msgstr "Le patch a échoué à $msgnum $FIRSTLINE" + +#: git-am.sh:858 +#, sh-format +msgid "" +"The copy of the patch that failed is found in:\n" +" $dotest/patch" +msgstr "" +"La copie du patch qui a échoué se trouve dans :\n" +" $dotest/patch" + +#: git-am.sh:876 +msgid "applying to an empty history" +msgstr "application à un historique vide" + +#: git-bisect.sh:48 +msgid "You need to start by \"git bisect start\"" +msgstr "Vous devez démarrer avec \"git bisect start\"" + +#. 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 "Souhaitez-vous que je le fasse pour vous [Y/n] ? " + +#: git-bisect.sh:95 +#, sh-format +msgid "unrecognised option: '$arg'" +msgstr "option inconnue : '$arg'" + +#: git-bisect.sh:99 +#, sh-format +msgid "'$arg' does not appear to be a valid revision" +msgstr "'$arg' ne semble être une révision valide" + +#: git-bisect.sh:117 +msgid "Bad HEAD - I need a HEAD" +msgstr "Mauvaise HEAD - j'ai besoin d'une HEAD" + +#: git-bisect.sh:130 +#, sh-format +msgid "" +"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." +msgstr "L'extraction de '$start_head' a échoué. Essayez 'git bisect reset <branchevalide>'." + +#: git-bisect.sh:140 +msgid "won't bisect on seeked tree" +msgstr "" + +#: git-bisect.sh:144 +msgid "Bad HEAD - strange symbolic ref" +msgstr "Mauvaise HEAD - référence symbolique douteuse" + +#: git-bisect.sh:189 +#, sh-format +msgid "Bad bisect_write argument: $state" +msgstr "Mauvais argument pour bisect_write : $state" + +#: git-bisect.sh:218 +#, sh-format +msgid "Bad rev input: $arg" +msgstr "Mauvaise révision en entrée : $arg" + +#: git-bisect.sh:232 +msgid "Please call 'bisect_state' with at least one argument." +msgstr "Merci d'appeler 'bisect_state' avec au moins un argument." + +#: git-bisect.sh:244 +#, sh-format +msgid "Bad rev input: $rev" +msgstr "Mauvaise révision en entrée : $rev" + +#: git-bisect.sh:250 +msgid "'git bisect bad' can take only one argument." +msgstr "'git bisect bad' n'accepte qu'un seul argument." + +#. have bad but not good. we could bisect although +#. this is less optimum. +#: git-bisect.sh:273 +msgid "Warning: bisecting only with a bad commit." +msgstr "Attention : bissection avec seulement une mauvaise validation." + +#. 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 "Êtes-vous sûr [Y/n] ? " + +#: git-bisect.sh:289 +msgid "" +"You need to give me at least one good and one bad revisions.\n" +"(You can use \"git bisect bad\" and \"git bisect good\" for that.)" +msgstr "" +"Vous devez me donner au moins une bonne et une mauvaise révision.\n" +"(Vous pouvez utiliser \"git bisect bad\" et \"git bisect good\" pour cela.)" + +#: git-bisect.sh:292 +msgid "" +"You need to start by \"git bisect start\".\n" +"You then need to give me at least one good and one bad revisions.\n" +"(You can use \"git bisect bad\" and \"git bisect good\" for that.)" +msgstr "" +"Vous devez démarrer avec \"git bisect start\".\n" +"Puis vous devez me donner au moins une bonne et une mauvaise révision.\n" +"(Vous pouvez utiliser \"git bisect bad\" et \"git bisect good\" pour cela.)" + +#: git-bisect.sh:363 git-bisect.sh:490 +msgid "We are not bisecting." +msgstr "Pas de bissection en cours." + +#: git-bisect.sh:370 +#, sh-format +msgid "'$invalid' is not a valid commit" +msgstr "'$invalid' n'est pas une validation valide" + +#: git-bisect.sh:379 +#, sh-format +msgid "" +"Could not check out original HEAD '$branch'.\n" +"Try 'git bisect reset <commit>'." +msgstr "" +"Échec d'extraction de la HEAD d'origine '$branch'.\n" +"Essayez 'git bisect reset <commit>'." + +#: git-bisect.sh:406 +msgid "No logfile given" +msgstr "Pas de fichier de log donné" + +#: git-bisect.sh:407 +#, sh-format +msgid "cannot read $file for replaying" +msgstr "impossible de lire $file pour rejouer" + +#: git-bisect.sh:424 +msgid "?? what are you talking about?" +msgstr "?? de quoi parlez-vous ?" + +#: git-bisect.sh:436 +#, sh-format +msgid "running $command" +msgstr "lancement de $command" + +#: git-bisect.sh:443 +#, sh-format +msgid "" +"bisect run failed:\n" +"exit code $res from '$command' is < 0 or >= 128" +msgstr "" +"la bissection a échoué :\n" +"le code retour $res de '$command' est < 0 ou >= 128" + +#: git-bisect.sh:469 +msgid "bisect run cannot continue any more" +msgstr "la bissection ne peut plus continuer" + +#: git-bisect.sh:475 +#, sh-format +msgid "" +"bisect run failed:\n" +"'bisect_state $state' exited with error code $res" +msgstr "" +"la bissection a échoué :\n" +"'bisect_state $state' a retourné le code erreur $res" + +#: git-bisect.sh:482 +msgid "bisect run success" +msgstr "succès de la bissection" + +#: 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 "" +"Le pull n'est pas possible car vous avez des fichiers non fusionnés.\n" +"Merci de corriger dans votre copie de travail, et utilisez alors 'git add/rm <file>'\n" +"si nécessaire pour marquer comme résolu, ou utilisez 'git commit -a'." + +#: git-pull.sh:25 +msgid "Pull is not possible because you have unmerged files." +msgstr "Le pull n'est pas possible car vous avez des fichiers non fusionnés." + +#: git-pull.sh:203 +msgid "updating an unborn branch with changes added to the index" +msgstr "mise à jour d'une branche non encore créée avec les changements ajoutés dans l'index" + +#. The fetch involved updating the current branch. +#. The working tree and the index file is still based on the +#. $orig_head commit, but we are merging into $curr_head. +#. First update the working tree to match $curr_head. +#: git-pull.sh:235 +#, sh-format +msgid "" +"Warning: fetch updated the current branch head.\n" +"Warning: fast-forwarding your working tree from\n" +"Warning: commit $orig_head." +msgstr "" +"Attention : fetch a mis à jour la tête de la branche courante.\n" +"Attention : mise à jour en avance rapide de votre copie de travail\n" +"Attention : depuis la validation $orig_head." + +#: git-pull.sh:260 +msgid "Cannot merge multiple branches into empty head" +msgstr "Impossible de fusionner de multiples branches sur une tête vide" + +#: git-pull.sh:264 +msgid "Cannot rebase onto multiple branches" +msgstr "Impossible de rebaser sur de multiples branches" + +#: git-rebase.sh:53 +msgid "" +"When you have resolved this problem, run \"git rebase --continue\".\n" +"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" +"To check out the original branch and stop rebasing, run \"git rebase --abort" +"\"." +msgstr "" +"Lorsque vous aurez résolu ce problème, lancez \"git rebase --continue\".\n" +"Si vous préférez sauter ce patch, lancez \"git rebase --skip\" à la place.\n" +"Pour extraire la branche d'origine et stopper le rebasage, lancez \"git rebase --abort\"." + +#: git-rebase.sh:160 +msgid "The pre-rebase hook refused to rebase." +msgstr "Le hook pre-rebase a refusé de rebaser." + +#: git-rebase.sh:165 +msgid "It looks like git-am is in progress. Cannot rebase." +msgstr "Il semble que git-am soit en cours. Impossible de rebaser." + +#: git-rebase.sh:296 +msgid "The --exec option must be used with the --interactive option" +msgstr "L'option --exec doit être utilisée avec l'option --interactive" + +#: git-rebase.sh:301 +msgid "No rebase in progress?" +msgstr "Pas de rebasage en cours ?" + +#: git-rebase.sh:312 +msgid "The --edit-todo action can only be used during interactive rebase." +msgstr "L'action --edit-todo peut seulement être utilisée lors d'un rebasage interactif." + +#: git-rebase.sh:319 +msgid "Cannot read HEAD" +msgstr "Impossible de lire HEAD" + +#: git-rebase.sh:322 +msgid "" +"You must edit all merge conflicts and then\n" +"mark them as resolved using git add" +msgstr "" +"Vous devez éditer tous les conflits de fusion et\n" +"les marquer comme résolus avec git add" + +#: git-rebase.sh:340 +#, sh-format +msgid "Could not move back to $head_name" +msgstr "Impossible de revenir à $head_name" + +#: git-rebase.sh:359 +#, sh-format +msgid "" +"It seems that there is already a $state_dir_base directory, and\n" +"I wonder if you are in the middle of another rebase. If that is the\n" +"case, please try\n" +"\t$cmd_live_rebase\n" +"If that is not the case, please\n" +"\t$cmd_clear_stale_rebase\n" +"and run me again. I am stopping in case you still have something\n" +"valuable there." +msgstr "" +"Il semble qu'il y ait déjà un répertoire $state_dir_base, et je me demande\n" +"si vous n'êtes pas au milieu d'un autre rebasage. Si c'est le cas,\n" +"merci d'essayer\n" +"\t$cmd_live_rebase\n" +"Si ça n'est pas le cas, merci de\n" +"\t$cmd_clear_stale_rebase\n" +"et relancer à nouveau. Je m'arrête au cas où vous auriez quelque chose\n" +"d'important ici." + +#: git-rebase.sh:404 +#, sh-format +msgid "invalid upstream $upstream_name" +msgstr "invalide $upstream_name en amont" + +#: git-rebase.sh:428 +#, sh-format +msgid "$onto_name: there are more than one merge bases" +msgstr "$onto_name : il y a plus d'une base de fusion" + +#: git-rebase.sh:431 git-rebase.sh:435 +#, sh-format +msgid "$onto_name: there is no merge base" +msgstr "$onto_name : il n'y a pas de base de fusion" + +#: git-rebase.sh:440 +#, sh-format +msgid "Does not point to a valid commit: $onto_name" +msgstr "Ne pointe pas sur une validation valide : $onto_name" + +#: git-rebase.sh:463 +#, sh-format +msgid "fatal: no such branch: $branch_name" +msgstr "fatal : pas de branche : $branch_name" + +#: git-rebase.sh:483 +msgid "Please commit or stash them." +msgstr "Merci de les valider ou de les remiser." + +#: git-rebase.sh:501 +#, sh-format +msgid "Current branch $branch_name is up to date." +msgstr "La branche courante $branch_name est à jour." + +#: git-rebase.sh:504 +#, sh-format +msgid "Current branch $branch_name is up to date, rebase forced." +msgstr "La branche courante $branch_name est à jour, rebasage forcé." + +#: git-rebase.sh:515 +#, sh-format +msgid "Changes from $mb to $onto:" +msgstr "Changements de $mb sur $onto :" + +#. Detach HEAD and reset the tree +#: git-rebase.sh:524 +msgid "First, rewinding head to replay your work on top of it..." +msgstr "Premièrement, retour de head pour rejouer votre travail par-dessus..." + +#: git-rebase.sh:532 +#, sh-format +msgid "Fast-forwarded $branch_name to $onto_name." +msgstr "$branch_name mise à jour en avance rapide sur $onto_name." + +#: git-stash.sh:51 +msgid "git stash clear with parameters is unimplemented" +msgstr "git stash clear avec des paramètres n'est pas implémenté" + +#: git-stash.sh:74 +msgid "You do not have the initial commit yet" +msgstr "Vous n'avez pas encore la validation initiale" + +#: git-stash.sh:89 +msgid "Cannot save the current index state" +msgstr "Impossible de sauver l'état courant de l'index" + +#: git-stash.sh:123 git-stash.sh:136 +msgid "Cannot save the current worktree state" +msgstr "Impossible de sauver l'état courant de la copie de travail" + +#: git-stash.sh:140 +msgid "No changes selected" +msgstr "Aucun changement sélectionné" + +#: git-stash.sh:143 +msgid "Cannot remove temporary index (can't happen)" +msgstr "Impossible de supprimer l'index temporaire (ne peut pas se produire)" + +#: git-stash.sh:156 +msgid "Cannot record working tree state" +msgstr "Impossible d'enregistrer l'état de la copie de travail" + +#. TRANSLATORS: $option is an invalid option, like +#. `--blah-blah'. The 7 spaces at the beginning of the +#. second line correspond to "error: ". So you should line +#. up the second line with however many characters the +#. translation of "error: " takes in your language. E.g. in +#. English this is: +#. +#. $ 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' +#: git-stash.sh:202 +#, sh-format +msgid "" +"error: unknown option for 'stash save': $option\n" +" To provide a message, use git stash save -- '$option'" +msgstr "" +"erreur: option inconnue pour 'stash save': $option\n" +" Pour fournir un message, utilisez git stash save -- '$option'" + +#: git-stash.sh:223 +msgid "No local changes to save" +msgstr "Pas de changements en local à sauver" + +#: git-stash.sh:227 +msgid "Cannot initialize stash" +msgstr "Impossible d'initialiser le remisage" + +#: git-stash.sh:235 +msgid "Cannot save the current status" +msgstr "Impossible de sauver le statut courant" + +#: git-stash.sh:253 +msgid "Cannot remove worktree changes" +msgstr "Impossible de supprimer les changements de la copie de travail" + +#: git-stash.sh:352 +msgid "No stash found." +msgstr "Pas de remisage trouvé." + +#: git-stash.sh:359 +#, sh-format +msgid "Too many revisions specified: $REV" +msgstr "Trop de révisions spécifiées : $REV" + +#: git-stash.sh:365 +#, sh-format +msgid "$reference is not valid reference" +msgstr "$reference n'est pas une référence valide" + +#: git-stash.sh:393 +#, sh-format +msgid "'$args' is not a stash-like commit" +msgstr "'$args' n'est pas une validation de type remisage" + +#: git-stash.sh:404 +#, sh-format +msgid "'$args' is not a stash reference" +msgstr "'$args' n'est pas une référence de remisage" + +#: git-stash.sh:412 +msgid "unable to refresh index" +msgstr "impossible de rafraîchir l'index" + +#: git-stash.sh:416 +msgid "Cannot apply a stash in the middle of a merge" +msgstr "Impossible d'appliquer un remisage au milieu d'une fusion" + +#: git-stash.sh:424 +msgid "Conflicts in index. Try without --index." +msgstr "Conflits dans l'index. Essayez sans --index." + +#: git-stash.sh:426 +msgid "Could not save index tree" +msgstr "Impossible de sauver l'arbre d'index" + +#: git-stash.sh:460 +msgid "Cannot unstage modified files" +msgstr "Impossible de désindexer les fichiers modifiés" + +#: git-stash.sh:475 +msgid "Index was not unstashed." +msgstr "" + +#: git-stash.sh:492 +#, sh-format +msgid "Dropped ${REV} ($s)" +msgstr "${REV} supprimé ($s)" + +#: git-stash.sh:493 +#, sh-format +msgid "${REV}: Could not drop stash entry" +msgstr "${REV}: Impossible de supprimer l'entrée de stash" + +#: git-stash.sh:500 +msgid "No branch name specified" +msgstr "Aucune branche spécifiée" + +#: git-stash.sh:571 +msgid "(To restore them type \"git stash apply\")" +msgstr "(Pour les restaurer tapez \"git stash apply\")" + +#: git-submodule.sh:91 +#, sh-format +msgid "cannot strip one component off url '$remoteurl'" +msgstr "impossible de supprimer un composant de l'URL '$remoteurl'" + +#: git-submodule.sh:196 +#, sh-format +msgid "No submodule mapping found in .gitmodules for path '$sm_path'" +msgstr "Pas de mappage du sous-module trouvé dans .gitmodules pour le chemin '$sm_path'" + +#: git-submodule.sh:239 +#, sh-format +msgid "Clone of '$url' into submodule path '$sm_path' failed" +msgstr "Le clonage de '$url' dans le chemin de sous-module '$sm_path' a échoué" + +#: git-submodule.sh:251 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Le répertoire Git '$a' fait partie du chemin de sous-module '$b' ou vice-versa" + +#: git-submodule.sh:349 +#, sh-format +msgid "repo URL: '$repo' must be absolute or begin with ./|../" +msgstr "L'URL de dépôt '$repo' doit être absolu ou commencer par ./|../" + +#: git-submodule.sh:366 +#, sh-format +msgid "'$sm_path' already exists in the index" +msgstr "'$sm_path' existe déjà dans l'index" + +#: git-submodule.sh:370 +#, sh-format +msgid "" +"The following path is ignored by one of your .gitignore files:\n" +"$sm_path\n" +"Use -f if you really want to add it." +msgstr "" +"Le chemin suivant est ignoré par un de vos fichiers .gitignore :\n" +"$sm_path\n" +"Utilisez -f si vous voulez vraiment l'ajouter." + +#: git-submodule.sh:388 +#, sh-format +msgid "Adding existing repo at '$sm_path' to the index" +msgstr "Ajout du dépôt existant à '$sm_path' dans l'index" + +#: git-submodule.sh:390 +#, sh-format +msgid "'$sm_path' already exists and is not a valid git repo" +msgstr "'$sm_path' existe déjà et n'est pas un dépôt git valide" + +#: git-submodule.sh:398 +#, sh-format +msgid "A git directory for '$sm_name' is found locally with remote(s):" +msgstr "Un répertoire git pour '$sm_name' est trouvé en local avec le(s) serveur(s) distant(s) :" + +#: git-submodule.sh:400 +#, sh-format +msgid "" +"If you want to reuse this local git directory instead of cloning again from" +msgstr "Si vous voulez réutiliser ce répertoire git local au lieu de cloner à nouveau depuis" + +#: git-submodule.sh:402 +#, sh-format +msgid "" +"use the '--force' option. If the local git directory is not the correct repo" +msgstr "utilisez l'option '--force'. Si le répertoire local git n'est pas le dépôt correct" + +#: git-submodule.sh:403 +#, sh-format +msgid "" +"or you are unsure what this means choose another name with the '--name' " +"option." +msgstr "ou vous ne savez pas ce que cela signifie de choisir un autre nom avec l'option '--name'." + +#: git-submodule.sh:405 +#, sh-format +msgid "Reactivating local git directory for submodule '$sm_name'." +msgstr "Réactivation du répertoire git local pour le sous-module '$sm_name'." + +#: git-submodule.sh:417 +#, sh-format +msgid "Unable to checkout submodule '$sm_path'" +msgstr "Impossible d'extraire le sous-module '$sm_path'" + +#: git-submodule.sh:422 +#, sh-format +msgid "Failed to add submodule '$sm_path'" +msgstr "Échec d'ajout du sous-module '$sm_path'" + +#: git-submodule.sh:431 +#, sh-format +msgid "Failed to register submodule '$sm_path'" +msgstr "Échec d'enregistrement du sous-module '$sm_path'" + +#: git-submodule.sh:474 +#, sh-format +msgid "Entering '$prefix$sm_path'" +msgstr "Entrée dans '$prefix$sm_path'" + +#: git-submodule.sh:488 +#, sh-format +msgid "Stopping at '$sm_path'; script returned non-zero status." +msgstr "Arrêt sur '$sm_path' ; le script a retourné un statut non nul." + +#: git-submodule.sh:532 +#, sh-format +msgid "No url found for submodule path '$sm_path' in .gitmodules" +msgstr "URL non trouvé pour le chemin de sous-module '$sm_path' dans .gitmodules" + +#: git-submodule.sh:541 +#, sh-format +msgid "Failed to register url for submodule path '$sm_path'" +msgstr "Échec d'enregistrement de l'URL pour le chemin de sous-module '$sm_path'" + +#: git-submodule.sh:543 +#, sh-format +msgid "Submodule '$name' ($url) registered for path '$sm_path'" +msgstr "Sous-module '$name' ($url) enregistré pour le chemin '$sm_path'" + +#: git-submodule.sh:551 +#, sh-format +msgid "Failed to register update mode for submodule path '$sm_path'" +msgstr "Échec d'enregistrement du mode de mise à jour pour le chemin de sous-module '$sm_path'" + +#: git-submodule.sh:588 +#, sh-format +msgid "Use '.' if you really want to deinitialize all submodules" +msgstr "Utilisez '.' si vous voulez vraiment réinitialiser tous les sous-modules" + +#: git-submodule.sh:603 +#, sh-format +msgid "Submodule work tree '$sm_path' contains a .git directory" +msgstr "La copie de travail du sous-module '$sm_path' contient un répertoire .git" + +#: git-submodule.sh:604 +#, sh-format +msgid "" +"(use 'rm -rf' if you really want to remove it including all of its history)" +msgstr "(utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son historique)" + +#: git-submodule.sh:610 +#, sh-format +msgid "" +"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"discard them" +msgstr "La copie de travail du sous-module '$sm_path' contient des modifications locales; utilisez '-f' pour les annuler" + +#: git-submodule.sh:613 +#, sh-format +msgid "Cleared directory '$sm_path'" +msgstr "Répertoire '$sm_path' nettoyé" + +#: git-submodule.sh:614 +#, sh-format +msgid "Could not remove submodule work tree '$sm_path'" +msgstr "Impossible de supprimer la copie de travail du sous-module '$sm_path'" + +#: git-submodule.sh:617 +#, sh-format +msgid "Could not create empty submodule directory '$sm_path'" +msgstr "Impossible de créer le répertoire vide du sous-module '$sm_path'" + +#: git-submodule.sh:626 +#, sh-format +msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" +msgstr "Le sous-module '$name' ($url) n'est pas enregistré pour le chemin '$sm_path'" + +#: git-submodule.sh:731 +#, sh-format +msgid "" +"Submodule path '$prefix$sm_path' not initialized\n" +"Maybe you want to use 'update --init'?" +msgstr "" +"Chemin de sous-module '$prefix$sm_path' non initialisé\n" +"Peut-être souhaitez-vous utiliser 'update --init' ?" + +#: git-submodule.sh:744 +#, sh-format +msgid "Unable to find current revision in submodule path '$prefix$sm_path'" +msgstr "Impossible de trouver la révision courante dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:753 +#, sh-format +msgid "Unable to fetch in submodule path '$sm_path'" +msgstr "Impossible de rapatrier dans le chemin de sous-module '$sm_path'" + +#: git-submodule.sh:777 +#, sh-format +msgid "Unable to fetch in submodule path '$prefix$sm_path'" +msgstr "Impossible de rapatrier dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:791 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" +msgstr "Impossible de rebaser '$sha1' dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:792 +#, sh-format +msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" +msgstr "Chemin de sous-module '$prefix$sm_path' : rebasé dans '$sha1'" + +#: git-submodule.sh:797 +#, sh-format +msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" +msgstr "Impossible de fusionner '$sha1' dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:798 +#, sh-format +msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" +msgstr "Chemin de sous-module '$prefix$sm_path' : fusionné dans '$sha1'" + +#: git-submodule.sh:803 +#, sh-format +msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" +msgstr "Impossible d'extraire '$sha1' dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:804 +#, sh-format +msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" +msgstr "Chemin de sous-module '$prefix$sm_path' : '$sha1' extrait" + +#: git-submodule.sh:831 +#, sh-format +msgid "Failed to recurse into submodule path '$prefix$sm_path'" +msgstr "Échec de parcours dans le chemin du sous-module '$prefix$sm_path'" + +#: git-submodule.sh:939 +msgid "The --cached option cannot be used with the --files option" +msgstr "L'option --cached ne peut pas être utilisée avec l'option --files" + +#. unexpected type +#: git-submodule.sh:979 +#, sh-format +msgid "unexpected mode $mod_dst" +msgstr "mode $mod_dst inattendu" + +#: git-submodule.sh:997 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_src" +msgstr " Attention : $name ne contient pas la validation $sha1_src" + +#: git-submodule.sh:1000 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_dst" +msgstr " Attention : $name ne contient pas la validation $sha1_dst" + +#: git-submodule.sh:1003 +#, sh-format +msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgstr " Attention : $name ne contient pas les validations $sha1_src et $sha1_dst" + +#: git-submodule.sh:1028 +msgid "blob" +msgstr "blob" + +#: git-submodule.sh:1066 +msgid "Submodules changed but not updated:" +msgstr "Sous-modules modifiés mais non mis à jour :" + +#: git-submodule.sh:1068 +msgid "Submodule changes to be committed:" +msgstr "Changements du sous-module à valider :" + +#: git-submodule.sh:1153 +#, sh-format +msgid "Failed to recurse into submodule path '$sm_path'" +msgstr "Échec de parcours dans le chemin du sous-module '$sm_path'" + +#: git-submodule.sh:1216 +#, sh-format +msgid "Synchronizing submodule url for '$prefix$sm_path'" +msgstr "Synchronisation de l'URL sous-module pour '$prefix$sm_path'" diff --git a/po/git.pot b/po/git.pot index aacf98cb13..cf1e446330 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: 2013-07-26 14:19+0800\n" +"POT-Creation-Date: 2013-08-06 14:10+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" @@ -250,7 +250,7 @@ msgstr "" msgid "unrecognized header: %s%s (%d)" msgstr "" -#: bundle.c:89 builtin/commit.c:683 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "" @@ -484,48 +484,48 @@ msgstr "" msgid "'%s': short read %s" msgstr "" -#: help.c:213 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "" -#: help.c:220 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "" -#: help.c:236 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "" -#: help.c:293 +#: help.c:290 #, 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 "" -#: help.c:350 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "" -#: help.c:372 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" "Continuing under the assumption that you meant '%s'" msgstr "" -#: help.c:377 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "" -#: help.c:384 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "" -#: help.c:388 help.c:447 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -535,7 +535,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: help.c:443 +#: help.c:440 #, c-format msgid "%s: %s - %s" msgstr "" @@ -1155,7 +1155,7 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.object_name_warning false\"" +"running \"git config advice.objectNameWarning false\"" msgstr "" #: sha1_name.c:1097 @@ -1654,7 +1654,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "" -#: builtin/add.c:149 builtin/commit.c:238 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "" @@ -1703,14 +1703,14 @@ msgstr "" msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" -#: builtin/add.c:394 builtin/clean.c:851 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 #: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 #: builtin/rm.c:268 msgid "dry run" msgstr "" #: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 -#: builtin/commit.c:1201 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 #: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "" @@ -1791,8 +1791,8 @@ msgstr "" msgid "Maybe you wanted to say 'git add .'?\n" msgstr "" -#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:895 -#: builtin/commit.c:298 builtin/mv.c:82 builtin/rm.c:297 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "" @@ -2635,8 +2635,8 @@ msgid "act on remote-tracking branches" msgstr "" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1414 builtin/commit.c:1415 -#: builtin/commit.c:1416 builtin/commit.c:1417 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "" @@ -2813,43 +2813,43 @@ msgstr "" msgid "Need a repository to unbundle." msgstr "" -#: builtin/cat-file.c:303 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "" -#: builtin/cat-file.c:304 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "" -#: builtin/cat-file.c:341 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "" -#: builtin/cat-file.c:342 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "" -#: builtin/cat-file.c:343 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "" -#: builtin/cat-file.c:345 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "" -#: builtin/cat-file.c:346 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "" -#: builtin/cat-file.c:348 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "" -#: builtin/cat-file.c:350 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "" -#: builtin/cat-file.c:353 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "" @@ -3299,35 +3299,35 @@ msgid "" " - (empty) finish selecting" msgstr "" -#: builtin/clean.c:491 +#: builtin/clean.c:515 #, c-format msgid "Huh (%s)?" msgstr "" -#: builtin/clean.c:634 +#: builtin/clean.c:658 #, c-format msgid "Input ignore patterns>> " msgstr "" -#: builtin/clean.c:671 +#: builtin/clean.c:695 #, c-format msgid "WARNING: Cannot find items matched by: %s" msgstr "" -#: builtin/clean.c:692 +#: builtin/clean.c:716 msgid "Select items to delete" msgstr "" -#: builtin/clean.c:732 +#: builtin/clean.c:756 #, c-format msgid "remove %s? " msgstr "" -#: builtin/clean.c:757 +#: builtin/clean.c:781 msgid "Bye." msgstr "" -#: builtin/clean.c:765 +#: builtin/clean.c:789 msgid "" "clean - start cleaning\n" "filter by pattern - exclude items from deletion\n" @@ -3338,68 +3338,68 @@ msgid "" "? - help for prompt selection" msgstr "" -#: builtin/clean.c:792 +#: builtin/clean.c:816 msgid "*** Commands ***" msgstr "" -#: builtin/clean.c:793 +#: builtin/clean.c:817 msgid "What now" msgstr "" -#: builtin/clean.c:801 +#: builtin/clean.c:825 msgid "Would remove the following item:" msgid_plural "Would remove the following items:" msgstr[0] "" msgstr[1] "" -#: builtin/clean.c:818 +#: builtin/clean.c:842 msgid "No more files to clean, exiting." msgstr "" -#: builtin/clean.c:850 +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "" -#: builtin/clean.c:852 +#: builtin/clean.c:876 msgid "force" msgstr "" -#: builtin/clean.c:853 +#: builtin/clean.c:877 msgid "interactive cleaning" msgstr "" -#: builtin/clean.c:855 +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "" -#: builtin/clean.c:856 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 #: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "" -#: builtin/clean.c:857 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "" -#: builtin/clean.c:858 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "" -#: builtin/clean.c:860 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "" -#: builtin/clean.c:878 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "" -#: builtin/clean.c:882 +#: builtin/clean.c:906 msgid "" "clean.requireForce set to true and neither -i, -n nor -f given; refusing to " "clean" msgstr "" -#: builtin/clean.c:885 +#: builtin/clean.c:909 msgid "" "clean.requireForce defaults to true and neither -i, -n nor -f given; " "refusing to clean" @@ -3714,96 +3714,109 @@ msgid "" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" -#: builtin/commit.c:265 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "" -#: builtin/commit.c:307 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "" -#: builtin/commit.c:313 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "" -#: builtin/commit.c:346 builtin/commit.c:367 builtin/commit.c:417 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "" -#: builtin/commit.c:398 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "" -#: builtin/commit.c:400 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "" -#: builtin/commit.c:410 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "" -#: builtin/commit.c:430 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "" -#: builtin/commit.c:521 builtin/commit.c:527 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "" -#: builtin/commit.c:549 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "" -#: builtin/commit.c:569 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "" -#: builtin/commit.c:607 builtin/commit.c:640 builtin/commit.c:963 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "" -#: builtin/commit.c:619 builtin/shortlog.c:271 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "" -#: builtin/commit.c:621 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "" -#: builtin/commit.c:625 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "" -#: builtin/commit.c:631 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "" -#: builtin/commit.c:647 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "" -#: builtin/commit.c:651 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "" -#: builtin/commit.c:655 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "" -#: builtin/commit.c:716 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "" -#: builtin/commit.c:727 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3813,7 +3826,7 @@ msgid "" "and try again.\n" msgstr "" -#: builtin/commit.c:732 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3823,14 +3836,14 @@ msgid "" "and try again.\n" msgstr "" -#: builtin/commit.c:744 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be ignored, and an empty message aborts the commit.\n" msgstr "" -#: builtin/commit.c:749 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3838,351 +3851,351 @@ msgid "" "An empty message aborts the commit.\n" msgstr "" -#: builtin/commit.c:762 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "" -#: builtin/commit.c:769 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "" -#: builtin/commit.c:789 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "" -#: builtin/commit.c:826 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "" -#: builtin/commit.c:841 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "" -#: builtin/commit.c:938 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "" -#: builtin/commit.c:953 builtin/commit.c:1189 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "" -#: builtin/commit.c:990 +#: builtin/commit.c:1009 msgid "--long and -z are incompatible" msgstr "" -#: builtin/commit.c:1020 +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "" -#: builtin/commit.c:1031 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "" -#: builtin/commit.c:1034 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "" -#: builtin/commit.c:1036 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "" -#: builtin/commit.c:1039 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "" -#: builtin/commit.c:1049 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "" -#: builtin/commit.c:1051 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "" -#: builtin/commit.c:1059 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" -#: builtin/commit.c:1076 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" -#: builtin/commit.c:1078 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "" -#: builtin/commit.c:1080 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "" -#: builtin/commit.c:1082 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" -#: builtin/commit.c:1092 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "" -#: builtin/commit.c:1097 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "" -#: builtin/commit.c:1203 builtin/commit.c:1436 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "" -#: builtin/commit.c:1205 builtin/commit.c:1438 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "" -#: builtin/commit.c:1207 builtin/commit.c:1440 builtin/push.c:452 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "" -#: builtin/commit.c:1210 builtin/commit.c:1442 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "" -#: builtin/commit.c:1213 builtin/commit.c:1445 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "" -#: builtin/commit.c:1215 builtin/commit.c:1448 builtin/fast-export.c:667 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 #: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "" -#: builtin/commit.c:1216 builtin/commit.c:1448 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" -#: builtin/commit.c:1219 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "" -#: builtin/commit.c:1220 parse-options.h:154 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "" -#: builtin/commit.c:1221 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" -#: builtin/commit.c:1223 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "" -#: builtin/commit.c:1294 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "" -#: builtin/commit.c:1296 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "" -#: builtin/commit.c:1337 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "" -#: builtin/commit.c:1339 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr "" -#: builtin/commit.c:1406 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "" -#: builtin/commit.c:1407 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "" -#: builtin/commit.c:1409 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "" -#: builtin/commit.c:1410 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "" -#: builtin/commit.c:1411 +#: builtin/commit.c:1430 msgid "author" msgstr "" -#: builtin/commit.c:1411 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "" -#: builtin/commit.c:1412 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "" -#: builtin/commit.c:1412 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "" -#: builtin/commit.c:1413 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 #: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "" -#: builtin/commit.c:1413 +#: builtin/commit.c:1432 msgid "commit message" msgstr "" -#: builtin/commit.c:1414 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "" -#: builtin/commit.c:1415 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "" -#: builtin/commit.c:1416 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" -#: builtin/commit.c:1417 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" -#: builtin/commit.c:1418 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "" -#: builtin/commit.c:1419 builtin/log.c:1160 builtin/revert.c:111 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "" -#: builtin/commit.c:1420 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "" -#: builtin/commit.c:1421 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "" -#: builtin/commit.c:1422 +#: builtin/commit.c:1441 msgid "default" msgstr "" -#: builtin/commit.c:1422 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "" -#: builtin/commit.c:1423 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "" -#: builtin/commit.c:1424 builtin/merge.c:230 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "" -#: builtin/commit.c:1425 builtin/merge.c:231 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "" #. end commit message options -#: builtin/commit.c:1428 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "" -#: builtin/commit.c:1429 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "" -#: builtin/commit.c:1430 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "" -#: builtin/commit.c:1431 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "" -#: builtin/commit.c:1432 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "" -#: builtin/commit.c:1433 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "" -#: builtin/commit.c:1434 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "" -#: builtin/commit.c:1435 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "" -#: builtin/commit.c:1446 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "" -#: builtin/commit.c:1447 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "" -#: builtin/commit.c:1452 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "" -#: builtin/commit.c:1455 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "" -#: builtin/commit.c:1488 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "" -#: builtin/commit.c:1526 builtin/merge.c:525 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "" -#: builtin/commit.c:1533 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "" -#: builtin/commit.c:1540 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "" -#: builtin/commit.c:1559 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "" -#: builtin/commit.c:1573 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "" -#: builtin/commit.c:1578 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "" -#: builtin/commit.c:1593 builtin/merge.c:861 builtin/merge.c:886 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "" -#: builtin/commit.c:1614 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "" -#: builtin/commit.c:1618 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "" -#: builtin/commit.c:1629 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -9316,7 +9329,7 @@ msgstr "" msgid "" "Applying autostash resulted in conflicts.\n" "Your changes are safe in the stash.\n" -"You can run \"git stash pop\" or \"git stash drop\" it at any time.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" msgstr "" #: git-rebase.sh:190 @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git 1.8.3\n" +"Project-Id-Version: git 1.8.4\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" -"PO-Revision-Date: 2013-04-30 12:22+0100\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-08-06 12:37+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "tips: %.*s\n" @@ -26,7 +26,7 @@ msgstr "tips: %.*s\n" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm <file>' as\n" @@ -65,7 +65,7 @@ msgstr "fmt" msgid "archive format" msgstr "arkivformat" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "prefix" @@ -73,11 +73,11 @@ msgstr "prefix" msgid "prepend prefix to each pathname in the archive" msgstr "lägg till prefix till varje sökväg i arkivet" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "fil" @@ -109,7 +109,7 @@ msgstr "komprimera bättre" msgid "list supported archive formats" msgstr "visa understödda arkivformat" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" msgstr "arkiv" @@ -117,7 +117,7 @@ msgstr "arkiv" msgid "retrieve the archive from remote repository <repo>" msgstr "hämta arkivet frÃ¥n fjärrarkivet <arkiv>" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "kommando" @@ -204,17 +204,17 @@ msgstr "Det finns redan en gren som heter \"%s\"" msgid "Cannot force update the current branch." msgstr "Kan inte tvinga uppdatering av aktuell gren." -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "Kan inte ställa in spÃ¥rning; startpunkten \"%s\" är inte en gren." -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" msgstr "den efterfrÃ¥gade uppströmsgrenen \"%s\" finns inte" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -234,26 +234,26 @@ msgstr "" "spÃ¥ra dess fjärrmotsvarighet kan du använda \"git push -u\"\n" "för att ställa in uppströmskonfigurationen när du sänder in." -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "Objektnamnet är inte giltigt: \"%s\"." -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "Objektnamnet är tvetydigt: \"%s\"." -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." msgstr "Avgreningspunkten är inte giltig: \"%s\"" -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "Misslyckades lÃ¥sa referens för uppdatering" -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "Misslyckades skriva referens" @@ -267,7 +267,7 @@ msgstr "'%s' ser inte ut som en v2-bundle-fil" msgid "unrecognized header: %s%s (%d)" msgstr "okänt huvud: %s%s (%d)" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "kunde inte öppna \"%s\"" @@ -276,9 +276,9 @@ msgstr "kunde inte öppna \"%s\"" msgid "Repository lacks these prerequisite commits:" msgstr "Arkivet saknar dessa nödvändiga incheckningar:" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" msgstr "misslyckades skapa revisionstraversering" @@ -304,7 +304,7 @@ msgstr[1] "Paketet (bundlen) kräver dessa %d referenser:" msgid "rev-list died" msgstr "rev-list dog" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "okänt argument: %s" @@ -335,12 +335,12 @@ msgstr "kan inte skapa \"%s\"" msgid "index-pack died" msgstr "index-pack dog" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" msgstr "kunde inte tolka %s" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" msgstr "%s %s är inte en incheckning!" @@ -349,16 +349,16 @@ msgstr "%s %s är inte en incheckning!" msgid "memory exhausted" msgstr "minnet slut" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "Kunde inte köra \"git rev-list\"" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "kunde inte skriva till rev-list: %s" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "kunde inte stänga rev-list:s standard in: %s" @@ -454,7 +454,7 @@ msgstr "" "Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n" "%s" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -463,7 +463,7 @@ msgstr "" "Misslyckades tolka argument till flaggan --dirstat/-X;\n" "%s" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "Misslyckades tolka argument till flaggan --submodule: \"%s\"" @@ -505,20 +505,20 @@ msgstr "\"%s\": %s" msgid "'%s': short read %s" msgstr "\"%s\": kort läsning %s" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "git-kommandon tillgängliga i \"%s\"" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "git-kommandon frÃ¥n andra platser i din $PATH" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "De mest använda git-kommandona är:" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -527,11 +527,11 @@ msgstr "" "\"%s\" verkar vara ett git-kommando, men vi kan inte\n" "köra det. Kanske git-%s är trasigt?" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "Oj dÃ¥. Ditt system rapporterar inga Git-kommandon alls." -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -540,17 +540,17 @@ msgstr "" "VARNING: Du anropade ett Git-kommando vid namn \"%s\", som inte finns.\n" "Fortsätter under förutsättningen att du menade \"%s\"" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "automatiskt om %0.1f sekunder..." -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: \"%s\" är inte ett git-kommando. Se \"git --help\"." -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -564,12 +564,17 @@ msgstr[1] "" "\n" "Menade du ett av dessa?" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "%s: %s - %s" + #: merge.c:56 msgid "failed to read the cache" msgstr "misslyckads läsa cachen" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" msgstr "kunde inte skriva ny indexfil" @@ -583,70 +588,70 @@ msgstr "(felaktig incheckning)\n" msgid "addinfo_cache failed for path '%s'" msgstr "addinfo_cache misslyckades för sökvägen \"%s\"" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" msgstr "fel vid byggande av träd" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "misslyckades skapa sökvägen \"%s\"%s" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "Tar bort %s för att göra plats för underkatalog\n" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr ": kanske en K/F-konflikt?" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "vägrar förlora ospÃ¥rad fil vid \"%s\"" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "kan inte läsa objektet %s: \"%s\"" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "blob förväntades för %s \"%s\"" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "misslyckades öppna \"%s\"" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" msgstr "misslyckades ta skapa symboliska länken \"%s\"" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "vet inte hur %06o %s \"%s\" skall hanteras" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" msgstr "Misslyckades exekvera intern sammanslagning" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "Kunde inte lägga till %s till databasen" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" msgstr "objekttyp som ej stöds upptäcktes i trädet" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -655,7 +660,7 @@ msgstr "" "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad " "i trädet." -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -664,20 +669,20 @@ msgstr "" "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad " "i trädet vid %s." -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "namnbyte" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "namnbytt" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "%s är en katalog i %s lägger till som %s istället" -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" @@ -686,148 +691,169 @@ msgstr "" "KONFLIKT (namnbyte/namnbyte): Namnbyte \"%s\"->\"%s\" pÃ¥ grenen \"%s\" " "namnbyte \"%s\"->\"%s\" i \"%s\"%s" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr " (lämnad olöst)" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" "KONFLIKT (namnbyte/namnbyte): Namnbyte %s->%s i %s. Namnbyte %s->%s i %s" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "Byter namn pÃ¥ %s till %s och %s till %s istället" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "KONFLIKT (namnbyte/tillägg): Namnbyte %s->%s i %s. %s tillagd i %s" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "Lägger till sammanslagen %s" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "Lägger till som %s iställer" -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "kan inte läsa objektet %s" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "objektet %s är inte en blob" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "ändra" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "ändrad" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "innehÃ¥ll" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "tillägg/tillägg" -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "Hoppade över %s (sammanslagen samma som befintlig)" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" msgstr "SlÃ¥r ihop %s automatiskt" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" msgstr "undermodul" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "KONFLIKT (%s): Sammanslagningskonflikt i %s" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "Tar bort %s" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "fil/katalog" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "katalog/fil" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" "KONFLIKT (%s): Det finns en katalog med namnet %s i %s. Lägger till %s som %s" -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "Lägger till %s" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." msgstr "Ödesdigert sammanslagningsfel, borde inte inträffa." -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "Redan à jour!" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" msgstr "sammanslagning av träden %s och %s misslyckades" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "Obehandlad sökväg??? %s" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" msgstr "SlÃ¥r ihop:" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "hittade %u gemensam förfader:" msgstr[1] "hittade %u gemensamma förfäder:" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" msgstr "sammanslagningen returnerade ingen incheckning" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "Kunde inte tolka objektet \"%s\"" -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." msgstr "Kunde inte skriva indexet." -#: object.c:195 +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "Kan inte checka in oinitierat/orefererat anteckningsträd" + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "Felaktigt värde för notes.rewriteMode: '%s'" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "Vägrar skriva över anteckningar i %s (utanför refs/notes/)" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Felaktigt värde pÃ¥ %s: \"%s\"" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "kunde inte tolka objektet: %s" @@ -867,18 +893,18 @@ msgstr "Sökvägen \"%s\" är i undermodulen \"%.*s\"" msgid "'%s' is beyond a symbolic link" msgstr "\"%s\" är pÃ¥ andra sidan av en symbolisk länk" -#: remote.c:1781 +#: remote.c:1788 #, 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] "Din gren ligger före \"%s\" med %d incheckning.\n" msgstr[1] "Din gren ligger före \"%s\" med %d incheckningar.\n" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" msgstr " (använd \"git push\" för att publicera dina lokala incheckningar)\n" -#: remote.c:1790 +#: remote.c:1797 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" @@ -888,11 +914,11 @@ msgstr[0] "" msgstr[1] "" "Din gren ligger efter \"%s\" med %d incheckningar, och kan snabbspolas.\n" -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr " (använd \"git pull\" för att uppdatera din lokala gren)\n" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -907,18 +933,27 @@ msgstr[1] "" "Din gren och \"%s\" har divergerat,\n" "och har %d respektive %d olika incheckningar.\n" -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr " (använd \"git pull\" för att slÃ¥ ihop fjärrgrenen med din egen)\n" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "misslyckades öppna /dev/null" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "dup2(%d,%d) misslyckades" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "Kunde inte öppna \"%s\" för skrivning" -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "Kunde inte skriva till \"%s\"" @@ -941,7 +976,7 @@ msgstr "" "med \"git add <sökvägar>\" eller \"git rm <sökvägar>\"\n" "och checka in resultatet med \"git commit\"" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "Kunde inte skriva till %s" @@ -964,215 +999,237 @@ msgid "Commit your changes or stash them to proceed." msgstr "Checka in dina ändringar eller använd \"stash\" för att fortsätta." #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" msgstr "%s: Kunde inte skriva ny indexfil" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" msgstr "Kunde inte bestämma HEAD:s incheckning\n" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" msgstr "Kan inte uppdatera cacheträd\n" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" msgstr "Kunde inte tolka incheckningen %s\n" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" msgstr "Kunde inte tolka föräldraincheckningen %s\n" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." msgstr "Din indexfil har inte slagits ihop." -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." msgstr "Incheckning %s är en sammanslagning, men flaggan -m angavs inte." -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" msgstr "Incheckning %s har inte förälder %d" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." msgstr "Huvudlinje angavs, men incheckningen %s är inte en sammanslagning" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "%s: kan inte tolka föräldraincheckningen %s" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" msgstr "Kan inte hämta incheckningsmeddelande för %s" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" msgstr "kunde inte Ã¥ngra %s... %s" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "kunde inte tillämpa %s... %s" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" msgstr "den angivna uppsättningen incheckningar är tom" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" msgstr "git %s: misslyckades läsa indexet" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" msgstr "git %s: misslyckades uppdatera indexet" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "kan inte %s under en %s" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "Kan inte tolka rad %d." -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." msgstr "Inga incheckningar lästes." -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "Kunde inte öppna %s" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "kunde inte läsa %s." -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "Oanvändbart manus: %s" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "Felaktig nyckel: %s" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "Felaktigt värde för %s: %s" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "Trasigt manus: %s" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "en \"cherry-pick\" eller \"revert\" pÃ¥gÃ¥r redan" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "testa \"git cherry-pick (--continue | --quit | --abort)\"" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "Kunde inte skapa \"sequencer\"-katalogen \"%s\"" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "Fel vid ombrytning av %s." -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "ingen \"cherry-pick\" eller \"revert\" pÃ¥gÃ¥r" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" msgstr "kan inte bestämma HEAD" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" msgstr "kan inte avbryta frÃ¥n en gren som ännu inte är född" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "kan inte öppna %s: %s" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "kan inte läsa %s: %s" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "oväntat filslut" -#: sequencer.c:916 +#: sequencer.c:926 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "sparad HEAD-fil frÃ¥n före \"cherry-pick\", \"%s\", är trasig" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "Kunde inte formatera %s." -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "%s: kan inte göra \"cherry-pick\" pÃ¥ typen \"%s\"" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" msgstr "%s: felaktig revision" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" msgstr "Kan inte Ã¥ngra som första incheckning" -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" msgstr "Kan inte göra \"cherry-pick\" i ett tomt huvud" -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" +"Git skapar normalt aldrig referenser som slutar med 40 hexadecimala\n" +"tecken, dÃ¥ detta ignoreras när du anger 40-hex enbart. Dessa\n" +"referenser kan skapas av misstag. Till exempel, för\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"där \"$br\" pÃ¥ nÃ¥got sätt blivit tomt och en 40-hex-referens skapats.\n" +"Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n" +"genom att köra \"git config advice.objectNameWarning false\"" + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" msgstr "HEAD pekar inte pÃ¥ en gren" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" msgstr "Okänd gren: \"%s\"" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" msgstr "Ingen standarduppström angiven för grenen \"%s\"" -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" msgstr "Uppströmsgrenen \"%s\" är inte lagrad som en fjärrspÃ¥rande gren" @@ -1182,166 +1239,166 @@ msgstr "Uppströmsgrenen \"%s\" är inte lagrad som en fjärrspÃ¥rande gren" msgid "unable to access '%s': %s" msgstr "kan inte komma Ã¥t \"%s\": %s" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "kan inte komma Ã¥t \"%s\"" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "kan inte slÃ¥ upp aktuell användare i passwd-filen: %s" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "okänd användare" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "Ej sammanslagna sökvägar:" -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr " (använd \"git reset %s <fil>...\" för att ta bort frÃ¥n kö)" -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr " (använd \"git rm --cached <fil>...\" för att ta bort frÃ¥n kö)" -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr " (använd \"git add <fil>...\" för att ange lösning)" -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr " (använd \"git add/rm <fil>...\" som lämpligt för att ange lösning)" -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr " (använd \"git rm <fil>...\" för att ange lösning)" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" msgstr "Ändringar att checka in:" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" msgstr "Ändringar ej i incheckningskön:" -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" msgstr "" " (använd \"git add <fil>...\" för att uppdatera vad som skall checkas in)" -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" msgstr "" " (använd \"git add/rm <fil>...\" för att uppdatera vad som skall checkas in)" -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr "" " (använd \"git checkout -- <fil>...\" för att förkasta ändringar i " "arbetskatalogen)" -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" " (checka in eller förkasta ospÃ¥rat eller ändrat innehÃ¥ll i undermoduler)" -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" msgstr "" " (använd \"git %s <fil>...\" för att ta med i det som skall checkas in)" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "programfel" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "borttaget av bägge:" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "tillagt av oss:" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "borttaget av dem:" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "tillagt av dem:" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "borttaget av oss:" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "tillagt av bägge:" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "ändrat av bägge:" -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " msgstr "nya incheckningar, " -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "ändrat innehÃ¥ll, " -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "ospÃ¥rat innehÃ¥ll, " -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "ny fil: %s" -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "kopierad: %s -> %s" -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "borttagen: %s" -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "ändrad: %s" -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "namnbyte: %s -> %s" -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "typbyte: %s" -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "okänd: %s" -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "osammansl.: %s" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "programfel: diff-status %c ej hanterad" @@ -1350,7 +1407,7 @@ msgstr "programfel: diff-status %c ej hanterad" msgid "You have unmerged paths." msgstr "Du har ej sammanslagna sökvägar." -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr " (rätta konflikter och kör \"git commit\")" @@ -1371,8 +1428,8 @@ msgid "The current patch is empty." msgstr "Aktuell patch är tom." #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" -msgstr " (rätta konflikter och kör sedan \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" +msgstr " (rätta konflikter och kör sedan \"git am --continue\")" #: wt-status.c:831 msgid " (use \"git am --skip\" to skip this patch)" @@ -1448,37 +1505,47 @@ msgstr " (använd \"git rebase --continue\" när du är nöjd med dina ändring msgid "You are currently cherry-picking." msgstr "Du hÃ¥ller pÃ¥ med en \"cherry-pick\"." +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr " (rätta konflikter och kör sedan \"git cherry-pick --continue\")" + #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" -msgstr " (alla konflikter har rättats: kör \"git commit\")" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr " (alla konflikter rättade: kör \"git cherry-pick --continue\")" -#: wt-status.c:970 +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" +msgstr "" +" (använd \"git cherry-pick --abort\" för att avbryta \"cherry-pick\"-" +"operationen)" + +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." msgstr "Du hÃ¥ller pÃ¥ med att Ã¥ngra incheckningen %s." -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr " (rätta konflikter och kör sedan \"git revert --continue\")" -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr " (alla konflikter rättade: kör \"git revert --continue\")" -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr " (använd \"git revert --abort\" för att avbryta Ã¥ngrandet)" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." msgstr "Du hÃ¥ller pÃ¥ med en \"bisect\", startad frÃ¥n grenen \"%s\"." -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "Du hÃ¥ller pÃ¥ med en \"bisect\"." -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" " (använd \"git bisect reset\" för att komma tillbaka till ursprungsgrenen)" @@ -1487,31 +1554,35 @@ msgstr "" msgid "On branch " msgstr "PÃ¥ grenen " -#: wt-status.c:1184 +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "ombasering pÃ¥gÃ¥r; ovanpÃ¥" + +#: wt-status.c:1187 msgid "HEAD detached at " msgstr "HEAD frÃ¥nkopplad vid " -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " msgstr "HEAD frÃ¥nkopplad frÃ¥n " -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." msgstr "Inte pÃ¥ nÃ¥gon gren för närvarande." -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" msgstr "Första incheckning" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "OspÃ¥rade filer" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "Ignorerade filer" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1523,32 +1594,32 @@ msgstr "" "lägga till nya filer själv (se \"git help status\")." # %s är nästa sträng eller tom. -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "OspÃ¥rade filer visas ej%s" -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr " (använd flaggan -u för att visa ospÃ¥rade filer)" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "Inga ändringar" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" "inga ändringar att checka in (använd \"git add\" och/eller \"git commit -a" "\")\n" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" msgstr "inga ändringar att checka in\n" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " @@ -1557,52 +1628,52 @@ msgstr "" "inget köat för incheckning, men ospÃ¥rade filer finns (spÃ¥ra med \"git add" "\")\n" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" msgstr "inget köat för incheckning, men ospÃ¥rade filer finns\n" -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "inget att checka in (skapa/kopiera filer och spÃ¥ra med \"git add\")\n" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" msgstr "inget att checka in\n" -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "inget att checka in (använd -u för att visa ospÃ¥rade filer)\n" -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" msgstr "inget att checka in, arbetskatalogen ren\n" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" msgstr "HEAD (ingen gren)" -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " msgstr "Första incheckning pÃ¥ " -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "efter " -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "före " -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr ", efter " -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "misslyckades ta bort länken \"%s\"" @@ -1688,7 +1759,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "diff-status %c förväntades inte" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "misslyckades uppdatera filer" @@ -1701,7 +1772,7 @@ msgstr "ta bort \"%s\"\n" msgid "Unstaged changes after refreshing the index:" msgstr "OspÃ¥rade ändringar efter att ha uppdaterat indexet:" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "sökvägsangivelsen \"%s\" motsvarade inte nÃ¥gra filer" @@ -1710,127 +1781,127 @@ msgstr "sökvägsangivelsen \"%s\" motsvarade inte nÃ¥gra filer" msgid "Could not read the index" msgstr "Kunde inte läsa indexet" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "Kunde inte öppna \"%s\" för skrivning" -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "Kunde inte skriva patch" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "Kunde inte ta status pÃ¥ \"%s\"" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "Tom patch. Avbryter." -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "Kunde inte tillämpa \"%s\"" -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "testkörning" -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "var pratsam" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "plocka interaktivt" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" msgstr "välj stycken interaktivt" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "redigera aktuell diff och applicera" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "tillÃ¥t lägga till annars ignorerade filer" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "uppdatera spÃ¥rade filer" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "registrera endast att sökvägen kommer läggas till senare" -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "lägg till ändringar frÃ¥n alla spÃ¥rade och ospÃ¥rade filer" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" msgstr "ignorera sökvägar borttagna i arbetskatalogen (samma som --no-all)" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" msgstr "lägg inte till, uppdatera endast indexet" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "hoppa bara över filer som inte kan läggas till pÃ¥ grund av fel" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "se om - även saknade - filer ignoreras i testkörning" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "Använd -f om du verkligen vill lägga till dem.\n" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "inga filer har lagts till" -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "misslyckades lägga till filer" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "-A och -u är ömsesidigt inkompatibla" -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "Flaggan --ignore-missing kan endast användas tillsammans med --dry-run" -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "Inget angivet, inget tillagt.\n" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Kanske menade du att skriva \"git add .\"?\n" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "indexfilen trasig" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" msgstr "Kunde inte skriva ny indexfil" @@ -2014,293 +2085,293 @@ msgstr "patch misslyckades: %s:%ld" msgid "cannot checkout %s" msgstr "kan inte checka ut %s" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "misslyckades läsa %s" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "sökvägen %s har ändrat namn/tagits bort" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" msgstr "%s: finns inte i indexet" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" msgstr "%s: motsvarar inte indexet" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "patch för borttagning lämnar kvar filinnehÃ¥ll" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "%s: fel typ" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "%s har typen %o, förväntade %o" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "%s: finns redan i indexet" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "%s: finns redan i arbetskatalogen" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o)" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o) för %s" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "%s: patchen kan inte tillämpas" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "Kontrollerar patchen %s..." -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "make_cache_entry misslyckades för sökvägen \"%s\"" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" msgstr "kan inte ta bort %s frÃ¥n indexet" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" -msgstr "trasig patch för underprojektet %s" +msgid "corrupt patch for submodule %s" +msgstr "trasig patch för undermodulen %s" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "kan inte ta status pÃ¥ nyligen skapade filen \"%s\"" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "kan inte skapa säkerhetsminne för nyligen skapade filen %s" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "kan inte lägga till cachepost för %s" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "stänger filen \"%s\"" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "kan inte skriva filen \"%s\" läge %o" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "Tillämpade patchen %s rent." -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "internt fel" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "Tillämpade patchen %%s med %d refuserad..." msgstr[1] "Tillämpade patchen %%s med %d refuserade..." -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "trunkerar .rej-filnamnet till %.*s.rej" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "Stycke %d tillämpades rent." -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." msgstr "Refuserar stycke %d." -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "indata känns inte igen" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" msgstr "kan inte läsa indexfilen" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "sökväg" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "tillämpa inte ändringar som motsvarar given sökväg" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "tillämpa ändringar som motsvarar given sökväg" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "antal" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "ta bort <antal> inledande snedstreck frÃ¥n traditionella diff-sökvägar" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "ignorera tillägg gjorda av patchen" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "istället för att tillämpa patchen, skriv ut diffstat för indata" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "visa antal tillagda och borttagna rader decimalt" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "istället för att tillämpa patchen, skriv ut en summering av indata" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "istället för att tillämpa patchen, se om patchen kan tillämpas" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "se till att patchen kan tillämpas pÃ¥ aktuellt index" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" msgstr "tillämpa en patch utan att röra arbetskatalogen" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "tillämpa ocksÃ¥ patchen (använd med --stat/--summary/--check)" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" msgstr "försök en trevägssammanslagning om patchen inte kan tillämpas" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "bygg ett temporärt index baserat pÃ¥ inbyggd indexinformation" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "sökvägar avdelas med NUL-tecken" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "se till att Ã¥tminstone <n> rader sammanhang är lika" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "Ã¥tgärd" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" msgstr "detektera nya eller ändrade rader som har fel i blanktecken" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" msgstr "ignorera ändringar i blanktecken för sammanhang" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "tillämpa patchen baklänges" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "förvänta inte minst en rad sammanhang" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "lämna refuserade stycken i motsvarande *.rej-filer" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" msgstr "tillÃ¥t överlappande stycken" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "tolerera felaktigt detekterade saknade nyradstecken vid filslut" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" msgstr "lite inte pÃ¥ antalet linjer i styckehuvuden" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "rot" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "lägg till <rot> i alla filnamn" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "--3way utanför arkiv" -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "--index utanför arkiv" -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "--cached utanför arkiv" -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "kan inte öppna patchen \"%s\"" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" msgstr[0] "undertryckte %d fel i blanksteg" msgstr[1] "undertryckte %d fel i blanksteg" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." @@ -2354,103 +2425,103 @@ msgstr "utför 'git bisect next'" msgid "update BISECT_HEAD instead of checking out the current commit" msgstr "uppdatera BISECT_HEAD istället för att checka ut aktuell incheckning" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "git blame [flaggor] [rev-flaggor] [rev] [--] fil" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "[rev-flaggor] dokumenteras i git-rev-list(1)" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "Visa klandringsposter när vi hittar dem, interaktivt" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "Visa blank SHA-1 för gränsincheckningar (Standard: av)" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "Behandla inte rotincheckningar som gränser (Standard: av)" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "Visa statistik över arbetskostnad" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "Visa utdatapoäng för klandringsposter" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "Visa originalfilnamn (Standard: auto)" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "Visa ursprungligt radnummer (Standard: av)" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "Visa i ett format avsett för maskinkonsumtion" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "Visa porslinsformat med per-rad-incheckningsinformation" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "Använd samma utdataläge som git-annotate (Standard: av)" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "Visa rÃ¥ tidsstämpel (Standard: av)" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" msgstr "Visa lÃ¥ng inchecknings-SHA1 (Standard: av)" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "Undertryck författarnamn och tidsstämpel (Standard: av)" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "Visa författarens e-post istället för namn (Standard: av)" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" msgstr "Ignorera ändringar i blanksteg" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "Slösa extra cykler med att hitta bättre träff" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" msgstr "Använd revisioner frÃ¥n <fil> istället för att anropa git-rev-list" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "Använd <fil>s innehÃ¥ll som slutgiltig bild" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "poäng" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "Hitta kopierade rader inuti och mellan filer" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "Hitta flyttade rader inuti och mellan filer" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "Behandla endast radintervallet n,m, med början pÃ¥ 1" @@ -2683,8 +2754,8 @@ msgid "act on remote-tracking branches" msgstr "arbeta pÃ¥ fjärrspÃ¥rande grenar" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "incheckning" @@ -2748,7 +2819,7 @@ msgstr "visa grenar i spalter" msgid "Failed to resolve HEAD as a valid ref." msgstr "Misslyckades slÃ¥ upp HEAD som giltig referens" -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" msgstr "HEAD hittades inte under refs/heads!" @@ -2870,43 +2941,43 @@ msgstr "Behöver ett arkiv för att skapa ett paket (bundle)." msgid "Need a repository to unbundle." msgstr "Behöver ett arkiv för att packa upp ett paket (bundle)." -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<typ>|--textconv) <objekt>" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <objektlista>" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<typ> kan vara en av: blob, tree, commit, tag" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "visa objekttyp" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "visa objektstorlek" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "avsluta med noll när det inte uppstÃ¥tt nÃ¥got fel" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "visa objektets innehÃ¥ll snyggt" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "för blob-objekt, kör textconv pÃ¥ objektets innehÃ¥ll" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "visa information och innehÃ¥ll för objekt som listas pÃ¥ standard in" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "visa information för objekt som listas pÃ¥ standard in" @@ -2934,30 +3005,55 @@ msgstr "läs filnamn frÃ¥n standard in" msgid "input paths are terminated by a null character" msgstr "sökvägar avdelas med null-tecken" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "undertryck förloppsrapportering" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "visa indatasökvägar som inte träffas" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "kan inte ange sökvägsnamn med --stdin" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "-z kan endast användas tillsammans med --stdin" -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "ingen sökväg angavs" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "--quiet kan endast användas med ett enkelt sökvägsnamn" -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "kan inte använda bÃ¥de --quiet och --verbose" +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "--non-matching är endast giltig med --verbose" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "git check-mailmap [flaggor] <kontakt>..." + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "läs även kontakter frÃ¥n standard in" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "kunde inte tolka kontakt: %s" + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "inga kontakter angavs" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "git checkout-index [flaggor] [--] [<fil>...]" @@ -3074,42 +3170,42 @@ msgstr "du mÃ¥ste lösa ditt befintliga index först" msgid "Can not do reflog for '%s'\n" msgstr "Kan inte skapa referenslog för \"%s\"\n" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" msgstr "HEAD är nu pÃ¥" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" msgstr "Ã…terställ gren \"%s\"\n" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "Redan pÃ¥ \"%s\"\n" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" msgstr "Växlade till och nollställde grenen \"%s\"\n" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" msgstr "Växlade till en ny gren \"%s\"\n" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" msgstr "Växlade till grenen \"%s\"\n" -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr " ... och %d till.\n" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3132,7 +3228,7 @@ msgstr[1] "" "\n" "%s\n" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3147,136 +3243,136 @@ msgstr "" " git branch nytt_grennamn %s\n" "\n" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" msgstr "internt fel vid genomgÃ¥ng av revisioner (revision walk)" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" msgstr "Tidigare position för HEAD var" -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" msgstr "Du är pÃ¥ en gren som ännu inte är född" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "felaktig referens: %s" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" msgstr "referensen är inte ett träd: %s" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" msgstr "sökvägar kan inte användas vid byte av gren" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" msgstr "\"%s\" kan inte användas vid byte av gren" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "\"%s\" kan inte användas med \"%s\"" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "Kan inte växla gren till icke-incheckningen \"%s\"" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" msgstr "gren" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" msgstr "skapa och checka ut en ny gren" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" msgstr "skapa/nollställ och checka ut en gren" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" msgstr "skapa reflogg för ny gren" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" msgstr "koppla frÃ¥n HEAD vid namngiven incheckning" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" msgstr "sätt uppströmsinformation för ny gren" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" msgstr "ny gren" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" msgstr "ny gren utan förälder" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "checka ut vÃ¥r version för ej sammanslagna filer" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "checka ut deras version för ej sammanslagna filer" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "tvinga utcheckning (kasta bort lokala ändringar)" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" msgstr "utför en 3-vägssammanslagning för den nya grenen" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "uppdatera ignorerade filer (standard)" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "stil" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "konfliktstil (merge eller diff3)" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "begränsa inte sökvägar till endast glesa poster" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "förutspÃ¥ \"git checkout gren-saknas\"" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "-b, -B och --orphan är ömsesidigt uteslutande" -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" msgstr "--track behöver ett namn pÃ¥ en gren" -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" msgstr "Grennamn saknas; försök med -b" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "felaktig sökvägsangivelse" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" @@ -3285,12 +3381,12 @@ msgstr "" "Kan inte uppdatera sökvägar och växla till grenen \"%s\" samtidigt.\n" "Ville du checka ut \"%s\" som inte kan lösas som en utcheckning?" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout: --detach tar inte en sökväg som argument \"%s\"" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." @@ -3298,218 +3394,321 @@ msgstr "" "git checkout: --ours/--theirs, --force och --merge är inkompatibla när\n" "du checkar ut frÃ¥n indexet." -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." msgstr "" -"git clean [-d] [-f] [-n] [-q] [-e <mönster>] [-x | -X] [--] <sökvägar>..." +"git clean [-d] [-f] [-i] [-n] [-q] [-e <mönster>] [-x | -X] [--] " +"<sökvägar>..." -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "Tar bort %s\n" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "Skulle ta bort %s\n" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" msgstr "Hoppar över arkivet %s\n" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" msgstr "Skulle hoppa över arkivet %s\n" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "misslyckades ta bort %s" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" +"Kommandohjälp:\n" +"1 - markera en numrerad post\n" +"foo - markera post baserad pÃ¥ unikt prefix\n" +" - (tomt) markera ingenting" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" +"Kommandohjälp:\n" +"1 - markera en ensam post\n" +"3-5 - markera ett intervall med poster\n" +"2-3,6-9 - markera flera intervall\n" +"foo - markera post baserad pÃ¥ unikt prefix\n" +"-... - avmarkera specifika poster\n" +"* - välj alla poster\n" +" - (tomt) avsluta markering" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "VadÃ¥ (%s)?" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "Ange ignoreringsmönster>>" + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "VARNING: Hittar inte poster som motsvarar: %s" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "Välj poster att ta bort" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "ta bort %s?" + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "Hej dÃ¥." + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" +"clean - börja städa\n" +"filter by pattern - uteslut poster frÃ¥n borttagning\n" +"select by numbers - markera poster som ska tas bort med siffror\n" +"ask each - bekräfta varje borttagning (som \"rm -i\")\n" +"quit - sluta städa\n" +"help - denna skärm\n" +"? - hjälp för kommandoval" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "*** Kommandon ***" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "Vad nu" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "Skulle ta bort följande post:" +msgstr[1] "Skulle ta bort följande poster:" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "Inga fler filer att städa, avslutar." + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "skriv inte ut namn pÃ¥ borttagna filer" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "tvinga" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "städa interaktivt" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "ta bort hela kataloger" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "mönster" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "lägg till <mönster> till ignoreringsregler" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "ta även bort ignorerade filer" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "ta endast bort ignorerade filer" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "-x och -X kan inte användas samtidigt" -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -"clean.requireForce satt till true, men varken -n eller -f angavs; vägrar " +"clean.requireForce satt till true, men varken -i, -n eller -f angavs; vägrar " "städa" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -"clean.requireForce har standardvärdet true, men varken -n eller -f angavs; " -"vägrar städa" +"clean.requireForce har standardvärdet true och varken -i, -n eller -f " +"angavs; vägrar städa" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" msgstr "git clone [flaggor] [--] <arkiv> [<kat>]" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "tvinga förloppsrapportering" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "skapa inte nÃ¥gon utcheckning" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" msgstr "skapa ett naket (\"bare\") arkiv" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" msgstr "skapa ett spegelarkiv (implicerar \"bare\")" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" msgstr "för att klona frÃ¥n ett lokalt arkiv" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" msgstr "skapa inte lokala hÃ¥rda länkar, kopiera alltid" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" msgstr "skapa som ett delat arkiv" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" msgstr "initiera undermoduler i klonen" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "mallkatalog" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "katalog att använda mallar frÃ¥n" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" msgstr "referensarkiv" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "namn" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" msgstr "använd <namn> istället för \"origin\" för att spÃ¥ra uppströms" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" msgstr "checka ut <gren> istället för fjärrens HEAD" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "sökväg till git-upload-pack pÃ¥ fjärren" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "djup" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "skapa en grund klon pÃ¥ detta djup" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" msgstr "klona endast en gren, HEAD eller --branch" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr "gitkat" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" msgstr "separera gitkatalogen frÃ¥n arbetskatalogen" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "nyckel=värde" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" msgstr "ställ in konfiguration i det nya arkivet" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv." -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "misslyckades skapa katalogen \"%s\"" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "misslyckades ta status pÃ¥ \"%s\"" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "%s finns och är ingen katalog" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "misslyckades ta status pÃ¥ %s\n" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" msgstr "misslyckades skapa länken \"%s\"" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "misslyckades kopiera filen till \"%s\"" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "klart.\n" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -3519,91 +3718,105 @@ msgstr "" "Du kan inspektera det som checkades ut med \"git status\"\n" "och försöka checka ut igen med \"git checkout -f HEAD\"\n" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." msgstr "Kunde inte hitta fjärrgrenen %s för att klona." -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "Kontrollerar anslutning..." + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" msgstr "fjärren sände inte alla nödvändiga objekt" -#: builtin/clone.c:610 +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "klart\n" + +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" "HEAD hos fjärren pekar pÃ¥ en obefintlig referens, kan inte checka ut.\n" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" msgstr "kunde inte checka ut arbetskatalogen" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "För mÃ¥nga argument." -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." msgstr "Du mÃ¥ste ange ett arkiv att klona." -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "flaggorna --bare och --origin %s är inkompatibla." -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "flaggorna --bare och --separate-git-dir är inkompatibla." -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" msgstr "arkivet \"%s\" finns inte" -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "--depth ignoreras i lokala kloningar; använd file:// istället" -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "--local ignoreras" + +#: builtin/clone.c:808 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "destinationssökvägen \"%s\" finns redan och är inte en tom katalog." -#: builtin/clone.c:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." msgstr "arbetsträdet \"%s\" finns redan." -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "kunde inte skapa inledande kataloger för \"%s\"" -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "kunde inte skapa arbetskatalogen \"%s\"" -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" msgstr "Klonar till ett naket arkiv \"%s\"...\n" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "Klonar till \"%s\"...\n" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "Vet inte hur man klonar %s" -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" msgstr "Fjärrgrenen %s hittades inte i uppströmsarkivet %s" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." msgstr "Du verkar ha klonat ett tomt arkiv." @@ -3639,15 +3852,15 @@ msgstr "Spaltfyllnad mellan spalter" msgid "--command must be the first argument" msgstr "--command mÃ¥ste vara första argument" -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "git commit [flaggor] [--] <sökväg>..." -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "git status [flaggor] [--] <sökväg>..." -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3672,7 +3885,7 @@ msgstr "" "\n" " git commit --amend --reset-author\n" -#: builtin/commit.c:56 +#: builtin/commit.c:57 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" @@ -3682,109 +3895,127 @@ msgstr "" "blir den tom. Du kan köra kommandot pÃ¥ nytt med --allow-empty, eller\n" "sÃ¥ kan du ta bort incheckningen helt med \"git reset HEAD^\".\n" -#: builtin/commit.c:61 +#: builtin/commit.c:62 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 "" "Den tidigare \"cherry-pick\":en är nu tom, kanske pÃ¥ grund av en löst\n" "konflikt. Om du vill checka in den ändÃ¥ använder du:\n" "\n" " git commit --allow-empty\n" "\n" -"Annars använder du \"git reset\"\n" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "Använd annars \"git reset\"\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"Om du vill hoppa över incheckningen, använd:\n" +"\n" +" git reset\n" +"\n" +"\"git cherry-pick --continue\" kommer därefter att Ã¥teruppta\n" +"cherry-pick för Ã¥terstÃ¥ende incheckningar.\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "misslyckades packa upp HEAD:s trädobjekt" -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "kunde inte skapa temporär indexfil" -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "interaktiv tilläggning misslyckades" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "kunde inte skriva filen new_index" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "kan inte utföra en delvis incheckning under en sammanslagning." -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "kan inte utföra en delvis incheckning under en cherry-pick." -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "kan inte läsa indexet" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "kunde inte skriva temporär indexfil" -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "felaktig incheckning: %s" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "felformad \"--author\"-flagga" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "Felaktig indragningssträng: \"%s\"" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "kunde inte slÃ¥ upp incheckningen %s" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(läser loggmeddelande frÃ¥n standard in)\n" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "kunde inte läsa logg frÃ¥n standard in" -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "kunde inte läsa loggfilen \"%s\"" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "incheckningen har ett tomt meddelande" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "kunde inte läsa MERGE_MSG" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "kunde inte läsa SQUASH_MSG" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "kunde inte läsa \"%s\"" -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "kunde inte skriva incheckningsmall" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3799,7 +4030,7 @@ msgstr "" "\t%s\n" "och försöker igen.\n" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3814,7 +4045,7 @@ msgstr "" "\t%s\n" "och försöker igen.\n" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3824,7 +4055,7 @@ msgstr "" "med \"%c\" kommer ignoreras, och ett tomt meddelande avbryter " "incheckningen.\n" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3835,139 +4066,139 @@ msgstr "" "med \"%c\" kommer behÃ¥llas; du kan själv ta bort dem om du vill.\n" "Ett tomt meddelande avbryter incheckningen.\n" -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%sFörfattare: %s" -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "%sIncheckare: %s" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "Kan inte läsa indexet" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "Fel vid byggande av träd" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "Ange meddelandet en av flaggorna -m eller -F.\n" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "Hittade ingen befintlig författare med \"%s\"" -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Ogiltigt läge för ospÃ¥rade filer: \"%s\"" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "--long och -z är inkompatibla" + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "Kan inte använda bÃ¥de --reset-author och --author" -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "Du har inget att utöka." -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "Du är i mitten av en sammanslagning -- kan inte utöka." -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "Du är i mitten av en cherry-pick -- kan inte utöka." -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "Flaggorna --squash och --fixup kan inte användas samtidigt" -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "Endast en av -c/-C/-F/--fixup kan användas." -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "Flaggan -m kan inte kombineras med -c/-C/-F/--fixup." -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "--reset-author kan endast användas med -C, -c eller --amend." -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" "Endast en av --include/--only/--all/--interactive/--patch kan användas." -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "Du mÃ¥ste ange sökvägar tillsammans med --include/--only." -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "Smart... utöka den senaste med smutsigt index." -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "Explicita sökvägar angavs utan -i eller -o; antar --only sökvägar..." -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "Felaktigt städningsläge %s" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "Kan inte ange sökvägar med -a." -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "--long och -z är inkompatibla" - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" -msgstr "vis koncis status" +msgstr "visa koncis status" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "visa information om gren" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "maskinläsbar utdata" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "visa status i lÃ¥ngt format (standard)" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "terminera poster med NUL" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "läge" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "visa ospÃ¥rade filer, valfria lägen: alla, normal, no. (Standard: all)" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "visa ignorerade filer" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "när" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" @@ -3975,217 +4206,217 @@ msgstr "" "ignorera ändringar i undermoduler, valfritt när: all, dirty, untracked. " "(Default: all)" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "visa ospÃ¥rade filer i spalter" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "kunde inte slÃ¥ upp en precis skapad incheckning" -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "kunde inte tolka en precis skapad incheckning" -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "frÃ¥nkopplad HEAD" -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr " (rotincheckning)" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "undertryck sammanfattning efter framgÃ¥ngsrik incheckning" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "visa diff i mallen för incheckningsmeddelandet" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "Alternativ för incheckningsmeddelande" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "läs meddelande frÃ¥n fil" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "författare" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "överstyr författare för incheckningen" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "datum" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "överstyr datum för inchecknignen" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "meddelande" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" msgstr "incheckningsmeddelande" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "Ã¥teranvänd och redigera meddelande frÃ¥n angiven incheckning" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "Ã¥teranvänd meddelande frÃ¥n angiven incheckning" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" "använd autosquash-formaterat meddelande för att fixa angiven incheckning" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" "använd autosquash-formaterat meddelande för att slÃ¥ ihop med angiven " "incheckning" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "jag är nu författare av incheckningen (används med -C/-c/--amend)" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "lägg till Signed-off-by:" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "använd angiven mallfil" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "tvinga redigering av incheckning" -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "standard" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "hur blanksteg och #kommentarer skall tas bort frÃ¥n meddelande" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "inkludera status i mallen för incheckningsmeddelandet" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "nyckel-id" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "GPG-signera incheckning" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "Alternativ för incheckningens innehÃ¥ll" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "checka in alla ändrade filer" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "lägg till angivna filer till indexet för incheckning" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "lägg till filer interaktivt" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "lägg till ändringar interaktivt" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "checka endast in angivna filer" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "förbigÃ¥ pre-commit-krok" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "visa vad som skulle checkas in" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "lägg till föregÃ¥ende incheckning" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "förbigÃ¥ post-rewrite-krok" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "ok att registrera en tom ändring" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "ok att registrera en ändring med tomt meddelande" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "kunde inte tolka HEAD:s incheckning" -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "kunde inte öppna \"%s\" för läsning" -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Trasig MERGE_HEAD-fil (%s)" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "kunde inte läsa MERGE_MODE" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "kunde inte läsa incheckningsmeddelande: %s" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "Avbryter incheckning; meddelandet inte redigerat.\n" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "Avbryter pÃ¥ grund av tomt incheckningsmeddelande.\n" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "kunde inte skriva incheckningsobjekt" -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "kunde inte lÃ¥sa HEAD-referens" -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "kunde inte uppdatera HEAD-referens" -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -4200,115 +4431,123 @@ msgstr "" msgid "git config [options]" msgstr "git config [flaggor]" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "Konfigurationsfilens plats" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "använd global konfigurationsfil" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "använd systemets konfigurationsfil" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" msgstr "använd arkivets konfigurationsfil" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "använd angiven konfigurationsil" -#: builtin/config.c:56 +#: builtin/config.c:57 +msgid "blob-id" +msgstr "blob-id" + +#: builtin/config.c:57 +msgid "read config from given blob object" +msgstr "läs konfiguration frÃ¥n givet blob-objekt" + +#: builtin/config.c:58 msgid "Action" msgstr "Ã…tgärd" -#: builtin/config.c:57 +#: builtin/config.c:59 msgid "get value: name [value-regex]" msgstr "hämta värde: namn [värde-reguttr]" -#: builtin/config.c:58 +#: builtin/config.c:60 msgid "get all values: key [value-regex]" msgstr "hämta alla värden: nyckel [värde-reguttr]" -#: builtin/config.c:59 +#: builtin/config.c:61 msgid "get values for regexp: name-regex [value-regex]" msgstr "hämta värden för reguttr: namn-reguttr [värde-reguttr]" -#: builtin/config.c:60 +#: builtin/config.c:62 msgid "replace all matching variables: name value [value_regex]" msgstr "ersätt alla motsvarande variabler: namn värde [värde-reguttr]" -#: builtin/config.c:61 +#: builtin/config.c:63 msgid "add a new variable: name value" msgstr "lägg till en ny variabel: namn värde" -#: builtin/config.c:62 +#: builtin/config.c:64 msgid "remove a variable: name [value-regex]" msgstr "ta bort en variabel: namn [värde-reguttr]" -#: builtin/config.c:63 +#: builtin/config.c:65 msgid "remove all matches: name [value-regex]" msgstr "ta bort alla träffar: namn [värde-reguttr]" -#: builtin/config.c:64 +#: builtin/config.c:66 msgid "rename section: old-name new-name" msgstr "byt namn pÃ¥ sektion: gammalt-namn nytt-namn" -#: builtin/config.c:65 +#: builtin/config.c:67 msgid "remove a section: name" msgstr "ta bort en sektion: namn" -#: builtin/config.c:66 +#: builtin/config.c:68 msgid "list all" msgstr "visa alla" -#: builtin/config.c:67 +#: builtin/config.c:69 msgid "open an editor" msgstr "öppna textredigeringsprogram" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "plats" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "hitta den inställda färgen: [default]" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "hitta färginställningen: [stdout-is-tty]" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "Typ" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "värdet är \"true\" eller \"false\"" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "värdet är ett decimalt tal" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "värdet är --bool eller --int" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "värdet är en sökväg (fil- eller katalognamn)" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "Andra" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "terminera värden med NUL-byte" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "respektera inkluderingsdirektiv vid uppslag" @@ -4320,55 +4559,55 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "skriv storlekar i människoläsbart format" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "git describe [flaggor] <incheckning-igt>*" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "git describe [flaggor] --dirty" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" msgstr "den annoterade taggen %s inte tillgänglig" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" msgstr "den annoterade taggen %s har inget inbäddat namn" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" msgstr "taggen \"%s\" är i verkligheten \"%s\" här" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "Objektnamnet är inte giltigt: %s" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "%s är inte ett giltigt \"%s\"-objekt" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" msgstr "ingen tagg motsvarar \"%s\" exakt" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "söker för att beskriva %s\n" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "avslutade sökning pÃ¥ %s\n" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, c-format msgid "" "No annotated tags can describe '%s'.\n" @@ -4377,7 +4616,7 @@ msgstr "" "Inga annoterade taggar kan beskriva \"%s\".\n" "Det finns dock oannoterade taggar: testa --tags." -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" @@ -4386,12 +4625,12 @@ msgstr "" "Inga taggar kan beskriva \"%s\".\n" "Testa --always, eller skapa nÃ¥gra taggar." -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" msgstr "traverserade %lu incheckningar\n" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" @@ -4400,59 +4639,63 @@ msgstr "" "mer än %i taggar hittades; listar de %i senaste\n" "gav upp sökningen vid %s\n" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" msgstr "hitta taggen som kommer efter incheckningen" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "felsök sökstrategin pÃ¥ standard fel" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "använd alla referenser" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" msgstr "använd alla taggar, även oannoterade" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "använd alltid lÃ¥ngt format" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "följ endast första föräldern" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "skriv endast ut exakta träffar" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" msgstr "överväg de <n> nyaste taggarna (standard: 10)" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" msgstr "överväg endast taggar som motsvarar <mönster>" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" msgstr "visa förkortade incheckningsobjekt som standard" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "märke" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "lägg till <märke> pÃ¥ lortigt arbetsträd (standard: \"-dirty\")" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "--long är inkompatibel med --abbrev=0" -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "Inga namn hittades, kan inte beskriva nÃ¥got." -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" msgstr "--dirty är inkompatibelt med \"committish\"-värden" @@ -4461,31 +4704,26 @@ msgstr "--dirty är inkompatibelt med \"committish\"-värden" msgid "'%s': not a regular file or symlink" msgstr "\"%s\": inte en normal fil eller symbolisk länk" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "ogiltig flagga: %s" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" msgstr "Inte ett git-arkiv" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "objektet \"%s\" som angavs är felaktigt." -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "mer än %d träd angavs: \"%s\"" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "mer än tvÃ¥ blobbar angavs: \"%s\"" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "ej hanterat objekt \"%s\" angavs." @@ -4494,39 +4732,39 @@ msgstr "ej hanterat objekt \"%s\" angavs." msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [rev-list-flaggor]" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "visa förlopp efter <n> objekt" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" msgstr "välj hantering av signerade taggar" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" msgstr "välj hantering av taggar som har taggfiltrerade objekt" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "Dump märken till filen" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "Importera märken frÃ¥n filen" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" msgstr "Fejka taggare när taggen saknar en" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" msgstr "Skriv ut hela trädet för varje incheckning" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "Använd done-funktionen för att avsluta strömmen" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "Hoppa över skrivning av blob-data" @@ -4602,7 +4840,7 @@ msgstr "fördjupa historik för grund klon" msgid "convert to a complete repository" msgstr "konvertera till komplett arkiv" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "kat" @@ -4614,76 +4852,76 @@ msgstr "lägg till i början av undermodulens sökvägsutdata" msgid "default mode for recursion" msgstr "standardläge för rekursion" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" msgstr "Kunde inte hitta fjärr-referensen HEAD" -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "objektet %s hittades inte" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "[à jour]" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" msgstr "! %-*s %-*s -> %s (kan inte hämta i aktuell gren)" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "[refuserad]" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" msgstr "[uppdaterad tagg]" -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr " (kunde inte uppdatera lokal ref)" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" msgstr "[ny tagg]" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" msgstr "[ny gren]" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "[ny ref]" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "kunde inte uppdatera lokal ref" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "tvingad uppdatering" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "(ej snabbspolad)" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "kan inte öppna %s: %s\n" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "%s sände inte alla nödvändiga objekt\n" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "FrÃ¥n %.*s\n" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, c-format msgid "" "some local refs could not be updated; try running\n" @@ -4692,55 +4930,55 @@ msgstr "" "vissa lokala referenser kunde inte uppdateras; testa att köra\n" " \"git remote prune %s\" för att ta bort gamla grenar som stÃ¥r i konflikt" -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr " (%s kommer bli dinglande)" -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr " (%s har blivit dinglande)" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "[borttagen]" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "(ingen)" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "Vägrar hämta till aktuell gren %s i ett icke-naket arkiv" -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" msgstr "Vet inte hur man hämtar frÃ¥n %s" -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "Flaggan \"%s\" och värdet \"%s\" är inte giltigt för %s" -#: builtin/fetch.c:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "Flaggan \"%s\" ignoreras för %s\n" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" msgstr "Hämtar %s\n" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" msgstr "Kunde inte hämta %s" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." @@ -4748,32 +4986,32 @@ msgstr "" "Inget fjärrarkiv angavs. Ange antingen en URL eller namnet pÃ¥ ett\n" "fjärrarkiv som nya incheckningar skall hämtas frÃ¥n." -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." msgstr "Du mÃ¥ste ange namnet pÃ¥ en tagg." -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "--depth och --unshallow kan inte användas samtidigt" -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "--unshallow kan inte användas pÃ¥ ett komplett arkiv" -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" msgstr "fetch --all tar inte namnet pÃ¥ ett arkiv som argument" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" msgstr "fetch --all kan inte anges med referensspecifikationer" -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" msgstr "Fjärren eller fjärrgruppen finns inte: %s" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "Kan inte hämta frÃ¥n grupp och ange referensspecifikationer" @@ -4782,9 +5020,9 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" "git fmt-merge-msg [-m <meddelande>] [--log[=<n>]|--no-log] [--file <fil>]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "n" @@ -4943,220 +5181,220 @@ msgstr "git grep [flaggor] [-e] <mönster> [<rev>...] [[--] <sökväg>...]" msgid "grep: failed to create thread: %s" msgstr "grep: misslyckades skapa trÃ¥d. %s" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "Kunde inte byta katalog (chdir): %s" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" msgstr "kunde inte läsa träd (%s)" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "Kunde inte \"grep\" frÃ¥n objekt av typen %s" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "flaggan \"%c\" antar ett numeriskt värde" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "kan inte öppna \"%s\"" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" msgstr "sök i indexet istället för i arbetskatalogen" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "sök i innehÃ¥l som inte hanteras av git" -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "sök i bÃ¥de spÃ¥rade och ospÃ¥rade filer" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "sök även i ignorerade filer" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" -msgstr "vis rader som inte träffas" +msgstr "visa rader som inte träffas" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "skiftlägesokänslig sökning" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "matcha endast mönster vid ordgränser" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "hantera binärfiler som text" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "träffa inte mönster i binärfiler" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "gÃ¥ som mest ned <djup> nivÃ¥er" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "använd utökade POSIX-reguljära uttryck" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "använd grundläggande POSIX-reguljära uttryck (standard)" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "tolka mönster som fixerade strängar" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "använd Perlkompatibla reguljära uttryck" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "visa radnummer" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "visa inte filnamn" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "visa filnamn" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "visa filnamn relativa till toppkatalogen" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "visa endast filnamn istället för träffade rader" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "synonym för --files-with-matches" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "visa endast namn pÃ¥ filer utan träffar" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "skriv NUL efter filnamn" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "visa antal träffar istället för träffade rader" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "ljusmarkera träffar" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "skriv tomma rader mellan träffar frÃ¥n olika filer" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "visa filnamn endast en gÃ¥ng ovanför träffar frÃ¥n samma fil" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "visa <n> rader sammanhang före och efter träffar" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "visa <n> rader sammanhang före träffar" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "visa <n> rader sammanhang efter träffar" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "genväg för -C NUM" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "visa en rad med funktionsnamnet före träffen" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "visa den omkringliggande funktionen" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "läs mönster frÃ¥n fil" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "träffa <mönster>" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "kombinera mönster som anges med -e" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "ange träff med slutstatuskod utan utdata" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "visa endast träffar frÃ¥n filer som träffar alla mönster" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" msgstr "visa analysträd för grep-uttryck" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "bläddrare" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "visa träffade filer i filbläddraren" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "tillÃ¥t anropa grep(1) (ignoreras av detta bygge)" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "visa användning" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "inget mönster angavs." -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "--open-files-in-pager fungerar endast i arbetskatalogen" -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "--cached och --untracked kan inte användas med --no-index." -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "--no-index och --untracked kan inte användas med revisioner." -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "--[no-]exclude-standard kan inte användas för spÃ¥rat innehÃ¥ll." -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." msgstr "bÃ¥de --cached och träd angavs." @@ -5196,54 +5434,54 @@ msgstr "spara filen som den är utan filer" msgid "process file as it were from this path" msgstr "hantera filen som om den kom frÃ¥n sökvägen" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "visa alla tillgängliga kommandon" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "lista användbara vägledningar" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "visa manualsida" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "visa manual i webbläsare" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "visa info-sida" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "git help [--all] [--guides] [--man|--web|--info] [kommando]" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "okänt hjälpformat: %s" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "Misslyckades starta emacsclient." -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "Kunde inte tolka emacsclient-version." -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "emacsclient version \"%d\" för gammal (< 22)." -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "exec misslyckades för \"%s\": %s" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" @@ -5252,7 +5490,7 @@ msgstr "" "\"%s\": sökväg för man-visare som ej stöds.\n" "Använd \"man.<verktyg>.cmd\" istället." -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -5261,335 +5499,335 @@ msgstr "" "\"%s\": kommando för man-visare som stöds.\n" "Använd \"man.<verktyg>.path\" istället." -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "\"%s\": okänd man-visare." -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "ingen man-visare hanterade förfrÃ¥gan" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "ingen info-visare hanterade förfrÃ¥gan" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "Definierar attribut per sökväg" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "En Git-ordlista" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" msgstr "Ange avsiktligen ospÃ¥rade filer att ignorera" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" msgstr "Ange egenskaper för undermoduler" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" msgstr "Ange versioner och intervall i Git" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" msgstr "Introduktion till Git (för version 1.5.1 och senare)" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "Översikt över rekommenderade arbetsflöden med Git" -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "De vanliga Git-vägledningarna är:\n" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "användning: %s%s" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "\"git %s\" är ett alias för \"%s\"" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "objekttyp stämmer inte överens vid %s" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "objekt av oväntad typ" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "kan inte fylla %d byte" msgstr[1] "kan inte fylla %d byte" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "tidigt filslut" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "indataläsfel" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "använde fler byte än tillgängligt" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "paket för stort för nuvarande definition av off_t" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "kunde inte skapa \"%s\"" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "kan inte öppna paketfilen \"%s\"" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "paketsignatur stämmer inte överens" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "paketversion %<PRIu32> stöds ej" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "paketet har felaktigt objekt vid index %lu: %s" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "inflate returnerade %d" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "indexvärdespill för deltabasobjekt" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "deltabasindex utanför gränsen" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "okänd objekttyp %d" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "kan inte utföra \"pread\" pÃ¥ paketfil" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "för tidigt slut pÃ¥ paketfilen, %lu byte saknas" msgstr[1] "för tidigt slut pÃ¥ paketfilen, %lu byte saknas" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "allvarlig inflate-inkonsekvens" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "SHA1-KOLLISION UPPTÄCKT VID %s !" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "kunde inte läsa %s" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "kan inte läsa befintligt objekt %s" -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "ogiltigt blob-objekt %s" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "ogiltigt %s" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "Fel i objekt" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "Inte alla barnobjekt för %s kan nÃ¥s" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "misslyckades tillämpa delta" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "Tar emot objekt" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "Skapar index för objekt" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "paketet är trasigt (SHA1 stämmer inte)" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "kan inte utföra \"fstat\" pÃ¥ paketfil" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "paket har skräp i slutet" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "förvirrad bortom vanvett i parse_pack_objects()" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "Analyserar delta" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "kunde inte skapa trÃ¥d: %s" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "förvirrad bortom vanvett" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "slutfördes med %d lokala objekt" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "Oväntad svanschecksumma för %s (trasig disk?)" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "paketet har %d oanalyserat delta" msgstr[1] "paketet har %d oanalyserade delta" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "kunde inte utföra \"deflate\" pÃ¥ tillagt objekt (%d)" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "lokalt objekt %s är trasigt" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "fel vid stängning av paketfil" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "kan inte ta skriva \"keep\"-fil \"%s\"" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "akn inte stänga skriven \"keep\"-fil \"%s\"" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "kan inte spara paketfil" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "kan inte spara indexfil" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "felaktig pack.indexversion=%<PRIu32>" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "felaktigt antal trÃ¥dar angivet (%d)" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "trÃ¥dstöd saknas, ignorerar %s" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "Kan inte öppna befintlig paketfil \"%s\"" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "Kan inte öppna befintligt paket-idx-fil för \"%s\"" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "icke-delta: %d objekt" msgstr[1] "icke-delta: %d objekt" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "kedjelängd = %d: %lu objekt" msgstr[1] "kedjelängd = %d: %lu objekt" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "Kan inte gÃ¥ tillbaka till arbetskatalogen (cwd)" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "felaktig %s" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "--fix-thin kan inte användas med --stdin" -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "paketfilnamnet \"%s\" slutar inte med \".pack\"" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "--verify angavs utan paketfilnamn" @@ -5725,7 +5963,7 @@ msgstr "behörigheter" msgid "specify that the git repository is to be shared amongst several users" msgstr "ange att git-arkivet skall delas bland flera användare" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "var tyst" @@ -5757,340 +5995,353 @@ msgstr "Kan inte komma Ã¥t aktuell arbetskatalog" msgid "Cannot access work tree '%s'" msgstr "Kan inte komma Ã¥t arbetskatalogen \"%s\"" -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" msgstr "git log [<flaggor>] [<versionsintervall>] [[--] <sökväg>...]\n" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr " eller: git show [flaggor] <objekt>..." -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "undertryck diff-utdata" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "visa källkod" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "Använd e-postmappningsfil" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "dekoreringsflaggor" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "Slututdata: %d %s\n" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "Kunde inte läsa objektet %s" -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "Okänd typ: %d" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "format.headers utan värde" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "namnet pÃ¥ utdatakatalogen är för lÃ¥ngt" -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "Kan inte öppna patchfilen %s" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." msgstr "Behöver precis ett intervall." -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." msgstr "Inte ett intervall." -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "Omslagsbrevet behöver e-postformat" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "tokigt in-reply-to: %s" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" msgstr "git format-patch [flaggor] [<sedan> | <revisionsintervall>]" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "TvÃ¥ utdatakataloger?" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "använd [PATCH n/m] även för en ensam patch" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "använd [PATCH] även för flera patchar" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "skriv patcharna pÃ¥ stnadard ut" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "generera ett följebrev" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "använd enkel nummersekvens för utdatafilnamn" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "sfx" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "använd <sfx> istället för \".patch\"" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "börja numrera patchar pÃ¥ <n> istället för 1" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "markera serien som N:te försök" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "Använd [<prefix>] istället för [PATCH]" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "spara filerna i <katalog>" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "ta inte bort eller lägg till [PATCH]" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "skriv inte binära diffar" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "ta inte med patchar som motsvarar en uppströmsincheckning" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "visa patchformat istället för standard (patch + stat)" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "E-post" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "huvud" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "lägg till e-posthuvud" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "epost" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "Lägg till mottagarhuvud (\"To:\")" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "Lägg till kopiehuvud (\"Cc:\")" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "ident" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "sätt FrÃ¥n-adress till <ident> (eller incheckare om ident saknas)" + +#: builtin/log.c:1199 msgid "message-id" msgstr "meddelande-id" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "Gör det första brevet ett svar till <meddelande-id>" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "gräns" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "bifoga patchen" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "gör patchen ett inline-objekt" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "aktivera brevtrÃ¥dning, typer: shallow, deep" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "signatur" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "lägg till signatur" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "visa inte filnamn för patchar" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "ogiltig ident-rad: %s" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "-n och -k kan inte användas samtidigt." -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "--subject-prefix och -k kan inte användas samtidigt." -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "kan inte använda --name-only" -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "kan inte använda --name-status" -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "kan inte använda --check" -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "standard ut, eller katalog, vilken skall det vara?" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "Kunde inte skapa katalogen \"%s\"" -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "Misslyckades skapa utdatafiler" -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" msgstr "git cherry [-v] [<uppström> [<huvud> [<gräns>]]]" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" msgstr "Kunde inte hitta en spÃ¥rad fjärrgren, ange <uppström> manuellt.\n" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" msgstr "Okänd incheckning %s" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "git ls-files [flaggor] [<fil>...]" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" msgstr "identifiera filstatus med taggar" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "använd smÃ¥ bokstäver för \"anta oförändrade\"-filer" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "visa cachade filer i utdata (standard)" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "visa borttagna filer i utdata" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "visa modifierade filer i utdata" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "visa andra filer i utdata" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "visa ignorerade filer i utdata" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" msgstr "visa köat innehÃ¥lls objektnamn i utdata" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "visa filer i filsystemet som behöver tas bort" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "visa endast namn för \"andra\" kataloger" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "visa inte tomma kataloger" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "visa ej sammanslagna filer i utdata" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "visa \"resolve-undo\"-information" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "hoppa över filer som motsvarar mönster" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "exkludera mönster som läses frÃ¥n <fil>" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "läs ytterligare per-katalog-exkluderingsmönster frÃ¥n <fil>" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "lägg till git:s standardexkluderingar" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "gör utdata relativ till projektets toppkatalog" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "om en <fil> inte är indexet, betrakta det som ett fel" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" msgstr "träd-igt" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "lÃ¥tsas att sökvägar borttagna sedan <träd-igt> fortfarande finns" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "visa felsökningsutdata" @@ -6142,170 +6393,170 @@ msgstr "git merge [flaggor] <meddelande> HEAD <incheckning>" msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "flaggan \"m\" behöver ett värde" -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" msgstr "Kunde inte hitta sammanslagningsstrategin \"%s\".\n" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "Tillgängliga strategier är:" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "Tillgängliga skräddarsydda strategier är:" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" msgstr "visa inte en diffstat när sammanslagningen är färdig" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" msgstr "visa en diffstat när sammanslagningen är färdig" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "(synonym till --stat)" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "" "lägg till (som mest <n>) poster frÃ¥n shortlog till incheckningsmeddelandet" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" msgstr "skapa en ensam incheckning istället för en sammanslagning" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" msgstr "utför en incheckning om sammanslagningen lyckades (standard)" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" msgstr "redigera meddelande innan incheckning" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "tillÃ¥t snabbspolning (standard)" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "avbryt om snabbspolning inte är möjlig" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" msgstr "Bekräfta att den namngivna incheckningen har en giltig GPG-signatur" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "strategi" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" msgstr "sammanslagninsstrategi att använda" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "alternativ=värde" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" msgstr "alternativ för vald sammanslagningsstrategi" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "incheckningsmeddelande för (icke snabbspolande) sammanslagning" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" msgstr "avbryt den pÃ¥gÃ¥ende sammanslagningen" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "kunde köra stash." -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "stash misslyckades" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "inte ett giltigt objekt: %s" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "read-tree misslyckades" -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr " (inget att platta till)" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" msgstr "Tillplattningsincheckning -- uppdaterar inte HEAD\n" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "Skriver SQUASH_MSG" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "Avslutar SQUASH_MSG" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" msgstr "Inget sammanslagningsmeddelande -- uppdaterar inte HEAD\n" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" msgstr "\"%s\" verkar inte peka pÃ¥ en incheckning" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Felaktig branch.%s.mergeoptions-sträng: %s" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" msgstr "git write-tree misslyckades skriva ett träd" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." msgstr "Hanterar inte nÃ¥got annat än en sammanslagning av tvÃ¥ huvuden." -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "Felaktig flagga för merge-recursive: -X%s" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "kunde inte skriva %s" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "Kunde inte läsa frÃ¥n \"%s\"" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" "Checkar inte in sammanslagningen; använd \"git commit\" för att slutföra " "den.\n" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6321,53 +6572,48 @@ msgstr "" "Rader som inleds med \"%c\" kommer ignoreras, och ett tomt meddelande\n" "avbryter incheckningen.\n" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." msgstr "Tomt incheckningsmeddelande." -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "Underbart.\n" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" "Kunde inte slÃ¥ ihop automatiskt; fixa konflikter och checka in resultatet.\n" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" msgstr "\"%s\" är inte en incheckning" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." msgstr "Inte pÃ¥ nÃ¥gon gren." -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." msgstr "Ingen fjärr för aktuell gren." -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "Ingen standarduppström angiven för aktuell gren." -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" +msgid "No remote-tracking branch for %s from %s" msgstr "Ingen fjärrspÃ¥rande gren för %s frÃ¥n %s" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "%s - inte nÃ¥got vi kan slÃ¥ ihop" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "Det finns ingen sammanslagning att avbryta (MERGE_HEAD saknas)." -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6375,11 +6621,11 @@ msgstr "" "Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n" "Checka in dina ändringar innan du kan slÃ¥ ihop." -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)." -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6387,102 +6633,103 @@ msgstr "" "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n" "Checka in dina ändringar innan du kan slÃ¥ ihop." -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)." -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "Du kan inte kombinera --squash med --no-ff." -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "Du kan inte kombinera --no-ff med --ff-only." - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt." -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" msgstr "Kan endast slÃ¥ ihop en enda incheckning i ett tomt huvud." -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" msgstr "Stöder inte en tillplattningsincheckning pÃ¥ ett tomt huvud ännu" -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud" -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - inte nÃ¥got vi kan slÃ¥ ihop" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" "Incheckningen %s har en obetrodd GPG-signatur som pÃ¥stÃ¥s vara gjord av %s." -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "" "Incheckningen %s har en felaktig GPG-signatur som pÃ¥stÃ¥s vara gjord av %s." #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "Incheckning %s har inte nÃ¥gon GPG-signatur." -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "Incheckningen %s har en korrekt GPG-signatur av %s\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "Uppdaterar %s..%s\n" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "Försöker riktigt enkel sammanslagning i indexet...\n" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "Nej.\n" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "Kan inte snabbspola, avbryter." -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "Ã…terspolar trädet till orört...\n" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" msgstr "Försöker sammanslagninsstrategin %s...\n" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "Sammanslagning med strategin %s misslyckades.\n" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "Använder %s för att förbereda lösning för hand.\n" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -6649,47 +6896,51 @@ msgstr "Byter namn pÃ¥ %s till %s\n" msgid "renaming '%s' failed" msgstr "misslyckades byta namn pÃ¥ \"%s\"" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." msgstr "git name-rev [flaggor] <incheckning>..." -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "git name-rev [flaggor] --all" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "git name-rev [flaggor] --stdin" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "skriv endast namn (ingen SHA-1)" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" msgstr "använd endast taggar för att namnge incheckningar" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "använd endast referenser som motsvarar <mönster>" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" msgstr "lista alla incheckningar som kan nÃ¥s alla referenser" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "läs frÃ¥n standard in" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "tillÃ¥t att skriva \"odefinierade\" namn" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "avreferera taggar i indata (används internt)" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "git notes [--ref <anteckningsref>] [list [<objekt>]]" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6697,12 +6948,12 @@ msgstr "" "git notes [--ref <anteckningsref>] add [-f] [-m <medd> | -F <fil> | (-c | -" "C) <objekt>] [<objekt>]" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "" "git notes [--ref <anteckningsref>] copy [-f] <frÃ¥n-objekt> <till-objekt>" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6710,221 +6961,200 @@ msgstr "" "git notes [--ref <anteckningsref>] append [-m <medd> | -F <fil> | (-c | -C) " "<objekt>] [<objekt>]" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "git notes [--ref <anteckningsref>] edit [<objekt>]" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "git notes [--ref <anteckningsref>] show [<objekt>]" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "" "git notes [--ref <anteckningsref>] merge [-v | -q] [-s <strategi> ] " "<anteckningsref>" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "git notes merge --commit [-v | -q]" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "git notes merge --abort [-v | -q]" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "git notes [--ref <anteckningsref>] remove [<objekt>...]" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "git notes [--ref <anteckningsref>] prune [-n | -v]" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "git notes [--ref <anteckningsref>] get-ref" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "git notes [list [<objekt>]]" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "git notes add [<flaggor>] [<objekt>]" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "git notes copy [<flaggor>] <frÃ¥n-objekt> <till-objekt>" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "git notes copy --stdin [<frÃ¥n-objekt> <till-objekt>]..." -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "git notes append [<flaggor>] [<objekt>]" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "git notes edit [<objekt>]" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "git notes show [<objekt>]" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "git notes merge [<flaggor>] <anteckningsref>" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "git notes merge --commit [<flaggor>]" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "git notes merge --abort [<flaggor>]" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "git notes remove [<objekt>]" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "git notes prune [<flaggor>]" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "git notes get-ref" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "kunde inte starta \"show\" för objektet \"%s\"" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "kunde inte läsa utdata frÃ¥n \"show\"" -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "kunde inte avsluta \"show\" för objektet \"%s\"" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "kunde inte skapa filen \"%s\"" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "Ange innehÃ¥ll för anteckningen med antingen -m eller -F" -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "Tar bort anteckning för objektet %s\n" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "kunde inte skriva anteckningsobjekt" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "Anteckningens innehÃ¥ll har lämnats kvar i %s" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "kunde inte läsa \"%s\"" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "kunde inte öppna eller läsa \"%s\"" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "Kunde inte slÃ¥ upp \"%s\" som en giltig referens." -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "Kunde inte läsa objektet \"%s\"." -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "Kan inte checka in oinitierat/orefererat anteckningsträd" - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "Felaktigt värde för notes.rewriteMode: '%s'" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "Vägrar skriva över anteckningar i %s (utanför refs/notes/)" - -#. TRANSLATORS: The first %s is the name of the -#. environment variable, the second %s is its value -#: builtin/notes.c:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "Felaktigt värde pÃ¥ %s: \"%s\"" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "Felaktig indatarad: \"%s\"." -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "Misslyckades kopiera anteckningar frÃ¥n \"%s\" till \"%s\"" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "för mÃ¥nga parametrar" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "Inga anteckningar hittades för objektet %s." -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "anteckningsinnehÃ¥ll som sträng" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "anteckningsinnehÃ¥ll i en fil" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "objekt" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "Ã¥teranvänd och redigera angivet anteckningsobjekt" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "Ã¥teranvänd angivet anteckningsobjekt" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "ersätt befintliga anteckningar" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -6933,24 +7163,24 @@ msgstr "" "Kan inte lägga till anteckningar. Hittade befintliga anteckningar för " "objektet %s. Använd \"-f\" för att skriva över befintliga anteckningar" -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "Skriver över befintliga anteckningar för objektet %s\n" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "läs objekt frÃ¥n standard in" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "läs omskrivningsinställning för <kommando> (implicerar --stdin)" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "för fÃ¥ parametrar" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -6959,12 +7189,12 @@ msgstr "" "Kan inte kopiera anteckningar. Hittade befintliga anteckningar för objektet " "%s. Använd \"-f\" för att skriva över befintliga anteckningar" -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "Anteckningar pÃ¥ källobjektet %s saknas. Kan inte kopiera." -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" @@ -6973,15 +7203,15 @@ msgstr "" "Flaggorna -m/-F/-c/-C rekommenderas inte för underkommandot \"edit\".\n" "Använd \"git notes add -f -m/-F/-c/-C\" istället.\n" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "Allmänna flaggor" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" msgstr "Flaggor för sammanslagning" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" @@ -6989,46 +7219,46 @@ msgstr "" "läs konflikter i anteckningar med angiven strategi (manual/ours/theirs/union/" "cat_sort_uniq)" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "Checkar in ej sammanslagna anteckningar" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "" "färdigställ sammanslagning av anteckningar genom att checka in ej " "sammanslagna anteckningar" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" msgstr "Avbryt lösning av sammanslagning av anteckningar" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" msgstr "avbryt sammanslagning av anteckningar" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "Objektet %s har ingen anteckning\n" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "försök att ta bort icke-existerande anteckningar är inte ett fel" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "läs objektnamn frÃ¥n standard in" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "anteckningar-ref" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "använd anteckningar frÃ¥n <anteckningsref>" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "Okänt underkommando: %s" @@ -7264,7 +7494,7 @@ msgstr "" " git push %s %s\n" "%s" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7279,7 +7509,7 @@ msgstr "" "\n" " git push %s HEAD:<namn-pÃ¥-fjärrgren>\n" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7292,12 +7522,12 @@ msgstr "" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "Den aktuella grenen %s har flera uppströmsgrenar, vägrar sända." -#: builtin/push.c:139 +#: builtin/push.c:142 #, c-format msgid "" "You are pushing to remote '%s', which is not the upstream of\n" @@ -7308,7 +7538,7 @@ msgstr "" "aktuella grenen \"%s\", utan att tala om för mig vad som\n" "skall sändas för att uppdatera fjärrgrenen." -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7342,26 +7572,26 @@ msgstr "" "liknande läget \"current\" istället för \"simple\" om du ibland använder\n" "äldre versioner av Git.)" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" "Du angav inga referensspecifikationer att sända, och push.default är " "\"nothing\"." -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "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" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Uppdateringar avvisades dÃ¥ änden pÃ¥ din befintliga gren är bakom\n" -"dess fjärrmotsvarighet. SlÃ¥ ihop fjärrändringarna (t.ex. \"git pull\")\n" -"innan du sänder igen.\n" +"dess fjärrmotsvarighet. Integrera fjärrändringarna (t.ex\n" +"\"git pull ....\") innan du sänder igen.\n" "Se avsnittet \"Note about fast-forward\" i \"git push --help\" för detaljer." -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "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" @@ -7375,37 +7605,37 @@ msgstr "" "endast\n" "sända aktuell gren." -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "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" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Uppdateringar avvisades dÃ¥ änden pÃ¥ en gren som sänds in är bakom dess\n" -"fjärrmotsvarighet. Checka ut grenen och slÃ¥ ihop fjärrändringarna (t.ex.\n" -"\"git pull\") innan du sänder igen.\n" +"fjärrmotsvarighet. Checka ut grenen och integrera fjärrändringarna (t.ex.\n" +"\"git pull ...\") innan du sänder igen.\n" "Se avsnittet \"Note about fast-forward\" i \"git push --help\" för detaljer." -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Uppdateringar avvisades dÃ¥ fjärren innehÃ¥ller ändringar som du inte\n" "har lokalt. Det beror oftast pÃ¥ att ett annat arkiv har sänt in samma\n" -"referenser. Det kan vara en idé att först slÃ¥ ihop fjärrändringarna\n" -"(t.ex. \"git pull\") innan du sänder igen.\n" +"referenser. Det kan vara en idé att först integrera fjärrändringarna\n" +"(t.ex. \"git pull ...\") innan du sänder igen.\n" "Se avsnittet \"Note about fast-forwards\" i \"git push --help\" för detaljer." -#: builtin/push.c:231 +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "Uppdateringarna avvisades eftersom taggen redan finns pÃ¥ fjärren." -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" @@ -7416,22 +7646,22 @@ msgstr "" "pekar pÃ¥ nÃ¥got som inte är en incheckning, utan att använda flaggan\n" "\"--force\".\n" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "Sänder till %s\n" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "misslyckades sända vissa referenser till \"%s\"" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" msgstr "felaktigt arkiv \"%s\"" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7452,87 +7682,87 @@ msgstr "" "\n" " git push <namn>\n" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "--all och --tags är inkompatibla" -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" msgstr "--all kan inte kombineras med referensspecifikationer" -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "--mirror och --tags är inkompatibla" -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" msgstr "--mirror kan inte kombineras med referensspecifikationer" -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "--all och --mirror är inkompatibla" -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" msgstr "arkiv" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "sänd alla referenser" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "spegla alla referenser" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "ta bort referenser" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" msgstr "sänd taggar (kan inte användas med --all eller --mirror)" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "tvinga uppdateringar" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "kontrollera" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" msgstr "styr rekursiv insändning av undermoduler" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "använd tunna paket" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "program för att ta emot paket" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" msgstr "ställ in uppström för git pull/status" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "ta bort lokalt borttagna referenser" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "förbigÃ¥ pre-push-krok" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" msgstr "sänd in saknade men relevanta taggar" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "--delete är imkompatibel med --all, --mirror och --tags" -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "--delete kan inte användas utan referenser" @@ -7546,70 +7776,80 @@ msgstr "" "[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" "index-output=<fil>] (--empty | <träd-igt1> [<träd-igt2> [<träd-igt3>]])" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" msgstr "skriv resulterande index till <fil>" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" msgstr "töm bara indexet" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" msgstr "Sammanslagning" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" msgstr "utför en sammanslagning i tillägg till en läsning" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" msgstr "3-vägssammanslagning om sammanslagning pÃ¥ filnivÃ¥ ej krävs" -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" msgstr "3-vägssammanslagning när det finns tillägg och borttagningar" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "som -m, men kasta bort ej sammanslagna poster" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "<underkatalog>/" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" msgstr "läs in trädet i indexet under <underkatalog>/" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" msgstr "uppdatera arbetskatalogen med resultatet frÃ¥n sammanslagningen" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "gitignore" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "tillÃ¥t explicit ignorerade filer att skrivas över" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" msgstr "kontrollera inte arbetskatalogen efter sammanslagning" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" msgstr "uppdatera inte indexet eller arbetskatalogen" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "hoppa över att applicera filter för gles utcheckning" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "felsök unpack-trees" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "\"%s\" för \"%s\" är inte en giltig tidsstämpel" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "\"%s\" är inte en giltig tidsstämpel" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "git remote [-v | --verbose]" @@ -8183,96 +8423,96 @@ msgstr "Kunde inte hitta träder för HEAD." msgid "Failed to find tree of %s." msgstr "Kunde inte hitta träder för %s." -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" msgstr "HEAD är nu pÃ¥ %s" -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." msgstr "Kan inte utföra en %s Ã¥terställning mitt i en sammanslagning." -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "var tyst, rapportera endast fel" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" msgstr "Ã¥terställ HEAD och index" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" msgstr "Ã¥terställ endast HEAD" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" msgstr "Ã¥terställ HEAD, index och arbetskatalog" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" msgstr "Ã¥terställ HEAD men behÃ¥ll lokala ändringar" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." msgstr "Kunde inte slÃ¥ upp \"%s\" som en giltig revision." -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "Kan inte tolka objektet \"%s\"" -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." msgstr "Kunde inte slÃ¥ upp \"%s\" som ett giltigt träd." -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "--patch är inkompatibel med --{hard,mixed,soft}" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "" "--mixed rekommenderas inte med sökvägar; använd \"git reset -- <sökvägar>\"." -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." msgstr "Kan inte göra %s Ã¥terställning med sökvägar." -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" msgstr "%s Ã¥terställning tillÃ¥ts inte i ett naket arkiv" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." msgstr "Kunde inte Ã¥terställa indexfilen till versionen \"%s\"." -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" msgstr "Oköade ändringar efter Ã¥terställning:" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." msgstr "Kunde inte skriva ny indexfil." -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "git rev-parse --parseopt [options] -- [<argument>...]" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "behÃ¥ll \"--\" sänt som argument" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "sluta tolka efter första argument som inte är flagga" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -8303,146 +8543,171 @@ msgstr "git cherry-pick [flaggor] <incheckning-igt>..." msgid "git cherry-pick <subcommand>" msgstr "git cherry-pick <underkommando>" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "%s: %s kan inte användas med %s" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "avsluta revert- eller cherry-pick-sekvens" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "Ã¥teruppta revert- eller cherry-pick-sekvens" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "avbryt revert- eller cherry-pick-sekvens" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" msgstr "checka inte in automatiskt" -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" msgstr "redigera incheckningsmeddelandet" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "nummer pÃ¥ förälder" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" msgstr "sammanslagninsstrategi" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "alternativ" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" msgstr "alternativ för sammanslagningsstrategi" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" msgstr "lägg till incheckningsnamn" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "tillÃ¥t snabbspolning" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" msgstr "behÃ¥ll incheckningar som börjar som tomma" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" msgstr "tillÃ¥t incheckningar med tomt meddelande" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" msgstr "behÃ¥ll redundanta, tomma incheckningar" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "programfel" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "\"revert\" misslyckades" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "\"cherry-pick\" misslyckades" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "git rm [flaggor] [--] <fil>..." -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 +msgid "" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "" +"följande undermodul (eller en av dess nästlade undermoduler)\n" +"använder en .git-katalog:" +msgstr[1] "" +"följande undermoduler (eller en av deras nästlade undermoduler)\n" +"använder en .git-katalog:" + +#: builtin/rm.c:70 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"undermodulen \"%s\" (eller en av dess undermoduler) använder en .git-" -"katalog\n" +"\n" "(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 msgid "" -"'%s' has staged content different from both the file and the HEAD\n" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "" +"följande fil har köat innehÃ¥ll som skiljer sig bÃ¥de frÃ¥n filen och HEAD:" +msgstr[1] "" +"följande filer har köat innehÃ¥ll som skiljer sig bÃ¥de frÃ¥n filen och HEAD:" + +#: builtin/rm.c:235 +msgid "" +"\n" "(use -f to force removal)" msgstr "" -"\"%s\" har köat ändringar som skiljer sig bÃ¥de frÃ¥n filen och HEAD\n" +"\n" "(använd -f för att tvinga borttagning)" -#: builtin/rm.c:180 -#, c-format -msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" -msgstr "" -"\"%s\" har köade ändringar i indexet\n" -"(använd --cached för att behÃ¥lla filen eller -f för att tvinga borttagning)" +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "följande fil har ändringar köade i indexet:" +msgstr[1] "följande filer har ändringar köade i indexet:" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"\"%s\" har lokala ändringar\n" +"\n" "(använd --cached för att behÃ¥lla filen eller -f för att tvinga borttagning)" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "följande fil har lokala ändringar:" +msgstr[1] "följande filer har lokala ändringar:" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "lista inte borttagna filer" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" msgstr "ta bara bort frÃ¥n indexet" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "överstyr à jour-testet" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "tillÃ¥t rekursiv borttagning" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "avsluta med nollstatus även om inget träffades" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "tar inte bort \"%s\" rekursivt utan -r" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "git rm: kan inte ta bort %s" @@ -8456,23 +8721,23 @@ msgstr "git shortlog [<flaggor>] [<versionsintervall>] [[--] <sökväg>...]" msgid "Missing author: %s" msgstr "Författare saknas: %s" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" msgstr "sortera utdata enligt antal incheckningar per författare" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" msgstr "Undertryck beskrivningar, visa bara antal incheckningar" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "Visa e-postadress för varje författare" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "w[,i1[,i2]]" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "Radbryt utdata" @@ -8536,23 +8801,23 @@ msgstr "visa referenser som inte kan nÃ¥s frÃ¥n nÃ¥gon annan referens" msgid "show commits in topological order" msgstr "visa incheckningar i topologisk ordning" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" msgstr "visa endast incheckningar inte pÃ¥ den första grenen" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" msgstr "visa sammanslagningar som endast kan nÃ¥s frÃ¥n en spets" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" -msgstr "visa incheckningar där ingen förälder kommer före dess barn" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" +msgstr "sortera topologiskt, behÃ¥ll datumordning när möjligt" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "<n>[,<bas>]" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" msgstr "visa <n> nyaste refloggposter med början pÃ¥ bas" @@ -8568,35 +8833,35 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "git show-ref --exclude-existing[=mönster] < reflista" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" msgstr "visa endast taggar (kan kombineras med huvuden)" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" msgstr "visa endast huvuden (kan kombineras med taggar)" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "striktare referenskontroll, kräver exakt referenssökväg" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" -msgstr "visa HEAD-referensen" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" +msgstr "visa HEAD-refrens, även när den skulle filtreras ut" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" msgstr "avreferera taggar till objekt-id" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "visa SHA1-hash endast med <n> siffror" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "visa inte resultat pÃ¥ standard ut (användbart med --verify)" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "visa referenser frÃ¥n standard in som inte finns i lokalt arkiv" @@ -9011,7 +9276,7 @@ msgstr "visa trädobjekt för underkatalogen <prefix>" msgid "only useful for debugging" msgstr "endast användbart vid felsökning" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" @@ -9021,19 +9286,23 @@ msgstr "" "nÃ¥gra konceptvägledningar. Se \"git help <kommando>\" eller \"git help\n" "<koncept>\" för att läsa mer om specifika underkommandon och koncept." -#: parse-options.h:156 +#: parse-options.h:144 +msgid "expiry date" +msgstr "giltig till" + +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "ingen funktion (bakÃ¥tkompatibilitet)" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "var mer pratsam" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "var mer tyst" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "använd <n> siffror för att visa SHA-1:or" @@ -9090,8 +9359,8 @@ msgid "Move or rename a file, a directory, or a symlink" msgstr "Flytta eller byt namn pÃ¥ en fil, katalog eller symbolisk länk" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" -msgstr "Hämta frÃ¥n och slÃ¥ ihop med annat arkiv eller en lokal gren" +msgid "Fetch from and integrate with another repository or a local branch" +msgstr "Hämta frÃ¥n och integrera med annat arkiv eller en lokal gren" #: common-cmds.h:22 msgid "Update remote refs along with associated objects" @@ -9136,11 +9405,11 @@ msgstr "" #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" -"När du har löst problemet kör du \"$cmdline --resolved\".\n" +"När du har löst problemet kör du \"$cmdline --continue\".\n" "Om du vill hoppa över patchen kör du istället \"$cmdline --skip\".\n" "För att Ã¥terställa originalgrenen och avbryta kör du \"$cmdline --abort\"." @@ -9196,25 +9465,34 @@ msgstr "" "Flaggan -b/--binary har varit utan funktion länge, och\n" "kommer tas bort. Vi ber dig att inte använda den längre." -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "tidigare rebase-katalog $dotest finns fortfarande, men mbox angavs." -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "Bestäm dig. --skip eller --abort?" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" +"Kvarbliven katalog $dotest hittades.\n" +"Använd \"git am --abort\" för att ta bort den." + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "Lösningsoperation pÃ¥gÃ¥r inte, vi Ã¥terupptar inte." -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "Smutsigt index: kan inte tillämpa patchar (smutsiga: $files)" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -9225,32 +9503,32 @@ msgstr "" "Om du vill hoppa över patchen kör du istället \"$cmdline --skip\".\n" "För att Ã¥terställa originalgrenen och avbryta kör du \"$cmdline --abort\"." -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "Patchen har inte nÃ¥gon giltig e-postadress." -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "kan inte vara interaktiv om standard in inte är ansluten till en terminal." -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" msgstr "Incheckningskroppen är:" #. 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:764 +#: git-am.sh:783 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "Tillämpa? Y=ja/N=nej/E=redigera/V=visa patch/A=godta alla " -#: git-am.sh:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "Tillämpar: $FIRSTLINE" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" @@ -9260,7 +9538,7 @@ msgstr "" "Om det inte är nÃ¥got kvar att köa kan det hända att nÃ¥got annat redan\n" "introducerat samma ändringar; kanske du bör hoppa över patchen." -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" @@ -9268,16 +9546,16 @@ msgstr "" "Du har fortfarande sökvägar som inte slagits samman i ditt index\n" "glömde du använda \"git add\"?" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "Inga ändringar -- Patchen har redan tillämpats." -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "Patchen misslyckades vid $msgnum $FIRSTLINE" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" @@ -9286,7 +9564,7 @@ msgstr "" "En kopia av patchen som misslyckades finns i:\n" " $dotest/patch" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "tillämpar pÃ¥ en tom historik" @@ -9489,7 +9767,7 @@ msgstr "Kan inte slÃ¥ ihop flera grenar i ett tomt huvud." msgid "Cannot rebase onto multiple branches" msgstr "Kan inte utföra en \"rebase\" ovanpÃ¥ flera grenar" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9500,31 +9778,50 @@ msgstr "" "Om du vill hoppa över patchen kör du istället \"git rebase --skip\".\n" "För att Ã¥terställa originalgrenen och avbryta kör du \"git rebase --abort\"." +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "Tillämpade autostash." + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "Kan inte spara $stash_sha1" + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"Tillämpning av autostash gav konflikter.\n" +"Dina ändringar är säkra i stashen.\n" +"Du kan när som helst använda \"git stash pop\" eller \"git stash drop\".\n" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." msgstr "Kroken pre-rebase vägrade ombaseringen." -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." msgstr "Det verkar som en git-am körs. Kan inte ombasera." -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "Flaggan --exec mÃ¥ste användas tillsammans med flaggan --interactive" -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" msgstr "Ingen ombasering pÃ¥gÃ¥r?" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "Ã…tgärden --edit-todo kan endast användas under interaktiv ombasering." -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" msgstr "Kan inte läsa HEAD" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" @@ -9532,12 +9829,12 @@ msgstr "" "Du mÃ¥ste redigera alla sammanslagningskonflikter och\n" "därefter markera dem som lösta med git add" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "Kunde inte flytta tillbaka till $head_name" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9558,57 +9855,66 @@ msgstr "" "och kör programmet igen. Jag avslutar ifall du fortfarande har\n" "nÃ¥got av värde där." -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" msgstr "ogiltig uppström $upstream_name" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" msgstr "$onto_name: mer än en sammanslagningsbas finns" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" msgstr "$onto_name: ingen sammanslagningsbas finns" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" msgstr "Peka pÃ¥ en giltig incheckning: $onto_name" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" msgstr "ödesdigert: ingen sÃ¥dan gren: $branch_name" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "Kan inte utföra \"autostash\"" + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "Skapade autostash: $stash_abbrev" + +#: git-rebase.sh:528 msgid "Please commit or stash them." msgstr "Checka in eller använd \"stash\" pÃ¥ dem." -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." msgstr "Aktuell gren $branch_name är à jour." -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "Aktuell gren $branch_name är à jour, ombasering framtvingad." -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "Ändringar frÃ¥n $mb till $onto:" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "" "Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpÃ¥ det..." -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "Snabbspolade $branch_name till $onto_name." @@ -9641,6 +9947,11 @@ msgstr "Kan inte ta bort temporärt index (kan inte inträffa)" msgid "Cannot record working tree state" msgstr "Kan inte registrera tillstÃ¥nd för arbetskatalog" +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "Kan inte uppdatera $ref_stash med $w_commit" + #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the #. second line correspond to "error: ". So you should line @@ -9651,7 +9962,7 @@ msgstr "Kan inte registrera tillstÃ¥nd för arbetskatalog" #. $ 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' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" @@ -9660,120 +9971,139 @@ msgstr "" "fel: felaktig flagga för \"stash save\": $option\n" " För att ange ett meddelande, använd git stash save -- \"$option\"" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "Inga lokala ändringar att spara" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "" +"Följande ospÃ¥rade ändringar skulle INTE sparas utan mÃ¥ste tas bort med " +"\"stash save\":" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "" +"Avbryter. Överväg att använda antingen flaggan --force eller --include-" +"untracked." + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "Kan inte initiera \"stash\"" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "Kan inte spara aktuell status" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" msgstr "Kan inte ta bort ändringar i arbetskatalogen" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "Ingen \"stash\" hittades." -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" msgstr "För mÃ¥nga revisioner angivna: $REV" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "$reference är inte en giltig referens." -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" msgstr "\"$args\" är inte en \"stash\"-liknande incheckning" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "\"$args\" är inte en \"stash\"-referens" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" msgstr "kan inte uppdatera indexet" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" msgstr "Kan inte tillämpa en \"stash\" mitt i en sammanslagning" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." msgstr "Konflikter i indexet. Testa utan --index." -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" msgstr "Kunde inte spara indexträd" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" msgstr "Kan inte ta bort ändrade filer ur kön" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." msgstr "Indexet har inte tagits ur kön." -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" msgstr "Kastade ${REV} ($s)" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "${REV}: Kunde inte kasta \"stash\"-post" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" msgstr "Inget grennamn angavs" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "(För att Ã¥terställa dem, skriv \"git stash apply\")" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "kan inte ta bort en komponent frÃ¥n url:en \"$remoteurl\"" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" msgstr "" "Hittade ingen undermodulmappning i .gitmodules för sökvägen \"$sm_path\"" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" msgstr "Misslyckades klona \"$url\" till undermodulsökvägen \"$sm_path\"" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" -msgstr "Gitkatalog \"$a\" ingÃ¥r i underkatalogsökvägen \"$b\" eller omvänt" +msgstr "Gitkatalog \"$a\" ingÃ¥r i undermodulsökvägen \"$b\" eller omvänt" + +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" +msgstr "Relativ sökväg kan enfast användas frÃ¥n arbetskatalogens toppnivÃ¥" -#: git-submodule.sh:349 +#: git-submodule.sh:413 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" msgstr "arkiv-URL: \"$repo\" mÃ¥ste vara absolut eller börja med ./|../" -#: git-submodule.sh:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" msgstr "\"$sm_path\" finns redan i indexet" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -9784,22 +10114,22 @@ msgstr "" "$sm_path\n" "Använd -f om du verkligen vill lägga till den" -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" msgstr "Lägger till befintligt arkiv i \"$sm_path\" i indexet" -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" msgstr "\"$sm_path\" finns redan och är inte ett giltigt git-arkiv" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "En git-katalog för \"$sm_name\" hittades lokalt med fjärr(ar):" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" @@ -9807,14 +10137,14 @@ msgstr "" "För att Ã¥teranvända den lokala git-katalogen istället för att pÃ¥ nytt klona " "frÃ¥n" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "" "använd flaggan \"--force\". Om den lokala git-katalogen inte är riktigt arkiv" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " @@ -9823,210 +10153,270 @@ msgstr "" "eller om du är osäker pÃ¥ vad det innebär, välj nytt namn med flaggan \"--name" "\"." -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." msgstr "Aktiverar lokal git-katalog för undermodulen \"$sm_name\" pÃ¥ nytt." -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" msgstr "Kan inte checka ut undermodulen \"$sm_path\"" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" msgstr "Misslyckades lägga till undermodulen \"$sm_path\"" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" msgstr "Misslyckades registrera undermodulen \"$sm_path\"" -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" -msgstr "GÃ¥r in i \"$prefix$sm_path\"" +msgid "Entering '$prefix$displaypath'" +msgstr "GÃ¥r in i \"$prefix$displaypath\"" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." msgstr "" -"Stoppar pÃ¥ \"$sm_path\"; skriptet returnerade en status skild frÃ¥n noll." +"Stoppar pÃ¥ \"$prefix$displaypath\"; skriptet returnerade en status skild " +"frÃ¥n noll." -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" -msgstr "Hittade ingen url för undermodulsökvägen \"$sm_path\" i .gitmodules" +msgid "No url found for submodule path '$displaypath' in .gitmodules" +msgstr "" +"Hittade ingen url för undermodulsökvägen \"$displaypath\" i .gitmodules" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" -msgstr "Misslyckades registrera url för underkatalogsökväg \"$sm_path\"" +msgid "Failed to register url for submodule path '$displaypath'" +msgstr "Misslyckades registrera url för undermodulsökväg \"$displaypath\"" -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" -msgstr "Undermodulen \"$name\" ($url) registrerad för sökvägen \"$sm_path\"" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" +msgstr "" +"Undermodulen \"$name\" ($url) registrerad för sökvägen \"$displaypath\"" -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" +msgid "Failed to register update mode for submodule path '$displaypath'" msgstr "" -"Misslyckades registrera uppdateringsläge för undermodulsökväg \"$sm_path\"" +"Misslyckades registrera uppdateringsläge för undermodulsökväg \"$displaypath" +"\"" -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "Använd \".\" om du verkligen vill avinitiera alla undermoduler" -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" -msgstr "Undermodulens arbetskatalog \"$sm_path\" innehÃ¥ller katalogen \".git\"" +msgid "Submodule work tree '$displaypath' contains a .git directory" +msgstr "" +"Undermodulens arbetskatalog \"$displaypath\" innehÃ¥ller katalogen \".git\"" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" "(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" msgstr "" -"Undermodulens arbetskatalog \"$sm_path\" har lokala ändringar; \"-f\" kastar " -"bort dem" +"Undermodulens arbetskatalog \"$displaypath\" har lokala ändringar; \"-f\" " +"kastar bort dem" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" -msgstr "Rensade katalogen \"$sm_path\"" +msgid "Cleared directory '$displaypath'" +msgstr "Rensade katalogen \"$displaypath\"" -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" -msgstr "Kunde inte ta bort underkatalogens arbetskatalog \"$sm_path\"" +msgid "Could not remove submodule work tree '$displaypath'" +msgstr "Kunde inte ta bort undermodulens arbetskatalog \"$displaypath\"" -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" -msgstr "Kunde inte skapa tom undermodulskatalog \"$sm_path\"" +msgid "Could not create empty submodule directory '$displaypath'" +msgstr "Kunde inte skapa tom undermodulskatalog \"$displaypath\"" -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" -msgstr "Undermodulen \"$name\" ($url) avregistrerad för sökvägen \"$sm_path\"" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" +msgstr "" +"Undermodulen \"$name\" ($url) avregistrerad för sökvägen \"$displaypath\"" -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -"Undermodulen \"$prefix$sm_path\" har inte initierats\n" +"Undermodulen \"$displaypath\" har inte initierats\n" "Kanske du vill köra \"update --init\"?" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" -msgstr "" -"Kan inte hitta aktuell revision i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Unable to find current revision in submodule path '$displaypath'" +msgstr "Kan inte hitta aktuell revision i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" msgstr "Kan inte hämta i undermodulsökväg \"$sm_path\"" -#: git-submodule.sh:777 +#: git-submodule.sh:857 +#, sh-format +msgid "Unable to fetch in submodule path '$displaypath'" +msgstr "Kan inte hämta i undermodulsökväg \"$displaypath\"" + +#: git-submodule.sh:871 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" +msgstr "Kan inte ombasera \"$sha1\" i undermodulsökvägen \"$displaypath\"" + +#: git-submodule.sh:872 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" -msgstr "Kan inte hämta i undermodulsökväg \"$prefix$sm_path\"" +msgid "Submodule path '$displaypath': rebased into '$sha1'" +msgstr "Undermodulsökvägen \"$displaypath\": ombaserade in i \"$sha1\"" -#: git-submodule.sh:791 +#: git-submodule.sh:877 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Kan inte ombasera \"$sha1\" i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" +msgstr "Kan inte slÃ¥ ihop \"$sha1\" i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:792 +#: git-submodule.sh:878 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" -msgstr "Undermodulsökvägen \"$prefix$sm_path\": ombaserade in i \"$sha1\"" +msgid "Submodule path '$displaypath': merged in '$sha1'" +msgstr "Undermodulsökvägen \"$displaypath\": sammanslagen i \"$sha1\"" -#: git-submodule.sh:797 +#: git-submodule.sh:883 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Kan inte slÃ¥ ihop \"$sha1\" i undermodulsökvägen \"$prefix$sm_path\"" +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" +msgstr "" +"Misslyckades köra \"$command $sha1\" i undermodulsökvägen \"$prefix$sm_path\"" -#: git-submodule.sh:798 +#: git-submodule.sh:884 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" -msgstr "Undermodulsökvägen \"$prefix$sm_path\": sammanslagen i \"$sha1\"" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" +msgstr "Undermodulsökvägen \"$prefix$sm_path\": \"$command $sha1\"" -#: git-submodule.sh:803 +#: git-submodule.sh:889 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Kan inte checka ut \"$sha1\" i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" +msgstr "Kan inte checka ut \"$sha1\" i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:804 +#: git-submodule.sh:890 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" -msgstr "Undermodulsökvägen \"$prefix$sm_path\": checkade ut \"$sha1\"" +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "Undermodulsökvägen \"$displaypath\": checkade ut \"$sha1\"" -#: git-submodule.sh:831 +#: git-submodule.sh:917 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" -msgstr "Misslyckades rekursera in i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "Misslyckades rekursera in i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:939 +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "Flaggan --cached kan inte användas med flaggan --files" #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "oväntat läge $mod_dst" -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" -msgstr " Varning: $name innehÃ¥ller inte incheckning $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" +msgstr " Varning: $display_name innehÃ¥ller inte incheckningen $sha1_src" -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" -msgstr " Varning: $name innehÃ¥ller inte incheckning $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" +msgstr " Varning: $display_name innehÃ¥ller inte incheckningen $sha1_dst" -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" -msgstr " Varning: $name innehÃ¥ller inte incheckningar $sha1_src och $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" +msgstr "" +" Varning: $display_name innehÃ¥ller inte incheckningarna $sha1_src och " +"$sha1_dst" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "blob" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" msgstr "Undermoduler ändrade men inte uppdaterade:" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" msgstr "Undermodulers ändringar att checka in:" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" msgstr "Misslyckades rekursera in i undermodulsökvägen \"$sm_path\"" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" -msgstr "Synkroniserar undermodul-url för \"$prefix$sm_path\"" +msgid "Synchronizing submodule url for '$displaypath'" +msgstr "Synkroniserar undermodul-url för \"$displaypath\"" + +#~ msgid " (fix conflicts and then run \"git am --resolved\")" +#~ msgstr " (rätta konflikter och kör sedan \"git am --resolved\")" + +#~ msgid " (all conflicts fixed: run \"git commit\")" +#~ msgstr " (alla konflikter har rättats: kör \"git commit\")" + +#~ msgid "more than %d trees given: '%s'" +#~ msgstr "mer än %d träd angavs: \"%s\"" + +#~ msgid "You cannot combine --no-ff with --ff-only." +#~ msgstr "Du kan inte kombinera --no-ff med --ff-only." + +#~ msgid "" +#~ "submodule '%s' (or one of its nested submodules) uses a .git directory\n" +#~ "(use 'rm -rf' if you really want to remove it including all of its " +#~ "history)" +#~ msgstr "" +#~ "undermodulen \"%s\" (eller en av dess undermoduler) använder en .git-" +#~ "katalog\n" +#~ "(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)" + +#~ msgid "" +#~ "'%s' has changes staged in the index\n" +#~ "(use --cached to keep the file, or -f to force removal)" +#~ msgstr "" +#~ "\"%s\" har köade ändringar i indexet\n" +#~ "(använd --cached för att behÃ¥lla filen eller -f för att tvinga " +#~ "borttagning)" + +#~ msgid "show commits where no parent comes before its children" +#~ msgstr "visa incheckningar där ingen förälder kommer före dess barn" + +#~ msgid "show the HEAD reference" +#~ msgstr "visa HEAD-referensen" + +#~ msgid "Unable to fetch in submodule path '$prefix$sm_path'" +#~ msgstr "Kan inte hämta i undermodulsökväg \"$prefix$sm_path\"" + +#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'" +#~ msgstr "Misslyckades rekursera in i undermodulsökvägen \"$prefix$sm_path\"" #~ msgid "It took %.2f seconds to enumerate untracked files. 'status -uno'" #~ msgstr "Det tog %.2f sekunder att räkna ospÃ¥rade filer. \"status -uno\"" @@ -10187,70 +10577,3 @@ msgstr "Synkroniserar undermodul-url för \"$prefix$sm_path\"" #~ msgid "Failed to write current notes tree to database" #~ msgstr "Kunde inte skriva aktuellt anteckningsträd till databasen" - -# FIXME: Untranslatable! -# -#~ msgid "Refusing to %s notes in %s (outside of refs/notes/)" -#~ msgstr "Vägrar %s anteckningar i %s (utanför refs/notes/)" - -#~ msgid "add" -#~ msgstr "add" - -#~ msgid "copy" -#~ msgstr "copy" - -#~ msgid "show" -#~ msgstr "show" - -#~ msgid "remove" -#~ msgstr "remove" - -#~ msgid "prune" -#~ msgstr "prune" - -#~ msgid "The current branch %s is not tracking anything." -#~ msgstr "Den aktuella grenen %s spÃ¥rar ingenting." - -#~ msgid "No destination configured to push to." -#~ msgstr "Har inte ställt in nÃ¥gon destination att sända till." - -#~ msgid "Reflog action message too long: %.*s..." -#~ msgstr "Reflog-händelsemeddelande för lÃ¥ngt: %.*s..." - -#~ msgid "Could not read commit message of %s" -#~ msgstr "Kunde inte läsa incheckningsmeddelandet för %s" - -#~ msgid "Could not extract author email from %s" -#~ msgstr "Kunde inte hämta författarens e-postadress frÃ¥n %s" - -#~ msgid "Could not extract author time from %s" -#~ msgstr "Kunde inte hämta författartid frÃ¥n %s" - -#~ msgid "cherry-pick --ff cannot be used with --signoff" -#~ msgstr "cherry-pick --ff kan inte användas med --signoff" - -#~ msgid "cherry-pick --ff cannot be used with --no-commit" -#~ msgstr "cherry-pick --ff kan inte användas med --no-commit" - -#~ msgid "cherry-pick --ff cannot be used with -x" -#~ msgstr "cherry-pick --ff kan inte användas med -x" - -#~ msgid "cherry-pick --ff cannot be used with --edit" -#~ msgstr "cherry-pick --ff kan inte användas med --edit" - -#~ msgid "committer info too long." -#~ msgstr "incheckarinformation för lÃ¥ng." - -#~ msgid "" -#~ "\n" -#~ "#\n" -#~ "# Write a tag message\n" -#~ "#\n" -#~ msgstr "" -#~ "\n" -#~ "#\n" -#~ "# Skriv ett taggmeddelande\n" -#~ "#\n" - -#~ msgid "signing key value too long (%.10s...)" -#~ msgstr "signeringsnyckelvärdet för lÃ¥ngt (%.10s...)" @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git-v1.8.4-rc0-1-g28b3cff\n" +"Project-Id-Version: git-v1.8.4-rc1-22-gb8ecf23\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-07-26 14:19+0800\n" -"PO-Revision-Date: 2013-07-27 09:44+0700\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-08-06 14:28+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" @@ -38,9 +38,9 @@ msgid "" "or use 'git commit -a'." msgstr "" "Sá»a chúng trong cây là m việc,\n" -"và sau đó dùng lệnh “git add/rm <táºp-tin>†dà nh riêng\n" +"và sau đó dùng lệnh \"git add/rm <táºp-tin>\" dà nh riêng\n" "cho việc đánh dấu táºp tin cần giải quyết và tạo lần chuyển giao,\n" -"hoặc là dùng lệnh “git commit -aâ€." +"hoặc là dùng lệnh \"git commit -a\"." #: archive.c:10 msgid "git archive [options] <tree-ish> [<path>...]" @@ -273,7 +273,7 @@ msgstr "“%s†không giống nhÆ° táºp tin v2 bundle (định dạng dump cá msgid "unrecognized header: %s%s (%d)" msgstr "phần đầu (header) không được thừa nháºn: %s%s (%d)" -#: bundle.c:89 builtin/commit.c:683 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "không thể mở “%sâ€" @@ -344,7 +344,7 @@ msgstr "index-pack đã chết" #: commit.c:53 #, c-format msgid "could not parse %s" -msgstr "không thể phân tÃch %s" +msgstr "không thể phân tÃch cú pháp %s" #: commit.c:55 #, c-format @@ -511,20 +511,20 @@ msgstr "“%sâ€: %s" msgid "'%s': short read %s" msgstr "“%sâ€: Ä‘á»c ngắn %s" -#: help.c:213 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "các lệnh git sẵn có trong thÆ° mục “%sâ€:" -#: help.c:220 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "các lệnh git sẵn sà ng để dùng từ má»™t nÆ¡i khác trong $PATH của bạn" -#: help.c:236 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "Những lệnh git hay được sá» dụng nhất là :" -#: help.c:293 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -533,11 +533,11 @@ msgstr "" "“%s†trông nhÆ° là má»™t lệnh git, nhÆ°ng chúng tôi không\n" "thể thá»±c thi nó. Có lẽ là lệnh git-%s đã bị há»ng?" -#: help.c:350 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "á»i chà . Hệ thống của bạn báo rằng chẳng có lệnh Git nà o cả." -#: help.c:372 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -546,17 +546,17 @@ msgstr "" "CẢNH BÃO: Bạn đã gá»i lệnh Git có tên “%sâ€, mà nó lại không có sẵn.\n" "Giả định rằng ý bạn là “%sâ€" -#: help.c:377 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "trong %0.1f giây má»™t cách tá»± Ä‘á»™ng..." -#: help.c:384 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: “%s†không phải là má»™t lệnh của git. Xem “git --helpâ€." -#: help.c:388 help.c:447 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -570,7 +570,7 @@ msgstr[1] "" "\n" "Có phải ý bạn là má»™t trong số những cái nà y không?" -#: help.c:443 +#: help.c:440 #, c-format msgid "%s: %s - %s" msgstr "%s: %s - %s" @@ -1222,7 +1222,7 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.object_name_warning false\"" +"running \"git config advice.objectNameWarning false\"" msgstr "" "Git thÆ°á»ng không bao giá» tạo tham chiếu mà nó kết thúc vá»›i 40 ký tá»± hex\n" "bởi vì nó sẽ bị bá» qua khi bạn chỉ định 40-hex. Những tham chiếu nà y\n" @@ -1234,7 +1234,7 @@ msgstr "" "tạo ra.\n" "Xin hãy kiểm tra những tham chiếu nà y và có thể xóa chúng Ä‘i. Tắt lá»i nhắn " "nà y\n" -"bằng cách chạy lệnh \"git config advice.object_name_warning false\"" +"bằng cách chạy lệnh \"git config advice.objectNameWarning false\"" #: sha1_name.c:1097 msgid "HEAD does not point to a branch" @@ -1806,7 +1806,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "trạng thái lệnh diff không nhÆ° mong đợi %c" -#: builtin/add.c:149 builtin/commit.c:238 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "Cáºp nháºt táºp tin gặp lá»—i" @@ -1858,14 +1858,14 @@ msgstr "" "Các Ä‘Æ°á»ng dẫn theo sau đây sẽ bị lá» Ä‘i bởi má»™t trong các táºp tin .gitignore " "của bạn:\n" -#: builtin/add.c:394 builtin/clean.c:851 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 #: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 #: builtin/rm.c:268 msgid "dry run" msgstr "chạy thá»" #: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 -#: builtin/commit.c:1201 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 #: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "chi tiết" @@ -1950,8 +1950,8 @@ msgstr "Không có gì được chỉ ra, không có gì được thêm và o.\n" msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Có lẽ bạn muốn là “git add .†phải không?\n" -#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:895 -#: builtin/commit.c:298 builtin/mv.c:82 builtin/rm.c:297 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "táºp tin ghi bảng mục lục bị há»ng" @@ -2819,8 +2819,8 @@ msgid "act on remote-tracking branches" msgstr "thao tác trên nhánh “remote-trackingâ€" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1414 builtin/commit.c:1415 -#: builtin/commit.c:1416 builtin/commit.c:1417 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "commit" @@ -3008,44 +3008,44 @@ msgstr "Cần má»™t kho chứa để mà tạo má»™t bundle." msgid "Need a repository to unbundle." msgstr "Cần má»™t kho chứa để mà bung má»™t bundle." -#: builtin/cat-file.c:303 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<kiểu>|--textconv) <đối tượng>" -#: builtin/cat-file.c:304 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <danh-sách-đối-tượng>" -#: builtin/cat-file.c:341 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<kiểu> là má»™t trong số: blob, tree, commit, tag" -#: builtin/cat-file.c:342 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "hiển thị kiểu đối tượng" -#: builtin/cat-file.c:343 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "hiển thị kÃch thÆ°á»›c đối tượng" -#: builtin/cat-file.c:345 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "thoát vá»›i 0 khi không có lá»—i" -#: builtin/cat-file.c:346 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "in ná»™i dung đối tượng dạng dá»… Ä‘á»c" -#: builtin/cat-file.c:348 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "vá»›i đối tượng blob, chạy lệnh textconv trên ná»™i dung của đối tượng" -#: builtin/cat-file.c:350 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "" "hiển thị thông tin và ná»™i dung của các đối tượng lấy từ đầu và o tiêu chuẩn" -#: builtin/cat-file.c:353 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "hiển thị các thông tin vỠđối tượng fed từ đầu và o tiêu chuẩn" @@ -3534,35 +3534,35 @@ msgstr "" "* - chá»n tất\n" " - (trống rá»—ng) kết thúc việc chá»n" -#: builtin/clean.c:491 +#: builtin/clean.c:515 #, c-format msgid "Huh (%s)?" msgstr "Hả (%s)?" -#: builtin/clean.c:634 +#: builtin/clean.c:658 #, c-format msgid "Input ignore patterns>> " msgstr "Mẫu để lá»c các táºp tin cần lá» Ä‘i đầu và o>>" -#: builtin/clean.c:671 +#: builtin/clean.c:695 #, c-format msgid "WARNING: Cannot find items matched by: %s" msgstr "CẢNH BÃO: Không tìm thấy các mục được khá»›p bởi: %s" -#: builtin/clean.c:692 +#: builtin/clean.c:716 msgid "Select items to delete" msgstr "Chá»n mục muốn xóa" -#: builtin/clean.c:732 +#: builtin/clean.c:756 #, c-format msgid "remove %s? " msgstr "gỡ bỠ“%sâ€?" -#: builtin/clean.c:757 +#: builtin/clean.c:781 msgid "Bye." msgstr "Tạm biệt." -#: builtin/clean.c:765 +#: builtin/clean.c:789 msgid "" "clean - start cleaning\n" "filter by pattern - exclude items from deletion\n" @@ -3580,62 +3580,62 @@ msgstr "" "help - hiển thị chÃnh trợ giúp nà y\n" "? - trợ giúp dà nh cho chá»n bằng cách nhắc" -#: builtin/clean.c:792 +#: builtin/clean.c:816 msgid "*** Commands ***" msgstr "*** Lệnh ***" -#: builtin/clean.c:793 +#: builtin/clean.c:817 msgid "What now" msgstr "Giá» thì sao" -#: builtin/clean.c:801 +#: builtin/clean.c:825 msgid "Would remove the following item:" msgid_plural "Would remove the following items:" msgstr[0] "Có muốn gỡ bá» mục sau đây không:" msgstr[1] "Có muốn gỡ bá» các mục sau đây không:" -#: builtin/clean.c:818 +#: builtin/clean.c:842 msgid "No more files to clean, exiting." msgstr "Không còn táºp-tin nà o để dá»n dẹp, Ä‘ang thoát ra." -#: builtin/clean.c:850 +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "không hiển thị tên của các táºp tin đã gỡ bá»" -#: builtin/clean.c:852 +#: builtin/clean.c:876 msgid "force" msgstr "ép buá»™c" -#: builtin/clean.c:853 +#: builtin/clean.c:877 msgid "interactive cleaning" msgstr "sá»a bằng cách tÆ°Æ¡ng tác" -#: builtin/clean.c:855 +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "gỡ bá» toà n bá»™ thÆ° mục" -#: builtin/clean.c:856 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 #: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "mẫu" -#: builtin/clean.c:857 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "thêm <mẫu> và o trong qui tắc bá» qua" -#: builtin/clean.c:858 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "đồng thá»i gỡ bá» cả các táºp tin bị bá» qua" -#: builtin/clean.c:860 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "chỉ gỡ bá» những táºp tin bị bá» qua" -#: builtin/clean.c:878 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "-x và -X không thể dùng cùng má»™t lúc vá»›i nhau" -#: builtin/clean.c:882 +#: builtin/clean.c:906 msgid "" "clean.requireForce set to true and neither -i, -n nor -f given; refusing to " "clean" @@ -3643,7 +3643,7 @@ msgstr "" "clean.requireForce được đặt thà nh true và không Ä‘Æ°a ra tùy chá»n -n mà cÅ©ng " "không -f; từ chối lệnh dá»n dẹp (clean)" -#: builtin/clean.c:885 +#: builtin/clean.c:909 msgid "" "clean.requireForce defaults to true and neither -i, -n nor -f given; " "refusing to clean" @@ -3983,107 +3983,125 @@ msgid "" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" "Lần cherry-pick trÆ°á»›c hiện nay trống rá»—ng, có lẽ là bởi vì sá»± phân giải xung " "Ä‘á»™t.\n" -"Nếu bạn muốn chuyển giao nó cho dù thế nà o Ä‘i nữa, sá» dụng:\n" +"Nếu bạn vẫn muốn chuyển giao nó cho dù thế nà o Ä‘i nữa, sá» dụng:\n" "\n" " git commit --allow-empty\n" "\n" -"Nếu không, hãy thá» dùng “git resetâ€\n" -#: builtin/commit.c:265 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "Nếu không được thì dùng lệnh \"git reset\"\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"Nếu bạn muốn bá» qua lần chuyển giao nà y thì dùng:\n" +"\n" +" git reset\n" +"\n" +"Thế thì \"git cherry-pick --continue\" sẽ phục hồi lại việc cherry-pick\n" +"những lần chuyển giao còn lại.\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "gặp lá»—i khi tháo dỡ HEAD đối tượng cây" -#: builtin/commit.c:307 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "không thể tạo bảng mục lục tạm thá»i" -#: builtin/commit.c:313 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "việc thêm tÆ°Æ¡ng tác gặp lá»—i" -#: builtin/commit.c:346 builtin/commit.c:367 builtin/commit.c:417 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "không thể ghi táºp tin lÆ°u bảng mục lục má»›i (new_index)" -#: builtin/commit.c:398 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "" "không thể thá»±c hiện việc chuyển giao (commit) cục bá»™ trong khi Ä‘ang được hòa " "trá»™n." -#: builtin/commit.c:400 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "" "không thể thá»±c hiện việc chuyển giao (commit) bá»™ pháºn trong khi Ä‘ang cherry-" "pick." -#: builtin/commit.c:410 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "không Ä‘á»c được bảng mục lục" -#: builtin/commit.c:430 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "không thể ghi táºp tin lÆ°u bảng mục lục tạm thá»i" -#: builtin/commit.c:521 builtin/commit.c:527 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "lần chuyển giao (commit) không hợp lệ: %s" -#: builtin/commit.c:549 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "đối số --author bị dị hình" -#: builtin/commit.c:569 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "Chuá»—i thụt lỠđầu dòng dị hình: “%sâ€" -#: builtin/commit.c:607 builtin/commit.c:640 builtin/commit.c:963 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "không thể tìm kiếm commit (lần chuyển giao) %s" -#: builtin/commit.c:619 builtin/shortlog.c:271 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(Ä‘ang Ä‘á»c thông Ä‘iệp nháºt ký từ đầu và o tiêu chuẩn)\n" -#: builtin/commit.c:621 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "không thể Ä‘á»c nháºt ký từ đầu và o tiêu chuẩn" -#: builtin/commit.c:625 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "không Ä‘á»c được tệp nháºt ký “%sâ€" -#: builtin/commit.c:631 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "lần chuyển giao (commit) có ghi chú trống rá»—ng" -#: builtin/commit.c:647 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "không thể Ä‘á»c MERGE_MSG" -#: builtin/commit.c:651 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "không thể Ä‘á»c SQUASH_MSG" -#: builtin/commit.c:655 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "Không thể Ä‘á»c “%sâ€." -#: builtin/commit.c:716 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "không thể ghi mẫu commit" -#: builtin/commit.c:727 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -4098,7 +4116,7 @@ msgstr "" "\t%s\n" "và thá» lại.\n" -#: builtin/commit.c:732 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -4113,7 +4131,7 @@ msgstr "" "\t%s\n" "và thá» lại.\n" -#: builtin/commit.c:744 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -4124,7 +4142,7 @@ msgstr "" "bắt đầu bằng “%c†sẽ được bá» qua, nếu phần chú thÃch rá»—ng sẽ hủy bá» lần " "chuyển giao (commit).\n" -#: builtin/commit.c:749 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -4136,148 +4154,148 @@ msgstr "" "bắt đầu bằng “%c†sẽ được bá» qua; bạn có thể xóa chúng Ä‘i nếu muốn thế.\n" "Phần chú thÃch nà y nếu trống rá»—ng sẽ hủy bá» lần chuyển giao (commit).\n" -#: builtin/commit.c:762 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%sTác giả: %s" -#: builtin/commit.c:769 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "%sNgÆ°á»i chuyển giao (commit): %s" -#: builtin/commit.c:789 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "không Ä‘á»c được bảng mục lục" -#: builtin/commit.c:826 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "Gặp lá»—i khi xây dá»±ng cây" -#: builtin/commit.c:841 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "Xin hãy áp dụng thông Ä‘iệp sá» dụng hoặc là tùy chá»n -m hoặc là -F.\n" -#: builtin/commit.c:938 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "Không tìm thấy tác giả có sẵn vá»›i “%sâ€" -#: builtin/commit.c:953 builtin/commit.c:1189 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Chế Ä‘á»™ cho các táºp tin không bị theo vết không hợp lệ “%sâ€" -#: builtin/commit.c:990 +#: builtin/commit.c:1009 msgid "--long and -z are incompatible" msgstr "hai tùy chá»n -long và -z không tÆ°Æ¡ng thÃch vá»›i nhau" -#: builtin/commit.c:1020 +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "Sá» dụng cả hai tùy chá»n --reset-author và --author không hợp lý" -#: builtin/commit.c:1031 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "Không có gì để amend (tu bổ) cả." -#: builtin/commit.c:1034 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "" "Bạn Ä‘ang ở giữa của quá trình hòa trá»™n -- không thể thá»±c hiện amend (tu bổ)." -#: builtin/commit.c:1036 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "" "Bạn Ä‘ang ở giữa của quá trình cherry-pick -- không thể thá»±c hiện amend (tu " "bổ)." -#: builtin/commit.c:1039 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "Các tùy chá»n --squash và --fixup không thể sá» dụng cùng vá»›i nhau" -#: builtin/commit.c:1049 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "Chỉ má»™t tùy chá»n trong số -c/-C/-F/--fixup được sá» dụng" -#: builtin/commit.c:1051 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "Tùy chá»n -m không thể được tổ hợp cùng vá»›i -c/-C/-F/--fixup." -#: builtin/commit.c:1059 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" "--reset-author chỉ có thể được sá» dụng vá»›i tùy chá»n -C, -c hay --amend." -#: builtin/commit.c:1076 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" "Chỉ má»™t trong các tùy chá»n --include/--only/--all/--interactive/--patch được " "sá» dụng." -#: builtin/commit.c:1078 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "Không Ä‘Æ°á»ng dẫn vá»›i các tùy chá»n --include/--only không hợp lý." -#: builtin/commit.c:1080 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "Giá»i... tu bổ cái cuối vá»›i bảng mục lục phi nghÄ©a." -#: builtin/commit.c:1082 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" "Những Ä‘Æ°á»ng dẫn rõ rà ng được chỉ ra không có tùy chá»n -i cÅ©ng không -o; Ä‘ang " "giả định --only những-Ä‘Æ°á»ng-dẫn..." -#: builtin/commit.c:1092 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "Chế Ä‘á»™ dá»n dẹp không hợp lệ %s" -#: builtin/commit.c:1097 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "Các Ä‘Æ°á»ng dẫn vá»›i tùy chá»n -a không hợp lý." -#: builtin/commit.c:1203 builtin/commit.c:1436 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "hiển thị trạng thái ở dạng súc tÃch" -#: builtin/commit.c:1205 builtin/commit.c:1438 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "hiển thị thông tin nhánh" -#: builtin/commit.c:1207 builtin/commit.c:1440 builtin/push.c:452 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "kết xuất dạng máy-có-thể-Ä‘á»c" -#: builtin/commit.c:1210 builtin/commit.c:1442 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "hiển thị trạng thái ở định dạng dà i (mặc định)" -#: builtin/commit.c:1213 builtin/commit.c:1445 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "chấm dứt các mục bằng NUL" -#: builtin/commit.c:1215 builtin/commit.c:1448 builtin/fast-export.c:667 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 #: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "chế Ä‘á»™" -#: builtin/commit.c:1216 builtin/commit.c:1448 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" "hiển thị các táºp tin chÆ°a được theo dõi dấu vết, các chế Ä‘á»™ tùy chá»n: all, " "normal, no. (Mặc định: all)" -#: builtin/commit.c:1219 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "hiển thị các táºp tin ẩn" -#: builtin/commit.c:1220 parse-options.h:154 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "khi" -#: builtin/commit.c:1221 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" @@ -4285,223 +4303,223 @@ msgstr "" "bá» qua các thay đổi trong mô-Ä‘un-con, tùy chá»n khi: all, dirty, untracked. " "(Mặc định: all)" -#: builtin/commit.c:1223 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "hiển thị danh sách các táºp-tin chÆ°a được theo dõi trong các cá»™t" -#: builtin/commit.c:1294 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "không thể tìm thấy lần chuyển giao (commit) má»›i hÆ¡n đã được tạo" -#: builtin/commit.c:1296 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "" "không thể phân tÃch cú pháp của đối tượng chuyển giao má»›i hÆ¡n đã được tạo" -#: builtin/commit.c:1337 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "đã rá»i khá»i HEAD" -#: builtin/commit.c:1339 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr " (root-commit)" -#: builtin/commit.c:1406 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "không hiển thị tổng kết sau khi chuyển giao thà nh công" -#: builtin/commit.c:1407 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "hiển thị sá»± khác biệt trong mẫu tin nhắn chuyển giao" -#: builtin/commit.c:1409 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "Các tùy chá»n ghi chú commit" -#: builtin/commit.c:1410 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "Ä‘á»c chú thÃch từ táºp tin" -#: builtin/commit.c:1411 +#: builtin/commit.c:1430 msgid "author" msgstr "tác giả" -#: builtin/commit.c:1411 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "ghi đè tác giả cho commit" -#: builtin/commit.c:1412 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "ngà y tháng" -#: builtin/commit.c:1412 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "ghi đè ngà y tháng cho commit" -#: builtin/commit.c:1413 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 #: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "thông Ä‘iệp" -#: builtin/commit.c:1413 +#: builtin/commit.c:1432 msgid "commit message" msgstr "chú thÃch của lần commit" -#: builtin/commit.c:1414 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "" "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho nhÆ°ng có cho sá»a chữa" -#: builtin/commit.c:1415 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho" -#: builtin/commit.c:1416 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" "dùng ghi chú có định dạng autosquash để sá»a chữa lần chuyển giao đã chỉ ra" -#: builtin/commit.c:1417 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" "dùng lá»i nhắn có định dạng tá»± Ä‘á»™ng nén để nén lại các lần chuyển giao đã chỉ " "ra" -#: builtin/commit.c:1418 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "" "lần chuyển giao nháºn tôi là tác giả (được dùng vá»›i tùy chá»n -C/-c/--amend)" -#: builtin/commit.c:1419 builtin/log.c:1160 builtin/revert.c:111 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "thêm dòng Signed-off-by:" -#: builtin/commit.c:1420 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "sá» dụng táºp tin mẫu đã cho" -#: builtin/commit.c:1421 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "ép buá»™c sá»a lần commit" -#: builtin/commit.c:1422 +#: builtin/commit.c:1441 msgid "default" msgstr "mặc định" -#: builtin/commit.c:1422 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "là m thế nà o để cắt bá» khoảng trắng và #ghichú từ mẩu tin nhắn" -#: builtin/commit.c:1423 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "bao gồm các trạng thái ghi mẫu ghi chú chuyển giao (commit)" -#: builtin/commit.c:1424 builtin/merge.c:230 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "id khóa" -#: builtin/commit.c:1425 builtin/merge.c:231 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "ký lần commit dùng GPG" #. end commit message options -#: builtin/commit.c:1428 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "Các tùy ná»™i dung ghi chú commit" -#: builtin/commit.c:1429 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "chuyển giao tất cả các táºp tin có thay đổi" -#: builtin/commit.c:1430 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "thêm các táºp tin đã chỉ ra và o bảng mục lục để chuyển giao (commit)" -#: builtin/commit.c:1431 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "thêm các táºp-tin bằng tÆ°Æ¡ng tác" -#: builtin/commit.c:1432 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "thêm các thay đổi bằng tÆ°Æ¡ng tác" -#: builtin/commit.c:1433 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "chỉ chuyển giao các táºp tin đã chỉ ra" -#: builtin/commit.c:1434 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "vòng qua móc (hook) pre-commit" -#: builtin/commit.c:1435 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "hiển thị xem cái gì có thể được chuyển giao" -#: builtin/commit.c:1446 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "tu bổ (amend) lần commit trÆ°á»›c" -#: builtin/commit.c:1447 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "vòng qua móc (hook) post-rewrite" -#: builtin/commit.c:1452 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "ok để ghi lại má»™t thay đổi trống rá»—ng" -#: builtin/commit.c:1455 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "ok để ghi các thay đổi vá»›i lá»i nhắn trống rá»—ng" -#: builtin/commit.c:1488 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "không thể phân tÃch commit (lần chuyển giao) HEAD" -#: builtin/commit.c:1526 builtin/merge.c:525 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "không thể mở “%s†để Ä‘á»c" -#: builtin/commit.c:1533 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Táºp tin MERGE_HEAD sai há»ng (%s)" -#: builtin/commit.c:1540 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "không thể Ä‘á»c MERGE_MODE" -#: builtin/commit.c:1559 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "không thể Ä‘á»c thông Ä‘iệp (message) commit (lần chuyển giao): %s" -#: builtin/commit.c:1573 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "" "Äang bá» qua việc chuyển giao (commit); bạn đã không biên soạn thông Ä‘iệp " "(message).\n" -#: builtin/commit.c:1578 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "" "Äang bá» qua lần chuyển giao (commit) bởi vì thông Ä‘iệp của nó trống rá»—ng.\n" -#: builtin/commit.c:1593 builtin/merge.c:861 builtin/merge.c:886 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "gặp lá»—i khi ghi đối tượng chuyển giao (commit)" -#: builtin/commit.c:1614 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "không thể khóa HEAD ref (tham chiếu)" -#: builtin/commit.c:1618 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "không thể cáºp nháºt ref (tham chiếu) HEAD" -#: builtin/commit.c:1629 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -9947,7 +9965,7 @@ msgstr "Không thể lÆ°u $stash_sha1" msgid "" "Applying autostash resulted in conflicts.\n" "Your changes are safe in the stash.\n" -"You can run \"git stash pop\" or \"git stash drop\" it at any time.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" msgstr "" "Ãp dụng autostash có hiệu quả trong các xung Ä‘á»™t.\n" "Các thay đổi của bạn an toà n trong stash (tạm cất Ä‘i).\n" diff --git a/po/zh_CN.po b/po/zh_CN.po index ff95140612..b7b46f14f0 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-07-26 14:19+0800\n" -"PO-Revision-Date: 2013-08-03 14:13+0800\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-08-06 14:45+0800\n" "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" "Language-Team: GitHub <https://github.com/gotgit/git/>\n" "Language: zh_CN\n" @@ -266,7 +266,7 @@ msgstr "'%s' ä¸åƒæ˜¯ä¸€ä¸ª v2 版本的包文件" msgid "unrecognized header: %s%s (%d)" msgstr "未能识别的包头:%s%s (%d)" -#: bundle.c:89 builtin/commit.c:683 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "ä¸èƒ½æ‰“å¼€ '%s'" @@ -506,20 +506,20 @@ msgstr "'%s':%s" msgid "'%s': short read %s" msgstr "'%s':读å–ä¸å®Œæ•´ %s" -#: help.c:213 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "在 '%s' 下å¯ç”¨çš„ git 命令" -#: help.c:220 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "在 $PATH 路径ä¸çš„其他地方å¯ç”¨çš„ git 命令" -#: help.c:236 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "最常用的 git 命令有:" -#: help.c:293 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -528,11 +528,11 @@ msgstr "" "'%s' åƒæ˜¯ä¸€ä¸ª git 命令,但å´æ— 法è¿è¡Œã€‚\n" "å¯èƒ½æ˜¯ git-%s å—æŸï¼Ÿ" -#: help.c:350 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "唉呀,您的系统ä¸æœªå‘现 Git 命令。" -#: help.c:372 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -541,17 +541,17 @@ msgstr "" "è¦å‘Šï¼šæ‚¨è¿è¡Œä¸€ä¸ªä¸å˜åœ¨çš„ Git 命令 '%s'。继ç»æ‰§è¡Œå‡å®šæ‚¨è¦è¦è¿è¡Œçš„\n" "是 '%s'" -#: help.c:377 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "在 %0.1f 秒钟åŽè‡ªåŠ¨è¿è¡Œ..." -#: help.c:384 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git:'%s' ä¸æ˜¯ä¸€ä¸ª git 命令。å‚è§ 'git --help'。" -#: help.c:388 help.c:447 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -565,7 +565,7 @@ msgstr[1] "" "\n" "您指的是这其ä¸çš„æŸä¸€ä¸ªä¹ˆï¼Ÿ" -#: help.c:443 +#: help.c:440 #, c-format msgid "%s: %s - %s" msgstr "%s:%s - %s" @@ -1204,7 +1204,7 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.object_name_warning false\"" +"running \"git config advice.objectNameWarning false\"" msgstr "" "Git 通常ä¸ä¼šåˆ›å»ºä¸€ä¸ªä»¥40ä½åå…进制å—符命åçš„å¼•ç”¨ï¼Œå› ä¸ºå½“ä½ æä¾›40ä½\n" "åå…进制å—符时将被忽略。ä¸è¿‡è¿™äº›å¼•ç”¨ä¹Ÿå¯èƒ½è¢«é”™è¯¯åœ°åˆ›å»ºã€‚例如:\n" @@ -1212,7 +1212,7 @@ msgstr "" " git checkout -b $br $(git rev-parse ...)\n" "\n" "当 \"$br\" 空白时一个40ä½åå…进制的引用将被创建。请检查这些引用,\n" -"å¯èƒ½éœ€è¦åˆ 除它们。用 \"git config advice.object_name_warning false\"" +"å¯èƒ½éœ€è¦åˆ 除它们。用 \"git config advice.objectNameWarning false\"\n" "命令关é—本消æ¯é€šçŸ¥ã€‚" #: sha1_name.c:1097 @@ -1786,7 +1786,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "æ„å¤–çš„å·®å¼‚çŠ¶æ€ %c" -#: builtin/add.c:149 builtin/commit.c:238 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "更新文件失败" @@ -1835,14 +1835,14 @@ msgstr "ä¸èƒ½åº”用 '%s'" msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "ä¸‹åˆ—è·¯å¾„æ ¹æ®æ‚¨çš„一个 .gitignore 文件而被忽略:\n" -#: builtin/add.c:394 builtin/clean.c:851 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 #: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 #: builtin/rm.c:268 msgid "dry run" msgstr "æ¼”ä¹ " #: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 -#: builtin/commit.c:1201 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 #: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "冗长输出" @@ -1923,8 +1923,8 @@ msgstr "æ²¡æœ‰æŒ‡å®šæ–‡ä»¶ï¼Œä¹Ÿæ²¡æœ‰æ–‡ä»¶è¢«æ·»åŠ ã€‚\n" msgid "Maybe you wanted to say 'git add .'?\n" msgstr "也许您想è¦æ‰§è¡Œ 'git add .'?\n" -#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:895 -#: builtin/commit.c:298 builtin/mv.c:82 builtin/rm.c:297 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "索引文件æŸå" @@ -2777,8 +2777,8 @@ msgid "act on remote-tracking branches" msgstr "作用于远程跟踪分支" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1414 builtin/commit.c:1415 -#: builtin/commit.c:1416 builtin/commit.c:1417 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "æ交" @@ -2959,43 +2959,43 @@ msgstr "需è¦ä¸€ä¸ªç‰ˆæœ¬åº“æ¥åˆ›å»ºåŒ…。" msgid "Need a repository to unbundle." msgstr "需è¦ä¸€ä¸ªç‰ˆæœ¬åº“æ¥è§£åŒ…。" -#: builtin/cat-file.c:303 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<类型>|--textconv) <对象>" -#: builtin/cat-file.c:304 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <对象列表>" -#: builtin/cat-file.c:341 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<类型> å¯ä»¥æ˜¯å…¶ä¸ä¹‹ä¸€ï¼šblobã€treeã€commitã€tag" -#: builtin/cat-file.c:342 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "显示对象类型" -#: builtin/cat-file.c:343 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "显示对象大å°" -#: builtin/cat-file.c:345 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "当没有错误时退出并返回零" -#: builtin/cat-file.c:346 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "美观地打å°å¯¹è±¡çš„内容" -#: builtin/cat-file.c:348 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "对于数æ®ï¼ˆblob)对象,对其内容执行 textconv" -#: builtin/cat-file.c:350 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "æ˜¾ç¤ºä»Žæ ‡å‡†è¾“å…¥æ供的对象的信æ¯å’Œå†…容" -#: builtin/cat-file.c:353 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "æ˜¾ç¤ºä»Žæ ‡å‡†è¾“å…¥æ供的对象的信æ¯" @@ -3473,35 +3473,35 @@ msgstr "" "* - 选择所有选项\n" " - (空)结æŸé€‰æ‹©" -#: builtin/clean.c:491 +#: builtin/clean.c:515 #, c-format msgid "Huh (%s)?" msgstr "嗯(%s)?" -#: builtin/clean.c:634 +#: builtin/clean.c:658 #, c-format msgid "Input ignore patterns>> " msgstr "输入模版以排除æ¡ç›®>> " -#: builtin/clean.c:671 +#: builtin/clean.c:695 #, c-format msgid "WARNING: Cannot find items matched by: %s" msgstr "è¦å‘Šï¼šæ— 法找到和 %s 匹é…çš„æ¡ç›®" -#: builtin/clean.c:692 +#: builtin/clean.c:716 msgid "Select items to delete" msgstr "选择è¦åˆ 除的æ¡ç›®" -#: builtin/clean.c:732 +#: builtin/clean.c:756 #, c-format msgid "remove %s? " msgstr "åˆ é™¤ %s?" -#: builtin/clean.c:757 +#: builtin/clean.c:781 msgid "Bye." msgstr "å†è§ã€‚" -#: builtin/clean.c:765 +#: builtin/clean.c:789 msgid "" "clean - start cleaning\n" "filter by pattern - exclude items from deletion\n" @@ -3519,69 +3519,69 @@ msgstr "" "help - 显示本帮助\n" "? - 显示如何在æ示符下选择的帮助" -#: builtin/clean.c:792 +#: builtin/clean.c:816 msgid "*** Commands ***" msgstr "*** 命令 ***" -#: builtin/clean.c:793 +#: builtin/clean.c:817 msgid "What now" msgstr "请选择" -#: builtin/clean.c:801 +#: builtin/clean.c:825 msgid "Would remove the following item:" msgid_plural "Would remove the following items:" msgstr[0] "å°†åˆ é™¤å¦‚ä¸‹æ¡ç›®ï¼š" msgstr[1] "å°†åˆ é™¤å¦‚ä¸‹æ¡ç›®ï¼š" -#: builtin/clean.c:818 +#: builtin/clean.c:842 msgid "No more files to clean, exiting." msgstr "没有è¦æ¸…ç†çš„文件,退出。" -#: builtin/clean.c:850 +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "ä¸æ‰“å°åˆ 除文件的å称" -#: builtin/clean.c:852 +#: builtin/clean.c:876 msgid "force" msgstr "强制" -#: builtin/clean.c:853 +#: builtin/clean.c:877 msgid "interactive cleaning" msgstr "交互å¼æ¸…除" -#: builtin/clean.c:855 +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "åˆ é™¤æ•´ä¸ªç›®å½•" -#: builtin/clean.c:856 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 #: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "模å¼" -#: builtin/clean.c:857 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "æ·»åŠ <模å¼>到忽略规则" -#: builtin/clean.c:858 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "ä¹Ÿåˆ é™¤å¿½ç•¥çš„æ–‡ä»¶" -#: builtin/clean.c:860 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "åªåˆ 除忽略的文件" -#: builtin/clean.c:878 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "-x å’Œ -X ä¸èƒ½åŒæ—¶ä½¿ç”¨" -#: builtin/clean.c:882 +#: builtin/clean.c:906 msgid "" "clean.requireForce set to true and neither -i, -n nor -f given; refusing to " "clean" msgstr "" "clean.requireForce 设置为 true 且未æä¾› -iã€-n 或 -f 选项,拒ç»æ‰§è¡Œæ¸…ç†åŠ¨ä½œ" -#: builtin/clean.c:885 +#: builtin/clean.c:909 msgid "" "clean.requireForce defaults to true and neither -i, -n nor -f given; " "refusing to clean" @@ -3911,102 +3911,120 @@ msgid "" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" "之å‰çš„拣选æ“作现在是一个空æ交,å¯èƒ½æ˜¯ç”±å†²çªè§£å†³å¯¼è‡´çš„ã€‚å¦‚æžœæ‚¨æ— è®ºå¦‚ä½•\n" "也è¦æ交,使用命令:\n" "\n" " git commit --allow-empty\n" "\n" -"å¦åˆ™ï¼Œè¯·ä½¿ç”¨å‘½ä»¤ 'git reset'\n" -#: builtin/commit.c:265 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "å¦åˆ™ï¼Œè¯·ä½¿ç”¨å‘½ä»¤ 'git reset'\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"如果您想跳过这个æ交,使用命令:\n" +"\n" +" git reset\n" +"\n" +"然åŽæ‰§è¡Œ \"git cherry-pick --continue\" 继ç»å¯¹å…¶ä½™æ交执行拣选\n" +"æ“作。\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "æ— æ³•è§£åŒ… HEAD æ ‘å¯¹è±¡" -#: builtin/commit.c:307 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "ä¸èƒ½åˆ›å»ºä¸´æ—¶ç´¢å¼•" -#: builtin/commit.c:313 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "交互å¼æ·»åŠ 失败" -#: builtin/commit.c:346 builtin/commit.c:367 builtin/commit.c:417 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "æ— æ³•å†™ new_index 文件" -#: builtin/commit.c:398 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "在åˆå¹¶è¿‡ç¨‹ä¸ä¸èƒ½åšéƒ¨åˆ†æ交。" -#: builtin/commit.c:400 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "在拣选过程ä¸ä¸èƒ½åšéƒ¨åˆ†æ交。" -#: builtin/commit.c:410 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "æ— æ³•è¯»å–索引" -#: builtin/commit.c:430 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "æ— æ³•å†™ä¸´æ—¶ç´¢å¼•æ–‡ä»¶" -#: builtin/commit.c:521 builtin/commit.c:527 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "æ— æ•ˆçš„æ交:%s" -#: builtin/commit.c:549 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "éžæ³•çš„ --author å‚æ•°" -#: builtin/commit.c:569 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "éžæ³•çš„身份å—符串:'%s'" -#: builtin/commit.c:607 builtin/commit.c:640 builtin/commit.c:963 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "ä¸èƒ½æŸ¥è¯¢æ交 %s" -#: builtin/commit.c:619 builtin/shortlog.c:271 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(æ£ä»Žæ ‡å‡†è¾“å…¥ä¸è¯»å–日志信æ¯ï¼‰\n" -#: builtin/commit.c:621 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "ä¸èƒ½ä»Žæ ‡å‡†è¾“å…¥ä¸è¯»å–日志信æ¯" -#: builtin/commit.c:625 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "ä¸èƒ½è¯»å–日志文件 '%s'" -#: builtin/commit.c:631 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "æ交说明为空" -#: builtin/commit.c:647 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "ä¸èƒ½è¯»å– MERGE_MSG" -#: builtin/commit.c:651 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "ä¸èƒ½è¯»å– SQUASH_MSG" -#: builtin/commit.c:655 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "ä¸èƒ½è¯»å– '%s'" -#: builtin/commit.c:716 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "ä¸èƒ½å†™æ交模版" -#: builtin/commit.c:727 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -4020,7 +4038,7 @@ msgstr "" "\t%s\n" "然åŽé‡è¯•ã€‚\n" -#: builtin/commit.c:732 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -4034,7 +4052,7 @@ msgstr "" "\t%s\n" "然åŽé‡è¯•ã€‚\n" -#: builtin/commit.c:744 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -4043,7 +4061,7 @@ msgstr "" "请为您的å˜æ›´è¾“å…¥æ交说明。以 '%c' 开始的行将被忽略,而一个空的æ交\n" "说明将会终æ¢æ交。\n" -#: builtin/commit.c:749 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -4054,355 +4072,355 @@ msgstr "" "也å¯ä»¥åˆ 除它们。一个空的æ交说明将会终æ¢æ交。\n" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: builtin/commit.c:762 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%s作者: %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: builtin/commit.c:769 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "%sæ交者: %s" -#: builtin/commit.c:789 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "æ— æ³•è¯»å–索引" -#: builtin/commit.c:826 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "æ— æ³•åˆ›å»ºæ ‘å¯¹è±¡" -#: builtin/commit.c:841 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "请使用 -m 或 -F 选项æä¾›æ交说明。\n" -#: builtin/commit.c:938 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "æ²¡æœ‰æ‰¾åˆ°åŒ¹é… '%s' 的作者" -#: builtin/commit.c:953 builtin/commit.c:1189 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "æ— æ•ˆçš„æœªè¿½è¸ªæ–‡ä»¶å‚æ•° '%s'" -#: builtin/commit.c:990 +#: builtin/commit.c:1009 msgid "--long and -z are incompatible" msgstr "--long å’Œ -z 选项ä¸å…¼å®¹" -#: builtin/commit.c:1020 +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "åŒæ—¶ä½¿ç”¨ --reset-author å’Œ --author 没有æ„义" -#: builtin/commit.c:1031 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "您没有å¯ä¿®è¡¥çš„æ交。" -#: builtin/commit.c:1034 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "您æ£å¤„于一个åˆå¹¶è¿‡ç¨‹ä¸ -- æ— æ³•ä¿®è¡¥æ交。" -#: builtin/commit.c:1036 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "您æ£å¤„äºŽä¸€ä¸ªæ‹£é€‰è¿‡ç¨‹ä¸ -- æ— æ³•ä¿®è¡¥æ交。" -#: builtin/commit.c:1039 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "选项 --squash å’Œ --fixup ä¸èƒ½åŒæ—¶ä½¿ç”¨" -#: builtin/commit.c:1049 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "åªèƒ½ç”¨ä¸€ä¸ª -c/-C/-F/--fixup 选项。" -#: builtin/commit.c:1051 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "选项 -m ä¸èƒ½å’Œ -c/-C/-F/--fixup åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/commit.c:1059 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "--reset-author åªèƒ½å’Œ -Cã€-c 或 --amend åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/commit.c:1076 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "åªèƒ½ç”¨ä¸€ä¸ª --include/--only/--all/--interactive/--patch 选项。" -#: builtin/commit.c:1078 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "å‚æ•° --include/--only ä¸è·Ÿè·¯å¾„没有æ„义。" -#: builtin/commit.c:1080 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "èªæ˜Ž... 在索引ä¸å¹²å‡€ä¸‹ä¿®è¡¥æœ€åŽçš„æ交。" -#: builtin/commit.c:1082 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "指定了明确的路径而没有使用 -i 或 -o 选项;认为是 --only paths..." -#: builtin/commit.c:1092 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "æ— æ•ˆçš„æ¸…ç†æ¨¡å¼ %s" -#: builtin/commit.c:1097 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "路径和 -a 选项åŒæ—¶ä½¿ç”¨æ²¡æœ‰æ„义。" -#: builtin/commit.c:1203 builtin/commit.c:1436 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "以简æ´çš„æ ¼å¼æ˜¾ç¤ºçŠ¶æ€" -#: builtin/commit.c:1205 builtin/commit.c:1438 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "显示分支信æ¯" -#: builtin/commit.c:1207 builtin/commit.c:1440 builtin/push.c:452 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "机器å¯è¯»çš„输出" -#: builtin/commit.c:1210 builtin/commit.c:1442 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "ä»¥é•¿æ ¼å¼æ˜¾ç¤ºçŠ¶æ€ï¼ˆé»˜è®¤ï¼‰" -#: builtin/commit.c:1213 builtin/commit.c:1445 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "æ¡ç›®ä»¥NULå—符结尾" -#: builtin/commit.c:1215 builtin/commit.c:1448 builtin/fast-export.c:667 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 #: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "模å¼" -#: builtin/commit.c:1216 builtin/commit.c:1448 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "显示未跟踪的文件,“模å¼â€çš„å¯é€‰å‚数:allã€normalã€no。(默认:all)" -#: builtin/commit.c:1219 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "显示忽略的文件" -#: builtin/commit.c:1220 parse-options.h:154 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "何时" -#: builtin/commit.c:1221 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" "忽略å模组的更改,“何时â€çš„å¯é€‰å‚数:allã€dirtyã€untracked。(默认:all)" -#: builtin/commit.c:1223 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "以列的方å¼æ˜¾ç¤ºæœªè·Ÿè¸ªçš„文件" -#: builtin/commit.c:1294 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "æ— æ³•æ‰¾åˆ°æ–°åˆ›å»ºçš„æ交" -#: builtin/commit.c:1296 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "ä¸èƒ½è§£æžæ–°åˆ›å»ºçš„æ交" -#: builtin/commit.c:1337 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "分离头指针" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: builtin/commit.c:1339 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr "ï¼ˆæ ¹æ交)" -#: builtin/commit.c:1406 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "æ交æˆåŠŸåŽä¸æ˜¾ç¤ºæ¦‚è¿°ä¿¡æ¯" -#: builtin/commit.c:1407 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "在æ交说明模æ¿é‡Œæ˜¾ç¤ºå·®å¼‚" -#: builtin/commit.c:1409 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "æ交说明选项" -#: builtin/commit.c:1410 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "从文件ä¸è¯»å–æ交说明" -#: builtin/commit.c:1411 +#: builtin/commit.c:1430 msgid "author" msgstr "作者" -#: builtin/commit.c:1411 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "æ交时覆盖作者" -#: builtin/commit.c:1412 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "日期" -#: builtin/commit.c:1412 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "æ交时覆盖日期" -#: builtin/commit.c:1413 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 #: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "说明" -#: builtin/commit.c:1413 +#: builtin/commit.c:1432 msgid "commit message" msgstr "æ交说明" -#: builtin/commit.c:1414 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "é‡ç”¨å¹¶ç¼–辑指定æ交的æ交说明" -#: builtin/commit.c:1415 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "é‡ç”¨æŒ‡å®šæ交的æ交说明" -#: builtin/commit.c:1416 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "使用 autosquash æ ¼å¼çš„æ交说明用以修æ£æŒ‡å®šçš„æ交" -#: builtin/commit.c:1417 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "使用 autosquash æ ¼å¼çš„æ交说明用以压缩至指定的æ交" -#: builtin/commit.c:1418 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "现在将该æ交的作者改为我(和 -C/-c/--amend å‚数共用)" -#: builtin/commit.c:1419 builtin/log.c:1160 builtin/revert.c:111 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "æ·»åŠ Signed-off-by: ç¾å" -#: builtin/commit.c:1420 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "使用指定的模æ¿æ–‡ä»¶" -#: builtin/commit.c:1421 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "强制编辑æ交" # 译者:å¯é€‰å€¼ï¼Œä¸èƒ½ç¿»è¯‘(或是原文ä¸ç¬”误,应为 mode) -#: builtin/commit.c:1422 +#: builtin/commit.c:1441 msgid "default" msgstr "default" -#: builtin/commit.c:1422 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "è®¾ç½®å¦‚ä½•åˆ é™¤æäº¤è¯´æ˜Žé‡Œçš„ç©ºæ ¼å’Œ#注释" -#: builtin/commit.c:1423 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "在æ交说明模æ¿é‡ŒåŒ…å«çŠ¶æ€ä¿¡æ¯" -#: builtin/commit.c:1424 builtin/merge.c:230 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "key id" -#: builtin/commit.c:1425 builtin/merge.c:231 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "GPG æ交ç¾å" #. end commit message options -#: builtin/commit.c:1428 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "æ交内容选项" -#: builtin/commit.c:1429 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "æ交所有改动的文件" -#: builtin/commit.c:1430 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "æ·»åŠ æŒ‡å®šçš„æ–‡ä»¶åˆ°ç´¢å¼•åŒºç‰å¾…æ交" -#: builtin/commit.c:1431 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "交互å¼æ·»åŠ 文件" -#: builtin/commit.c:1432 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "交互å¼æ·»åŠ å˜æ›´" -#: builtin/commit.c:1433 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "åªæ交指定的文件" -#: builtin/commit.c:1434 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "绕过 pre-commit é’©å" -#: builtin/commit.c:1435 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "显示将è¦æ交的内容" -#: builtin/commit.c:1446 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "修改先å‰çš„æ交" -#: builtin/commit.c:1447 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "绕过 post-rewrite é’©å" -#: builtin/commit.c:1452 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "å…许一个空æ交" -#: builtin/commit.c:1455 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "å…许空的æ交说明" -#: builtin/commit.c:1488 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "ä¸èƒ½è§£æž HEAD æ交" -#: builtin/commit.c:1526 builtin/merge.c:525 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "ä¸èƒ½ä¸ºè¯»å…¥æ‰“å¼€ '%s'" -#: builtin/commit.c:1533 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "æŸåçš„ MERGE_HEAD 文件(%s)" -#: builtin/commit.c:1540 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "ä¸èƒ½è¯»å– MERGE_MODE" -#: builtin/commit.c:1559 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "ä¸èƒ½è¯»å–æ交说明:%s" -#: builtin/commit.c:1573 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "终æ¢æ交;您未更改æ¥è‡ªæ¨¡ç‰ˆçš„æ交说明。\n" -#: builtin/commit.c:1578 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "终æ¢æäº¤å› ä¸ºæ交说明为空。\n" -#: builtin/commit.c:1593 builtin/merge.c:861 builtin/merge.c:886 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "æ— æ³•å†™æ交对象" -#: builtin/commit.c:1614 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "æ— æ³•é”定 HEAD 引用" -#: builtin/commit.c:1618 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "æ— æ³•æ›´æ–° HEAD 引用" -#: builtin/commit.c:1629 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -9722,7 +9740,7 @@ msgstr "æ— æ³•ä¿å˜ $stash_sha1" msgid "" "Applying autostash resulted in conflicts.\n" "Your changes are safe in the stash.\n" -"You can run \"git stash pop\" or \"git stash drop\" it at any time.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" msgstr "" "应用 autostash 导致冲çªã€‚\n" "您的修改安全地ä¿å˜åœ¨ stash ä¸ã€‚\n" diff --git a/preload-index.c b/preload-index.c index 49cb08df96..8c44ceb2c7 100644 --- a/preload-index.c +++ b/preload-index.c @@ -2,9 +2,11 @@ * Copyright (C) 2008 Linus Torvalds */ #include "cache.h" +#include "pathspec.h" #ifdef NO_PTHREADS -static void preload_index(struct index_state *index, const char **pathspec) +static void preload_index(struct index_state *index, + const struct pathspec *pathspec) { ; /* nothing */ } @@ -24,7 +26,7 @@ static void preload_index(struct index_state *index, const char **pathspec) struct thread_data { pthread_t pthread; struct index_state *index; - const char **pathspec; + struct pathspec pathspec; int offset, nr; }; @@ -35,9 +37,7 @@ static void *preload_thread(void *_data) struct index_state *index = p->index; struct cache_entry **cep = index->cache + p->offset; struct cache_def cache; - struct pathspec pathspec; - init_pathspec(&pathspec, p->pathspec); memset(&cache, 0, sizeof(cache)); nr = p->nr; if (nr + p->offset > index->cache_nr) @@ -53,7 +53,7 @@ static void *preload_thread(void *_data) continue; if (ce_uptodate(ce)) continue; - if (!ce_path_match(ce, &pathspec)) + if (!ce_path_match(ce, &p->pathspec)) continue; if (threaded_has_symlink_leading_path(&cache, ce->name, ce_namelen(ce))) continue; @@ -63,11 +63,11 @@ static void *preload_thread(void *_data) continue; ce_mark_uptodate(ce); } while (--nr > 0); - free_pathspec(&pathspec); return NULL; } -static void preload_index(struct index_state *index, const char **pathspec) +static void preload_index(struct index_state *index, + const struct pathspec *pathspec) { int threads, i, work, offset; struct thread_data data[MAX_PARALLEL]; @@ -82,10 +82,12 @@ static void preload_index(struct index_state *index, const char **pathspec) threads = MAX_PARALLEL; offset = 0; work = DIV_ROUND_UP(index->cache_nr, threads); + memset(&data, 0, sizeof(data)); for (i = 0; i < threads; i++) { struct thread_data *p = data+i; p->index = index; - p->pathspec = pathspec; + if (pathspec) + copy_pathspec(&p->pathspec, pathspec); p->offset = offset; p->nr = work; offset += work; @@ -100,7 +102,8 @@ static void preload_index(struct index_state *index, const char **pathspec) } #endif -int read_index_preload(struct index_state *index, const char **pathspec) +int read_index_preload(struct index_state *index, + const struct pathspec *pathspec) { int retval = read_index(index); @@ -42,23 +42,6 @@ void sq_quote_buf(struct strbuf *dst, const char *src) free(to_free); } -void sq_quote_print(FILE *stream, const char *src) -{ - char c; - - fputc('\'', stream); - while ((c = *src++)) { - if (need_bs_quote(c)) { - fputs("'\\", stream); - fputc(c, stream); - fputc('\'', stream); - } else { - fputc(c, stream); - } - } - fputc('\'', stream); -} - void sq_quote_argv(struct strbuf *dst, const char** argv, size_t maxlen) { int i; @@ -408,72 +391,72 @@ int unquote_c_style(struct strbuf *sb, const char *quoted, const char **endp) /* quoting as a string literal for other languages */ -void perl_quote_print(FILE *stream, const char *src) +void perl_quote_buf(struct strbuf *sb, const char *src) { const char sq = '\''; const char bq = '\\'; char c; - fputc(sq, stream); + strbuf_addch(sb, sq); while ((c = *src++)) { if (c == sq || c == bq) - fputc(bq, stream); - fputc(c, stream); + strbuf_addch(sb, bq); + strbuf_addch(sb, c); } - fputc(sq, stream); + strbuf_addch(sb, sq); } -void python_quote_print(FILE *stream, const char *src) +void python_quote_buf(struct strbuf *sb, const char *src) { const char sq = '\''; const char bq = '\\'; const char nl = '\n'; char c; - fputc(sq, stream); + strbuf_addch(sb, sq); while ((c = *src++)) { if (c == nl) { - fputc(bq, stream); - fputc('n', stream); + strbuf_addch(sb, bq); + strbuf_addch(sb, 'n'); continue; } if (c == sq || c == bq) - fputc(bq, stream); - fputc(c, stream); + strbuf_addch(sb, bq); + strbuf_addch(sb, c); } - fputc(sq, stream); + strbuf_addch(sb, sq); } -void tcl_quote_print(FILE *stream, const char *src) +void tcl_quote_buf(struct strbuf *sb, const char *src) { char c; - fputc('"', stream); + strbuf_addch(sb, '"'); while ((c = *src++)) { switch (c) { case '[': case ']': case '{': case '}': case '$': case '\\': case '"': - fputc('\\', stream); + strbuf_addch(sb, '\\'); default: - fputc(c, stream); + strbuf_addch(sb, c); break; case '\f': - fputs("\\f", stream); + strbuf_addstr(sb, "\\f"); break; case '\r': - fputs("\\r", stream); + strbuf_addstr(sb, "\\r"); break; case '\n': - fputs("\\n", stream); + strbuf_addstr(sb, "\\n"); break; case '\t': - fputs("\\t", stream); + strbuf_addstr(sb, "\\t"); break; case '\v': - fputs("\\v", stream); + strbuf_addstr(sb, "\\v"); break; } } - fputc('"', stream); + strbuf_addch(sb, '"'); } @@ -27,8 +27,6 @@ struct strbuf; * excluding the final null regardless of the buffer size. */ -extern void sq_quote_print(FILE *stream, const char *src); - extern void sq_quote_buf(struct strbuf *, const char *src); extern void sq_quote_argv(struct strbuf *, const char **argv, size_t maxlen); @@ -68,8 +66,8 @@ extern char *quote_path_relative(const char *in, const char *prefix, struct strbuf *out); /* quoting as a string literal for other languages */ -extern void perl_quote_print(FILE *stream, const char *src); -extern void python_quote_print(FILE *stream, const char *src); -extern void tcl_quote_print(FILE *stream, const char *src); +extern void perl_quote_buf(struct strbuf *sb, const char *src); +extern void python_quote_buf(struct strbuf *sb, const char *src); +extern void tcl_quote_buf(struct strbuf *sb, const char *src); #endif diff --git a/read-cache.c b/read-cache.c index c3d5e3543f..737a27f81b 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1114,7 +1114,8 @@ static void show_file(const char * fmt, const char * name, int in_porcelain, printf(fmt, name); } -int refresh_index(struct index_state *istate, unsigned int flags, const char **pathspec, +int refresh_index(struct index_state *istate, unsigned int flags, + const struct pathspec *pathspec, char *seen, const char *header_msg) { int i; @@ -1149,7 +1150,7 @@ int refresh_index(struct index_state *istate, unsigned int flags, const char **p continue; if (pathspec && - !match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, seen)) + !match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, seen)) filtered = 1; if (ce_stage(ce)) { @@ -72,10 +72,6 @@ int check_refname_format(const char *refname, int flags) { int component_len, component_count = 0; - if (!strcmp(refname, "@")) - /* Refname is a single character '@'. */ - return -1; - while (1) { /* We are at the start of a path component. */ component_len = check_refname_component(refname, flags); @@ -3200,14 +3196,6 @@ int update_ref(const char *action, const char *refname, return 0; } -struct ref *find_ref_by_name(const struct ref *list, const char *name) -{ - for ( ; list; list = list->next) - if (!strcmp(list->name, name)) - return (struct ref *)list; - return NULL; -} - /* * generate a format suitable for scanf from a ref_rev_parse_rules * rule, that is replace the "%.*s" spec with a "%s" spec diff --git a/remote-curl.c b/remote-curl.c index 5b3ce9eed2..b5ebe01800 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -6,6 +6,7 @@ #include "exec_cmd.h" #include "run-command.h" #include "pkt-line.h" +#include "string-list.h" #include "sideband.h" #include "argv-array.h" @@ -16,11 +17,13 @@ struct options { int verbosity; unsigned long depth; unsigned progress : 1, + check_self_contained_and_connected : 1, followtags : 1, dry_run : 1, thin : 1; }; static struct options options; +static struct string_list cas_options = STRING_LIST_INIT_DUP; static int set_option(const char *name, const char *value) { @@ -67,6 +70,22 @@ static int set_option(const char *name, const char *value) return -1; return 0; } + else if (!strcmp(name, "check-connectivity")) { + if (!strcmp(value, "true")) + options.check_self_contained_and_connected = 1; + else if (!strcmp(value, "false")) + options.check_self_contained_and_connected = 0; + else + return -1; + return 0; + } + else if (!strcmp(name, "cas")) { + struct strbuf val = STRBUF_INIT; + strbuf_addf(&val, "--" CAS_OPT_NAME "=%s", value); + string_list_append(&cas_options, val.buf); + strbuf_release(&val); + return 0; + } else { return 1 /* unsupported */; } @@ -654,7 +673,7 @@ static int fetch_git(struct discovery *heads, struct strbuf preamble = STRBUF_INIT; char *depth_arg = NULL; int argc = 0, i, err; - const char *argv[15]; + const char *argv[16]; argv[argc++] = "fetch-pack"; argv[argc++] = "--stateless-rpc"; @@ -668,6 +687,8 @@ static int fetch_git(struct discovery *heads, argv[argc++] = "-v"; argv[argc++] = "-v"; } + if (options.check_self_contained_and_connected) + argv[argc++] = "--check-self-contained-and-connected"; if (!options.progress) argv[argc++] = "--no-progress"; if (options.depth) { @@ -790,6 +811,7 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) struct rpc_state rpc; int i, err; struct argv_array args; + struct string_list_item *cas_option; argv_array_init(&args); argv_array_pushl(&args, "send-pack", "--stateless-rpc", "--helper-status", @@ -804,6 +826,8 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) else if (options.verbosity > 1) argv_array_push(&args, "--verbose"); argv_array_push(&args, options.progress ? "--progress" : "--no-progress"); + for_each_string_list_item(cas_option, &cas_options) + argv_array_push(&args, cas_option->string); argv_array_push(&args, url); for (i = 0; i < nr_spec; i++) argv_array_push(&args, specs[i]); @@ -939,6 +963,7 @@ int main(int argc, const char **argv) printf("fetch\n"); printf("option\n"); printf("push\n"); + printf("check-connectivity\n"); printf("\n"); fflush(stdout); } else { @@ -148,6 +148,7 @@ static struct remote *make_remote(const char *name, int len) } ret = xcalloc(1, sizeof(struct remote)); + ret->prune = -1; /* unspecified */ ALLOC_GROW(remotes, remotes_nr + 1, remotes_alloc); remotes[remotes_nr++] = ret; if (len) @@ -404,6 +405,8 @@ static int handle_config(const char *key, const char *value, void *cb) remote->skip_default_update = git_config_bool(key, value); else if (!strcmp(subkey, ".skipfetchall")) remote->skip_default_update = git_config_bool(key, value); + else if (!strcmp(subkey, ".prune")) + remote->prune = git_config_bool(key, value); else if (!strcmp(subkey, ".url")) { const char *v; if (git_config_string(&v, key, value)) @@ -1302,6 +1305,14 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds free(sent_tips.tip); } +struct ref *find_ref_by_name(const struct ref *list, const char *name) +{ + for ( ; list; list = list->next) + if (!strcmp(list->name, name)) + return (struct ref *)list; + return NULL; +} + static void prepare_ref_index(struct string_list *ref_index, struct ref *ref) { for ( ; ref; ref = ref->next) @@ -1411,12 +1422,13 @@ int match_push_refs(struct ref *src, struct ref **dst, } void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, - int force_update) + int force_update) { struct ref *ref; for (ref = remote_refs; ref; ref = ref->next) { int force_ref_update = ref->force || force_update; + int reject_reason = 0; if (ref->peer_ref) hashcpy(ref->new_sha1, ref->peer_ref->new_sha1); @@ -1431,6 +1443,26 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, } /* + * Bypass the usual "must fast-forward" check but + * replace it with a weaker "the old value must be + * this value we observed". If the remote ref has + * moved and is now different from what we expect, + * reject any push. + * + * It also is an error if the user told us to check + * with the remote-tracking branch to find the value + * to expect, but we did not have such a tracking + * branch. + */ + if (ref->expect_old_sha1) { + if (ref->expect_old_no_trackback || + hashcmp(ref->old_sha1, ref->old_sha1_expect)) + reject_reason = REF_STATUS_REJECT_STALE; + } + + /* + * The usual "must fast-forward" rules. + * * Decide whether an individual refspec A:B can be * pushed. The push will succeed if any of the * following are true: @@ -1448,24 +1480,26 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, * passing the --force argument */ - if (!ref->deletion && !is_null_sha1(ref->old_sha1)) { - int why = 0; /* why would this push require --force? */ - + else if (!ref->deletion && !is_null_sha1(ref->old_sha1)) { if (!prefixcmp(ref->name, "refs/tags/")) - why = REF_STATUS_REJECT_ALREADY_EXISTS; + reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS; else if (!has_sha1_file(ref->old_sha1)) - why = REF_STATUS_REJECT_FETCH_FIRST; + reject_reason = REF_STATUS_REJECT_FETCH_FIRST; else if (!lookup_commit_reference_gently(ref->old_sha1, 1) || !lookup_commit_reference_gently(ref->new_sha1, 1)) - why = REF_STATUS_REJECT_NEEDS_FORCE; + reject_reason = REF_STATUS_REJECT_NEEDS_FORCE; else if (!ref_newer(ref->new_sha1, ref->old_sha1)) - why = REF_STATUS_REJECT_NONFASTFORWARD; - - if (!force_ref_update) - ref->status = why; - else if (why) - ref->forced_update = 1; + reject_reason = REF_STATUS_REJECT_NONFASTFORWARD; } + + /* + * "--force" will defeat any rejection implemented + * by the rules above. + */ + if (!force_ref_update) + ref->status = reject_reason; + else if (reject_reason) + ref->forced_update = 1; } } @@ -1936,3 +1970,121 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet string_list_clear(&ref_names, 0); return stale_refs; } + +/* + * Compare-and-swap + */ +void clear_cas_option(struct push_cas_option *cas) +{ + int i; + + for (i = 0; i < cas->nr; i++) + free(cas->entry[i].refname); + free(cas->entry); + memset(cas, 0, sizeof(*cas)); +} + +static struct push_cas *add_cas_entry(struct push_cas_option *cas, + const char *refname, + size_t refnamelen) +{ + struct push_cas *entry; + ALLOC_GROW(cas->entry, cas->nr + 1, cas->alloc); + entry = &cas->entry[cas->nr++]; + memset(entry, 0, sizeof(*entry)); + entry->refname = xmemdupz(refname, refnamelen); + return entry; +} + +int parse_push_cas_option(struct push_cas_option *cas, const char *arg, int unset) +{ + const char *colon; + struct push_cas *entry; + + if (unset) { + /* "--no-<option>" */ + clear_cas_option(cas); + return 0; + } + + if (!arg) { + /* just "--<option>" */ + cas->use_tracking_for_rest = 1; + return 0; + } + + /* "--<option>=refname" or "--<option>=refname:value" */ + colon = strchrnul(arg, ':'); + entry = add_cas_entry(cas, arg, colon - arg); + if (!*colon) + entry->use_tracking = 1; + else if (get_sha1(colon + 1, entry->expect)) + return error("cannot parse expected object name '%s'", colon + 1); + return 0; +} + +int parseopt_push_cas_option(const struct option *opt, const char *arg, int unset) +{ + return parse_push_cas_option(opt->value, arg, unset); +} + +int is_empty_cas(const struct push_cas_option *cas) +{ + return !cas->use_tracking_for_rest && !cas->nr; +} + +/* + * Look at remote.fetch refspec and see if we have a remote + * tracking branch for the refname there. Fill its current + * value in sha1[]. + * If we cannot do so, return negative to signal an error. + */ +static int remote_tracking(struct remote *remote, const char *refname, + unsigned char sha1[20]) +{ + char *dst; + + dst = apply_refspecs(remote->fetch, remote->fetch_refspec_nr, refname); + if (!dst) + return -1; /* no tracking ref for refname at remote */ + if (read_ref(dst, sha1)) + return -1; /* we know what the tracking ref is but we cannot read it */ + return 0; +} + +static void apply_cas(struct push_cas_option *cas, + struct remote *remote, + struct ref *ref) +{ + int i; + + /* Find an explicit --<option>=<name>[:<value>] entry */ + for (i = 0; i < cas->nr; i++) { + struct push_cas *entry = &cas->entry[i]; + if (!refname_match(entry->refname, ref->name, ref_rev_parse_rules)) + continue; + ref->expect_old_sha1 = 1; + if (!entry->use_tracking) + hashcpy(ref->old_sha1_expect, cas->entry[i].expect); + else if (remote_tracking(remote, ref->name, ref->old_sha1_expect)) + ref->expect_old_no_trackback = 1; + return; + } + + /* Are we using "--<option>" to cover all? */ + if (!cas->use_tracking_for_rest) + return; + + ref->expect_old_sha1 = 1; + if (remote_tracking(remote, ref->name, ref->old_sha1_expect)) + ref->expect_old_no_trackback = 1; +} + +void apply_push_cas(struct push_cas_option *cas, + struct remote *remote, + struct ref *remote_refs) +{ + struct ref *ref; + for (ref = remote_refs; ref; ref = ref->next) + apply_cas(cas, remote, ref); +} @@ -1,6 +1,8 @@ #ifndef REMOTE_H #define REMOTE_H +#include "parse-options.h" + enum { REMOTE_CONFIG, REMOTE_REMOTES, @@ -40,6 +42,7 @@ struct remote { int fetch_tags; int skip_default_update; int mirror; + int prune; const char *receivepack; const char *uploadpack; @@ -71,6 +74,56 @@ struct refspec { extern const struct refspec *tag_refspec; +struct ref { + struct ref *next; + unsigned char old_sha1[20]; + unsigned char new_sha1[20]; + unsigned char old_sha1_expect[20]; /* used by expect-old */ + char *symref; + unsigned int + force:1, + forced_update:1, + expect_old_sha1:1, + expect_old_no_trackback:1, + deletion:1, + matched:1; + + /* + * Order is important here, as we write to FETCH_HEAD + * in numeric order. And the default NOT_FOR_MERGE + * should be 0, so that xcalloc'd structures get it + * by default. + */ + enum { + FETCH_HEAD_MERGE = -1, + FETCH_HEAD_NOT_FOR_MERGE = 0, + FETCH_HEAD_IGNORE = 1 + } fetch_head_status; + + enum { + REF_STATUS_NONE = 0, + REF_STATUS_OK, + REF_STATUS_REJECT_NONFASTFORWARD, + REF_STATUS_REJECT_ALREADY_EXISTS, + REF_STATUS_REJECT_NODELETE, + REF_STATUS_REJECT_FETCH_FIRST, + REF_STATUS_REJECT_NEEDS_FORCE, + REF_STATUS_REJECT_STALE, + REF_STATUS_UPTODATE, + REF_STATUS_REMOTE_REJECT, + REF_STATUS_EXPECTING_REPORT + } status; + char *remote_status; + struct ref *peer_ref; /* when renaming */ + char name[FLEX_ARRAY]; /* more */ +}; + +#define REF_NORMAL (1u << 0) +#define REF_HEADS (1u << 1) +#define REF_TAGS (1u << 2) + +extern struct ref *find_ref_by_name(const struct ref *list, const char *name); + struct ref *alloc_ref(const char *name); struct ref *copy_ref(const struct ref *ref); struct ref *copy_ref_list(const struct ref *ref); @@ -84,6 +137,14 @@ int check_ref_type(const struct ref *ref, int flags); */ void free_refs(struct ref *ref); +struct extra_have_objects { + int nr, alloc; + unsigned char (*array)[20]; +}; +extern struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, + struct ref **list, unsigned int flags, + struct extra_have_objects *); + int resolve_remote_symref(struct ref *ref, struct ref *list); int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1); @@ -172,4 +233,27 @@ struct ref *guess_remote_head(const struct ref *head, /* Return refs which no longer exist on remote */ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fetch_map); +/* + * Compare-and-swap + */ +#define CAS_OPT_NAME "force-with-lease" + +struct push_cas_option { + unsigned use_tracking_for_rest:1; + struct push_cas { + unsigned char expect[20]; + unsigned use_tracking:1; + char *refname; + } *entry; + int nr; + int alloc; +}; + +extern int parseopt_push_cas_option(const struct option *, const char *arg, int unset); +extern int parse_push_cas_option(struct push_cas_option *, const char *arg, int unset); +extern void clear_cas_option(struct push_cas_option *); + +extern int is_empty_cas(const struct push_cas_option *); +void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *); + #endif @@ -6,6 +6,7 @@ #include "resolve-undo.h" #include "ll-merge.h" #include "attr.h" +#include "pathspec.h" #define RESOLVED 0 #define PUNTED 1 @@ -656,7 +657,7 @@ static int rerere_forget_one_path(const char *path, struct string_list *rr) return 0; } -int rerere_forget(const char **pathspec) +int rerere_forget(struct pathspec *pathspec) { int i, fd; struct string_list conflict = STRING_LIST_INIT_DUP; @@ -671,8 +672,8 @@ int rerere_forget(const char **pathspec) find_conflict(&conflict); for (i = 0; i < conflict.nr; i++) { struct string_list_item *it = &conflict.items[i]; - if (!match_pathspec(pathspec, it->string, strlen(it->string), - 0, NULL)) + if (!match_pathspec_depth(pathspec, it->string, strlen(it->string), + 0, NULL)) continue; rerere_forget_one_path(it->string, &merge_rr); } @@ -3,6 +3,8 @@ #include "string-list.h" +struct pathspec; + #define RERERE_AUTOUPDATE 01 #define RERERE_NOAUTOUPDATE 02 @@ -16,7 +18,7 @@ extern void *RERERE_RESOLVED; extern int setup_rerere(struct string_list *, int); extern int rerere(int); extern const char *rerere_path(const char *hex, const char *file); -extern int rerere_forget(const char **); +extern int rerere_forget(struct pathspec *); extern int rerere_remaining(struct string_list *); extern void rerere_clear(struct string_list *); extern void rerere_gc(struct string_list *); diff --git a/resolve-undo.c b/resolve-undo.c index 77101f51c1..c09b00664e 100644 --- a/resolve-undo.c +++ b/resolve-undo.c @@ -173,7 +173,7 @@ void unmerge_marked_index(struct index_state *istate) } } -void unmerge_index(struct index_state *istate, const char **pathspec) +void unmerge_index(struct index_state *istate, const struct pathspec *pathspec) { int i; @@ -182,7 +182,7 @@ void unmerge_index(struct index_state *istate, const char **pathspec) for (i = 0; i < istate->cache_nr; i++) { const struct cache_entry *ce = istate->cache[i]; - if (!match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) + if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL)) continue; i = unmerge_index_entry_at(istate, i); } diff --git a/resolve-undo.h b/resolve-undo.h index 7a30206aad..46306455ed 100644 --- a/resolve-undo.h +++ b/resolve-undo.h @@ -11,7 +11,7 @@ extern void resolve_undo_write(struct strbuf *, struct string_list *); extern struct string_list *resolve_undo_read(const char *, unsigned long); extern void resolve_undo_clear_index(struct index_state *); extern int unmerge_index_entry_at(struct index_state *, int); -extern void unmerge_index(struct index_state *, const char **); +extern void unmerge_index(struct index_state *, const struct pathspec *); extern void unmerge_marked_index(struct index_state *); #endif diff --git a/revision.c b/revision.c index 84ccc0529b..6230a80a77 100644 --- a/revision.c +++ b/revision.c @@ -15,6 +15,7 @@ #include "string-list.h" #include "line-log.h" #include "mailmap.h" +#include "commit-slab.h" volatile show_early_output_fn_t show_early_output; @@ -1372,7 +1373,7 @@ static void prepare_show_merge(struct rev_info *revs) i++; } free_pathspec(&revs->prune_data); - init_pathspec(&revs->prune_data, prune); + parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC, 0, "", prune); revs->limited = 1; } @@ -2120,8 +2121,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s */ ALLOC_GROW(prune_data.path, prune_data.nr+1, prune_data.alloc); prune_data.path[prune_data.nr++] = NULL; - init_pathspec(&revs->prune_data, - get_pathspec(revs->prefix, prune_data.path)); + parse_pathspec(&revs->prune_data, 0, 0, + revs->prefix, prune_data.path); } if (revs->def == NULL) @@ -2154,12 +2155,13 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s revs->limited = 1; if (revs->prune_data.nr) { - diff_tree_setup_paths(revs->prune_data.raw, &revs->pruning); + copy_pathspec(&revs->pruning.pathspec, &revs->prune_data); /* Can't prune commits with rename following: the paths change.. */ if (!DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES)) revs->prune = 1; if (!revs->full_diff) - diff_tree_setup_paths(revs->prune_data.raw, &revs->diffopt); + copy_pathspec(&revs->diffopt.pathspec, + &revs->prune_data); } if (revs->combine_merges) revs->ignore_merges = 0; @@ -2763,7 +2765,7 @@ static int commit_match(struct commit *commit, struct rev_info *opt) return retval; } -static inline int want_ancestry(struct rev_info *revs) +static inline int want_ancestry(const struct rev_info *revs) { return (revs->rewrite_parents || revs->children.name); } @@ -2820,6 +2822,14 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) if (action == commit_show && !revs->show_all && revs->prune && revs->dense && want_ancestry(revs)) { + /* + * --full-diff on simplified parents is no good: it + * will show spurious changes from the commits that + * were elided. So we save the parents on the side + * when --full-diff is in effect. + */ + if (revs->full_diff) + save_parents(revs, commit); if (rewrite_parents(revs, commit, rewrite_one) < 0) return commit_error; } @@ -2839,6 +2849,7 @@ static struct commit *get_revision_1(struct rev_info *revs) free(entry); if (revs->reflog_info) { + save_parents(revs, commit); fake_reflog_parent(revs->reflog_info, commit); commit->object.flags &= ~(ADDED | SEEN | SHOWN); } @@ -3038,6 +3049,8 @@ struct commit *get_revision(struct rev_info *revs) c = get_revision_internal(revs); if (c && revs->graph) graph_update(revs->graph, c); + if (!c) + free_saved_parents(revs); return c; } @@ -3069,3 +3082,54 @@ void put_revision_mark(const struct rev_info *revs, const struct commit *commit) fputs(mark, stdout); putchar(' '); } + +define_commit_slab(saved_parents, struct commit_list *); + +#define EMPTY_PARENT_LIST ((struct commit_list *)-1) + +void save_parents(struct rev_info *revs, struct commit *commit) +{ + struct commit_list **pp; + + if (!revs->saved_parents_slab) { + revs->saved_parents_slab = xmalloc(sizeof(struct saved_parents)); + init_saved_parents(revs->saved_parents_slab); + } + + pp = saved_parents_at(revs->saved_parents_slab, commit); + + /* + * When walking with reflogs, we may visit the same commit + * several times: once for each appearance in the reflog. + * + * In this case, save_parents() will be called multiple times. + * We want to keep only the first set of parents. We need to + * store a sentinel value for an empty (i.e., NULL) parent + * list to distinguish it from a not-yet-saved list, however. + */ + if (*pp) + return; + if (commit->parents) + *pp = copy_commit_list(commit->parents); + else + *pp = EMPTY_PARENT_LIST; +} + +struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit) +{ + struct commit_list *parents; + + if (!revs->saved_parents_slab) + return commit->parents; + + parents = *saved_parents_at(revs->saved_parents_slab, commit); + if (parents == EMPTY_PARENT_LIST) + return NULL; + return parents; +} + +void free_saved_parents(struct rev_info *revs) +{ + if (revs->saved_parents_slab) + clear_saved_parents(revs->saved_parents_slab); +} diff --git a/revision.h b/revision.h index 95859ba119..e7f1d211bf 100644 --- a/revision.h +++ b/revision.h @@ -25,6 +25,7 @@ struct rev_info; struct log_info; struct string_list; +struct saved_parents; struct rev_cmdline_info { unsigned int nr; @@ -187,6 +188,9 @@ struct rev_info { /* line level range that we are chasing */ struct decoration line_log_data; + + /* copies of the parent lists, for --full-diff display */ + struct saved_parents *saved_parents_slab; }; #define REV_TREE_SAME 0 @@ -273,4 +277,20 @@ typedef enum rewrite_result (*rewrite_parent_fn_t)(struct rev_info *revs, struct extern int rewrite_parents(struct rev_info *revs, struct commit *commit, rewrite_parent_fn_t rewrite_parent); + +/* + * Save a copy of the parent list, and return the saved copy. This is + * used by the log machinery to retrieve the original parents when + * commit->parents has been modified by history simpification. + * + * You may only call save_parents() once per commit (this is checked + * for non-root commits). + * + * get_saved_parents() will transparently return commit->parents if + * history simplification is off. + */ +extern void save_parents(struct rev_info *revs, struct commit *commit); +extern struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit); +extern void free_saved_parents(struct rev_info *revs); + #endif diff --git a/send-pack.c b/send-pack.c index 7d172ef37f..b228d65613 100644 --- a/send-pack.c +++ b/send-pack.c @@ -5,6 +5,7 @@ #include "sideband.h" #include "run-command.h" #include "remote.h" +#include "connect.h" #include "send-pack.h" #include "quote.h" #include "transport.h" @@ -226,6 +227,7 @@ int send_pack(struct send_pack_args *args, case REF_STATUS_REJECT_ALREADY_EXISTS: case REF_STATUS_REJECT_FETCH_FIRST: case REF_STATUS_REJECT_NEEDS_FORCE: + case REF_STATUS_REJECT_STALE: case REF_STATUS_UPTODATE: continue; default: @@ -5,7 +5,19 @@ static int inside_git_dir = -1; static int inside_work_tree = -1; -static char *prefix_path_gently(const char *prefix, int len, const char *path) +/* + * Normalize "path", prepending the "prefix" for relative paths. If + * remaining_prefix is not NULL, return the actual prefix still + * remains in the path. For example, prefix = sub1/sub2/ and path is + * + * foo -> sub1/sub2/foo (full prefix) + * ../foo -> sub1/foo (remaining prefix is sub1/) + * ../../bar -> bar (no remaining prefix) + * ../../sub1/sub2/foo -> sub1/sub2/foo (but no remaining prefix) + * `pwd`/../bar -> sub1/bar (no remaining prefix) + */ +char *prefix_path_gently(const char *prefix, int len, + int *remaining_prefix, const char *path) { const char *orig = path; char *sanitized; @@ -13,13 +25,17 @@ static char *prefix_path_gently(const char *prefix, int len, const char *path) const char *temp = real_path(path); sanitized = xmalloc(len + strlen(temp) + 1); strcpy(sanitized, temp); + if (remaining_prefix) + *remaining_prefix = 0; } else { sanitized = xmalloc(len + strlen(path) + 1); if (len) memcpy(sanitized, prefix, len); strcpy(sanitized + len, path); + if (remaining_prefix) + *remaining_prefix = len; } - if (normalize_path_copy(sanitized, sanitized)) + if (normalize_path_copy_len(sanitized, sanitized, remaining_prefix)) goto error_out; if (is_absolute_path(orig)) { size_t root_len, len, total; @@ -44,7 +60,7 @@ static char *prefix_path_gently(const char *prefix, int len, const char *path) char *prefix_path(const char *prefix, int len, const char *path) { - char *r = prefix_path_gently(prefix, len, path); + char *r = prefix_path_gently(prefix, len, NULL, path); if (!r) die("'%s' is outside repository", path); return r; @@ -53,7 +69,7 @@ char *prefix_path(const char *prefix, int len, const char *path) int path_inside_repo(const char *prefix, const char *path) { int len = prefix ? strlen(prefix) : 0; - char *r = prefix_path_gently(prefix, len, path); + char *r = prefix_path_gently(prefix, len, NULL, path); if (r) { free(r); return 1; @@ -154,155 +170,6 @@ void verify_non_filename(const char *prefix, const char *arg) "'git <command> [<revision>...] -- [<file>...]'", arg); } -/* - * Magic pathspec - * - * NEEDSWORK: These need to be moved to dir.h or even to a new - * pathspec.h when we restructure get_pathspec() users to use the - * "struct pathspec" interface. - * - * Possible future magic semantics include stuff like: - * - * { PATHSPEC_NOGLOB, '!', "noglob" }, - * { PATHSPEC_ICASE, '\0', "icase" }, - * { PATHSPEC_RECURSIVE, '*', "recursive" }, - * { PATHSPEC_REGEXP, '\0', "regexp" }, - * - */ -#define PATHSPEC_FROMTOP (1<<0) - -static struct pathspec_magic { - unsigned bit; - char mnemonic; /* this cannot be ':'! */ - const char *name; -} pathspec_magic[] = { - { PATHSPEC_FROMTOP, '/', "top" }, -}; - -/* - * Take an element of a pathspec and check for magic signatures. - * Append the result to the prefix. - * - * For now, we only parse the syntax and throw out anything other than - * "top" magic. - * - * NEEDSWORK: This needs to be rewritten when we start migrating - * get_pathspec() users to use the "struct pathspec" interface. For - * example, a pathspec element may be marked as case-insensitive, but - * the prefix part must always match literally, and a single stupid - * string cannot express such a case. - */ -static const char *prefix_pathspec(const char *prefix, int prefixlen, const char *elt) -{ - unsigned magic = 0; - const char *copyfrom = elt; - int i; - - if (elt[0] != ':') { - ; /* nothing to do */ - } else if (elt[1] == '(') { - /* longhand */ - const char *nextat; - for (copyfrom = elt + 2; - *copyfrom && *copyfrom != ')'; - copyfrom = nextat) { - size_t len = strcspn(copyfrom, ",)"); - if (copyfrom[len] == ',') - nextat = copyfrom + len + 1; - else - /* handle ')' and '\0' */ - nextat = copyfrom + len; - if (!len) - continue; - for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) - if (strlen(pathspec_magic[i].name) == len && - !strncmp(pathspec_magic[i].name, copyfrom, len)) { - magic |= pathspec_magic[i].bit; - break; - } - if (ARRAY_SIZE(pathspec_magic) <= i) - die("Invalid pathspec magic '%.*s' in '%s'", - (int) len, copyfrom, elt); - } - if (*copyfrom != ')') - die("Missing ')' at the end of pathspec magic in '%s'", elt); - copyfrom++; - } else { - /* shorthand */ - for (copyfrom = elt + 1; - *copyfrom && *copyfrom != ':'; - copyfrom++) { - char ch = *copyfrom; - - if (!is_pathspec_magic(ch)) - break; - for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) - if (pathspec_magic[i].mnemonic == ch) { - magic |= pathspec_magic[i].bit; - break; - } - if (ARRAY_SIZE(pathspec_magic) <= i) - die("Unimplemented pathspec magic '%c' in '%s'", - ch, elt); - } - if (*copyfrom == ':') - copyfrom++; - } - - if (magic & PATHSPEC_FROMTOP) - return xstrdup(copyfrom); - else - return prefix_path(prefix, prefixlen, copyfrom); -} - -/* - * N.B. get_pathspec() is deprecated in favor of the "struct pathspec" - * based interface - see pathspec_magic above. - * - * Arguments: - * - prefix - a path relative to the root of the working tree - * - pathspec - a list of paths underneath the prefix path - * - * Iterates over pathspec, prepending each path with prefix, - * and return the resulting list. - * - * If pathspec is empty, return a singleton list containing prefix. - * - * If pathspec and prefix are both empty, return an empty list. - * - * This is typically used by built-in commands such as add.c, in order - * to normalize argv arguments provided to the built-in into a list of - * paths to process, all relative to the root of the working tree. - */ -const char **get_pathspec(const char *prefix, const char **pathspec) -{ - const char *entry = *pathspec; - const char **src, **dst; - int prefixlen; - - if (!prefix && !entry) - return NULL; - - if (!entry) { - static const char *spec[2]; - spec[0] = prefix; - spec[1] = NULL; - return spec; - } - - /* Otherwise we have to re-write the entries.. */ - src = pathspec; - dst = pathspec; - prefixlen = prefix ? strlen(prefix) : 0; - while (*src) { - *(dst++) = prefix_pathspec(prefix, prefixlen, *src); - src++; - } - *dst = NULL; - if (!*pathspec) - return NULL; - return pathspec; -} /* * Test if it looks like we're at a git directory. diff --git a/sha1_file.c b/sha1_file.c index 8e27db1bd2..8c2d1ed52d 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -614,7 +614,7 @@ static void scan_windows(struct packed_git *p, } } -static int unuse_one_window(struct packed_git *current, int keep_fd) +static int unuse_one_window(struct packed_git *current) { struct packed_git *p, *lru_p = NULL; struct pack_window *lru_w = NULL, *lru_l = NULL; @@ -628,15 +628,8 @@ static int unuse_one_window(struct packed_git *current, int keep_fd) pack_mapped -= lru_w->len; if (lru_l) lru_l->next = lru_w->next; - else { + else lru_p->windows = lru_w->next; - if (!lru_p->windows && lru_p->pack_fd != -1 - && lru_p->pack_fd != keep_fd) { - close(lru_p->pack_fd); - pack_open_fds--; - lru_p->pack_fd = -1; - } - } free(lru_w); pack_open_windows--; return 1; @@ -644,10 +637,10 @@ static int unuse_one_window(struct packed_git *current, int keep_fd) return 0; } -void release_pack_memory(size_t need, int fd) +void release_pack_memory(size_t need) { size_t cur = pack_mapped; - while (need >= (cur - pack_mapped) && unuse_one_window(NULL, fd)) + while (need >= (cur - pack_mapped) && unuse_one_window(NULL)) ; /* nothing */ } @@ -658,7 +651,7 @@ void *xmmap(void *start, size_t length, if (ret == MAP_FAILED) { if (!length) return NULL; - release_pack_memory(length, fd); + release_pack_memory(length); ret = mmap(start, length, prot, flags, fd, offset); if (ret == MAP_FAILED) die_errno("Out of memory? mmap failed"); @@ -682,6 +675,83 @@ void close_pack_windows(struct packed_git *p) } } +/* + * The LRU pack is the one with the oldest MRU window, preferring packs + * with no used windows, or the oldest mtime if it has no windows allocated. + */ +static void find_lru_pack(struct packed_git *p, struct packed_git **lru_p, struct pack_window **mru_w, int *accept_windows_inuse) +{ + struct pack_window *w, *this_mru_w; + int has_windows_inuse = 0; + + /* + * Reject this pack if it has windows and the previously selected + * one does not. If this pack does not have windows, reject + * it if the pack file is newer than the previously selected one. + */ + if (*lru_p && !*mru_w && (p->windows || p->mtime > (*lru_p)->mtime)) + return; + + for (w = this_mru_w = p->windows; w; w = w->next) { + /* + * Reject this pack if any of its windows are in use, + * but the previously selected pack did not have any + * inuse windows. Otherwise, record that this pack + * has windows in use. + */ + if (w->inuse_cnt) { + if (*accept_windows_inuse) + has_windows_inuse = 1; + else + return; + } + + if (w->last_used > this_mru_w->last_used) + this_mru_w = w; + + /* + * Reject this pack if it has windows that have been + * used more recently than the previously selected pack. + * If the previously selected pack had windows inuse and + * we have not encountered a window in this pack that is + * inuse, skip this check since we prefer a pack with no + * inuse windows to one that has inuse windows. + */ + if (*mru_w && *accept_windows_inuse == has_windows_inuse && + this_mru_w->last_used > (*mru_w)->last_used) + return; + } + + /* + * Select this pack. + */ + *mru_w = this_mru_w; + *lru_p = p; + *accept_windows_inuse = has_windows_inuse; +} + +static int close_one_pack(void) +{ + struct packed_git *p, *lru_p = NULL; + struct pack_window *mru_w = NULL; + int accept_windows_inuse = 1; + + for (p = packed_git; p; p = p->next) { + if (p->pack_fd == -1) + continue; + find_lru_pack(p, &lru_p, &mru_w, &accept_windows_inuse); + } + + if (lru_p) { + close(lru_p->pack_fd); + pack_open_fds--; + lru_p->pack_fd = -1; + return 1; + } + + return 0; +} + void unuse_pack(struct pack_window **w_cursor) { struct pack_window *w = *w_cursor; @@ -777,7 +847,7 @@ static int open_packed_git_1(struct packed_git *p) pack_max_fds = 1; } - while (pack_max_fds <= pack_open_fds && unuse_one_window(NULL, -1)) + while (pack_max_fds <= pack_open_fds && close_one_pack()) ; /* nothing */ p->pack_fd = git_open_noatime(p->pack_name); @@ -893,7 +963,7 @@ unsigned char *use_pack(struct packed_git *p, win->len = (size_t)len; pack_mapped += win->len; while (packed_git_limit < pack_mapped - && unuse_one_window(p, p->pack_fd)) + && unuse_one_window(p)) ; /* nothing */ win->base = xmmap(NULL, win->len, PROT_READ, MAP_PRIVATE, @@ -939,7 +1009,7 @@ static struct packed_git *alloc_packed_git(int extra) static void try_to_free_pack_memory(size_t size) { - release_pack_memory(size, -1); + release_pack_memory(size); } struct packed_git *add_packed_git(const char *path, int path_len, int local) diff --git a/sha1_name.c b/sha1_name.c index 852dd951dc..65ad066d9b 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -1004,17 +1004,6 @@ int get_sha1_mb(const char *name, unsigned char *sha1) return st; } -/* parse @something syntax, when 'something' is not {.*} */ -static int interpret_empty_at(const char *name, int namelen, int len, struct strbuf *buf) -{ - if (len || name[1] == '{') - return -1; - - strbuf_reset(buf); - strbuf_add(buf, "HEAD", 4); - return 1; -} - static int reinterpret(const char *name, int namelen, int len, struct strbuf *buf) { /* we have extra data, which might need further processing */ @@ -1077,15 +1066,9 @@ int interpret_branch_name(const char *name, struct strbuf *buf) cp = strchr(name, '@'); if (!cp) return -1; - - len = interpret_empty_at(name, namelen, cp - name, buf); - if (len > 0) - return reinterpret(name, namelen, len, buf); - tmp_len = upstream_mark(cp, namelen - (cp - name)); if (!tmp_len) return -1; - len = cp + tmp_len - name; cp = xstrndup(name, cp - name); upstream = branch_get(*cp ? cp : NULL); diff --git a/submodule.c b/submodule.c index 3f0a3f9419..1905d75b2b 100644 --- a/submodule.c +++ b/submodule.c @@ -10,6 +10,7 @@ #include "string-list.h" #include "sha1-array.h" #include "argv-array.h" +#include "blob.h" static struct string_list config_name_for_path; static struct string_list config_fetch_recurse_submodules_for_name; @@ -30,6 +31,118 @@ static struct sha1_array ref_tips_after_fetch; */ static int gitmodules_is_unmerged; +/* + * This flag is set if the .gitmodules file had unstaged modifications on + * startup. This must be checked before allowing modifications to the + * .gitmodules file with the intention to stage them later, because when + * continuing we would stage the modifications the user didn't stage herself + * too. That might change in a future version when we learn to stage the + * changes we do ourselves without staging any previous modifications. + */ +static int gitmodules_is_modified; + + +int is_staging_gitmodules_ok(void) +{ + return !gitmodules_is_modified; +} + +/* + * Try to update the "path" entry in the "submodule.<name>" section of the + * .gitmodules file. Return 0 only if a .gitmodules file was found, a section + * with the correct path=<oldpath> setting was found and we could update it. + */ +int update_path_in_gitmodules(const char *oldpath, const char *newpath) +{ + struct strbuf entry = STRBUF_INIT; + struct string_list_item *path_option; + + if (!file_exists(".gitmodules")) /* Do nothing without .gitmodules */ + return -1; + + if (gitmodules_is_unmerged) + die(_("Cannot change unmerged .gitmodules, resolve merge conflicts first")); + + path_option = unsorted_string_list_lookup(&config_name_for_path, oldpath); + if (!path_option) { + warning(_("Could not find section in .gitmodules where path=%s"), oldpath); + return -1; + } + strbuf_addstr(&entry, "submodule."); + strbuf_addstr(&entry, path_option->util); + strbuf_addstr(&entry, ".path"); + if (git_config_set_in_file(".gitmodules", entry.buf, newpath) < 0) { + /* Maybe the user already did that, don't error out here */ + warning(_("Could not update .gitmodules entry %s"), entry.buf); + strbuf_release(&entry); + return -1; + } + strbuf_release(&entry); + return 0; +} + +/* + * Try to remove the "submodule.<name>" section from .gitmodules where the given + * path is configured. Return 0 only if a .gitmodules file was found, a section + * with the correct path=<path> setting was found and we could remove it. + */ +int remove_path_from_gitmodules(const char *path) +{ + struct strbuf sect = STRBUF_INIT; + struct string_list_item *path_option; + + if (!file_exists(".gitmodules")) /* Do nothing without .gitmodules */ + return -1; + + if (gitmodules_is_unmerged) + die(_("Cannot change unmerged .gitmodules, resolve merge conflicts first")); + + path_option = unsorted_string_list_lookup(&config_name_for_path, path); + if (!path_option) { + warning(_("Could not find section in .gitmodules where path=%s"), path); + return -1; + } + strbuf_addstr(§, "submodule."); + strbuf_addstr(§, path_option->util); + if (git_config_rename_section_in_file(".gitmodules", sect.buf, NULL) < 0) { + /* Maybe the user already did that, don't error out here */ + warning(_("Could not remove .gitmodules entry for %s"), path); + strbuf_release(§); + return -1; + } + strbuf_release(§); + return 0; +} + +void stage_updated_gitmodules(void) +{ + struct strbuf buf = STRBUF_INIT; + struct stat st; + int pos; + struct cache_entry *ce; + int namelen = strlen(".gitmodules"); + + pos = cache_name_pos(".gitmodules", namelen); + if (pos < 0) { + warning(_("could not find .gitmodules in index")); + return; + } + ce = active_cache[pos]; + ce->ce_flags = namelen; + if (strbuf_read_file(&buf, ".gitmodules", 0) < 0) + die(_("reading updated .gitmodules failed")); + if (lstat(".gitmodules", &st) < 0) + die_errno(_("unable to stat updated .gitmodules")); + fill_stat_cache_info(ce, &st); + ce->ce_mode = ce_mode_from_stat(ce, st.st_mode); + if (remove_cache_entry_at(pos) < 0) + die(_("unable to remove .gitmodules from index")); + if (write_sha1_file(buf.buf, buf.len, blob_type, ce->sha1)) + die(_("adding updated .gitmodules failed")); + if (add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE)) + die(_("staging updated .gitmodules failed")); +} + static int add_submodule_odb(const char *path) { struct strbuf objects_directory = STRBUF_INIT; @@ -116,6 +229,11 @@ void gitmodules_config(void) !memcmp(ce->name, ".gitmodules", 11)) gitmodules_is_unmerged = 1; } + } else if (pos < active_nr) { + struct stat st; + if (lstat(".gitmodules", &st) == 0 && + ce_match_stat(active_cache[pos], &st, 0) & DATA_CHANGED) + gitmodules_is_modified = 1; } if (!gitmodules_is_unmerged) @@ -134,6 +252,9 @@ int parse_submodule_config_option(const char *var, const char *value) return 0; if (!strcmp(key, "path")) { + if (!value) + return config_error_nonbool(var); + config = unsorted_string_list_lookup(&config_name_for_path, value); if (config) free(config->util); @@ -151,6 +272,9 @@ int parse_submodule_config_option(const char *var, const char *value) } else if (!strcmp(key, "ignore")) { char *name_cstr; + if (!value) + return config_error_nonbool(var); + if (strcmp(value, "untracked") && strcmp(value, "dirty") && strcmp(value, "all") && strcmp(value, "none")) { warning("Invalid parameter \"%s\" for config option \"submodule.%s.ignore\"", value, var); @@ -1004,3 +1128,34 @@ int merge_submodule(unsigned char result[20], const char *path, free(merges.objects); return 0; } + +/* Update gitfile and core.worktree setting to connect work tree and git dir */ +void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir) +{ + struct strbuf file_name = STRBUF_INIT; + struct strbuf rel_path = STRBUF_INIT; + const char *real_work_tree = xstrdup(real_path(work_tree)); + FILE *fp; + + /* Update gitfile */ + strbuf_addf(&file_name, "%s/.git", work_tree); + fp = fopen(file_name.buf, "w"); + if (!fp) + die(_("Could not create git link %s"), file_name.buf); + fprintf(fp, "gitdir: %s\n", relative_path(git_dir, real_work_tree, + &rel_path)); + fclose(fp); + + /* Update core.worktree setting */ + strbuf_reset(&file_name); + strbuf_addf(&file_name, "%s/config", git_dir); + if (git_config_set_in_file(file_name.buf, "core.worktree", + relative_path(real_work_tree, git_dir, + &rel_path))) + die(_("Could not set core.worktree in %s"), + file_name.buf); + + strbuf_release(&file_name); + strbuf_release(&rel_path); + free((void *)real_work_tree); +} diff --git a/submodule.h b/submodule.h index c7ffc7c399..7beec4822b 100644 --- a/submodule.h +++ b/submodule.h @@ -11,6 +11,10 @@ enum { RECURSE_SUBMODULES_ON = 2 }; +int is_staging_gitmodules_ok(void); +int update_path_in_gitmodules(const char *oldpath, const char *newpath); +int remove_path_from_gitmodules(const char *path); +void stage_updated_gitmodules(void); void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt, const char *path); int submodule_config(const char *var, const char *value, void *cb); @@ -36,5 +40,6 @@ int merge_submodule(unsigned char result[20], const char *path, const unsigned c int find_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name, struct string_list *needs_pushing); int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name); +void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir); #endif diff --git a/t/.gitattributes b/t/.gitattributes index 1b97c5465b..2d44088f56 100644 --- a/t/.gitattributes +++ b/t/.gitattributes @@ -1 +1,2 @@ t[0-9][0-9][0-9][0-9]/* -whitespace +t0110/url-* binary diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index d4e7f4736f..99caa42f5c 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -185,6 +185,26 @@ test_expect_success 'blame -L Y,X (undocumented)' ' check_count -L6,3 B 1 B1 1 B2 1 D 1 ' +test_expect_success 'blame -L -X' ' + test_must_fail $PROG -L-1 file +' + +test_expect_success 'blame -L 0' ' + test_must_fail $PROG -L0 file +' + +test_expect_success 'blame -L ,0' ' + test_must_fail $PROG -L,0 file +' + +test_expect_success 'blame -L ,+0' ' + test_must_fail $PROG -L,+0 file +' + +test_expect_success 'blame -L X,+0' ' + test_must_fail $PROG -L1,+0 file +' + test_expect_success 'blame -L X,+1' ' check_count -L3,+1 B2 1 ' @@ -193,6 +213,14 @@ test_expect_success 'blame -L X,+N' ' check_count -L3,+4 B 1 B1 1 B2 1 D 1 ' +test_expect_success 'blame -L ,-0' ' + test_must_fail $PROG -L,-0 file +' + +test_expect_success 'blame -L X,-0' ' + test_must_fail $PROG -L1,-0 file +' + test_expect_success 'blame -L X,-1' ' check_count -L3,-1 B2 1 ' @@ -225,14 +253,105 @@ test_expect_success 'blame -L /RE/,-N' ' check_count -L/99/,-3 B 1 B2 1 D 1 ' +# 'file' ends with an incomplete line, so 'wc' reports one fewer lines than +# git-blame sees, hence the last line is actually $(wc...)+1. +test_expect_success 'blame -L X (X == nlines)' ' + n=$(expr $(wc -l <file) + 1) && + check_count -L$n C 1 +' + +test_expect_success 'blame -L X (X == nlines + 1)' ' + n=$(expr $(wc -l <file) + 2) && + test_must_fail $PROG -L$n file +' + test_expect_success 'blame -L X (X > nlines)' ' test_must_fail $PROG -L12345 file ' +test_expect_success 'blame -L ,Y (Y == nlines)' ' + n=$(expr $(wc -l <file) + 1) && + check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 +' + +test_expect_success 'blame -L ,Y (Y == nlines + 1)' ' + n=$(expr $(wc -l <file) + 2) && + test_must_fail $PROG -L,$n file +' + test_expect_success 'blame -L ,Y (Y > nlines)' ' test_must_fail $PROG -L,12345 file ' +test_expect_success 'blame -L multiple (disjoint)' ' + check_count -L2,3 -L6,7 A 1 B1 1 B2 1 "A U Thor" 1 +' + +test_expect_success 'blame -L multiple (disjoint: unordered)' ' + check_count -L6,7 -L2,3 A 1 B1 1 B2 1 "A U Thor" 1 +' + +test_expect_success 'blame -L multiple (adjacent)' ' + check_count -L2,3 -L4,5 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (adjacent: unordered)' ' + check_count -L4,5 -L2,3 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (overlapping)' ' + check_count -L2,4 -L3,5 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (overlapping: unordered)' ' + check_count -L3,5 -L2,4 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (superset/subset)' ' + check_count -L2,8 -L3,5 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L multiple (superset/subset: unordered)' ' + check_count -L3,5 -L2,8 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/ (relative)' ' + check_count -L3,3 -L/fox/ B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/ (relative: no preceding range)' ' + check_count -L/dog/ A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/ (relative: adjacent)' ' + check_count -L1,1 -L/dog/,+1 A 1 E 1 +' + +test_expect_success 'blame -L /RE/ (relative: not found)' ' + test_must_fail $PROG -L4,4 -L/dog/ file +' + +test_expect_success 'blame -L /RE/ (relative: end-of-file)' ' + test_must_fail $PROG -L, -L/$/ file +' + +test_expect_success 'blame -L ^/RE/ (absolute)' ' + check_count -L3,3 -L^/dog/,+2 A 1 B2 1 +' + +test_expect_success 'blame -L ^/RE/ (absolute: no preceding range)' ' + check_count -L^/dog/,+2 A 1 B2 1 +' + +test_expect_success 'blame -L ^/RE/ (absolute: not found)' ' + test_must_fail $PROG -L4,4 -L^/tambourine/ file +' + +test_expect_success 'blame -L ^/RE/ (absolute: end-of-file)' ' + n=$(expr $(wc -l <file) + 1) && + check_count -L$n -L^/$/,+2 A 1 C 1 E 1 +' + test_expect_success 'setup -L :regex' ' tr Q "\\t" >hello.c <<-\EOF && int main(int argc, const char *argv[]) @@ -275,12 +394,139 @@ test_expect_success 'blame -L :nomatch' ' test_must_fail $PROG -L:nomatch hello.c ' -test_expect_success 'blame -L bogus' ' - test_must_fail $PROG -L file && - test_must_fail $PROG -L1,+ file && - test_must_fail $PROG -L1,- file && - test_must_fail $PROG -LX file && - test_must_fail $PROG -L1,X file && - test_must_fail $PROG -L1,+N file && +test_expect_success 'blame -L :RE (relative)' ' + check_count -f hello.c -L3,3 -L:ma.. F 1 H 4 +' + +test_expect_success 'blame -L :RE (relative: no preceding range)' ' + check_count -f hello.c -L:ma.. F 4 G 1 +' + +test_expect_success 'blame -L :RE (relative: not found)' ' + test_must_fail $PROG -L3,3 -L:tambourine hello.c +' + +test_expect_success 'blame -L :RE (relative: end-of-file)' ' + test_must_fail $PROG -L, -L:main hello.c +' + +test_expect_success 'blame -L ^:RE (absolute)' ' + check_count -f hello.c -L3,3 -L^:ma.. F 4 G 1 +' + +test_expect_success 'blame -L ^:RE (absolute: no preceding range)' ' + check_count -f hello.c -L^:ma.. F 4 G 1 +' + +test_expect_success 'blame -L ^:RE (absolute: not found)' ' + test_must_fail $PROG -L4,4 -L^:tambourine hello.c +' + +test_expect_success 'blame -L ^:RE (absolute: end-of-file)' ' + n=$(printf "%d" $(wc -l <hello.c)) && + check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1 +' + +test_expect_success 'setup incremental' ' + ( + GIT_AUTHOR_NAME=I && + export GIT_AUTHOR_NAME && + GIT_AUTHOR_EMAIL=I@test.git && + export GIT_AUTHOR_EMAIL && + >incremental && + git add incremental && + git commit -m "step 0" && + printf "partial" >>incremental && + git commit -a -m "step 0.5" && + echo >>incremental && + git commit -a -m "step 1" + ) +' + +test_expect_success 'blame empty' ' + check_count -h HEAD^^ -f incremental +' + +test_expect_success 'blame -L 0 empty' ' + test_must_fail $PROG -L0 incremental HEAD^^ +' + +test_expect_success 'blame -L 1 empty' ' + test_must_fail $PROG -L1 incremental HEAD^^ +' + +test_expect_success 'blame -L 2 empty' ' + test_must_fail $PROG -L2 incremental HEAD^^ +' + +test_expect_success 'blame half' ' + check_count -h HEAD^ -f incremental I 1 +' + +test_expect_success 'blame -L 0 half' ' + test_must_fail $PROG -L0 incremental HEAD^ +' + +test_expect_success 'blame -L 1 half' ' + check_count -h HEAD^ -f incremental -L1 I 1 +' + +test_expect_success 'blame -L 2 half' ' + test_must_fail $PROG -L2 incremental HEAD^ +' + +test_expect_success 'blame -L 3 half' ' + test_must_fail $PROG -L3 incremental HEAD^ +' + +test_expect_success 'blame full' ' + check_count -f incremental I 1 +' + +test_expect_success 'blame -L 0 full' ' + test_must_fail $PROG -L0 incremental +' + +test_expect_success 'blame -L 1 full' ' + check_count -f incremental -L1 I 1 +' + +test_expect_success 'blame -L 2 full' ' + test_must_fail $PROG -L2 incremental +' + +test_expect_success 'blame -L 3 full' ' + test_must_fail $PROG -L3 incremental +' + +test_expect_success 'blame -L' ' + test_must_fail $PROG -L file +' + +test_expect_success 'blame -L X,+' ' + test_must_fail $PROG -L1,+ file +' + +test_expect_success 'blame -L X,-' ' + test_must_fail $PROG -L1,- file +' + +test_expect_success 'blame -L X (non-numeric X)' ' + test_must_fail $PROG -LX file +' + +test_expect_success 'blame -L X,Y (non-numeric Y)' ' + test_must_fail $PROG -L1,Y file +' + +test_expect_success 'blame -L X,+N (non-numeric N)' ' + test_must_fail $PROG -L1,+N file +' + +test_expect_success 'blame -L X,-N (non-numeric N)' ' test_must_fail $PROG -L1,-N file ' + +test_expect_success 'blame -L ,^/RE/' ' + test_must_fail $PROG -L1,^/99/ file +' diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh index 895b9258b0..dab405d574 100644 --- a/t/lib-httpd.sh +++ b/t/lib-httpd.sh @@ -141,10 +141,11 @@ stop_httpd() { -f "$TEST_PATH/apache.conf" $HTTPD_PARA -k stop } -test_http_push_nonff() { +test_http_push_nonff () { REMOTE_REPO=$1 LOCAL_REPO=$2 BRANCH=$3 + EXPECT_CAS_RESULT=${4-failure} test_expect_success 'non-fast-forward push fails' ' cd "$REMOTE_REPO" && @@ -167,6 +168,22 @@ test_http_push_nonff() { test_expect_success 'non-fast-forward push shows help message' ' test_i18ngrep "Updates were rejected because" output ' + + test_expect_failure 'force with lease aka cas' ' + HEAD=$( cd "$REMOTE_REPO" && git rev-parse --verify HEAD ) && + test_when_finished '\'' + (cd "$REMOTE_REPO" && git update-ref HEAD "$HEAD") + '\'' && + ( + cd "$LOCAL_REPO" && + git push -v --force-with-lease=$BRANCH:$HEAD origin + ) && + git rev-parse --verify "$BRANCH" >expect && + ( + cd "$REMOTE_REPO" && git rev-parse --verify HEAD + ) >actual && + test_cmp expect actual + ' } setup_askpass_helper() { diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index dd17e3a09d..397c480401 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -22,6 +22,9 @@ ErrorLog error.log <IfModule !mod_version.c> LoadModule version_module modules/mod_version.so </IfModule> +<IfModule !mod_headers.c> + LoadModule headers_module modules/mod_headers.so +</IfModule> <IfVersion < 2.4> LockFile accept.lock @@ -87,6 +90,11 @@ Alias /auth/dumb/ www/auth/dumb/ SetEnv GIT_HTTP_EXPORT_ALL SetEnv GIT_NAMESPACE ns </LocationMatch> +<LocationMatch /smart_cookies/> + SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} + SetEnv GIT_HTTP_EXPORT_ALL + Header set Set-Cookie name=value +</LocationMatch> ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1 ScriptAlias /broken_smart/ broken-smart-http.sh/ <Directory ${GIT_EXEC_PATH}> diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh index c29342d6bc..96f40fedfb 100755 --- a/t/t0008-ignores.sh +++ b/t/t0008-ignores.sh @@ -432,7 +432,7 @@ test_expect_success_multi SYMLINKS 'symlink' ':: a/symlink' ' test_expect_success_multi SYMLINKS 'beyond a symlink' '' ' test_check_ignore "a/symlink/foo" 128 && - test_stderr "fatal: '\''a/symlink/foo'\'' is beyond a symbolic link" + test_stderr "fatal: pathspec '\''a/symlink/foo'\'' is beyond a symbolic link" ' test_expect_success_multi SYMLINKS 'beyond a symlink from subdirectory' '' ' @@ -440,7 +440,7 @@ test_expect_success_multi SYMLINKS 'beyond a symlink from subdirectory' '' ' cd a && test_check_ignore "symlink/foo" 128 ) && - test_stderr "fatal: '\''symlink/foo'\'' is beyond a symbolic link" + test_stderr "fatal: pathspec '\''symlink/foo'\'' is beyond a symbolic link" ' ############################################################################ @@ -449,7 +449,7 @@ test_expect_success_multi SYMLINKS 'beyond a symlink from subdirectory' '' ' test_expect_success_multi 'submodule' '' ' test_check_ignore "a/submodule/one" 128 && - test_stderr "fatal: Path '\''a/submodule/one'\'' is in submodule '\''a/submodule'\''" + test_stderr "fatal: Pathspec '\''a/submodule/one'\'' is in submodule '\''a/submodule'\''" ' test_expect_success_multi 'submodule from subdirectory' '' ' @@ -457,7 +457,7 @@ test_expect_success_multi 'submodule from subdirectory' '' ' cd a && test_check_ignore "submodule/one" 128 ) && - test_stderr "fatal: Path '\''a/submodule/one'\'' is in submodule '\''a/submodule'\''" + test_stderr "fatal: Pathspec '\''submodule/one'\'' is in submodule '\''a/submodule'\''" ' ############################################################################ diff --git a/t/t0070-fundamental.sh b/t/t0070-fundamental.sh index 986b2a8f26..5ed69a6f56 100755 --- a/t/t0070-fundamental.sh +++ b/t/t0070-fundamental.sh @@ -25,6 +25,10 @@ test_expect_success POSIXPERM,SANITY 'mktemp to unwritable directory prints file grep "cannotwrite/test" err ' +test_expect_success 'git_mkstemps_mode does not fail if fd 0 is not open' ' + git commit --allow-empty -m message <&- +' + test_expect_success 'check for a bug in the regex routines' ' # if this test fails, re-build git with NO_REGEX=1 test-regex diff --git a/t/t0110-urlmatch-normalization.sh b/t/t0110-urlmatch-normalization.sh new file mode 100755 index 0000000000..8d6096d4d1 --- /dev/null +++ b/t/t0110-urlmatch-normalization.sh @@ -0,0 +1,177 @@ +#!/bin/sh + +test_description='urlmatch URL normalization' +. ./test-lib.sh + +# The base name of the test url files +tu="$TEST_DIRECTORY/t0110/url" + +# Note that only file: URLs should be allowed without a host + +test_expect_success 'url scheme' ' + ! test-urlmatch-normalization "" && + ! test-urlmatch-normalization "_" && + ! test-urlmatch-normalization "scheme" && + ! test-urlmatch-normalization "scheme:" && + ! test-urlmatch-normalization "scheme:/" && + ! test-urlmatch-normalization "scheme://" && + ! test-urlmatch-normalization "file" && + ! test-urlmatch-normalization "file:" && + ! test-urlmatch-normalization "file:/" && + test-urlmatch-normalization "file://" && + ! test-urlmatch-normalization "://acme.co" && + ! test-urlmatch-normalization "x_test://acme.co" && + ! test-urlmatch-normalization "-test://acme.co" && + ! test-urlmatch-normalization "0test://acme.co" && + ! test-urlmatch-normalization "+test://acme.co" && + ! test-urlmatch-normalization ".test://acme.co" && + ! test-urlmatch-normalization "schem%6e://" && + test-urlmatch-normalization "x-Test+v1.0://acme.co" && + test "$(test-urlmatch-normalization -p "AbCdeF://x.Y")" = "abcdef://x.y/" +' + +test_expect_success 'url authority' ' + ! test-urlmatch-normalization "scheme://user:pass@" && + ! test-urlmatch-normalization "scheme://?" && + ! test-urlmatch-normalization "scheme://#" && + ! test-urlmatch-normalization "scheme:///" && + ! test-urlmatch-normalization "scheme://:" && + ! test-urlmatch-normalization "scheme://:555" && + test-urlmatch-normalization "file://user:pass@" && + test-urlmatch-normalization "file://?" && + test-urlmatch-normalization "file://#" && + test-urlmatch-normalization "file:///" && + test-urlmatch-normalization "file://:" && + ! test-urlmatch-normalization "file://:555" && + test-urlmatch-normalization "scheme://user:pass@host" && + test-urlmatch-normalization "scheme://@host" && + test-urlmatch-normalization "scheme://%00@host" && + ! test-urlmatch-normalization "scheme://%%@host" && + ! test-urlmatch-normalization "scheme://host_" && + test-urlmatch-normalization "scheme://user:pass@host/" && + test-urlmatch-normalization "scheme://@host/" && + test-urlmatch-normalization "scheme://host/" && + test-urlmatch-normalization "scheme://host?x" && + test-urlmatch-normalization "scheme://host#x" && + test-urlmatch-normalization "scheme://host/@" && + test-urlmatch-normalization "scheme://host?@x" && + test-urlmatch-normalization "scheme://host#@x" && + test-urlmatch-normalization "scheme://[::1]" && + test-urlmatch-normalization "scheme://[::1]/" && + ! test-urlmatch-normalization "scheme://hos%41/" && + test-urlmatch-normalization "scheme://[invalid....:/" && + test-urlmatch-normalization "scheme://invalid....:]/" && + ! test-urlmatch-normalization "scheme://invalid....:[/" && + ! test-urlmatch-normalization "scheme://invalid....:[" +' + +test_expect_success 'url port checks' ' + test-urlmatch-normalization "xyz://q@some.host:" && + test-urlmatch-normalization "xyz://q@some.host:456/" && + ! test-urlmatch-normalization "xyz://q@some.host:0" && + ! test-urlmatch-normalization "xyz://q@some.host:0000000" && + test-urlmatch-normalization "xyz://q@some.host:0000001?" && + test-urlmatch-normalization "xyz://q@some.host:065535#" && + test-urlmatch-normalization "xyz://q@some.host:65535" && + ! test-urlmatch-normalization "xyz://q@some.host:65536" && + ! test-urlmatch-normalization "xyz://q@some.host:99999" && + ! test-urlmatch-normalization "xyz://q@some.host:100000" && + ! test-urlmatch-normalization "xyz://q@some.host:100001" && + test-urlmatch-normalization "http://q@some.host:80" && + test-urlmatch-normalization "https://q@some.host:443" && + test-urlmatch-normalization "http://q@some.host:80/" && + test-urlmatch-normalization "https://q@some.host:443?" && + ! test-urlmatch-normalization "http://q@:8008" && + ! test-urlmatch-normalization "http://:8080" && + ! test-urlmatch-normalization "http://:" && + test-urlmatch-normalization "xyz://q@some.host:456/" && + test-urlmatch-normalization "xyz://[::1]:456/" && + test-urlmatch-normalization "xyz://[::1]:/" && + ! test-urlmatch-normalization "xyz://[::1]:000/" && + ! test-urlmatch-normalization "xyz://[::1]:0%300/" && + ! test-urlmatch-normalization "xyz://[::1]:0x80/" && + ! test-urlmatch-normalization "xyz://[::1]:4294967297/" && + ! test-urlmatch-normalization "xyz://[::1]:030f/" +' + +test_expect_success 'url port normalization' ' + test "$(test-urlmatch-normalization -p "http://x:800")" = "http://x:800/" && + test "$(test-urlmatch-normalization -p "http://x:0800")" = "http://x:800/" && + test "$(test-urlmatch-normalization -p "http://x:00000800")" = "http://x:800/" && + test "$(test-urlmatch-normalization -p "http://x:065535")" = "http://x:65535/" && + test "$(test-urlmatch-normalization -p "http://x:1")" = "http://x:1/" && + test "$(test-urlmatch-normalization -p "http://x:80")" = "http://x/" && + test "$(test-urlmatch-normalization -p "http://x:080")" = "http://x/" && + test "$(test-urlmatch-normalization -p "http://x:000000080")" = "http://x/" && + test "$(test-urlmatch-normalization -p "https://x:443")" = "https://x/" && + test "$(test-urlmatch-normalization -p "https://x:0443")" = "https://x/" && + test "$(test-urlmatch-normalization -p "https://x:000000443")" = "https://x/" +' + +test_expect_success 'url general escapes' ' + ! test-urlmatch-normalization "http://x.y?%fg" && + test "$(test-urlmatch-normalization -p "X://W/%7e%41^%3a")" = "x://w/~A%5E%3A" && + test "$(test-urlmatch-normalization -p "X://W/:/?#[]@")" = "x://w/:/?#[]@" && + test "$(test-urlmatch-normalization -p "X://W/$&()*+,;=")" = "x://w/$&()*+,;=" && + test "$(test-urlmatch-normalization -p "X://W/'\''")" = "x://w/'\''" && + test "$(test-urlmatch-normalization -p "X://W?'\!'")" = "x://w/?'\!'" +' + +test_expect_success 'url high-bit escapes' ' + test "$(test-urlmatch-normalization -p "$(cat "$tu-1")")" = "x://q/%01%02%03%04%05%06%07%08%0E%0F%10%11%12" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-2")")" = "x://q/%13%14%15%16%17%18%19%1B%1C%1D%1E%1F%7F" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-3")")" = "x://q/%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-4")")" = "x://q/%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-5")")" = "x://q/%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-6")")" = "x://q/%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-7")")" = "x://q/%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-8")")" = "x://q/%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-9")")" = "x://q/%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-10")")" = "x://q/%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF" && + test "$(test-urlmatch-normalization -p "$(cat "$tu-11")")" = "x://q/%C2%80%DF%BF%E0%A0%80%EF%BF%BD%F0%90%80%80%F0%AF%BF%BD" +' + +test_expect_success 'url username/password escapes' ' + test "$(test-urlmatch-normalization -p "x://%41%62(^):%70+d@foo")" = "x://Ab(%5E):p+d@foo/" +' + +test_expect_success 'url normalized lengths' ' + test "$(test-urlmatch-normalization -l "Http://%4d%65:%4d^%70@The.Host")" = 25 && + test "$(test-urlmatch-normalization -l "http://%41:%42@x.y/%61/")" = 17 && + test "$(test-urlmatch-normalization -l "http://@x.y/^")" = 15 +' + +test_expect_success 'url . and .. segments' ' + test "$(test-urlmatch-normalization -p "x://y/.")" = "x://y/" && + test "$(test-urlmatch-normalization -p "x://y/./")" = "x://y/" && + test "$(test-urlmatch-normalization -p "x://y/a/.")" = "x://y/a" && + test "$(test-urlmatch-normalization -p "x://y/a/./")" = "x://y/a/" && + test "$(test-urlmatch-normalization -p "x://y/.?")" = "x://y/?" && + test "$(test-urlmatch-normalization -p "x://y/./?")" = "x://y/?" && + test "$(test-urlmatch-normalization -p "x://y/a/.?")" = "x://y/a?" && + test "$(test-urlmatch-normalization -p "x://y/a/./?")" = "x://y/a/?" && + test "$(test-urlmatch-normalization -p "x://y/a/./b/.././../c")" = "x://y/c" && + test "$(test-urlmatch-normalization -p "x://y/a/./b/../.././c/")" = "x://y/c/" && + test "$(test-urlmatch-normalization -p "x://y/a/./b/.././../c/././.././.")" = "x://y/" && + ! test-urlmatch-normalization "x://y/a/./b/.././../c/././.././.." && + test "$(test-urlmatch-normalization -p "x://y/a/./?/././..")" = "x://y/a/?/././.." && + test "$(test-urlmatch-normalization -p "x://y/%2e/")" = "x://y/" && + test "$(test-urlmatch-normalization -p "x://y/%2E/")" = "x://y/" && + test "$(test-urlmatch-normalization -p "x://y/a/%2e./")" = "x://y/" && + test "$(test-urlmatch-normalization -p "x://y/b/.%2E/")" = "x://y/" && + test "$(test-urlmatch-normalization -p "x://y/c/%2e%2E/")" = "x://y/" +' + +# http://@foo specifies an empty user name but does not specify a password +# http://foo specifies neither a user name nor a password +# So they should not be equivalent +test_expect_success 'url equivalents' ' + test-urlmatch-normalization "httP://x" "Http://X/" && + test-urlmatch-normalization "Http://%4d%65:%4d^%70@The.Host" "hTTP://Me:%4D^p@the.HOST:80/" && + ! test-urlmatch-normalization "https://@x.y/^" "httpS://x.y:443/^" && + test-urlmatch-normalization "https://@x.y/^" "httpS://@x.y:0443/^" && + test-urlmatch-normalization "https://@x.y/^/../abc" "httpS://@x.y:0443/abc" && + test-urlmatch-normalization "https://@x.y/^/.." "httpS://@x.y:0443/" +' + +test_done diff --git a/t/t0110/README b/t/t0110/README new file mode 100644 index 0000000000..ad4a50ecd8 --- /dev/null +++ b/t/t0110/README @@ -0,0 +1,9 @@ +The url data files in this directory contain URLs with characters +in the range 0x01-0x1f and 0x7f-0xff to test the proper normalization +of unprintable characters. + +A select few characters in the 0x01-0x1f range are skipped to help +avoid problems running the test itself. + +The urls are in test files in this directory rather than being +embedded in the test script for portability. diff --git a/t/t0110/url-1 b/t/t0110/url-1 new file mode 100644 index 0000000000..519019c5ce --- /dev/null +++ b/t/t0110/url-1 @@ -0,0 +1 @@ +x://q/ diff --git a/t/t0110/url-10 b/t/t0110/url-10 new file mode 100644 index 0000000000..b9965de6a5 --- /dev/null +++ b/t/t0110/url-10 @@ -0,0 +1 @@ +x://q/ðñòóôõö÷øùúûüýþÿ diff --git a/t/t0110/url-11 b/t/t0110/url-11 new file mode 100644 index 0000000000..f0a50f1009 --- /dev/null +++ b/t/t0110/url-11 @@ -0,0 +1 @@ +x://q/Â€ß¿à €ï¿½ð€€ð¯¿½ diff --git a/t/t0110/url-2 b/t/t0110/url-2 new file mode 100644 index 0000000000..43334b05b2 --- /dev/null +++ b/t/t0110/url-2 @@ -0,0 +1 @@ +x://q/ diff --git a/t/t0110/url-3 b/t/t0110/url-3 new file mode 100644 index 0000000000..7378c7bec2 --- /dev/null +++ b/t/t0110/url-3 @@ -0,0 +1 @@ +x://q/€‚ƒ„…†‡ˆ‰Š‹ŒŽ diff --git a/t/t0110/url-4 b/t/t0110/url-4 new file mode 100644 index 0000000000..220b198c97 --- /dev/null +++ b/t/t0110/url-4 @@ -0,0 +1 @@ +x://q/‘’“”•–—˜™š›œžŸ diff --git a/t/t0110/url-5 b/t/t0110/url-5 new file mode 100644 index 0000000000..1ccd927779 --- /dev/null +++ b/t/t0110/url-5 @@ -0,0 +1 @@ +x://q/ ¡¢£¤¥¦§¨©ª«¬®¯ diff --git a/t/t0110/url-6 b/t/t0110/url-6 new file mode 100644 index 0000000000..e8283aac6d --- /dev/null +++ b/t/t0110/url-6 @@ -0,0 +1 @@ +x://q/°±²³´µ¶·¸¹º»¼½¾¿ diff --git a/t/t0110/url-7 b/t/t0110/url-7 new file mode 100644 index 0000000000..fa7c10b615 --- /dev/null +++ b/t/t0110/url-7 @@ -0,0 +1 @@ +x://q/ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ diff --git a/t/t0110/url-8 b/t/t0110/url-8 new file mode 100644 index 0000000000..79a0ba836f --- /dev/null +++ b/t/t0110/url-8 @@ -0,0 +1 @@ +x://q/ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß diff --git a/t/t0110/url-9 b/t/t0110/url-9 new file mode 100644 index 0000000000..8b44bec48b --- /dev/null +++ b/t/t0110/url-9 @@ -0,0 +1 @@ +x://q/àáâãäåæçèéêëìíîï diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh index 4e911fb43d..a420742494 100755 --- a/t/t1006-cat-file.sh +++ b/t/t1006-cat-file.sh @@ -78,6 +78,13 @@ $content" echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual && test_cmp expect actual ' + + test_expect_success '--batch-check with %(rest)' ' + echo "$type this is some extra content" >expect && + echo "$sha1 this is some extra content" | + git cat-file --batch-check="%(objecttype) %(rest)" >actual && + test_cmp expect actual + ' } hello_content="Hello World" @@ -91,6 +98,14 @@ test_expect_success "setup" ' run_tests 'blob' $hello_sha1 $hello_size "$hello_content" "$hello_content" +test_expect_success '--batch-check without %(rest) considers whole line' ' + echo "$hello_sha1 blob $hello_size" >expect && + git update-index --add --cacheinfo 100644 $hello_sha1 "white space" && + test_when_finished "git update-index --remove \"white space\"" && + echo ":white space" | git cat-file --batch-check >actual && + test_cmp expect actual +' + tree_sha1=$(git write-tree) tree_size=33 tree_pretty_content="100644 blob $hello_sha1 hello" diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index c4a7d84f46..c23f4781e1 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -1087,6 +1087,31 @@ test_expect_success 'barf on incomplete string' ' grep " line 3 " error ' +test_expect_success 'urlmatch' ' + cat >.git/config <<-\EOF && + [http] + sslVerify + [http "https://weak.example.com"] + sslVerify = false + cookieFile = /tmp/cookie.txt + EOF + + echo true >expect && + git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual && + test_cmp expect actual && + + echo false >expect && + git config --bool --get-urlmatch http.sslverify https://weak.example.com >actual && + test_cmp expect actual && + + { + echo http.cookiefile /tmp/cookie.txt && + echo http.sslverify false + } >expect && + git config --get-urlmatch HTTP https://weak.example.com >actual && + test_cmp expect actual +' + # good section hygiene test_expect_failure 'unsetting the last key in a section removes header' ' cat >.git/config <<-\EOF && diff --git a/t/t1411-reflog-show.sh b/t/t1411-reflog-show.sh index 9a105fe21f..6f47c0dd0e 100755 --- a/t/t1411-reflog-show.sh +++ b/t/t1411-reflog-show.sh @@ -144,4 +144,26 @@ test_expect_success 'empty reflog file' ' test_cmp expect actual ' +# This guards against the alternative of showing the diffs vs. the +# reflog ancestor. The reflog used is designed to list the commits +# more than once, so as to exercise the corresponding logic. +test_expect_success 'git log -g -p shows diffs vs. parents' ' + test_commit two && + git branch flipflop && + git update-ref refs/heads/flipflop -m flip1 HEAD^ && + git update-ref refs/heads/flipflop -m flop1 HEAD && + git update-ref refs/heads/flipflop -m flip2 HEAD^ && + git log -g -p flipflop >reflog && + grep -v ^Reflog reflog >actual && + git log -1 -p HEAD^ >log.one && + git log -1 -p HEAD >log.two && + ( + cat log.one; echo + cat log.two; echo + cat log.one; echo + cat log.two + ) >expect && + test_cmp expect actual +' + test_done diff --git a/t/t1508-at-combinations.sh b/t/t1508-at-combinations.sh index 4db1613f8a..e5aea3b896 100755 --- a/t/t1508-at-combinations.sh +++ b/t/t1508-at-combinations.sh @@ -55,8 +55,6 @@ check "HEAD@{u}" ref refs/heads/upstream-branch check "@{u}@{1}" commit upstream-one check "@{-1}@{u}" ref refs/heads/master check "@{-1}@{u}@{1}" commit master-one -check "@" commit new-two -check "@@{u}" ref refs/heads/upstream-branch nonsense "@{u}@{-1}" nonsense "@{0}@{0}" nonsense "@{1}@{u}" diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 49ccb38f88..4dbeddb0de 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -976,4 +976,17 @@ test_expect_success 'rebase -i with --strategy and -X' ' test $(cat file1) = Z ' +test_expect_success 'rebase -i error on commits with \ in message' ' + current_head=$(git rev-parse HEAD) + test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" && + test_commit TO-REMOVE will-conflict old-content && + test_commit "\temp" will-conflict new-content dummy && + ( + EDITOR=true && + export EDITOR && + test_must_fail git rebase -i HEAD^ --onto HEAD^^ 2>error + ) && + test_expect_code 1 grep " emp" error +' + test_done diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh index 5c87b55645..639cb70941 100755 --- a/t/t3600-rm.sh +++ b/t/t3600-rm.sh @@ -263,6 +263,7 @@ test_expect_success 'rm removes subdirectories recursively' ' ' cat >expect <<EOF +M .gitmodules D submod EOF @@ -270,6 +271,15 @@ cat >expect.modified <<EOF M submod EOF +cat >expect.cached <<EOF +D submod +EOF + +cat >expect.both_deleted<<EOF +D .gitmodules +D submod +EOF + test_expect_success 'rm removes empty submodules from work tree' ' mkdir submod && git update-index --add --cacheinfo 160000 $(git rev-parse HEAD) submod && @@ -281,16 +291,20 @@ test_expect_success 'rm removes empty submodules from work tree' ' git rm submod && test ! -e submod && git status -s -uno --ignore-submodules=none > actual && - test_cmp expect actual + test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.sub.url && + test_must_fail git config -f .gitmodules submodule.sub.path ' -test_expect_success 'rm removes removed submodule from index' ' +test_expect_success 'rm removes removed submodule from index and .gitmodules' ' git reset --hard && git submodule update && rm -rf submod && git rm submod && git status -s -uno --ignore-submodules=none > actual && - test_cmp expect actual + test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.sub.url && + test_must_fail git config -f .gitmodules submodule.sub.path ' test_expect_success 'rm removes work tree of unmodified submodules' ' @@ -299,7 +313,9 @@ test_expect_success 'rm removes work tree of unmodified submodules' ' git rm submod && test ! -d submod && git status -s -uno --ignore-submodules=none > actual && - test_cmp expect actual + test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.sub.url && + test_must_fail git config -f .gitmodules submodule.sub.path ' test_expect_success 'rm removes a submodule with a trailing /' ' @@ -333,6 +349,72 @@ test_expect_success 'rm of a populated submodule with different HEAD fails unles git rm -f submod && test ! -d submod && git status -s -uno --ignore-submodules=none > actual && + test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.sub.url && + test_must_fail git config -f .gitmodules submodule.sub.path +' + +test_expect_success 'rm --cached leaves work tree of populated submodules and .gitmodules alone' ' + git reset --hard && + git submodule update && + git rm --cached submod && + test -d submod && + test -f submod/.git && + git status -s -uno >actual && + test_cmp expect.cached actual && + git config -f .gitmodules submodule.sub.url && + git config -f .gitmodules submodule.sub.path +' + +test_expect_success 'rm --dry-run does not touch the submodule or .gitmodules' ' + git reset --hard && + git submodule update && + git rm -n submod && + test -f submod/.git && + git diff-index --exit-code HEAD +' + +test_expect_success 'rm does not complain when no .gitmodules file is found' ' + git reset --hard && + git submodule update && + git rm .gitmodules && + git rm submod >actual 2>actual.err && + ! test -s actual.err && + ! test -d submod && + ! test -f submod/.git && + git status -s -uno >actual && + test_cmp expect.both_deleted actual +' + +test_expect_success 'rm will error out on a modified .gitmodules file unless staged' ' + git reset --hard && + git submodule update && + git config -f .gitmodules foo.bar true && + test_must_fail git rm submod >actual 2>actual.err && + test -s actual.err && + test -d submod && + test -f submod/.git && + git diff-files --quiet -- submod && + git add .gitmodules && + git rm submod >actual 2>actual.err && + ! test -s actual.err && + ! test -d submod && + ! test -f submod/.git && + git status -s -uno >actual && + test_cmp expect actual +' + +test_expect_success 'rm issues a warning when section is not found in .gitmodules' ' + git reset --hard && + git submodule update && + git config -f .gitmodules --remove-section submodule.sub && + git add .gitmodules && + echo "warning: Could not find section in .gitmodules where path=submod" >expect.err && + git rm submod >actual 2>actual.err && + test_i18ncmp expect.err actual.err && + ! test -d submod && + ! test -f submod/.git && + git status -s -uno >actual && test_cmp expect actual ' @@ -427,7 +509,9 @@ test_expect_success 'rm of a conflicted populated submodule with different HEAD git rm -f submod && test ! -d submod && git status -s -uno --ignore-submodules=none > actual && - test_cmp expect actual + test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.sub.url && + test_must_fail git config -f .gitmodules submodule.sub.path ' test_expect_success 'rm of a conflicted populated submodule with modifications fails unless forced' ' @@ -446,7 +530,9 @@ test_expect_success 'rm of a conflicted populated submodule with modifications f git rm -f submod && test ! -d submod && git status -s -uno --ignore-submodules=none > actual && - test_cmp expect actual + test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.sub.url && + test_must_fail git config -f .gitmodules submodule.sub.path ' test_expect_success 'rm of a conflicted populated submodule with untracked files fails unless forced' ' diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index 5d22f17ca2..debda7a678 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -673,22 +673,4 @@ test_expect_success 'store updates stash ref and reflog' ' grep quux bazzy ' -test_expect_success 'stash a change to turn a non-directory to a directory' ' - git reset --hard && - >testfile && - git add testfile && - git commit -m "add testfile as a regular file" && - rm testfile && - mkdir testfile && - >testfile/file && - test_must_fail git stash save "recover regular file" && - test -f testfile/file -' - -test_expect_success 'stash a change to turn a non-directory to a directory (forced)' ' - git stash save --force "recover regular file (forced)" && - ! test -f testfile/file && - test -f testfile -' - test_done diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh index 7665d6785c..7369d3c517 100755 --- a/t/t4211-line-log.sh +++ b/t/t4211-line-log.sh @@ -48,7 +48,7 @@ canned_test "-M -L '/long f/,/^}/:b.c' move-support" move-support-f canned_test "-M -L ':f:b.c' parallel-change" parallel-change-f-to-main canned_test "-L 4,12:a.c -L :main:a.c simple" multiple -canned_test "-L 4,18:a.c -L :main:a.c simple" multiple-overlapping +canned_test "-L 4,18:a.c -L ^:main:a.c simple" multiple-overlapping canned_test "-L :main:a.c -L 4,18:a.c simple" multiple-overlapping canned_test "-L 4:a.c -L 8,12:a.c simple" multiple-superset canned_test "-L 8,12:a.c -L 4:a.c simple" multiple-superset @@ -64,17 +64,34 @@ test_bad_opts "-L 1,1000:b.c" "has only.*lines" test_bad_opts "-L :b.c" "argument.*not of the form" test_bad_opts "-L :foo:b.c" "no match" -# There is a separate bug when an empty -L range is the first -L encountered, -# thus to demonstrate this particular bug, the empty -L range must follow a -# non-empty -L range. -test_expect_success '-L {empty-range} (any -L)' ' +test_expect_success '-L X (X == nlines)' ' + n=$(wc -l <b.c) && + git log -L $n:b.c +' + +test_expect_success '-L X (X == nlines + 1)' ' n=$(expr $(wc -l <b.c) + 1) && - git log -L1,1:b.c -L$n:b.c + test_must_fail git log -L $n:b.c +' + +test_expect_success '-L X (X == nlines + 2)' ' + n=$(expr $(wc -l <b.c) + 2) && + test_must_fail git log -L $n:b.c ' -test_expect_success '-L {empty-range} (first -L)' ' +test_expect_success '-L ,Y (Y == nlines)' ' + n=$(printf "%d" $(wc -l <b.c)) && + git log -L ,$n:b.c +' + +test_expect_success '-L ,Y (Y == nlines + 1)' ' n=$(expr $(wc -l <b.c) + 1) && - git log -L$n:b.c + test_must_fail git log -L ,$n:b.c +' + +test_expect_success '-L ,Y (Y == nlines + 2)' ' + n=$(expr $(wc -l <b.c) + 2) && + test_must_fail git log -L ,$n:b.c ' test_done diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index fd2598e601..a80584ea0e 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -505,4 +505,20 @@ test_expect_success 'test --all, --depth, and explicit tag' ' ) >out-adt 2>error-adt ' +test_expect_success 'shallow fetch with tags does not break the repository' ' + mkdir repo1 && + ( + cd repo1 && + git init && + test_commit 1 && + test_commit 2 && + test_commit 3 && + mkdir repo2 && + cd repo2 && + git init && + git fetch --depth=2 ../.git master:branch && + git fsck + ) +' + test_done diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index fde689166a..1f0f8e6827 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -497,6 +497,88 @@ test_expect_success "should be able to fetch with duplicate refspecs" ' ) ' +# configured prune tests + +set_config_tristate () { + # var=$1 val=$2 + case "$2" in + unset) test_unconfig "$1" ;; + *) git config "$1" "$2" ;; + esac +} + +test_configured_prune () { + fetch_prune=$1 remote_origin_prune=$2 cmdline=$3 expected=$4 + + test_expect_success "prune fetch.prune=$1 remote.origin.prune=$2${3:+ $3}; $4" ' + # make sure a newbranch is there in . and also in one + git branch -f newbranch && + ( + cd one && + test_unconfig fetch.prune && + test_unconfig remote.origin.prune && + git fetch && + git rev-parse --verify refs/remotes/origin/newbranch + ) + + # now remove it + git branch -d newbranch && + + # then test + ( + cd one && + set_config_tristate fetch.prune $fetch_prune && + set_config_tristate remote.origin.prune $remote_origin_prune && + + git fetch $cmdline && + case "$expected" in + pruned) + test_must_fail git rev-parse --verify refs/remotes/origin/newbranch + ;; + kept) + git rev-parse --verify refs/remotes/origin/newbranch + ;; + esac + ) + ' +} + +test_configured_prune unset unset "" kept +test_configured_prune unset unset "--no-prune" kept +test_configured_prune unset unset "--prune" pruned + +test_configured_prune false unset "" kept +test_configured_prune false unset "--no-prune" kept +test_configured_prune false unset "--prune" pruned + +test_configured_prune true unset "" pruned +test_configured_prune true unset "--prune" pruned +test_configured_prune true unset "--no-prune" kept + +test_configured_prune unset false "" kept +test_configured_prune unset false "--no-prune" kept +test_configured_prune unset false "--prune" pruned + +test_configured_prune false false "" kept +test_configured_prune false false "--no-prune" kept +test_configured_prune false false "--prune" pruned + +test_configured_prune true false "" kept +test_configured_prune true false "--prune" pruned +test_configured_prune true false "--no-prune" kept + +test_configured_prune unset true "" pruned +test_configured_prune unset true "--no-prune" kept +test_configured_prune unset true "--prune" pruned + +test_configured_prune false true "" pruned +test_configured_prune false true "--no-prune" kept +test_configured_prune false true "--prune" pruned + +test_configured_prune true true "" pruned +test_configured_prune true true "--prune" pruned +test_configured_prune true true "--no-prune" kept + test_expect_success 'all boundary commits are excluded' ' test_commit base && test_commit oneside && diff --git a/t/t5533-push-cas.sh b/t/t5533-push-cas.sh new file mode 100755 index 0000000000..ba20d83333 --- /dev/null +++ b/t/t5533-push-cas.sh @@ -0,0 +1,189 @@ +#!/bin/sh + +test_description='compare & swap push force/delete safety' + +. ./test-lib.sh + +setup_srcdst_basic () { + rm -fr src dst && + git clone --no-local . src && + git clone --no-local src dst && + ( + cd src && git checkout HEAD^0 + ) +} + +test_expect_success setup ' + : create template repository + test_commit A && + test_commit B && + test_commit C +' + +test_expect_success 'push to update (protected)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + test_must_fail git push --force-with-lease=master:master origin master + ) && + git ls-remote . refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (protected, forced)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + git push --force --force-with-lease=master:master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (protected, tracking)' ' + setup_srcdst_basic && + ( + cd src && + git checkout master && + test_commit D && + git checkout HEAD^0 + ) && + git ls-remote src refs/heads/master >expect && + ( + cd dst && + test_commit E && + git ls-remote . refs/remotes/origin/master >expect && + test_must_fail git push --force-with-lease=master origin master && + git ls-remote . refs/remotes/origin/master >actual && + test_cmp expect actual + ) && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (protected, tracking, forced)' ' + setup_srcdst_basic && + ( + cd src && + git checkout master && + test_commit D && + git checkout HEAD^0 + ) && + ( + cd dst && + test_commit E && + git ls-remote . refs/remotes/origin/master >expect && + git push --force --force-with-lease=master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (allowed)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + git push --force-with-lease=master:master^ origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (allowed, tracking)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + git push --force-with-lease=master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (allowed even though no-ff)' ' + setup_srcdst_basic && + ( + cd dst && + git reset --hard HEAD^ && + test_commit D && + git push --force-with-lease=master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to delete (protected)' ' + setup_srcdst_basic && + git ls-remote src refs/heads/master >expect && + ( + cd dst && + test_must_fail git push --force-with-lease=master:master^ origin :master + ) && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to delete (protected, forced)' ' + setup_srcdst_basic && + ( + cd dst && + git push --force --force-with-lease=master:master^ origin :master + ) && + >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to delete (allowed)' ' + setup_srcdst_basic && + ( + cd dst && + git push --force-with-lease=master origin :master + ) && + >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'cover everything with default force-with-lease (protected)' ' + setup_srcdst_basic && + ( + cd src && + git branch naster master^ + ) + git ls-remote src refs/heads/\* >expect && + ( + cd dst && + test_must_fail git push --force-with-lease origin master master:naster + ) && + git ls-remote src refs/heads/\* >actual && + test_cmp expect actual +' + +test_expect_success 'cover everything with default force-with-lease (allowed)' ' + setup_srcdst_basic && + ( + cd src && + git branch naster master^ + ) + ( + cd dst && + git fetch && + git push --force-with-lease origin master master:naster + ) && + git ls-remote dst refs/heads/master | + sed -e "s/master/naster/" >expect && + git ls-remote src refs/heads/naster >actual && + test_cmp expect actual +' + +test_done diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh index beb00be4b1..470ac54295 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -153,7 +153,7 @@ test_expect_success 'used receive-pack service' ' ' test_http_push_nonff "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \ - "$ROOT_PATH"/test_repo_clone master + "$ROOT_PATH"/test_repo_clone master success test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper' ' # create a dissimilarly-named remote ref so that git is unable to match the diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh index 55a866af80..8196af19f6 100755 --- a/t/t5551-http-fetch.sh +++ b/t/t5551-http-fetch.sh @@ -187,6 +187,22 @@ test_expect_success 'dumb clone via http-backend respects namespace' ' test_cmp expect actual ' +cat >cookies.txt <<EOF +127.0.0.1 FALSE /smart_cookies/ FALSE 0 othername othervalue +EOF +cat >expect_cookies.txt <<EOF + +127.0.0.1 FALSE /smart_cookies/ FALSE 0 othername othervalue +127.0.0.1 FALSE /smart_cookies/repo.git/info/ FALSE 0 name value +EOF +test_expect_success 'cookies stored in http.cookiefile when http.savecookies set' ' + git config http.cookiefile cookies.txt && + git config http.savecookies true && + git ls-remote $HTTPD_URL/smart_cookies/repo.git master && + tail -3 cookies.txt > cookies_tail.txt + test_cmp expect_cookies.txt cookies_tail.txt +' + test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE test_expect_success EXPENSIVE 'create 50,000 tags in the repo' ' diff --git a/t/t6012-rev-list-simplify.sh b/t/t6012-rev-list-simplify.sh index 57ce2395d6..fde5e712eb 100755 --- a/t/t6012-rev-list-simplify.sh +++ b/t/t6012-rev-list-simplify.sh @@ -127,4 +127,10 @@ test_expect_success 'full history simplification without parent' ' } ' +test_expect_success '--full-diff is not affected by --parents' ' + git log -p --pretty="%H" --full-diff -- file >expected && + git log -p --pretty="%H" --full-diff --parents -- file >actual && + test_cmp expected actual +' + test_done diff --git a/t/t6130-pathspec-noglob.sh b/t/t6130-pathspec-noglob.sh index 39ef61994f..ea00d71e77 100755 --- a/t/t6130-pathspec-noglob.sh +++ b/t/t6130-pathspec-noglob.sh @@ -32,6 +32,16 @@ test_expect_success 'star pathspec globs' ' test_cmp expect actual ' +test_expect_success 'star pathspec globs' ' + cat >expect <<-\EOF && + bracket + star + vanilla + EOF + git log --format=%s -- ":(glob)f*" >actual && + test_cmp expect actual +' + test_expect_success 'bracket pathspec globs and matches literal brackets' ' cat >expect <<-\EOF && bracket @@ -41,28 +51,105 @@ test_expect_success 'bracket pathspec globs and matches literal brackets' ' test_cmp expect actual ' +test_expect_success 'bracket pathspec globs and matches literal brackets' ' + cat >expect <<-\EOF && + bracket + vanilla + EOF + git log --format=%s -- ":(glob)f[o][o]" >actual && + test_cmp expect actual +' + test_expect_success 'no-glob option matches literally (vanilla)' ' echo vanilla >expect && git --literal-pathspecs log --format=%s -- foo >actual && test_cmp expect actual ' +test_expect_success 'no-glob option matches literally (vanilla)' ' + echo vanilla >expect && + git log --format=%s -- ":(literal)foo" >actual && + test_cmp expect actual +' + test_expect_success 'no-glob option matches literally (star)' ' echo star >expect && git --literal-pathspecs log --format=%s -- "f*" >actual && test_cmp expect actual ' +test_expect_success 'no-glob option matches literally (star)' ' + echo star >expect && + git log --format=%s -- ":(literal)f*" >actual && + test_cmp expect actual +' + test_expect_success 'no-glob option matches literally (bracket)' ' echo bracket >expect && git --literal-pathspecs log --format=%s -- "f[o][o]" >actual && test_cmp expect actual ' +test_expect_success 'no-glob option matches literally (bracket)' ' + echo bracket >expect && + git log --format=%s -- ":(literal)f[o][o]" >actual && + test_cmp expect actual +' + +test_expect_success 'no-glob option disables :(literal)' ' + : >expect && + git --literal-pathspecs log --format=%s -- ":(literal)foo" >actual && + test_cmp expect actual +' + test_expect_success 'no-glob environment variable works' ' echo star >expect && GIT_LITERAL_PATHSPECS=1 git log --format=%s -- "f*" >actual && test_cmp expect actual ' +test_expect_success 'setup xxx/bar' ' + mkdir xxx && + test_commit xxx xxx/bar +' + +test_expect_success '**/ works with :(glob)' ' + cat >expect <<-\EOF && + xxx + unrelated + EOF + git log --format=%s -- ":(glob)**/bar" >actual && + test_cmp expect actual +' + +test_expect_success '**/ does not work with --noglob-pathspecs' ' + : >expect && + git --noglob-pathspecs log --format=%s -- "**/bar" >actual && + test_cmp expect actual +' + +test_expect_success '**/ works with :(glob) and --noglob-pathspecs' ' + cat >expect <<-\EOF && + xxx + unrelated + EOF + git --noglob-pathspecs log --format=%s -- ":(glob)**/bar" >actual && + test_cmp expect actual +' + +test_expect_success '**/ works with --glob-pathspecs' ' + cat >expect <<-\EOF && + xxx + unrelated + EOF + git --glob-pathspecs log --format=%s -- "**/bar" >actual && + test_cmp expect actual +' + +test_expect_success '**/ does not work with :(literal) and --glob-pathspecs' ' + : >expect && + git --glob-pathspecs log --format=%s -- ":(literal)**/bar" >actual && + test_cmp expect actual +' + test_done diff --git a/t/t6131-pathspec-icase.sh b/t/t6131-pathspec-icase.sh new file mode 100755 index 0000000000..8d4a7fcb91 --- /dev/null +++ b/t/t6131-pathspec-icase.sh @@ -0,0 +1,103 @@ +#!/bin/sh + +test_description='test case insensitive pathspec limiting' +. ./test-lib.sh + +if test_have_prereq CASE_INSENSITIVE_FS +then + skip_all='skipping case sensitive tests - case insensitive file system' + test_done +fi + +test_expect_success 'create commits with glob characters' ' + test_commit bar bar && + test_commit bAr bAr && + test_commit BAR BAR && + mkdir foo && + test_commit foo/bar foo/bar && + test_commit foo/bAr foo/bAr && + test_commit foo/BAR foo/BAR && + mkdir fOo && + test_commit fOo/bar fOo/bar && + test_commit fOo/bAr fOo/bAr && + test_commit fOo/BAR fOo/BAR && + mkdir FOO && + test_commit FOO/bar FOO/bar && + test_commit FOO/bAr FOO/bAr && + test_commit FOO/BAR FOO/BAR +' + +test_expect_success 'tree_entry_interesting matches bar' ' + echo bar >expect && + git log --format=%s -- "bar" >actual && + test_cmp expect actual +' + +test_expect_success 'tree_entry_interesting matches :(icase)bar' ' + cat <<-EOF >expect && + BAR + bAr + bar + EOF + git log --format=%s -- ":(icase)bar" >actual && + test_cmp expect actual +' + +test_expect_success 'tree_entry_interesting matches :(icase)bar with prefix' ' + cat <<-EOF >expect && + fOo/BAR + fOo/bAr + fOo/bar + EOF + ( cd fOo && git log --format=%s -- ":(icase)bar" ) >actual && + test_cmp expect actual +' + +test_expect_success 'tree_entry_interesting matches :(icase)bar with empty prefix' ' + cat <<-EOF >expect && + FOO/BAR + FOO/bAr + FOO/bar + fOo/BAR + fOo/bAr + fOo/bar + foo/BAR + foo/bAr + foo/bar + EOF + ( cd fOo && git log --format=%s -- ":(icase)../foo/bar" ) >actual && + test_cmp expect actual +' + +test_expect_success 'match_pathspec_depth matches :(icase)bar' ' + cat <<-EOF >expect && + BAR + bAr + bar + EOF + git ls-files ":(icase)bar" >actual && + test_cmp expect actual +' + +test_expect_success 'match_pathspec_depth matches :(icase)bar with prefix' ' + cat <<-EOF >expect && + fOo/BAR + fOo/bAr + fOo/bar + EOF + ( cd fOo && git ls-files --full-name ":(icase)bar" ) >actual && + test_cmp expect actual +' + +test_expect_success 'match_pathspec_depth matches :(icase)bar with empty prefix' ' + cat <<-EOF >expect && + bar + fOo/BAR + fOo/bAr + fOo/bar + EOF + ( cd fOo && git ls-files --full-name ":(icase)bar" ../bar ) >actual && + test_cmp expect actual +' + +test_done diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh index 101816e718..d432f42bcb 100755 --- a/t/t7001-mv.sh +++ b/t/t7001-mv.sh @@ -259,4 +259,132 @@ test_expect_success SYMLINKS 'check moved symlink' ' rm -f moved symlink +test_expect_success 'setup submodule' ' + git commit -m initial && + git reset --hard && + git submodule add ./. sub && + echo content >file && + git add file && + git commit -m "added sub and file" +' + +test_expect_success 'git mv cannot move a submodule in a file' ' + test_must_fail git mv sub file +' + +test_expect_success 'git mv moves a submodule with a .git directory and no .gitmodules' ' + entry="$(git ls-files --stage sub | cut -f 1)" && + git rm .gitmodules && + ( + cd sub && + rm -f .git && + cp -a ../.git/modules/sub .git && + GIT_WORK_TREE=. git config --unset core.worktree + ) && + mkdir mod && + git mv sub mod/sub && + ! test -e sub && + [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] && + ( + cd mod/sub && + git status + ) && + git update-index --refresh && + git diff-files --quiet +' + +test_expect_success 'git mv moves a submodule with gitfile' ' + rm -rf mod/sub && + git reset --hard && + git submodule update && + entry="$(git ls-files --stage sub | cut -f 1)" && + ( + cd mod && + git mv ../sub/ . + ) && + ! test -e sub && + [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] && + ( + cd mod/sub && + git status + ) && + echo mod/sub >expected && + git config -f .gitmodules submodule.sub.path >actual && + test_cmp expected actual && + git update-index --refresh && + git diff-files --quiet +' + +test_expect_success 'mv does not complain when no .gitmodules file is found' ' + rm -rf mod/sub && + git reset --hard && + git submodule update && + git rm .gitmodules && + entry="$(git ls-files --stage sub | cut -f 1)" && + git mv sub mod/sub 2>actual.err && + ! test -s actual.err && + ! test -e sub && + [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] && + ( + cd mod/sub && + git status + ) && + git update-index --refresh && + git diff-files --quiet +' + +test_expect_success 'mv will error out on a modified .gitmodules file unless staged' ' + rm -rf mod/sub && + git reset --hard && + git submodule update && + git config -f .gitmodules foo.bar true && + entry="$(git ls-files --stage sub | cut -f 1)" && + test_must_fail git mv sub mod/sub 2>actual.err && + test -s actual.err && + test -e sub && + git diff-files --quiet -- sub && + git add .gitmodules && + git mv sub mod/sub 2>actual.err && + ! test -s actual.err && + ! test -e sub && + [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] && + ( + cd mod/sub && + git status + ) && + git update-index --refresh && + git diff-files --quiet +' + +test_expect_success 'mv issues a warning when section is not found in .gitmodules' ' + rm -rf mod/sub && + git reset --hard && + git submodule update && + git config -f .gitmodules --remove-section submodule.sub && + git add .gitmodules && + entry="$(git ls-files --stage sub | cut -f 1)" && + echo "warning: Could not find section in .gitmodules where path=sub" >expect.err && + git mv sub mod/sub 2>actual.err && + test_i18ncmp expect.err actual.err && + ! test -e sub && + [ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] && + ( + cd mod/sub && + git status + ) && + git update-index --refresh && + git diff-files --quiet +' + +test_expect_success 'mv --dry-run does not touch the submodule or .gitmodules' ' + rm -rf mod/sub && + git reset --hard && + git submodule update && + git mv -n sub mod/sub 2>actual.err && + test -f sub/.git && + git diff-index --exit-code HEAD && + git update-index --refresh && + git diff-files --quiet -- sub .gitmodules +' + test_done diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 5ee97b003a..4192fe0ec6 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -18,6 +18,16 @@ test_expect_success 'setup - initial commit' ' git branch initial ' +test_expect_success 'configuration parsing' ' + test_when_finished "rm -f .gitmodules" && + cat >.gitmodules <<-\EOF && + [submodule "s"] + path + ignore + EOF + test_must_fail git status +' + test_expect_success 'setup - repository in init subdirectory' ' mkdir init && ( @@ -773,13 +783,11 @@ test_expect_success 'submodule add --name allows to replace a submodule with ano test_cmp expect .git ) && echo "repo" >expect && - git config -f .gitmodules submodule.repo.path >actual && - test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.repo.path && git config -f .gitmodules submodule.repo_new.path >actual && test_cmp expect actual&& echo "$submodurl/repo" >expect && - git config -f .gitmodules submodule.repo.url >actual && - test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.repo.url && echo "$submodurl/bare.git" >expect && git config -f .gitmodules submodule.repo_new.url >actual && test_cmp expect actual && @@ -799,12 +807,8 @@ test_expect_success 'submodule add with an existing name fails unless forced' ' git rm repo && test_must_fail git submodule add -q --name repo_new "$submodurl/repo.git" repo && test ! -d repo && - echo "repo" >expect && - git config -f .gitmodules submodule.repo_new.path >actual && - test_cmp expect actual&& - echo "$submodurl/bare.git" >expect && - git config -f .gitmodules submodule.repo_new.url >actual && - test_cmp expect actual && + test_must_fail git config -f .gitmodules submodule.repo_new.path && + test_must_fail git config -f .gitmodules submodule.repo_new.url && echo "$submodurl/bare.git" >expect && git config submodule.repo_new.url >actual && test_cmp expect actual && diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh index 91d4fd1fac..be93f10cf0 100755 --- a/t/t7407-submodule-foreach.sh +++ b/t/t7407-submodule-foreach.sh @@ -145,7 +145,7 @@ test_expect_success 'use "submodule foreach" to checkout 2nd level submodule' ' git rev-parse --resolve-git-dir nested1/.git && test_must_fail git rev-parse --resolve-git-dir nested1/nested2/.git && git submodule foreach "git submodule update --init" && - git rev-parse --resolve-git-dir nested1/nested1/nested2/.git + git rev-parse --resolve-git-dir nested1/nested2/.git && test_must_fail git rev-parse --resolve-git-dir nested1/nested2/nested3/.git ) ' diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index d526b1d96a..05d9db090d 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -253,7 +253,7 @@ test_expect_success 'deleted vs modified submodule' ' git checkout -b test6 branch1 && git submodule update -N && mv submod submod-movedaside && - git rm submod && + git rm --cached submod && git commit -m "Submodule deleted from branch" && git checkout -b test6.a test6 && test_must_fail git merge master && @@ -322,7 +322,7 @@ test_expect_success 'file vs modified submodule' ' git checkout -b test7 branch1 && git submodule update -N && mv submod submod-movedaside && - git rm submod && + git rm --cached submod && echo not a submodule >submod && git add submod && git commit -m "Submodule path becomes file" && @@ -453,7 +453,7 @@ test_expect_success 'submodule in subdirectory' ' test_expect_success 'directory vs modified submodule' ' git checkout -b test11 branch1 && mv submod submod-movedaside && - git rm submod && + git rm --cached submod && mkdir submod && echo not a submodule >submod/file16 && git add submod/file16 && diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index ac6f3b6af2..31a770d9bc 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -1031,6 +1031,32 @@ test_expect_success \ git diff-tree -M -r M3^ M3 >actual && compare_diff_raw expect actual' +cat >input <<INPUT_END +commit refs/heads/M4 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +rename root +COMMIT + +from refs/heads/M2^0 +R "" sub + +INPUT_END + +cat >expect <<EOF +:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 R100 file2/oldf sub/file2/oldf +:100755 100755 85df50785d62d3b05ab03d9cbf7e4a0b49449730 85df50785d62d3b05ab03d9cbf7e4a0b49449730 R100 file4 sub/file4 +:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc R100 i/am/new/to/you sub/i/am/new/to/you +:100755 100755 e74b7d465e52746be2b4bae983670711e6e66657 e74b7d465e52746be2b4bae983670711e6e66657 R100 newdir/exec.sh sub/newdir/exec.sh +:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 R100 newdir/interesting sub/newdir/interesting +EOF +test_expect_success \ + 'M: rename root to subdirectory' \ + 'git fast-import <input && + git diff-tree -M -r M4^ M4 >actual && + cat actual && + compare_diff_raw expect actual' + ### ### series N ### @@ -1228,6 +1254,29 @@ test_expect_success \ compare_diff_raw expect actual' test_expect_success \ + 'N: copy root by path' \ + 'cat >expect <<-\EOF && + :100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100 file2/newf oldroot/file2/newf + :100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100 file2/oldf oldroot/file2/oldf + :100755 100755 85df50785d62d3b05ab03d9cbf7e4a0b49449730 85df50785d62d3b05ab03d9cbf7e4a0b49449730 C100 file4 oldroot/file4 + :100755 100755 e74b7d465e52746be2b4bae983670711e6e66657 e74b7d465e52746be2b4bae983670711e6e66657 C100 newdir/exec.sh oldroot/newdir/exec.sh + :100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 C100 newdir/interesting oldroot/newdir/interesting + EOF + cat >input <<-INPUT_END && + commit refs/heads/N-copy-root-path + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + copy root directory by (empty) path + COMMIT + + from refs/heads/branch^0 + C "" oldroot + INPUT_END + git fast-import <input && + git diff-tree -C --find-copies-harder -r branch N-copy-root-path >actual && + compare_diff_raw expect actual' + +test_expect_success \ 'N: delete directory by copying' \ 'cat >expect <<-\EOF && OBJID @@ -2934,4 +2983,20 @@ test_expect_success 'S: ls with garbage after sha1 must fail' ' test_i18ngrep "space after tree-ish" err ' +### +### series T (ls) +### +# Setup is carried over from series S. + +test_expect_success 'T: ls root tree' ' + sed -e "s/Z\$//" >expect <<-EOF && + 040000 tree $(git rev-parse S^{tree}) Z + EOF + sha1=$(git rev-parse --verify S) && + git fast-import --import-marks=marks <<-EOF >actual && + ls $sha1 "" + EOF + test_cmp expect actual +' + test_done diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 272a071e85..2d4beb5e50 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -69,7 +69,7 @@ run_completion () local -a COMPREPLY _words local _cword _words=( $1 ) - test "${1: -1}" = ' ' && _words+=('') + test "${1: -1}" = ' ' && _words[${#_words[@]}+1]='' (( _cword = ${#_words[@]} - 1 )) __git_wrap__git_main && print_comp } diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh index 3c3e4e8c38..59f875e830 100755 --- a/t/t9903-bash-prompt.sh +++ b/t/t9903-bash-prompt.sh @@ -61,6 +61,29 @@ test_expect_success 'prompt - unborn branch' ' test_cmp expected "$actual" ' +repo_with_newline='repo +with +newline' + +if mkdir "$repo_with_newline" 2>/dev/null +then + test_set_prereq FUNNYNAMES +else + say 'Your filesystem does not allow newlines in filenames.' +fi + +test_expect_success FUNNYNAMES 'prompt - with newline in path' ' + printf " (master)" >expected && + git init "$repo_with_newline" && + test_when_finished "rm -rf \"$repo_with_newline\"" && + mkdir "$repo_with_newline"/subdir && + ( + cd "$repo_with_newline/subdir" && + __git_ps1 >"$actual" + ) && + test_cmp expected "$actual" +' + test_expect_success 'prompt - detached head' ' printf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected && test_config core.abbrev 13 && diff --git a/templates/hooks--pre-push.sample b/templates/hooks--pre-push.sample index 15ab6d8e7e..1f3bcebfd7 100755 --- a/templates/hooks--pre-push.sample +++ b/templates/hooks--pre-push.sample @@ -30,6 +30,7 @@ do if [ "$local_sha" = $z40 ] then # Handle delete + : else if [ "$remote_sha" = $z40 ] then diff --git a/test-urlmatch-normalization.c b/test-urlmatch-normalization.c new file mode 100644 index 0000000000..090bf219a7 --- /dev/null +++ b/test-urlmatch-normalization.c @@ -0,0 +1,50 @@ +#include "git-compat-util.h" +#include "urlmatch.h" + +int main(int argc, char **argv) +{ + const char usage[] = "test-urlmatch-normalization [-p | -l] <url1> | <url1> <url2>"; + char *url1, *url2; + int opt_p = 0, opt_l = 0; + + /* + * For one url, succeed if url_normalize succeeds on it, fail otherwise. + * For two urls, succeed only if url_normalize succeeds on both and + * the results compare equal with strcmp. If -p is given (one url only) + * and url_normalize succeeds, print the result followed by "\n". If + * -l is given (one url only) and url_normalize succeeds, print the + * returned length in decimal followed by "\n". + */ + + if (argc > 1 && !strcmp(argv[1], "-p")) { + opt_p = 1; + argc--; + argv++; + } else if (argc > 1 && !strcmp(argv[1], "-l")) { + opt_l = 1; + argc--; + argv++; + } + + if (argc < 2 || argc > 3) + die("%s", usage); + + if (argc == 2) { + struct url_info info; + url1 = url_normalize(argv[1], &info); + if (!url1) + return 1; + if (opt_p) + printf("%s\n", url1); + if (opt_l) + printf("%u\n", (unsigned)info.url_len); + return 0; + } + + if (opt_p || opt_l) + die("%s", usage); + + url1 = url_normalize(argv[1], NULL); + url2 = url_normalize(argv[2], NULL); + return (url1 && url2 && !strcmp(url1, url2)) ? 0 : 1; +} diff --git a/transport-helper.c b/transport-helper.c index 63cabc37e3..4c2a39e8ff 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -27,6 +27,7 @@ struct helper_data { push : 1, connect : 1, signed_tags : 1, + check_connectivity : 1, no_disconnect_req : 1; char *export_marks; char *import_marks; @@ -186,6 +187,8 @@ static struct child_process *get_helper(struct transport *transport) data->bidi_import = 1; else if (!strcmp(capname, "export")) data->export = 1; + else if (!strcmp(capname, "check-connectivity")) + data->check_connectivity = 1; else if (!data->refspecs && !prefixcmp(capname, "refspec ")) { ALLOC_GROW(refspecs, refspec_nr + 1, @@ -349,6 +352,9 @@ static int fetch_with_fetch(struct transport *transport, struct strbuf buf = STRBUF_INIT; standard_options(transport); + if (data->check_connectivity && + data->transport_options.check_self_contained_and_connected) + set_helper_option(transport, "check-connectivity", "true"); for (i = 0; i < nr_heads; i++) { const struct ref *posn = to_fetch[i]; @@ -372,6 +378,10 @@ static int fetch_with_fetch(struct transport *transport, else transport->pack_lockfile = xstrdup(name); } + else if (data->check_connectivity && + data->transport_options.check_self_contained_and_connected && + !strcmp(buf.buf, "connectivity-ok")) + data->transport_options.self_contained_and_connected = 1; else if (!buf.len) break; else @@ -683,6 +693,11 @@ static int push_update_ref_status(struct strbuf *buf, free(msg); msg = NULL; } + else if (!strcmp(msg, "stale info")) { + status = REF_STATUS_REJECT_STALE; + free(msg); + msg = NULL; + } } if (*ref) @@ -737,13 +752,15 @@ static void push_update_refs_status(struct helper_data *data, } static int push_refs_with_push(struct transport *transport, - struct ref *remote_refs, int flags) + struct ref *remote_refs, int flags) { int force_all = flags & TRANSPORT_PUSH_FORCE; int mirror = flags & TRANSPORT_PUSH_MIRROR; struct helper_data *data = transport->data; struct strbuf buf = STRBUF_INIT; struct ref *ref; + struct string_list cas_options = STRING_LIST_INIT_DUP; + struct string_list_item *cas_option; get_helper(transport); if (!data->push) @@ -756,6 +773,7 @@ static int push_refs_with_push(struct transport *transport, /* Check for statuses set by set_ref_status_for_push() */ switch (ref->status) { case REF_STATUS_REJECT_NONFASTFORWARD: + case REF_STATUS_REJECT_STALE: case REF_STATUS_REJECT_ALREADY_EXISTS: case REF_STATUS_UPTODATE: continue; @@ -778,11 +796,29 @@ static int push_refs_with_push(struct transport *transport, strbuf_addch(&buf, ':'); strbuf_addstr(&buf, ref->name); strbuf_addch(&buf, '\n'); + + /* + * The "--force-with-lease" options without explicit + * values to expect have already been expanded into + * the ref->old_sha1_expect[] field; we can ignore + * transport->smart_options->cas altogether and instead + * can enumerate them from the refs. + */ + if (ref->expect_old_sha1) { + struct strbuf cas = STRBUF_INIT; + strbuf_addf(&cas, "%s:%s", + ref->name, sha1_to_hex(ref->old_sha1_expect)); + string_list_append(&cas_options, strbuf_detach(&cas, NULL)); + } } - if (buf.len == 0) + if (buf.len == 0) { + string_list_clear(&cas_options, 0); return 0; + } standard_options(transport); + for_each_string_list_item(cas_option, &cas_options) + set_helper_option(transport, "cas", cas_option->string); if (flags & TRANSPORT_PUSH_DRY_RUN) { if (set_helper_option(transport, "dry-run", "true") != 0) diff --git a/transport.c b/transport.c index de255880a4..7202b7777d 100644 --- a/transport.c +++ b/transport.c @@ -3,6 +3,8 @@ #include "run-command.h" #include "pkt-line.h" #include "fetch-pack.h" +#include "remote.h" +#include "connect.h" #include "send-pack.h" #include "walker.h" #include "bundle.h" @@ -707,6 +709,10 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count, i print_ref_status('!', "[rejected]", ref, ref->peer_ref, "needs force", porcelain); break; + case REF_STATUS_REJECT_STALE: + print_ref_status('!', "[rejected]", ref, ref->peer_ref, + "stale info", porcelain); + break; case REF_STATUS_REMOTE_REJECT: print_ref_status('!', "[remote rejected]", ref, ref->deletion ? NULL : ref->peer_ref, @@ -1078,6 +1084,7 @@ static int run_pre_push_hook(struct transport *transport, for (r = remote_refs; r; r = r->next) { if (!r->peer_ref) continue; if (r->status == REF_STATUS_REJECT_NONFASTFORWARD) continue; + if (r->status == REF_STATUS_REJECT_STALE) continue; if (r->status == REF_STATUS_UPTODATE) continue; strbuf_reset(&buf); @@ -1142,6 +1149,12 @@ int transport_push(struct transport *transport, return -1; } + if (transport->smart_options && + transport->smart_options->cas && + !is_empty_cas(transport->smart_options->cas)) + apply_push_cas(transport->smart_options->cas, + transport->remote, remote_refs); + set_ref_status_for_push(remote_refs, flags & TRANSPORT_PUSH_MIRROR, flags & TRANSPORT_PUSH_FORCE); diff --git a/transport.h b/transport.h index 96e0ede89f..8f96bed775 100644 --- a/transport.h +++ b/transport.h @@ -2,6 +2,7 @@ #define TRANSPORT_H #include "cache.h" +#include "run-command.h" #include "remote.h" struct git_transport_options { @@ -13,6 +14,7 @@ struct git_transport_options { int depth; const char *uploadpack; const char *receivepack; + struct push_cas_option *cas; }; struct transport { @@ -132,6 +134,9 @@ struct transport *transport_get(struct remote *, const char *); /* Transfer the data as a thin pack if not null */ #define TRANS_OPT_THIN "thin" +/* Check the current value of the remote ref */ +#define TRANS_OPT_CAS "cas" + /* Keep the pack that was transferred if not null */ #define TRANS_OPT_KEEP "keep" diff --git a/tree-diff.c b/tree-diff.c index ba01563a02..ccf9d7c8fd 100644 --- a/tree-diff.c +++ b/tree-diff.c @@ -138,7 +138,6 @@ int diff_tree(struct tree_desc *t1, struct tree_desc *t2, /* Enable recursion indefinitely */ opt->pathspec.recursive = DIFF_OPT_TST(opt, RECURSIVE); - opt->pathspec.max_depth = -1; strbuf_init(&base, PATH_MAX); strbuf_add(&base, base_str, baselen); @@ -196,9 +195,27 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co struct diff_options diff_opts; struct diff_queue_struct *q = &diff_queued_diff; struct diff_filepair *choice; - const char *paths[1]; int i; + /* + * follow-rename code is very specific, we need exactly one + * path. Magic that matches more than one path is not + * supported. + */ + GUARD_PATHSPEC(&opt->pathspec, PATHSPEC_FROMTOP | PATHSPEC_LITERAL); +#if 0 + /* + * We should reject wildcards as well. Unfortunately we + * haven't got a reliable way to detect that 'foo\*bar' in + * fact has no wildcards. nowildcard_len is merely a hint for + * optimization. Let it slip for now until wildmatch is taught + * about dry-run mode and returns wildcard info. + */ + if (opt->pathspec.has_wildcard) + die("BUG:%s:%d: wildcards are not supported", + __FILE__, __LINE__); +#endif + /* Remove the file creation entry from the diff queue, and remember it */ choice = q->queue[0]; q->nr = 0; @@ -207,15 +224,13 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co DIFF_OPT_SET(&diff_opts, RECURSIVE); DIFF_OPT_SET(&diff_opts, FIND_COPIES_HARDER); diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT; - diff_opts.single_follow = opt->pathspec.raw[0]; + diff_opts.single_follow = opt->pathspec.items[0].match; diff_opts.break_opt = opt->break_opt; diff_opts.rename_score = opt->rename_score; - paths[0] = NULL; - diff_tree_setup_paths(paths, &diff_opts); diff_setup_done(&diff_opts); diff_tree(t1, t2, base, &diff_opts); diffcore_std(&diff_opts); - diff_tree_release_paths(&diff_opts); + free_pathspec(&diff_opts.pathspec); /* Go through the new set of filepairing, and see if we find a more interesting one */ opt->found_follow = 0; @@ -228,15 +243,18 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co * the future! */ if ((p->status == 'R' || p->status == 'C') && - !strcmp(p->two->path, opt->pathspec.raw[0])) { + !strcmp(p->two->path, opt->pathspec.items[0].match)) { + const char *path[2]; + /* Switch the file-pairs around */ q->queue[i] = choice; choice = p; /* Update the path we use from now on.. */ - diff_tree_release_paths(opt); - opt->pathspec.raw[0] = xstrdup(p->one->path); - diff_tree_setup_paths(opt->pathspec.raw, opt); + path[0] = p->one->path; + path[1] = NULL; + free_pathspec(&opt->pathspec); + parse_pathspec(&opt->pathspec, PATHSPEC_ALL_MAGIC, 0, "", path); /* * The caller expects us to return a set of vanilla @@ -310,13 +328,3 @@ int diff_root_tree_sha1(const unsigned char *new, const char *base, struct diff_ free(tree); return retval; } - -void diff_tree_release_paths(struct diff_options *opt) -{ - free_pathspec(&opt->pathspec); -} - -void diff_tree_setup_paths(const char **p, struct diff_options *opt) -{ - init_pathspec(&opt->pathspec, p); -} diff --git a/tree-walk.c b/tree-walk.c index c626135234..5ece8c3477 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -3,6 +3,7 @@ #include "unpack-trees.h" #include "dir.h" #include "tree.h" +#include "pathspec.h" static const char *get_mode(const char *str, unsigned int *modep) { @@ -487,13 +488,25 @@ int get_tree_entry(const unsigned char *tree_sha1, const char *name, unsigned ch return retval; } -static int match_entry(const struct name_entry *entry, int pathlen, +static int match_entry(const struct pathspec_item *item, + const struct name_entry *entry, int pathlen, const char *match, int matchlen, enum interesting *never_interesting) { int m = -1; /* signals that we haven't called strncmp() */ - if (*never_interesting != entry_not_interesting) { + if (item->magic & PATHSPEC_ICASE) + /* + * "Never interesting" trick requires exact + * matching. We could do something clever with inexact + * matching, but it's trickier (and not to forget that + * strcasecmp is locale-dependent, at least in + * glibc). Just disable it for now. It can't be worse + * than the wildcard's codepath of '[Tt][Hi][Is][Ss]' + * pattern. + */ + *never_interesting = entry_not_interesting; + else if (*never_interesting != entry_not_interesting) { /* * We have not seen any match that sorts later * than the current path. @@ -539,7 +552,7 @@ static int match_entry(const struct name_entry *entry, int pathlen, * we cheated and did not do strncmp(), so we do * that here. */ - m = strncmp(match, entry->path, pathlen); + m = ps_strncmp(item, match, entry->path, pathlen); /* * If common part matched earlier then it is a hit, @@ -547,15 +560,39 @@ static int match_entry(const struct name_entry *entry, int pathlen, * leading directory and is shorter than match. */ if (!m) + /* + * match_entry does not check if the prefix part is + * matched case-sensitively. If the entry is a + * directory and part of prefix, it'll be rematched + * eventually by basecmp with special treatment for + * the prefix. + */ return 1; return 0; } -static int match_dir_prefix(const char *base, +/* :(icase)-aware string compare */ +static int basecmp(const struct pathspec_item *item, + const char *base, const char *match, int len) +{ + if (item->magic & PATHSPEC_ICASE) { + int ret, n = len > item->prefix ? item->prefix : len; + ret = strncmp(base, match, n); + if (ret) + return ret; + base += n; + match += n; + len -= n; + } + return ps_strncmp(item, base, match, len); +} + +static int match_dir_prefix(const struct pathspec_item *item, + const char *base, const char *match, int matchlen) { - if (strncmp(base, match, matchlen)) + if (basecmp(item, base, match, matchlen)) return 0; /* @@ -592,7 +629,7 @@ static int match_wildcard_base(const struct pathspec_item *item, */ if (baselen >= matchlen) { *matched = matchlen; - return !strncmp(base, match, matchlen); + return !basecmp(item, base, match, matchlen); } dirlen = matchlen; @@ -605,7 +642,7 @@ static int match_wildcard_base(const struct pathspec_item *item, * base ends with '/' so we are sure it really matches * directory */ - if (strncmp(base, match, baselen)) + if (basecmp(item, base, match, baselen)) return 0; *matched = baselen; } else @@ -634,8 +671,17 @@ enum interesting tree_entry_interesting(const struct name_entry *entry, enum interesting never_interesting = ps->has_wildcard ? entry_not_interesting : all_entries_not_interesting; + GUARD_PATHSPEC(ps, + PATHSPEC_FROMTOP | + PATHSPEC_MAXDEPTH | + PATHSPEC_LITERAL | + PATHSPEC_GLOB | + PATHSPEC_ICASE); + if (!ps->nr) { - if (!ps->recursive || ps->max_depth == -1) + if (!ps->recursive || + !(ps->magic & PATHSPEC_MAXDEPTH) || + ps->max_depth == -1) return all_entries_interesting; return within_depth(base->buf + base_offset, baselen, !!S_ISDIR(entry->mode), @@ -653,10 +699,12 @@ enum interesting tree_entry_interesting(const struct name_entry *entry, if (baselen >= matchlen) { /* If it doesn't match, move along... */ - if (!match_dir_prefix(base_str, match, matchlen)) + if (!match_dir_prefix(item, base_str, match, matchlen)) goto match_wildcards; - if (!ps->recursive || ps->max_depth == -1) + if (!ps->recursive || + !(ps->magic & PATHSPEC_MAXDEPTH) || + ps->max_depth == -1) return all_entries_interesting; return within_depth(base_str + matchlen + 1, @@ -667,15 +715,14 @@ enum interesting tree_entry_interesting(const struct name_entry *entry, } /* Either there must be no base, or the base must match. */ - if (baselen == 0 || !strncmp(base_str, match, baselen)) { - if (match_entry(entry, pathlen, + if (baselen == 0 || !basecmp(item, base_str, match, baselen)) { + if (match_entry(item, entry, pathlen, match + baselen, matchlen - baselen, &never_interesting)) return entry_interesting; if (item->nowildcard_len < item->len) { - if (!git_fnmatch(match + baselen, entry->path, - item->flags & PATHSPEC_ONESTAR ? GFNM_ONESTAR : 0, + if (!git_fnmatch(item, match + baselen, entry->path, item->nowildcard_len - baselen)) return entry_interesting; @@ -716,8 +763,7 @@ match_wildcards: strbuf_add(base, entry->path, pathlen); - if (!git_fnmatch(match, base->buf + base_offset, - item->flags & PATHSPEC_ONESTAR ? GFNM_ONESTAR : 0, + if (!git_fnmatch(item, match, base->buf + base_offset, item->nowildcard_len)) { strbuf_setlen(base, base_offset + baselen); return entry_interesting; @@ -47,7 +47,7 @@ static int read_one_entry_quick(const unsigned char *sha1, const char *base, int } static int read_tree_1(struct tree *tree, struct strbuf *base, - int stage, struct pathspec *pathspec, + int stage, const struct pathspec *pathspec, read_tree_fn_t fn, void *context) { struct tree_desc desc; @@ -116,7 +116,7 @@ static int read_tree_1(struct tree *tree, struct strbuf *base, int read_tree_recursive(struct tree *tree, const char *base, int baselen, - int stage, struct pathspec *pathspec, + int stage, const struct pathspec *pathspec, read_tree_fn_t fn, void *context) { struct strbuf sb = STRBUF_INIT; @@ -25,7 +25,7 @@ typedef int (*read_tree_fn_t)(const unsigned char *, const char *, int, const ch extern int read_tree_recursive(struct tree *tree, const char *base, int baselen, - int stage, struct pathspec *pathspec, + int stage, const struct pathspec *pathspec, read_tree_fn_t fn, void *context); extern int read_tree(struct tree *tree, int stage, struct pathspec *pathspec); diff --git a/unpack-trees.c b/unpack-trees.c index bf01717015..1a61e6f363 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1154,8 +1154,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options o->src_index = NULL; ret = check_updates(o) ? (-2) : 0; - if (o->dst_index) + if (o->dst_index) { + discard_index(o->dst_index); *o->dst_index = o->result; + } done: clear_exclude_list(&el); diff --git a/upload-pack.c b/upload-pack.c index 127e59a603..b03492e664 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -10,6 +10,7 @@ #include "revision.h" #include "list-objects.h" #include "run-command.h" +#include "connect.h" #include "sigchain.h" #include "version.h" #include "string-list.h" diff --git a/urlmatch.c b/urlmatch.c new file mode 100644 index 0000000000..1db76c89bc --- /dev/null +++ b/urlmatch.c @@ -0,0 +1,535 @@ +#include "cache.h" +#include "urlmatch.h" + +#define URL_ALPHA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +#define URL_DIGIT "0123456789" +#define URL_ALPHADIGIT URL_ALPHA URL_DIGIT +#define URL_SCHEME_CHARS URL_ALPHADIGIT "+.-" +#define URL_HOST_CHARS URL_ALPHADIGIT ".-[:]" /* IPv6 literals need [:] */ +#define URL_UNSAFE_CHARS " <>\"%{}|\\^`" /* plus 0x00-0x1F,0x7F-0xFF */ +#define URL_GEN_RESERVED ":/?#[]@" +#define URL_SUB_RESERVED "!$&'()*+,;=" +#define URL_RESERVED URL_GEN_RESERVED URL_SUB_RESERVED /* only allowed delims */ + +static int append_normalized_escapes(struct strbuf *buf, + const char *from, + size_t from_len, + const char *esc_extra, + const char *esc_ok) +{ + /* + * Append to strbuf 'buf' characters from string 'from' with length + * 'from_len' while unescaping characters that do not need to be escaped + * and escaping characters that do. The set of characters to escape + * (the complement of which is unescaped) starts out as the RFC 3986 + * unsafe characters (0x00-0x1F,0x7F-0xFF," <>\"#%{}|\\^`"). If + * 'esc_extra' is not NULL, those additional characters will also always + * be escaped. If 'esc_ok' is not NULL, those characters will be left + * escaped if found that way, but will not be unescaped otherwise (used + * for delimiters). If a %-escape sequence is encountered that is not + * followed by 2 hexadecimal digits, the sequence is invalid and + * false (0) will be returned. Otherwise true (1) will be returned for + * success. + * + * Note that all %-escape sequences will be normalized to UPPERCASE + * as indicated in RFC 3986. Unless included in esc_extra or esc_ok + * alphanumerics and "-._~" will always be unescaped as per RFC 3986. + */ + + while (from_len) { + int ch = *from++; + int was_esc = 0; + + from_len--; + if (ch == '%') { + if (from_len < 2 || + !isxdigit((unsigned char)from[0]) || + !isxdigit((unsigned char)from[1])) + return 0; + ch = hexval_table[(unsigned char)*from++] << 4; + ch |= hexval_table[(unsigned char)*from++]; + from_len -= 2; + was_esc = 1; + } + if ((unsigned char)ch <= 0x1F || (unsigned char)ch >= 0x7F || + strchr(URL_UNSAFE_CHARS, ch) || + (esc_extra && strchr(esc_extra, ch)) || + (was_esc && strchr(esc_ok, ch))) + strbuf_addf(buf, "%%%02X", (unsigned char)ch); + else + strbuf_addch(buf, ch); + } + + return 1; +} + +char *url_normalize(const char *url, struct url_info *out_info) +{ + /* + * Normalize NUL-terminated url using the following rules: + * + * 1. Case-insensitive parts of url will be converted to lower case + * 2. %-encoded characters that do not need to be will be unencoded + * 3. Characters that are not %-encoded and must be will be encoded + * 4. All %-encodings will be converted to upper case hexadecimal + * 5. Leading 0s are removed from port numbers + * 6. If the default port for the scheme is given it will be removed + * 7. A path part (including empty) not starting with '/' has one added + * 8. Any dot segments (. or ..) in the path are resolved and removed + * 9. IPv6 host literals are allowed (but not normalized or validated) + * + * The rules are based on information in RFC 3986. + * + * Please note this function requires a full URL including a scheme + * and host part (except for file: URLs which may have an empty host). + * + * The return value is a newly allocated string that must be freed + * or NULL if the url is not valid. + * + * If out_info is non-NULL, the url and err fields therein will always + * be set. If a non-NULL value is returned, it will be stored in + * out_info->url as well, out_info->err will be set to NULL and the + * other fields of *out_info will also be filled in. If a NULL value + * is returned, NULL will be stored in out_info->url and out_info->err + * will be set to a brief, translated, error message, but no other + * fields will be filled in. + * + * This is NOT a URL validation function. Full URL validation is NOT + * performed. Some invalid host names are passed through this function + * undetected. However, most all other problems that make a URL invalid + * will be detected (including a missing host for non file: URLs). + */ + + size_t url_len = strlen(url); + struct strbuf norm; + size_t spanned; + size_t scheme_len, user_off=0, user_len=0, passwd_off=0, passwd_len=0; + size_t host_off=0, host_len=0, port_len=0, path_off, path_len, result_len; + const char *slash_ptr, *at_ptr, *colon_ptr, *path_start; + char *result; + + /* + * Copy lowercased scheme and :// suffix, %-escapes are not allowed + * First character of scheme must be URL_ALPHA + */ + spanned = strspn(url, URL_SCHEME_CHARS); + if (!spanned || !isalpha(url[0]) || spanned + 3 > url_len || + url[spanned] != ':' || url[spanned+1] != '/' || url[spanned+2] != '/') { + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid URL scheme name or missing '://' suffix"); + } + return NULL; /* Bad scheme and/or missing "://" part */ + } + strbuf_init(&norm, url_len); + scheme_len = spanned; + spanned += 3; + url_len -= spanned; + while (spanned--) + strbuf_addch(&norm, tolower(*url++)); + + + /* + * Copy any username:password if present normalizing %-escapes + */ + at_ptr = strchr(url, '@'); + slash_ptr = url + strcspn(url, "/?#"); + if (at_ptr && at_ptr < slash_ptr) { + user_off = norm.len; + if (at_ptr > url) { + if (!append_normalized_escapes(&norm, url, at_ptr - url, + "", URL_RESERVED)) { + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid %XX escape sequence"); + } + strbuf_release(&norm); + return NULL; + } + colon_ptr = strchr(norm.buf + scheme_len + 3, ':'); + if (colon_ptr) { + passwd_off = (colon_ptr + 1) - norm.buf; + passwd_len = norm.len - passwd_off; + user_len = (passwd_off - 1) - (scheme_len + 3); + } else { + user_len = norm.len - (scheme_len + 3); + } + } + strbuf_addch(&norm, '@'); + url_len -= (++at_ptr - url); + url = at_ptr; + } + + + /* + * Copy the host part excluding any port part, no %-escapes allowed + */ + if (!url_len || strchr(":/?#", *url)) { + /* Missing host invalid for all URL schemes except file */ + if (strncmp(norm.buf, "file:", 5)) { + if (out_info) { + out_info->url = NULL; + out_info->err = _("missing host and scheme is not 'file:'"); + } + strbuf_release(&norm); + return NULL; + } + } else { + host_off = norm.len; + } + colon_ptr = slash_ptr - 1; + while (colon_ptr > url && *colon_ptr != ':' && *colon_ptr != ']') + colon_ptr--; + if (*colon_ptr != ':') { + colon_ptr = slash_ptr; + } else if (!host_off && colon_ptr < slash_ptr && colon_ptr + 1 != slash_ptr) { + /* file: URLs may not have a port number */ + if (out_info) { + out_info->url = NULL; + out_info->err = _("a 'file:' URL may not have a port number"); + } + strbuf_release(&norm); + return NULL; + } + spanned = strspn(url, URL_HOST_CHARS); + if (spanned < colon_ptr - url) { + /* Host name has invalid characters */ + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid characters in host name"); + } + strbuf_release(&norm); + return NULL; + } + while (url < colon_ptr) { + strbuf_addch(&norm, tolower(*url++)); + url_len--; + } + + + /* + * Check the port part and copy if not the default (after removing any + * leading 0s); no %-escapes allowed + */ + if (colon_ptr < slash_ptr) { + /* skip the ':' and leading 0s but not the last one if all 0s */ + url++; + url += strspn(url, "0"); + if (url == slash_ptr && url[-1] == '0') + url--; + if (url == slash_ptr) { + /* Skip ":" port with no number, it's same as default */ + } else if (slash_ptr - url == 2 && + !strncmp(norm.buf, "http:", 5) && + !strncmp(url, "80", 2)) { + /* Skip http :80 as it's the default */ + } else if (slash_ptr - url == 3 && + !strncmp(norm.buf, "https:", 6) && + !strncmp(url, "443", 3)) { + /* Skip https :443 as it's the default */ + } else { + /* + * Port number must be all digits with leading 0s removed + * and since all the protocols we deal with have a 16-bit + * port number it must also be in the range 1..65535 + * 0 is not allowed because that means "next available" + * on just about every system and therefore cannot be used + */ + unsigned long pnum = 0; + spanned = strspn(url, URL_DIGIT); + if (spanned < slash_ptr - url) { + /* port number has invalid characters */ + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid port number"); + } + strbuf_release(&norm); + return NULL; + } + if (slash_ptr - url <= 5) + pnum = strtoul(url, NULL, 10); + if (pnum == 0 || pnum > 65535) { + /* port number not in range 1..65535 */ + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid port number"); + } + strbuf_release(&norm); + return NULL; + } + strbuf_addch(&norm, ':'); + strbuf_add(&norm, url, slash_ptr - url); + port_len = slash_ptr - url; + } + url_len -= slash_ptr - colon_ptr; + url = slash_ptr; + } + if (host_off) + host_len = norm.len - host_off; + + + /* + * Now copy the path resolving any . and .. segments being careful not + * to corrupt the URL by unescaping any delimiters, but do add an + * initial '/' if it's missing and do normalize any %-escape sequences. + */ + path_off = norm.len; + path_start = norm.buf + path_off; + strbuf_addch(&norm, '/'); + if (*url == '/') { + url++; + url_len--; + } + for (;;) { + const char *seg_start = norm.buf + norm.len; + const char *next_slash = url + strcspn(url, "/?#"); + int skip_add_slash = 0; + /* + * RFC 3689 indicates that any . or .. segments should be + * unescaped before being checked for. + */ + if (!append_normalized_escapes(&norm, url, next_slash - url, "", + URL_RESERVED)) { + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid %XX escape sequence"); + } + strbuf_release(&norm); + return NULL; + } + if (!strcmp(seg_start, ".")) { + /* ignore a . segment; be careful not to remove initial '/' */ + if (seg_start == path_start + 1) { + strbuf_setlen(&norm, norm.len - 1); + skip_add_slash = 1; + } else { + strbuf_setlen(&norm, norm.len - 2); + } + } else if (!strcmp(seg_start, "..")) { + /* + * ignore a .. segment and remove the previous segment; + * be careful not to remove initial '/' from path + */ + const char *prev_slash = norm.buf + norm.len - 3; + if (prev_slash == path_start) { + /* invalid .. because no previous segment to remove */ + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid '..' path segment"); + } + strbuf_release(&norm); + return NULL; + } + while (*--prev_slash != '/') {} + if (prev_slash == path_start) { + strbuf_setlen(&norm, prev_slash - norm.buf + 1); + skip_add_slash = 1; + } else { + strbuf_setlen(&norm, prev_slash - norm.buf); + } + } + url_len -= next_slash - url; + url = next_slash; + /* if the next char is not '/' done with the path */ + if (*url != '/') + break; + url++; + url_len--; + if (!skip_add_slash) + strbuf_addch(&norm, '/'); + } + path_len = norm.len - path_off; + + + /* + * Now simply copy the rest, if any, only normalizing %-escapes and + * being careful not to corrupt the URL by unescaping any delimiters. + */ + if (*url) { + if (!append_normalized_escapes(&norm, url, url_len, "", URL_RESERVED)) { + if (out_info) { + out_info->url = NULL; + out_info->err = _("invalid %XX escape sequence"); + } + strbuf_release(&norm); + return NULL; + } + } + + + result = strbuf_detach(&norm, &result_len); + if (out_info) { + out_info->url = result; + out_info->err = NULL; + out_info->url_len = result_len; + out_info->scheme_len = scheme_len; + out_info->user_off = user_off; + out_info->user_len = user_len; + out_info->passwd_off = passwd_off; + out_info->passwd_len = passwd_len; + out_info->host_off = host_off; + out_info->host_len = host_len; + out_info->port_len = port_len; + out_info->path_off = path_off; + out_info->path_len = path_len; + } + return result; +} + +static size_t url_match_prefix(const char *url, + const char *url_prefix, + size_t url_prefix_len) +{ + /* + * url_prefix matches url if url_prefix is an exact match for url or it + * is a prefix of url and the match ends on a path component boundary. + * Both url and url_prefix are considered to have an implicit '/' on the + * end for matching purposes if they do not already. + * + * url must be NUL terminated. url_prefix_len is the length of + * url_prefix which need not be NUL terminated. + * + * The return value is the length of the match in characters (including + * the final '/' even if it's implicit) or 0 for no match. + * + * Passing NULL as url and/or url_prefix will always cause 0 to be + * returned without causing any faults. + */ + if (!url || !url_prefix) + return 0; + if (!url_prefix_len || (url_prefix_len == 1 && *url_prefix == '/')) + return (!*url || *url == '/') ? 1 : 0; + if (url_prefix[url_prefix_len - 1] == '/') + url_prefix_len--; + if (strncmp(url, url_prefix, url_prefix_len)) + return 0; + if ((strlen(url) == url_prefix_len) || (url[url_prefix_len] == '/')) + return url_prefix_len + 1; + return 0; +} + +int match_urls(const struct url_info *url, + const struct url_info *url_prefix, + int *exactusermatch) +{ + /* + * url_prefix matches url if the scheme, host and port of url_prefix + * are the same as those of url and the path portion of url_prefix + * is the same as the path portion of url or it is a prefix that + * matches at a '/' boundary. If url_prefix contains a user name, + * that must also exactly match the user name in url. + * + * If the user, host, port and path match in this fashion, the returned + * value is the length of the path match including any implicit + * final '/'. For example, "http://me@example.com/path" is matched by + * "http://example.com" with a path length of 1. + * + * If there is a match and exactusermatch is not NULL, then + * *exactusermatch will be set to true if both url and url_prefix + * contained a user name or false if url_prefix did not have a + * user name. If there is no match *exactusermatch is left untouched. + */ + int usermatched = 0; + int pathmatchlen; + + if (!url || !url_prefix || !url->url || !url_prefix->url) + return 0; + + /* check the scheme */ + if (url_prefix->scheme_len != url->scheme_len || + strncmp(url->url, url_prefix->url, url->scheme_len)) + return 0; /* schemes do not match */ + + /* check the user name if url_prefix has one */ + if (url_prefix->user_off) { + if (!url->user_off || url->user_len != url_prefix->user_len || + strncmp(url->url + url->user_off, + url_prefix->url + url_prefix->user_off, + url->user_len)) + return 0; /* url_prefix has a user but it's not a match */ + usermatched = 1; + } + + /* check the host and port */ + if (url_prefix->host_len != url->host_len || + strncmp(url->url + url->host_off, + url_prefix->url + url_prefix->host_off, url->host_len)) + return 0; /* host names and/or ports do not match */ + + /* check the path */ + pathmatchlen = url_match_prefix( + url->url + url->path_off, + url_prefix->url + url_prefix->path_off, + url_prefix->url_len - url_prefix->path_off); + + if (pathmatchlen && exactusermatch) + *exactusermatch = usermatched; + return pathmatchlen; +} + +int urlmatch_config_entry(const char *var, const char *value, void *cb) +{ + struct string_list_item *item; + struct urlmatch_config *collect = cb; + struct urlmatch_item *matched; + struct url_info *url = &collect->url; + const char *key, *dot; + struct strbuf synthkey = STRBUF_INIT; + size_t matched_len = 0; + int user_matched = 0; + int retval; + + key = skip_prefix(var, collect->section); + if (!key || *(key++) != '.') { + if (collect->cascade_fn) + return collect->cascade_fn(var, value, cb); + return 0; /* not interested */ + } + dot = strrchr(key, '.'); + if (dot) { + char *config_url, *norm_url; + struct url_info norm_info; + + config_url = xmemdupz(key, dot - key); + norm_url = url_normalize(config_url, &norm_info); + free(config_url); + if (!norm_url) + return 0; + matched_len = match_urls(url, &norm_info, &user_matched); + free(norm_url); + if (!matched_len) + return 0; + key = dot + 1; + } + + if (collect->key && strcmp(key, collect->key)) + return 0; + + item = string_list_insert(&collect->vars, key); + if (!item->util) { + matched = xcalloc(1, sizeof(*matched)); + item->util = matched; + } else { + matched = item->util; + /* + * Is our match shorter? Is our match the same + * length, and without user while the current + * candidate is with user? Then we cannot use it. + */ + if (matched_len < matched->matched_len || + ((matched_len == matched->matched_len) && + (!user_matched && matched->user_matched))) + return 0; + /* Otherwise, replace it with this one. */ + } + + matched->matched_len = matched_len; + matched->user_matched = user_matched; + strbuf_addstr(&synthkey, collect->section); + strbuf_addch(&synthkey, '.'); + strbuf_addstr(&synthkey, key); + retval = collect->collect_fn(synthkey.buf, value, collect->cb); + + strbuf_release(&synthkey); + return retval; +} diff --git a/urlmatch.h b/urlmatch.h new file mode 100644 index 0000000000..b461dfd3df --- /dev/null +++ b/urlmatch.h @@ -0,0 +1,54 @@ +#ifndef URL_MATCH_H +#include "string-list.h" + +struct url_info { + /* normalized url on success, must be freed, otherwise NULL */ + char *url; + /* if !url, a brief reason for the failure, otherwise NULL */ + const char *err; + + /* the rest of the fields are only set if url != NULL */ + + size_t url_len; /* total length of url (which is now normalized) */ + size_t scheme_len; /* length of scheme name (excluding final :) */ + size_t user_off; /* offset into url to start of user name (0 => none) */ + size_t user_len; /* length of user name; if user_off != 0 but + user_len == 0, an empty user name was given */ + size_t passwd_off; /* offset into url to start of passwd (0 => none) */ + size_t passwd_len; /* length of passwd; if passwd_off != 0 but + passwd_len == 0, an empty passwd was given */ + size_t host_off; /* offset into url to start of host name (0 => none) */ + size_t host_len; /* length of host name; this INCLUDES any ':portnum'; + * file urls may have host_len == 0 */ + size_t port_len; /* if a portnum is present (port_len != 0), it has + * this length (excluding the leading ':') at the + * end of the host name (always 0 for file urls) */ + size_t path_off; /* offset into url to the start of the url path; + * this will always point to a '/' character + * after the url has been normalized */ + size_t path_len; /* length of path portion excluding any trailing + * '?...' and '#...' portion; will always be >= 1 */ +}; + +extern char *url_normalize(const char *, struct url_info *); +extern int match_urls(const struct url_info *url, const struct url_info *url_prefix, int *exactusermatch); + +struct urlmatch_item { + size_t matched_len; + char user_matched; +}; + +struct urlmatch_config { + struct string_list vars; + struct url_info url; + const char *section; + const char *key; + + void *cb; + int (*collect_fn)(const char *var, const char *value, void *cb); + int (*cascade_fn)(const char *var, const char *value, void *cb); +}; + +extern int urlmatch_config_entry(const char *var, const char *value, void *cb); + +#endif /* URL_MATCH_H */ diff --git a/wt-status.c b/wt-status.c index cb24f1fa9b..ff4b32426a 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "pathspec.h" #include "wt-status.h" #include "object.h" #include "dir.h" @@ -438,7 +439,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) } rev.diffopt.format_callback = wt_status_collect_changed_cb; rev.diffopt.format_callback_data = s; - init_pathspec(&rev.prune_data, s->pathspec); + copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_files(&rev, 0); } @@ -463,22 +464,20 @@ static void wt_status_collect_changes_index(struct wt_status *s) rev.diffopt.detect_rename = 1; rev.diffopt.rename_limit = 200; rev.diffopt.break_opt = 0; - init_pathspec(&rev.prune_data, s->pathspec); + copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_index(&rev, 1); } static void wt_status_collect_changes_initial(struct wt_status *s) { - struct pathspec pathspec; int i; - init_pathspec(&pathspec, s->pathspec); for (i = 0; i < active_nr; i++) { struct string_list_item *it; struct wt_status_change_data *d; const struct cache_entry *ce = active_cache[i]; - if (!ce_path_match(ce, &pathspec)) + if (!ce_path_match(ce, &s->pathspec)) continue; it = string_list_insert(&s->change, ce->name); d = it->util; @@ -493,7 +492,6 @@ static void wt_status_collect_changes_initial(struct wt_status *s) else d->index_status = DIFF_STATUS_ADDED; } - free_pathspec(&pathspec); } static void wt_status_collect_untracked(struct wt_status *s) @@ -516,12 +514,12 @@ static void wt_status_collect_untracked(struct wt_status *s) dir.flags |= DIR_SHOW_IGNORED_TOO; setup_standard_excludes(&dir); - fill_directory(&dir, s->pathspec); + fill_directory(&dir, &s->pathspec); for (i = 0; i < dir.nr; i++) { struct dir_entry *ent = dir.entries[i]; if (cache_name_is_other(ent->name, ent->len) && - match_pathspec(s->pathspec, ent->name, ent->len, 0, NULL)) + match_pathspec_depth(&s->pathspec, ent->name, ent->len, 0, NULL)) string_list_insert(&s->untracked, ent->name); free(ent); } @@ -529,7 +527,7 @@ static void wt_status_collect_untracked(struct wt_status *s) for (i = 0; i < dir.ignored_nr; i++) { struct dir_entry *ent = dir.ignored[i]; if (cache_name_is_other(ent->name, ent->len) && - match_pathspec(s->pathspec, ent->name, ent->len, 0, NULL)) + match_pathspec_depth(&s->pathspec, ent->name, ent->len, 0, NULL)) string_list_insert(&s->ignored, ent->name); free(ent); } diff --git a/wt-status.h b/wt-status.h index fb7152e187..9966c13deb 100644 --- a/wt-status.h +++ b/wt-status.h @@ -44,7 +44,7 @@ struct wt_status { int is_initial; char *branch; const char *reference; - const char **pathspec; + struct pathspec pathspec; int verbose; int amend; enum commit_whence whence; |