* Re: [PATCH v3 0/2] Fix bugs in rev-parse's output when run in a subdirectory
From: Junio C Hamano @ 2017-02-17 18:25 UTC (permalink / raw)
To: Johannes Schindelin
Cc: git, Nguyễn Thái Ngọc Duy, Michael Rappazzo
In-Reply-To: <cover.1487350582.git.johannes.schindelin@gmx.de>
Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> The bug that bit me (hard!) and that triggered not only a long series of
> curses but also my writing a patch and sending it to the list was that
> `git rev-parse --git-path HEAD` would give *incorrect* output when run
> in a subdirectory of a regular checkout, but *correct* output when run
> in a subdirectory of an associated *worktree*.
>
> I had tested the script in question quite a bit, but in a worktree. And
> in production, it quietly did exactly the wrong thing.
>
> Changes relative to v2:
>
> - the "iffy" test in t1700 was made "uniffy"
>
> - clarified in the commit message of 2/2 why we can get away with the
> "reset then use" pattern
It is no longer relevant between "reset then use" and "use then
reset", I think, because you did something much better, which is to
move strbuf_release() up so that it comes before the possible early
returns.
Both patches look good. Let's queue this and move it to 'next'
shortly. Personally, I think it is OK to fast-track this to
'master' before the final, but just like any other bugs, we've lived
with the bug for some time, and it is not a big deal if we have to
live with it for a bit longer.
Thanks.
^ permalink raw reply
* Re: body-CC-comment regression
From: Junio C Hamano @ 2017-02-17 18:28 UTC (permalink / raw)
To: Johan Hovold; +Cc: Matthieu Moy, git, Jeff King, Kevin Daudt, Larry Finger
In-Reply-To: <20170217182326.GA479@localhost>
Johan Hovold <johan@kernel.org> writes:
> That's precisely what the patch I posted earlier in the thread did.
That's good. I didn't see any patch yet but the message you are
responding to is a response to Matthieu's message asking if you are
planning to work on it, so I'd assume you are and and look forward
to seeing a patch (or a series?) we can queue.
Thanks.
^ permalink raw reply
* Re: [PATCH v2 00/16] Remove submodule from files-backend.c
From: Junio C Hamano @ 2017-02-17 18:35 UTC (permalink / raw)
To: Nguyễn Thái Ngọc Duy
Cc: git, Michael Haggerty, Johannes Schindelin, Ramsay Jones,
Stefan Beller, novalis
In-Reply-To: <20170216114818.6080-1-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> I'll be sending two more follow-up series, if you are interested, soon:
>
> 1) v2 of nd/worktree-gc-protection
>
> which kills parse_ref() in worktree.c _and_ set_worktree_head_symref()
> in files-backend.c. Both are bad things that should not have happened.
> (PS. The topic name is misleading as this is mostly about eliminating
> warts, unless Junio intended to combine my second series as well)
Your description sounded that these two are just preparatory step
for the main one that would soon follow, and that was why these two
patches landed on a topic named as such without any of its friends
(which were yet to come). If you prefer to keep these a separate
preparatory step from the remainder and have them graduate sooner,
let's do so, as that is my preference as well.
Rename it "nd/worktree-kill-parse-ref" perhaps?
> This series introduces get_worktree_ref_store() and adds two new APIs
> refs_resolve_ref_unsafe() and refs_create_symref(). I'm still not sure
> if the refs_ prefix is good naming, but I had to pick something to get
> things going. Name suggestions are welcome.
> 2) the real worktree-gc-protection
>
> This series adds a bunch of new refs API, enough for revision.c to
> traverses all sorts of refs with a ref store instead of "submodule".
> Many _submodule API are removed as a result because they no longer
> have any callers (yay!). One of them remains though.
Yay indeed.
^ permalink raw reply
* Re: [PATCH 08/15] submodules: introduce check to see whether to touch a submodule
From: Jacob Keller @ 2017-02-17 18:36 UTC (permalink / raw)
To: Stefan Beller
Cc: Git mailing list, brian m. carlson, Jonathan Nieder,
Brandon Williams, Junio C Hamano
In-Reply-To: <20170216003811.18273-9-sbeller@google.com>
On Wed, Feb 15, 2017 at 4:38 PM, Stefan Beller <sbeller@google.com> wrote:
> In later patches we introduce the --recurse-submodule flag for commands
> that modify the working directory, e.g. git-checkout.
>
> It is potentially expensive to check if a submodule needs an update,
> because a common theme to interact with submodules is to spawn a child
> process for each interaction.
>
> So let's introduce a function that checks if a submodule needs
> to be checked for an update before attempting the update.
>
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> submodule.c | 27 +++++++++++++++++++++++++++
> submodule.h | 13 +++++++++++++
> 2 files changed, 40 insertions(+)
>
> diff --git a/submodule.c b/submodule.c
> index 591f4a694e..2a37e03420 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -548,6 +548,33 @@ void set_config_update_recurse_submodules(int value)
> config_update_recurse_submodules = value;
> }
>
> +int touch_submodules_in_worktree(void)
> +{
> + /*
> + * Update can't be "none", "merge" or "rebase",
> + * treat any value as OFF, except an explicit ON.
> + */
> + return config_update_recurse_submodules == RECURSE_SUBMODULES_ON;
> +}
Ok, so here, we're just checking whether the value is
RECURSE_SUBMODULES_ON. The comment doesn't make sense to me at all.
What is "update" and why "can't" it be those values? How is this code
treating thise values as OFF exept for an explicit ON?
At first I thought this comment was related to check in the previous
patch. I think I see the patch is "recurse submodules = true" or
"recurse submodules = checkout" as a specific strategy? Ie:
recurse-submodules=checkout" means "recurse into submodules and update
them using checkout strategy?
Ok this starts to make a bit more sense. However, it's still somewhat
confusing to me.
Maybe this should be called something like
recurse_into_submodules_in_worktree() though that is pretty verbose.
I'm not sure I have a good name really. But I wonder why we need this
in the first place. Basically, we set RECURSE_SUBMODULES_* value which
could be OFF, ON, or even future extensions of CHECKOUT, REBASE,
MERGE, etc?
But shouldn't we just return the mode, and let the later code decide
"oh. actually I don't support this mode". For now, obviously we
wouldn't set any of the new modes yet.
> +
> +int is_active_submodule_with_strategy(const struct cache_entry *ce,
> + enum submodule_update_type strategy)
> +{
> + const struct submodule *sub;
> +
> + if (!S_ISGITLINK(ce->ce_mode))
> + return 0;
> +
> + if (!touch_submodules_in_worktree())
> + return 0;
> +
> + sub = submodule_from_path(null_sha1, ce->name);
> + if (!sub)
> + return 0;
> +
> + return sub->update_strategy.type == strategy;
> +}
> +
I liked Junio's suggestion where this just returns the strategy that
it can use, or 0 if it shouldn't be updated. Then, other code just
decides: Yes, I can use this strategy or no I cannot.
Should this be tied in with the strategy used by the
recurse_submodules above? ie: when/if we support recursing using other
strategies, shouldn't we make these match here, so that if the recurse
mode is "checkout" we don't checkout a submodule that was configured
to be rebased? Or do you want to blindly apply checkout to all
submodules even if they don't have strategy?
I assume you do not, since you check here with passing a strategy
value, and then see if it matches.
this could be named something like:
get_active_submodule_strategy() and return the strategy directly. It
would then return 0 in any case where it shouldn't be updated. Later
code can then check the strategy.
> static int has_remote(const char *refname, const struct object_id *oid,
> int flags, void *cb_data)
> {
> diff --git a/submodule.h b/submodule.h
> index b4e60c08d2..46d9f0f293 100644
> --- a/submodule.h
> +++ b/submodule.h
> @@ -65,6 +65,19 @@ extern void show_submodule_inline_diff(FILE *f, const char *path,
> const struct diff_options *opt);
> extern void set_config_fetch_recurse_submodules(int value);
> extern void set_config_update_recurse_submodules(int value);
> +
> +/*
> + * Traditionally Git ignored changes made for submodules.
> + * This function checks if we are interested in the given submodule
> + * for any kind of operation.
This comment seems a bit weird.
> + */
> +extern int touch_submodules_in_worktree(void);
> +/*
> + * Check if the given ce entry is a submodule with the given update
> + * strategy configured.
I like Junio's suggestion of this "getting the current configured
strategy for a submodule. When we aren't set to recurse into
submodules we (obviously) return that we have no strategy since we're
not going to update it at all.
> + */
> +extern int is_active_submodule_with_strategy(const struct cache_entry *ce,
> + enum submodule_update_type strategy);
> extern void check_for_new_submodule_commits(unsigned char new_sha1[20]);
> extern int fetch_populated_submodules(const struct argv_array *options,
> const char *prefix, int command_line_option,
> --
> 2.12.0.rc1.16.ge4278d41a0.dirty
>
^ permalink raw reply
* Re: [PATCH 12/15] unpack-trees: check if we can perform the operation for submodules
From: Jacob Keller @ 2017-02-17 18:42 UTC (permalink / raw)
To: Stefan Beller
Cc: Git mailing list, brian m. carlson, Jonathan Nieder,
Brandon Williams, Junio C Hamano
In-Reply-To: <20170216003811.18273-13-sbeller@google.com>
On Wed, Feb 15, 2017 at 4:38 PM, Stefan Beller <sbeller@google.com> wrote:
> + if (is_active_submodule_with_strategy(ce, SM_UPDATE_UNSPECIFIED))
Here, and in other cases where we use
is_active_submodule_with_strategy(), why do we only ever check
SM_UPDATE_UNSPECIFIED? It seems really weird that we're only going to
check submodules who's strategy is unspecified, when that defaults to
checkout if I recall correctly? Shouldn't we check both? This applies
to pretty much everywhere that you call this function that I noticed,
which is why I removed the context.
Thanks,
Jake
^ permalink raw reply
* Re: body-CC-comment regression
From: Matthieu Moy @ 2017-02-17 18:44 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Johan Hovold, git, Jeff King, Kevin Daudt, Larry Finger
In-Reply-To: <xmqq4lzsu0wo.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
> Johan Hovold <johan@kernel.org> writes:
>
>> That's precisely what the patch I posted earlier in the thread did.
>
> That's good. I didn't see any patch yet
It's here:
http://public-inbox.org/git/20170217110642.GD2625@localhost/
but as I explained, this removes a feature suported since several major
releases and we have no idea how many users may use the "mupliple emails
in one field". The approach I proposed does not suffer from this.
--
Matthieu Moy
http://www-verimag.imag.fr/~moy/
^ permalink raw reply
* [PATCH] l10n: de.po: translate 241 messages
From: Ralf Thielow @ 2017-02-17 17:41 UTC (permalink / raw)
To: git
Cc: Thomas Rast, Jan Krüger, Christian Stimming, Phillip Szelat,
Matthias Rüster, Magnus Görlitz, Ralf Thielow
Translate 241 messages came from git.pot update in 673bfad09
(l10n: git.pot: v2.12.0 round 1 (239 new, 15 removed)) and a4d94835a
(l10n: git.pot: v2.12.0 round 2 (2 new)).
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
---
po/de.po | 746 ++++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 407 insertions(+), 339 deletions(-)
diff --git a/po/de.po b/po/de.po
index 2326da1fd..1fd4cbb1e 100644
--- a/po/de.po
+++ b/po/de.po
@@ -916,17 +916,17 @@ msgstr ""
msgid ""
"The merge base %s is %s.\n"
"This means the first '%s' commit is between %s and [%s].\n"
msgstr ""
"Die Merge-Basis %s ist %s.\n"
"Das bedeutet, der erste '%s' Commit befindet sich zwischen %s und [%s]\n"
#: bisect.c:750
-#, fuzzy, c-format
+#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
"git bisect cannot work properly in this case.\n"
"Maybe you mistook %s and %s revs?\n"
msgstr ""
"Manche %s Commits sind keine Vorgänger des %s Commits.\n"
"git bisect kann in diesem Fall nicht richtig arbeiten.\n"
"Vielleicht verwechselten Sie %s und %s Commits?\n"
@@ -1343,19 +1343,19 @@ msgid "bad zlib compression level %d"
msgstr "ungültiger zlib Komprimierungsgrad %d"
#: config.c:993
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "Ungültiger Modus für Objekterstellung: %s"
#: config.c:1149
-#, fuzzy, c-format
+#, c-format
msgid "bad pack compression level %d"
-msgstr "Komprimierungsgrad für Paketierung"
+msgstr "ungültiger Komprimierungsgrad (%d) für Paketierung"
#: config.c:1339
msgid "unable to parse command-line config"
msgstr ""
"Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
#: config.c:1389
msgid "unknown error occurred while reading the configuration files"
@@ -1375,19 +1375,19 @@ msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
#: config.c:1804
#, c-format
msgid "%s has multiple values"
msgstr "%s hat mehrere Werte"
#: config.c:2225 config.c:2450
-#, fuzzy, c-format
+#, c-format
msgid "fstat on %s failed"
-msgstr "\"stash\" fehlgeschlagen"
+msgstr "fstat auf %s fehlgeschlagen"
#: config.c:2343
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "Konnte '%s' nicht zu '%s' setzen."
#: config.c:2345
#, c-format
@@ -1616,19 +1616,19 @@ msgstr "Fehler beim Sammeln von Namen und Informationen zum Kernel"
#: dir.c:1981
msgid "Untracked cache is disabled on this system or location."
msgstr ""
"Cache für unversionierte Dateien ist auf diesem System oder\n"
"für dieses Verzeichnis deaktiviert."
#: dir.c:2759
-#, fuzzy, c-format
+#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
-msgstr "Konnte Verzeichnis '%s' nicht erstellen."
+msgstr "Konnte Git-Verzeichnis nicht von '%s' nach '%s' migrieren."
#: fetch-pack.c:213
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: erwartete shallow-Liste"
#: fetch-pack.c:225
msgid "git fetch-pack: expected ACK/NAK, got EOF"
msgstr "git fetch-pack: ACK/NAK erwartet, EOF bekommen"
@@ -1803,17 +1803,17 @@ msgstr "konnte temporäre Datei nicht erstellen"
#: gpg-interface.c:217
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "Fehler beim Schreiben der losgelösten Signatur nach '%s'"
#: graph.c:96
#, c-format
msgid "ignore invalid color '%.*s' in log.graphColors"
-msgstr ""
+msgstr "Ignoriere ungültige Farbe '%.*s' in log.graphColors"
#: grep.c:1794
#, c-format
msgid "'%s': unable to read %s"
msgstr "'%s': konnte %s nicht lesen"
#: grep.c:1811 builtin/clone.c:381 builtin/diff.c:81 builtin/rm.c:133
#, c-format
@@ -2320,17 +2320,17 @@ msgstr "%s: 'literal' und 'glob' sind inkompatibel"
#: pathspec.c:363
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s: '%s' liegt außerhalb des Repositories"
#: pathspec.c:451
#, c-format
msgid "'%s' (mnemonic: '%c')"
-msgstr ""
+msgstr "'%s' (Kürzel: '%c')"
#: pathspec.c:461
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr ""
"%s: Pfadspezifikationsangabe wird von diesem Befehl nicht unterstützt: %s"
#: pathspec.c:511
@@ -2418,19 +2418,19 @@ msgid "%%(body) does not take arguments"
msgstr "%%(body) akzeptiert keine Argumente"
#: ref-filter.c:85
#, c-format
msgid "%%(subject) does not take arguments"
msgstr "%%(subject) akzeptiert keine Argumente"
#: ref-filter.c:92
-#, fuzzy, c-format
+#, c-format
msgid "%%(trailers) does not take arguments"
-msgstr "%%(body) akzeptiert keine Argumente"
+msgstr "%%(trailers) akzeptiert keine Argumente"
#: ref-filter.c:111
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "Positiver Wert erwartet contents:lines=%s"
#: ref-filter.c:113
#, c-format
@@ -2613,32 +2613,30 @@ msgstr " (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "Ihr Branch ist auf dem selben Stand wie '%s'.\n"
#: remote.c:2092
#, 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 Branch ist vor '%s' um %d Commit.\n"
-msgstr[1] "Ihr Branch ist vor '%s' um %d Commits.\n"
+msgstr[0] "Ihr Branch ist %2$d Commit vor '%1$s'.\n"
+msgstr[1] "Ihr Branch ist %2$d Commits vor '%1$s'.\n"
#: remote.c:2098
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
#: remote.c:2101
#, 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 Branch ist zu '%s' um %d Commit hinterher, und kann vorgespult werden.\n"
-msgstr[1] ""
-"Ihr Branch ist zu '%s' um %d Commits hinterher, und kann vorgespult werden.\n"
+msgstr[0] "Ihr Branch ist %2$d Commit hinter '%1$s', und kann vorgespult werden.\n"
+msgstr[1] "Ihr Branch ist %2$d Commits hinter '%1$s', und kann vorgespult werden.\n"
#: remote.c:2109
msgid " (use \"git pull\" to update your local branch)\n"
msgstr ""
" (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
#: remote.c:2112
#, c-format
@@ -2712,24 +2710,23 @@ msgstr "die Gegenseite unterstützt keine Push-Optionen"
msgid "revert"
msgstr "Revert"
#: sequencer.c:217
msgid "cherry-pick"
msgstr "Cherry-Pick"
#: sequencer.c:219
-#, fuzzy
msgid "rebase -i"
-msgstr "Basis-Commit"
+msgstr "interaktives Rebase"
#: sequencer.c:221
-#, fuzzy, c-format
+#, c-format
msgid "Unknown action: %d"
-msgstr "Unbekannter Typ: %d"
+msgstr "Unbekannte Aktion: %d"
#: sequencer.c:278
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
msgstr ""
"nach Auflösung der Konflikte, markieren Sie die korrigierten Pfade\n"
"mit 'git add <Pfade>' oder 'git rm <Pfade>'"
@@ -2844,72 +2841,76 @@ msgstr "Konnte Eltern-Commit %s nicht parsen\n"
#: sequencer.c:815
#, c-format
msgid ""
"unexpected 1st line of squash message:\n"
"\n"
"\t%.*s"
msgstr ""
+"unerwartete erste Zeile der Squash-Beschreibung:\n"
+"\n"
+"\t%.*s"
#: sequencer.c:821
#, c-format
msgid ""
"invalid 1st line of squash message:\n"
"\n"
"\t%.*s"
msgstr ""
+"ungültige erste Zeile der Squash-Beschreibung:\n"
+"\n"
+"\t%.*s"
#: sequencer.c:827 sequencer.c:852
-#, fuzzy, c-format
+#, c-format
msgid "This is a combination of %d commits."
-msgstr "Das ist eine Kombination aus 2 Commits."
+msgstr "Das ist eine Kombination aus %d Commits."
#: sequencer.c:836
msgid "need a HEAD to fixup"
-msgstr ""
+msgstr "benötige HEAD für fixup"
#: sequencer.c:838
-#, fuzzy
msgid "could not read HEAD"
-msgstr "Konnte HEAD nicht loslösen"
+msgstr "Konnte HEAD nicht lesen"
#: sequencer.c:840
-#, fuzzy
msgid "could not read HEAD's commit message"
-msgstr "Konnte Commit-Beschreibung nicht lesen: %s"
+msgstr "Konnte Commit-Beschreibung von HEAD nicht lesen"
#: sequencer.c:846
-#, fuzzy, c-format
+#, c-format
msgid "cannot write '%s'"
-msgstr "kann '%s' nicht erstellen"
+msgstr "kann '%s' nicht schreiben"
#: sequencer.c:855 git-rebase--interactive.sh:445
msgid "This is the 1st commit message:"
msgstr "Das ist die erste Commit-Beschreibung:"
#: sequencer.c:863
-#, fuzzy, c-format
+#, c-format
msgid "could not read commit message of %s"
-msgstr "Konnte Commit-Beschreibung nicht lesen: %s"
+msgstr "Konnte Commit-Beschreibung von %s nicht lesen."
#: sequencer.c:870
-#, fuzzy, c-format
+#, c-format
msgid "This is the commit message #%d:"
-msgstr "Das ist Commit-Beschreibung #${n}:"
+msgstr "Das ist Commit-Beschreibung #%d:"
#: sequencer.c:875
-#, fuzzy, c-format
+#, c-format
msgid "The commit message #%d will be skipped:"
-msgstr "Commit-Beschreibung #${n} wird ausgelassen:"
+msgstr "Die Commit-Beschreibung #%d wird ausgelassen:"
#: sequencer.c:880
-#, fuzzy, c-format
+#, c-format
msgid "unknown command: %d"
-msgstr "Unbekannter Unterbefehl: %s"
+msgstr "Unbekannter Befehl: %d"
#: sequencer.c:946
msgid "your index file is unmerged."
msgstr "Ihre Index-Datei ist nicht zusammengeführt."
#: sequencer.c:964
#, c-format
msgid "commit %s is a merge but no -m option was given."
@@ -2933,19 +2934,19 @@ msgstr "Kann keine Commit-Beschreibung für %s bekommen."
#. TRANSLATORS: The first %s will be a "todo" command like
#. "revert" or "pick", the second %s a SHA1.
#: sequencer.c:1001
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: kann Eltern-Commit %s nicht parsen"
#: sequencer.c:1063 sequencer.c:1812
-#, fuzzy, c-format
+#, c-format
msgid "could not rename '%s' to '%s'"
-msgstr "Konnte '%s' nicht zu '%s' setzen."
+msgstr "Konnte '%s' nicht zu '%s' umbenennen."
#: sequencer.c:1114
#, c-format
msgid "could not revert %s... %s"
msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
#: sequencer.c:1115
#, c-format
@@ -2967,27 +2968,26 @@ msgid "git %s: failed to refresh the index"
msgstr "git %s: Fehler beim Aktualisieren des Index"
#: sequencer.c:1294
#, c-format
msgid "invalid line %d: %.*s"
msgstr "Ungültige Zeile %d: %.*s"
#: sequencer.c:1302
-#, fuzzy, c-format
+#, c-format
msgid "cannot '%s' without a previous commit"
-msgstr "Kann nicht '$squash_style' ohne vorherigen Commit"
+msgstr "Kann '%s' nicht ohne vorherigen Commit ausführen"
#: sequencer.c:1334
#, c-format
msgid "could not read '%s'."
msgstr "Konnte '%s' nicht lesen."
#: sequencer.c:1341
-#, fuzzy
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "Bitte beheben Sie das, indem Sie 'git rebase --edit-todo' ausführen."
#: sequencer.c:1343
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "Unbenutzbares Instruktionsblatt: '%s'"
@@ -3062,166 +3062,155 @@ msgid "unexpected end of file"
msgstr "Unerwartetes Dateiende"
#: sequencer.c:1629
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
#: sequencer.c:1640
-#, fuzzy
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
-msgstr ""
-"Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n"
-"Keine Zurücksetzung zu ORIG_HEAD."
+msgstr "Sie scheinen HEAD verschoben zu haben. Keine Zurücksetzung, prüfen Sie HEAD."
#: sequencer.c:1777 sequencer.c:2049
-#, fuzzy
msgid "cannot read HEAD"
msgstr "Kann HEAD nicht lesen"
#: sequencer.c:1817 builtin/difftool.c:574
-#, fuzzy, c-format
+#, c-format
msgid "could not copy '%s' to '%s'"
-msgstr "Konnte '%s' nicht zu '%s' setzen."
+msgstr "Konnte '%s' nicht nach '%s' kopieren."
#: sequencer.c:1833
-#, fuzzy
msgid "could not read index"
-msgstr "Konnte den Index nicht lesen"
+msgstr "Konnte den Index nicht lesen."
#: sequencer.c:1838
-#, fuzzy, c-format
+#, c-format
msgid ""
"execution failed: %s\n"
"%sYou can fix the problem, and then run\n"
"\n"
" git rebase --continue\n"
"\n"
msgstr ""
-"Sie können das Problem beheben, und dann\n"
+"Ausführung fehlgeschlagen: %s\n"
+"%sSie können das Problem beheben, und dann\n"
"\n"
"\tgit rebase --continue\n"
"\n"
-"ausführen."
+"ausführen.\n"
#: sequencer.c:1844
-#, fuzzy
msgid "and made changes to the index and/or the working tree\n"
-msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert."
+msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert.\n"
#: sequencer.c:1850
-#, fuzzy, c-format
+#, c-format
msgid ""
"execution succeeded: %s\n"
"but left changes to the index and/or the working tree\n"
"Commit or stash your changes, and then run\n"
"\n"
" git rebase --continue\n"
"\n"
msgstr ""
-"Ausführung erfolgreich: $rest\n"
+"Ausführung erfolgreich: %s\n"
"Aber Änderungen in Index oder Arbeitsverzeichnis verblieben.\n"
"Committen Sie Ihre Änderungen oder benutzen Sie \"stash\".\n"
"Führen Sie dann aus:\n"
"\n"
-"\tgit rebase --continue"
+" git rebase --continue\n"
+"\n"
#: sequencer.c:1905 git-rebase.sh:168
#, c-format
msgid "Applied autostash."
msgstr "Automatischen Stash angewendet."
#: sequencer.c:1917
-#, fuzzy, c-format
+#, c-format
msgid "cannot store %s"
-msgstr "kann '%s' nicht öffnen"
+msgstr "kann %s nicht speichern"
#: sequencer.c:1919 git-rebase.sh:172
#, c-format
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 des automatischen Stash 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"
#: sequencer.c:2000
-#, fuzzy, c-format
+#, c-format
msgid "stopped at %s... %.*s"
-msgstr "Anwendung des Patches fehlgeschlagen bei %s %.*s"
+msgstr "Angehalten bei %s... %.*s"
#: sequencer.c:2027
-#, fuzzy, c-format
+#, c-format
msgid "unknown command %d"
-msgstr "Unbekannter Unterbefehl: %s"
+msgstr "Unbekannter Befehl %d"
#: sequencer.c:2057
-#, fuzzy
msgid "could not read orig-head"
-msgstr "Konnte Referenz %s nicht lesen."
+msgstr "Konnte orig-head nicht lesen."
#: sequencer.c:2061
-#, fuzzy
msgid "could not read 'onto'"
-msgstr "Konnte '%s' nicht lesen"
+msgstr "Konnte 'onto' nicht lesen."
#: sequencer.c:2068
-#, fuzzy, c-format
+#, c-format
msgid "could not update %s"
-msgstr "konnte %s nicht parsen"
+msgstr "Konnte %s nicht aktualisieren."
#: sequencer.c:2075
-#, fuzzy, c-format
+#, c-format
msgid "could not update HEAD to %s"
-msgstr "Konnte nicht nach '%s' schreiben."
+msgstr "Konnte HEAD nicht auf %s aktualisieren."
#: sequencer.c:2159
-#, fuzzy
msgid "cannot rebase: You have unstaged changes."
msgstr ""
-"Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt "
-"sind."
+"Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit\n"
+"vorgemerkt sind."
#: sequencer.c:2164
-#, fuzzy
msgid "could not remove CHERRY_PICK_HEAD"
-msgstr "Konnte CHERRY_PICK_HEAD nicht löschen"
+msgstr "Konnte CHERRY_PICK_HEAD nicht löschen."
#: sequencer.c:2173
-#, fuzzy
msgid "cannot amend non-existing commit"
-msgstr "Kann existierendes Objekt %s nicht lesen."
+msgstr "Kann nicht existierenden Commit nicht nachbessern."
#: sequencer.c:2175
-#, fuzzy, c-format
+#, c-format
msgid "invalid file: '%s'"
-msgstr "Ungültiger Schlüssel: %s"
+msgstr "Ungültige Datei: '%s'"
#: sequencer.c:2177
-#, fuzzy, c-format
+#, c-format
msgid "invalid contents: '%s'"
-msgstr "Ungültige Option: %s"
+msgstr "Ungültige Inhalte: '%s'"
#: sequencer.c:2180
-#, fuzzy
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
"first and then run 'git rebase --continue' again."
msgstr ""
+"\n"
"Sie haben nicht committete Änderungen in Ihrem Arbeitsverzeichnis. Bitte\n"
-"committen Sie diese zuerst und führen Sie dann 'git rebase --continue' "
-"erneut\n"
-"aus."
+"committen Sie diese zuerst und führen Sie dann 'git rebase --continue'\n"
+"erneut aus."
#: sequencer.c:2190
-#, fuzzy
msgid "could not commit staged changes."
msgstr "Konnte Änderungen aus der Staging-Area nicht committen."
#: sequencer.c:2270
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
@@ -3416,54 +3405,59 @@ msgstr "Konnte Eintrag '%s' nicht aus .gitmodules entfernen"
msgid "staging updated .gitmodules failed"
msgstr "Konnte aktualisierte .gitmodules-Datei nicht zum Commit vormerken"
#: submodule.c:159
msgid "negative values not allowed for submodule.fetchJobs"
msgstr "Negative Werte für submodule.fetchJobs nicht erlaubt"
#: submodule.c:1184
-#, fuzzy, c-format
+#, c-format
msgid "could not start 'git status in submodule '%s'"
-msgstr "Konnte Submodul-Verzeichnis '%s' nicht finden."
+msgstr "Konnte 'git status' in Submodul '%s' nicht starten."
#: submodule.c:1197
-#, fuzzy, c-format
+#, c-format
msgid "could not run 'git status in submodule '%s'"
-msgstr "konnte Datei '%s' nicht erstellen"
+msgstr "konnte 'git status' in Submodul '%s' nicht ausführen"
#: submodule.c:1398
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
msgstr ""
+"relocate_gitdir für Submodul '%s' mit mehr als einem Arbeitsverzeichnis\n"
+"wird nicht unterstützt"
#: submodule.c:1410 submodule.c:1471
-#, fuzzy, c-format
+#, c-format
msgid "could not lookup name for submodule '%s'"
-msgstr "konnte '%s' nicht öffnen oder lesen"
+msgstr "konnte Name für Submodul '%s' nicht nachschlagen"
#: submodule.c:1414 submodule.c:1474 builtin/submodule--helper.c:640
#: builtin/submodule--helper.c:650
#, c-format
msgid "could not create directory '%s'"
msgstr "Konnte Verzeichnis '%s' nicht erstellen."
#: submodule.c:1420
-#, fuzzy, c-format
+#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
"'%s' to\n"
"'%s'\n"
-msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
+msgstr ""
+"Migriere Git-Verzeichnis von '%s%s' von\n"
+"'%s' nach\n"
+"'%s'\n"
#: submodule.c:1512
-#, fuzzy, c-format
+#, c-format
msgid "could not recurse into submodule '%s'"
-msgstr "Fehler bei Rekursion in Submodul-Pfad '$sm_path'"
+msgstr "Fehler bei Rekursion in Submodul-Pfad '%s'"
#: submodule-config.c:360
#, c-format
msgid "invalid value for %s"
msgstr "Ungültiger Wert für %s"
#: trailer.c:240
#, c-format
@@ -3646,17 +3640,17 @@ msgstr ""
msgid ""
"Your local changes to the following files would be overwritten by %s:\n"
"%%s"
msgstr ""
"Ihre lokalen Änderungen würden durch %s überschrieben werden.\n"
"%%s"
#: unpack-trees.c:116
-#, fuzzy, c-format
+#, c-format
msgid ""
"Updating the following directories would lose untracked files in them:\n"
"%s"
msgstr ""
"Durch die Aktualisierung der folgenden Verzeichnisse würden unversionierte\n"
"Dateien in diesen Verzeichnissen verloren gehen:\n"
"%s"
@@ -4104,17 +4098,17 @@ msgstr " (benutzen Sie \"git am --skip\", um diesen Patch auszulassen)"
#: wt-status.c:1047
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (benutzen Sie \"git am --abort\", um den ursprünglichen Branch "
"wiederherzustellen)"
#: wt-status.c:1176
msgid "git-rebase-todo is missing."
-msgstr ""
+msgstr "git-rebase-todo fehlt."
#: wt-status.c:1178
msgid "No commands done."
msgstr "Keine Befehle ausgeführt."
#: wt-status.c:1181
#, c-format
msgid "Last command done (%d command done):"
@@ -4343,42 +4337,40 @@ msgid "no changes added to commit\n"
msgstr "keine Änderungen zum Commit vorgemerkt\n"
#: wt-status.c:1611
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
"track)\n"
msgstr ""
-"nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien (benutzen "
-"Sie \"git add\" zum Versionieren)\n"
+"nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
+"(benutzen Sie \"git add\" zum Versionieren)\n"
#: wt-status.c:1614
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
#: wt-status.c:1617
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
-"nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git "
-"add\" zum Versionieren)\n"
+"nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen\n"
+"Sie \"git add\" zum Versionieren)\n"
#: wt-status.c:1620 wt-status.c:1625
#, c-format
msgid "nothing to commit\n"
msgstr "nichts zu committen\n"
#: wt-status.c:1623
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr ""
-"nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
-"anzuzeigen)\n"
+msgstr "nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)\n"
#: wt-status.c:1627
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
#: wt-status.c:1734
msgid "Initial commit on "
@@ -5086,21 +5078,20 @@ msgid "Show author email instead of name (Default: off)"
msgstr ""
"Anstatt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
#: builtin/blame.c:2597
msgid "Ignore whitespace differences"
msgstr "Unterschiede im Whitespace ignorieren"
#: builtin/blame.c:2604
-#, fuzzy
msgid "Use an experimental heuristic to improve diffs"
msgstr ""
-"eine experimentelle, auf Einrückungen basierende Heuristik zur Verbesserung\n"
-"der Darstellung von Unterschieden verwenden"
+"eine experimentelle Heuristik zur Verbesserung der Darstellung\n"
+"von Unterschieden verwenden"
#: builtin/blame.c:2606
msgid "Spend extra cycles to find better match"
msgstr "Länger arbeiten, um bessere Übereinstimmungen zu finden"
#: builtin/blame.c:2607
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Commits von <Datei> benutzen, anstatt \"git-rev-list\" aufzurufen"
@@ -5520,17 +5511,17 @@ msgid "object"
msgstr "Objekt"
#: builtin/branch.c:679
msgid "print only branches of the object"
msgstr "nur Branches von diesem Objekt ausgeben"
#: builtin/branch.c:681 builtin/for-each-ref.c:46 builtin/tag.c:388
msgid "sorting and filtering are case insensitive"
-msgstr ""
+msgstr "Sortierung und Filterung sind unabhängig von Groß- und Kleinschreibung"
#: builtin/branch.c:698
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Konnte HEAD nicht als gültige Referenz auflösen."
#: builtin/branch.c:702 builtin/clone.c:706
msgid "HEAD not found below refs/heads!"
msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
@@ -6211,30 +6202,30 @@ msgid "Would skip repository %s\n"
msgstr "Würde Repository %s überspringen\n"
#: builtin/clean.c:33
#, c-format
msgid "failed to remove %s"
msgstr "Fehler beim Löschen von %s"
#: builtin/clean.c:291 git-add--interactive.perl:623
-#, fuzzy, c-format
+#, c-format
msgid ""
"Prompt help:\n"
"1 - select a numbered item\n"
"foo - select item based on unique prefix\n"
" - (empty) select nothing\n"
msgstr ""
"Eingabehilfe:\n"
"1 - nummeriertes Element auswählen\n"
"foo - Element anhand eines eindeutigen Präfix auswählen\n"
-" - (leer) nichts auswählen"
+" - (leer) nichts auswählen\n"
#: builtin/clean.c:295 git-add--interactive.perl:632
-#, fuzzy, c-format
+#, c-format
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"
@@ -6242,23 +6233,23 @@ msgid ""
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 Präfix auswählen\n"
"-... - angegebenes Element abwählen\n"
"* - alle Elemente auswählen\n"
-" - (leer) Auswahl beenden"
+" - (leer) Auswahl beenden\n"
#: builtin/clean.c:511 git-add--interactive.perl:598
#: git-add--interactive.perl:603
-#, fuzzy, c-format, perl-format
+#, c-format, perl-format
msgid "Huh (%s)?\n"
-msgstr "Wie bitte (%s)?"
+msgstr "Wie bitte (%s)?\n"
#: builtin/clean.c:653
#, c-format
msgid "Input ignore patterns>> "
msgstr "Ignorier-Muster eingeben>> "
#: builtin/clean.c:690
#, c-format
@@ -6271,19 +6262,19 @@ msgstr "Wählen Sie Einträge zum Löschen"
#. TRANSLATORS: Make sure to keep [y/N] as is
#: builtin/clean.c:752
#, c-format
msgid "Remove %s [y/N]? "
msgstr "'%s' löschen [y/N]? "
#: builtin/clean.c:777 git-add--interactive.perl:1669
-#, fuzzy, c-format
+#, c-format
msgid "Bye.\n"
-msgstr "Tschüss."
+msgstr "Tschüss.\n"
#: builtin/clean.c:785
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"
@@ -6459,17 +6450,16 @@ msgstr ""
"Zeit\n"
"erstellen"
#: builtin/clone.c:101 builtin/fetch.c:124
msgid "revision"
msgstr "Commit"
#: builtin/clone.c:102 builtin/fetch.c:125
-#, fuzzy
msgid "deepen history of shallow clone, excluding rev"
msgstr ""
"die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
"Ausschluss eines Commits vertiefen"
#: builtin/clone.c:104
msgid "clone only one branch, HEAD or --branch"
msgstr "nur einen Branch klonen, HEAD oder --branch"
@@ -7699,100 +7689,101 @@ msgid "more than two blobs given: '%s'"
msgstr "Mehr als zwei Blobs angegeben: '%s'"
#: builtin/diff.c:417
#, c-format
msgid "unhandled object '%s' given."
msgstr "unbehandeltes Objekt '%s' angegeben"
#: builtin/difftool.c:28
-#, fuzzy
msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
-msgstr "git log [<Optionen>] [<Commitbereich>] [[--] <Pfad>...]"
+msgstr "git difftool [<Optionen>] [<Commit> [<Commit>]] [--] [<Pfad>...]"
#: builtin/difftool.c:241
-#, fuzzy, c-format
+#, c-format
msgid "failed: %d"
-msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
+msgstr "fehlgeschlagen: %d"
#: builtin/difftool.c:342
msgid ""
"combined diff formats('-c' and '--cc') are not supported in\n"
"directory diff mode('-d' and '--dir-diff')."
msgstr ""
+"Kombinierte Diff-Formate('-c' und '--cc') werden im Verzeichnis-\n"
+"Diff-Modus('-d' und '--dir-diff') nicht unterstützt."
#: builtin/difftool.c:567
#, c-format
msgid "both files modified: '%s' and '%s'."
-msgstr ""
+msgstr "beide Dateien geändert: '%s' und '%s'."
#: builtin/difftool.c:569
-#, fuzzy
msgid "working tree file has been left."
-msgstr "Arbeitsverzeichnis '%s' existiert bereits."
+msgstr "Datei im Arbeitsverzeichnis belassen."
#: builtin/difftool.c:580
#, c-format
msgid "temporary files exist in '%s'."
-msgstr ""
+msgstr "Es existieren temporäre Dateien in '%s'."
#: builtin/difftool.c:581
msgid "you may want to cleanup or recover these."
-msgstr ""
+msgstr "Sie könnten diese aufräumen oder wiederherstellen."
#: builtin/difftool.c:626
msgid "use `diff.guitool` instead of `diff.tool`"
-msgstr ""
+msgstr "`diff.guitool` anstatt `diff.tool` benutzen"
#: builtin/difftool.c:628
msgid "perform a full-directory diff"
-msgstr ""
+msgstr "Diff über ganzes Verzeichnis ausführen"
#: builtin/difftool.c:630
msgid "do not prompt before launching a diff tool"
-msgstr ""
+msgstr "keine Eingabeaufforderung vor Ausführung eines Diff-Tools"
#: builtin/difftool.c:636
msgid "use symlinks in dir-diff mode"
-msgstr ""
+msgstr "symbolische Verknüpfungen im dir-diff Modus verwenden"
#: builtin/difftool.c:637
msgid "<tool>"
-msgstr ""
+msgstr "<Tool>"
#: builtin/difftool.c:638
msgid "use the specified diff tool"
-msgstr ""
+msgstr "das angegebene Diff-Tool benutzen"
#: builtin/difftool.c:640
msgid "print a list of diff tools that may be used with `--tool`"
-msgstr ""
+msgstr "eine Liste mit Diff-Tools darstellen, die mit `--tool` benutzt werden können"
#: builtin/difftool.c:643
msgid ""
"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
"code"
msgstr ""
+"'git-difftool' beenden, wenn das aufgerufene Diff-Tool mit einem Rückkehrwert\n"
+"verschieden 0 ausgeführt wurde"
#: builtin/difftool.c:645
-#, fuzzy
msgid "<command>"
-msgstr "Programm"
+msgstr "<Programm>"
#: builtin/difftool.c:646
msgid "specify a custom command for viewing diffs"
-msgstr ""
+msgstr "eigenen Befehl zur Anzeige von Unterschieden angeben"
#: builtin/difftool.c:670
msgid "no <tool> given for --tool=<tool>"
-msgstr ""
+msgstr "kein <Tool> für --tool=<Tool> angegeben"
#: builtin/difftool.c:677
msgid "no <cmd> given for --extcmd=<cmd>"
-msgstr ""
+msgstr "kein <Programm> für --extcmd=<Programm> angegeben"
#: builtin/fast-export.c:25
msgid "git fast-export [rev-list-opts]"
msgstr "git fast-export [rev-list-opts]"
#: builtin/fast-export.c:980
msgid "show progress after <n> objects"
msgstr "Fortschritt nach <n> Objekten anzeigen"
@@ -8399,29 +8390,26 @@ msgstr "auch in Inhalten finden, die nicht von Git verwaltet werden"
msgid "search in both tracked and untracked files"
msgstr "in versionierten und unversionierten Dateien suchen"
#: builtin/grep.c:979
msgid "ignore files specified via '.gitignore'"
msgstr "Dateien, die über '.gitignore' angegeben sind, ignorieren"
#: builtin/grep.c:981
-#, fuzzy
msgid "recursivley search in each submodule"
-msgstr "rekursive Anforderungen von Submodulen kontrollieren"
+msgstr "rekursive Suche in jedem Submodul"
#: builtin/grep.c:983
-#, fuzzy
msgid "basename"
-msgstr "umbenennen"
+msgstr "Basisname"
#: builtin/grep.c:984
-#, fuzzy
msgid "prepend parent project's basename to output"
-msgstr "dies an die Ausgabe der Submodul-Pfade voranstellen"
+msgstr "Basisname des Elternprojektes an Ausgaben voranstellen"
#: builtin/grep.c:987
msgid "show non-matching lines"
msgstr "Zeilen ohne Übereinstimmungen anzeigen"
#: builtin/grep.c:989
msgid "case insensitive matching"
msgstr "Übereinstimmungen unabhängig von Groß- und Kleinschreibung finden"
@@ -8590,17 +8578,17 @@ msgstr "ungültige Anzahl von Threads angegeben (%d)"
#: builtin/grep.c:1215
msgid "--open-files-in-pager only works on the worktree"
msgstr ""
"Die Option --open-files-in-pager kann nur innerhalb des "
"Arbeitsverzeichnisses verwendet werden."
#: builtin/grep.c:1238
msgid "option not supported with --recurse-submodules."
-msgstr ""
+msgstr "Option wird mit --recurse-submodules nicht unterstützt."
#: builtin/grep.c:1244
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:1249
@@ -9068,20 +9056,18 @@ msgstr "Name der Paketdatei '%s' endet nicht mit '.pack'"
msgid "bad %s"
msgstr "%s ist ungültig"
#: builtin/index-pack.c:1734
msgid "--fix-thin cannot be used without --stdin"
msgstr "Die Option --fix-thin kann nicht ohne --stdin verwendet werden."
#: builtin/index-pack.c:1736
-#, fuzzy
msgid "--stdin requires a git repository"
-msgstr ""
-"Die Option --index kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--stdin erfordert ein Git-Repository"
#: builtin/index-pack.c:1744
msgid "--verify with no packfile name given"
msgstr "Die Option --verify wurde ohne Namen der Paketdatei angegeben."
#: builtin/init-db.c:54
#, c-format
msgid "cannot stat '%s'"
@@ -9762,19 +9748,18 @@ msgstr "git merge [<Optionen>] [<Commit>...]"
msgid "git merge [<options>] <msg> HEAD <commit>"
msgstr "git merge [<Optionen>] <Beschreibung> HEAD <Commit>"
#: builtin/merge.c:48
msgid "git merge --abort"
msgstr "git merge --abort"
#: builtin/merge.c:49
-#, fuzzy
msgid "git merge --continue"
-msgstr "git merge --abort"
+msgstr "git merge --continue"
#: builtin/merge.c:104
msgid "switch `m' requires a value"
msgstr "Schalter 'm' erfordert einen Wert."
#: builtin/merge.c:141
#, c-format
msgid "Could not find merge strategy '%s'.\n"
@@ -9854,19 +9839,18 @@ msgid "merge commit message (for a non-fast-forward merge)"
msgstr ""
"Commit-Beschreibung zusammenführen (für einen Merge, der kein Vorspulen war)"
#: builtin/merge.c:227
msgid "abort the current in-progress merge"
msgstr "den sich im Gange befindlichen Merge abbrechen"
#: builtin/merge.c:229
-#, fuzzy
msgid "continue the current in-progress merge"
-msgstr "den sich im Gange befindlichen Merge abbrechen"
+msgstr "den sich im Gange befindlichen Merge fortsetzen"
#: builtin/merge.c:231 builtin/pull.c:170
msgid "allow merging unrelated histories"
msgstr "erlaube das Zusammenführen von nicht zusammenhängenden Historien"
#: builtin/merge.c:259
msgid "could not run stash."
msgstr "Konnte \"stash\" nicht ausführen."
@@ -10004,32 +9988,30 @@ msgstr "Konnte '%s' nicht schließen"
msgid "not something we can merge in %s: %s"
msgstr "nichts was wir in %s zusammenführen können: %s"
#: builtin/merge.c:1099
msgid "not something we can merge"
msgstr "nichts was wir zusammenführen können"
#: builtin/merge.c:1167
-#, fuzzy
msgid "--abort expects no arguments"
-msgstr "%%(body) akzeptiert keine Argumente"
+msgstr "--abort akzeptiert keine Argumente"
#: builtin/merge.c:1171
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "Es gibt keinen Merge zum Abbrechen (MERGE_HEAD fehlt)"
#: builtin/merge.c:1183
msgid "--continue expects no arguments"
-msgstr ""
+msgstr "--continue erwartet keine Argumente"
#: builtin/merge.c:1187
-#, fuzzy
msgid "There is no merge in progress (MERGE_HEAD missing)."
-msgstr "Es gibt keinen Merge zum Abbrechen (MERGE_HEAD fehlt)"
+msgstr "Es ist keine Merge im Gange (MERGE_HEAD fehlt)."
#: builtin/merge.c:1203
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
msgstr ""
"Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n"
"Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
@@ -11641,17 +11623,16 @@ msgstr "Anwendung des Filters für partielles Auschecken überspringen"
msgid "debug unpack-trees"
msgstr "unpack-trees protokollieren"
#: builtin/receive-pack.c:26
msgid "git receive-pack <git-dir>"
msgstr "git receive-pack <Git-Verzeichnis>"
#: builtin/receive-pack.c:793
-#, fuzzy
msgid ""
"By default, updating the current branch in a non-bare repository\n"
"is denied, because it will make the index and work tree inconsistent\n"
"with what you pushed, and will require 'git reset --hard' to match\n"
"the work tree to HEAD.\n"
"\n"
"You can set the 'receive.denyCurrentBranch' configuration variable\n"
"to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
@@ -11664,17 +11645,17 @@ msgid ""
msgstr ""
"Standardmäßig wird die Aktualisierung des aktuellen Branches in einem\n"
"nicht-Bare-Repository zurückgewiesen, da dies den Index und das Arbeits-\n"
"verzeichnis inkonsistent zu dem machen würde, was Sie gepushed haben, und\n"
"'git reset --hard' erforderlich wäre, damit das Arbeitsverzeichnis HEAD\n"
"entspricht.\n"
"\n"
"Sie könnten die Konfigurationsvariable 'receive.denyCurrentBranch' im\n"
-"Remote-Repository zu 'ignore' oder 'warn' setzen, um den Push in den\n"
+"Remote-Repository auf 'ignore' oder 'warn' setzen, um den Push in den\n"
"aktuellen Branch zu erlauben; dies wird jedoch nicht empfohlen außer\n"
"Sie stellen durch andere Wege die Aktualität des Arbeitsverzeichnisses\n"
"gegenüber dem gepushten Stand sicher.\n"
"\n"
"Um diese Meldung zu unterdrücken und das Standardverhalten zu behalten,\n"
"setzen Sie die Konfigurationsvariable 'receive.denyCurrentBranch' auf\n"
"'refuse'."
@@ -12237,16 +12218,19 @@ msgstr "Unbekannter Unterbefehl: %s"
msgid "git repack [<options>]"
msgstr "git repack [<Optionen>]"
#: builtin/repack.c:22
msgid ""
"Incremental repacks are incompatible with bitmap indexes. Use\n"
"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
msgstr ""
+"Schrittweises Neupacken ist mit Bitmap-Indexen inkompatibel. Benutzen Sie\n"
+"--no-write-bitmap-index oder deaktivieren Sie die pack.writebitmaps\n"
+"Konfiguration."
#: builtin/repack.c:166
msgid "pack everything in a single pack"
msgstr "alles in eine einzige Pack-Datei packen"
#: builtin/repack.c:168
msgid "same as -a, and turn unreachable objects loose"
msgstr "genau wie -a, unerreichbare Objekte werden aber nicht gelöscht"
@@ -12740,19 +12724,19 @@ msgid "not removing '%s' recursively without -r"
msgstr "'%s' wird nicht ohne -r rekursiv entfernt"
#: builtin/rm.c:347
#, c-format
msgid "git rm: unable to remove %s"
msgstr "git rm: konnte %s nicht löschen"
#: builtin/rm.c:370
-#, fuzzy, c-format
+#, c-format
msgid "could not remove '%s'"
-msgstr "Konnte Referenz '%s' nicht auflösen"
+msgstr "Konnte '%s' nicht löschen"
#: builtin/send-pack.c:18
msgid ""
"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> "
"[<ref>...]\n"
" --all and explicit <ref> specification are mutually exclusive."
msgstr ""
@@ -12779,17 +12763,17 @@ msgid "print status from remote helper"
msgstr "Status des Remote-Helpers ausgeben"
#: builtin/shortlog.c:13
msgid "git shortlog [<options>] [<revision-range>] [[--] [<path>...]]"
msgstr "git shortlog [<Optionen>] [<Commitbereich>] [[--] [<Pfad>...]]"
#: builtin/shortlog.c:249
msgid "Group by committer rather than author"
-msgstr ""
+msgstr "über Commit-Ersteller anstatt Autor gruppieren"
#: builtin/shortlog.c:251
msgid "sort output according to the number of commits per author"
msgstr "die Ausgabe entsprechend der Anzahl von Commits pro Autor sortieren"
#: builtin/shortlog.c:253
msgid "Suppress commit descriptions, only provides commit count"
msgstr "Commit-Beschreibungen unterdrücken, nur Anzahl der Commits liefern"
@@ -13217,33 +13201,31 @@ msgstr "Fehlerhafter Wert für --update Parameter"
msgid ""
"Submodule (%s) branch configured to inherit branch from superproject, but "
"the superproject is not on any branch"
msgstr ""
"Branch von Submodul (%s) ist konfiguriert, den Branch des Hauptprojektes\n"
"zu erben, aber das Hauptprojekt befindet sich auf keinem Branch."
#: builtin/submodule--helper.c:1106
-#, fuzzy
msgid "recurse into submodules"
-msgstr "Rekursion in Submodulen durchführen"
+msgstr "Rekursion in Submodule durchführen"
#: builtin/submodule--helper.c:1112
-#, fuzzy
msgid "git submodule--helper embed-git-dir [<path>...]"
-msgstr "git submodule--helper init [<Pfad>]"
+msgstr "git submodule--helper embed-git-dir [<Pfad>...]"
#: builtin/submodule--helper.c:1157
msgid "submodule--helper subcommand must be called with a subcommand"
msgstr "submodule--helper muss mit einem Unterbefehl aufgerufen werden"
#: builtin/submodule--helper.c:1164
-#, fuzzy, c-format
+#, c-format
msgid "%s doesn't support --super-prefix"
-msgstr "Server unterstützt kein --deepen"
+msgstr "%s unterstützt kein --super-prefix"
#: builtin/submodule--helper.c:1170
#, c-format
msgid "'%s' is not a valid submodule--helper subcommand"
msgstr "'%s' ist kein gültiger Unterbefehl von submodule--helper"
#: builtin/symbolic-ref.c:7
msgid "git symbolic-ref [<options>] <name> [<ref>]"
@@ -13290,19 +13272,18 @@ msgstr "git tag -d <Tagname>..."
msgid ""
"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>]\n"
"\t\t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]"
msgstr ""
"git tag -l [-n[<Nummer>]] [--contains <Commit>] [--points-at <Objekt>]\n"
"\t\t[--format=<Muster>] [--[no-]merged [<Commit>]] [<Muster>...]"
#: builtin/tag.c:27
-#, fuzzy
msgid "git tag -v [--format=<format>] <tagname>..."
-msgstr "git tag -v <Tagname>..."
+msgstr "git tag -v [--format=<Format>] <Tagname>..."
#: builtin/tag.c:82
#, c-format
msgid "tag name too long: %.*s..."
msgstr "Tagname zu lang: %.*s..."
#: builtin/tag.c:87
#, c-format
@@ -13762,19 +13743,18 @@ msgstr "git verify-pack [-v | --verbose] [-s | --stat-only] <Paket>..."
msgid "verbose"
msgstr "erweiterte Ausgaben"
#: builtin/verify-pack.c:66
msgid "show statistics only"
msgstr "nur Statistiken anzeigen"
#: builtin/verify-tag.c:18
-#, fuzzy
msgid "git verify-tag [-v | --verbose] [--format=<format>] <tag>..."
-msgstr "git verify-tag [-v | --verbose] <Tag>..."
+msgstr "git verify-tag [-v | --verbose] [--format=<Format>] <Tag>..."
#: builtin/verify-tag.c:36
msgid "print tag contents"
msgstr "Tag-Inhalte ausgeben"
#: builtin/worktree.c:15
msgid "git worktree add [<options>] <path> [<branch>]"
msgstr "git worktree add [<Optionen>] <Pfad> [<Branch>]"
@@ -13816,24 +13796,22 @@ msgid "Removing worktrees/%s: invalid gitdir file"
msgstr "Lösche worktrees/%s: ungültige gitdir-Datei"
#: builtin/worktree.c:80
#, c-format
msgid "Removing worktrees/%s: gitdir file points to non-existent location"
msgstr "Lösche worktrees/%s: gitdir-Datei verweist auf nicht existierenden Ort"
#: builtin/worktree.c:128
-#, fuzzy
msgid "report pruned working trees"
-msgstr "gelöschte Notizen melden"
+msgstr "entfernte Arbeitsverzeichnisse ausgeben"
#: builtin/worktree.c:130
-#, fuzzy
msgid "expire working trees older than <time>"
-msgstr "Objekte älter als <Zeit> verfallen lassen"
+msgstr "Arbeitsverzeichnisse älter als <Zeit> verfallen lassen"
#: builtin/worktree.c:204
#, c-format
msgid "'%s' already exists"
msgstr "'%s' existiert bereits"
#: builtin/worktree.c:236
#, c-format
@@ -13976,21 +13954,24 @@ msgstr ""
#: http.c:1713
#, c-format
msgid ""
"unable to update url base from redirection:\n"
" asked for: %s\n"
" redirect: %s"
msgstr ""
+"Konnte Basis-URL nicht durch Umleitung aktualisieren:\n"
+" gefragt nach: %s\n"
+" umgeleitet: %s"
#: remote-curl.c:319
#, c-format
msgid "redirecting to %s"
-msgstr ""
+msgstr "Leite nach %s um"
#: common-cmds.h:9
msgid "start a working area (see also: git help tutorial)"
msgstr "Arbeitsverzeichnis anlegen (siehe auch: git help tutorial)"
#: common-cmds.h:10
msgid "work on the current change (see also: git help everyday)"
msgstr "an aktuellen Änderungen arbeiten (siehe auch: git help everyday)"
@@ -14685,19 +14666,19 @@ msgid "repo URL: '$repo' must be absolute or begin with ./|../"
msgstr "repo URL: '$repo' muss absolut sein oder mit ./|../ beginnen"
#: git-submodule.sh:210
#, sh-format
msgid "'$sm_path' already exists in the index"
msgstr "'$sm_path' ist bereits zum Commit vorgemerkt"
#: git-submodule.sh:213
-#, fuzzy, sh-format
+#, sh-format
msgid "'$sm_path' already exists in the index and is not a submodule"
-msgstr "'$sm_path' ist bereits zum Commit vorgemerkt"
+msgstr "'$sm_path' ist bereits zum Commit vorgemerkt und ist kein Submodul"
#: git-submodule.sh:218
#, 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 ""
@@ -15441,791 +15422,878 @@ msgstr ""
#: git-sh-setup.sh:377
msgid "Unable to determine absolute path of git directory"
msgstr "Konnte absoluten Pfad des Git-Verzeichnisses nicht bestimmen."
#. TRANSLATORS: you can adjust this to align "git add -i" status menu
#: git-add--interactive.perl:238
#, perl-format
msgid "%12s %12s %s"
-msgstr ""
+msgstr "%28s %25s %s"
#: git-add--interactive.perl:239
msgid "staged"
-msgstr ""
+msgstr "zur Staging-Area hinzugefügt"
#: git-add--interactive.perl:239
msgid "unstaged"
-msgstr ""
+msgstr "aus Staging-Area entfernt"
#: git-add--interactive.perl:297 git-add--interactive.perl:322
msgid "binary"
-msgstr ""
+msgstr "Binär"
#: git-add--interactive.perl:306 git-add--interactive.perl:360
msgid "nothing"
-msgstr ""
+msgstr "Nichts"
#: git-add--interactive.perl:342 git-add--interactive.perl:357
-#, fuzzy
msgid "unchanged"
-msgstr "Keine Änderungen"
+msgstr "unverändert"
#: git-add--interactive.perl:653
-#, fuzzy, perl-format
+#, perl-format
msgid "added %d path\n"
msgid_plural "added %d paths\n"
-msgstr[0] "von denen hinzugefügt:"
-msgstr[1] "von denen hinzugefügt:"
+msgstr[0] "%d Pfad hinzugefügt\n"
+msgstr[1] "%d Pfade hinzugefügt\n"
#: git-add--interactive.perl:656
#, perl-format
msgid "updated %d path\n"
msgid_plural "updated %d paths\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d Pfad aktualisiert\n"
+msgstr[1] "%d Pfade aktualisiert\n"
#: git-add--interactive.perl:659
#, perl-format
msgid "reverted %d path\n"
msgid_plural "reverted %d paths\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d Pfad wiederhergestellt\n"
+msgstr[1] "%d Pfade wiederhergestellt\n"
#: git-add--interactive.perl:662
#, perl-format
msgid "touched %d path\n"
msgid_plural "touched %d paths\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d Pfad angefasst\n"
+msgstr[1] "%d Pfade angefasst\n"
#: git-add--interactive.perl:671
-#, fuzzy
msgid "Update"
-msgstr "Datum"
+msgstr "Aktualisieren"
#: git-add--interactive.perl:683
-#, fuzzy
msgid "Revert"
msgstr "Revert"
#: git-add--interactive.perl:706
#, perl-format
msgid "note: %s is untracked now.\n"
-msgstr ""
+msgstr "Hinweis: %s ist nun unversioniert.\n"
#: git-add--interactive.perl:717
-#, fuzzy
msgid "Add untracked"
-msgstr " gefolgt"
+msgstr "unversionierte Dateien hinzufügen"
#: git-add--interactive.perl:723
-#, fuzzy
msgid "No untracked files.\n"
-msgstr "Unversionierte Dateien"
+msgstr "Keine unversionierten Dateien.\n"
#: git-add--interactive.perl:1039
msgid ""
"If the patch applies cleanly, the edited hunk will immediately be\n"
"marked for staging."
msgstr ""
+"Wenn der Patch sauber angewendet werden kann, wird der bearbeitete Patch-Block\n"
+"direkt als zum Hinzufügen zur Staging-Area markiert."
#: git-add--interactive.perl:1042
msgid ""
"If the patch applies cleanly, the edited hunk will immediately be\n"
"marked for stashing."
msgstr ""
+"Wenn der Patch sauber angewendet werden kann, wird der bearbeitete Patch-Block\n"
+"direkt als zum Hinzufügen zum Stash markiert."
#: git-add--interactive.perl:1045
msgid ""
"If the patch applies cleanly, the edited hunk will immediately be\n"
"marked for unstaging."
msgstr ""
+"Wenn der Patch sauber angewendet werden kann, wird der bearbeitete Patch-Block\n"
+"direkt als zum Entfernen aus der Staging-Area markiert."
#: git-add--interactive.perl:1048 git-add--interactive.perl:1057
msgid ""
"If the patch applies cleanly, the edited hunk will immediately be\n"
"marked for applying."
msgstr ""
+"Wenn der Patch sauber angewendet werden kann, wird der bearbeitete Patch-Block\n"
+"direkt als zum Anwenden markiert."
#: git-add--interactive.perl:1051
msgid ""
"If the patch applies cleanly, the edited hunk will immediately be\n"
"marked for discarding"
msgstr ""
+"Wenn der Patch sauber angewendet werden kann, wird der bearbeitete Patch-Block\n"
+"direkt als zum Verwerfen markiert."
#: git-add--interactive.perl:1054
msgid ""
"If the patch applies cleanly, the edited hunk will immediately be\n"
"marked for discarding."
msgstr ""
+"Wenn der Patch sauber angewendet werden kann, wird der bearbeitete Patch-Block\n"
+"direkt als zum Verwerfen markiert."
#: git-add--interactive.perl:1067
-#, fuzzy, perl-format
+#, perl-format
msgid "failed to open hunk edit file for writing: %s"
-msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
+msgstr "Fehler beim Öffnen von Editier-Datei eines Patch-Blocks zum Schreiben: %s"
#: git-add--interactive.perl:1068
msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
msgstr ""
+"Manueller Editiermodus für Patch-Blöcke -- siehe nach unten für eine\n"
+"Kurzanleitung.\n"
#: git-add--interactive.perl:1074
#, perl-format
msgid ""
"---\n"
"To remove '%s' lines, make them ' ' lines (context).\n"
"To remove '%s' lines, delete them.\n"
"Lines starting with %s will be removed.\n"
msgstr ""
+"---\n"
+"Um '%s' Zeilen zu entfernen, machen Sie aus diesen ' ' Zeilen (Kontext).\n"
+"Um '%s' Zeilen zu entferenen, löschen Sie diese.\n"
+"Zeilen, die mit %s beginnen, werden entfernt.\n"
#. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
#: git-add--interactive.perl:1082
msgid ""
"If it does not apply cleanly, you will be given an opportunity to\n"
"edit again. If all lines of the hunk are removed, then the edit is\n"
"aborted and the hunk is left unchanged.\n"
msgstr ""
+"Wenn das nicht sauber angewendet werden kann, haben Sie die Möglichkeit\n"
+"einer erneuten Bearbeitung. Wenn alle Zeilen des Patch-Blocks entfernt werden,\n"
+"wird die Bearbeitung abgebrochen und der Patch-Block bleibt unverändert.\n"
#: git-add--interactive.perl:1096
-#, fuzzy, perl-format
+#, perl-format
msgid "failed to open hunk edit file for reading: %s"
-msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
+msgstr "Fehler beim Öffnen von Editier-Datei eines Patch-Blocks zum Lesen: %s"
#. TRANSLATORS: do not translate [y/n]
#. The program will only accept that input
#. at this point.
#. Consider translating (saying "no" discards!) as
#. (saying "n" for "no" discards!) if the translation
#. of the word "no" does not start with n.
#: git-add--interactive.perl:1187
msgid ""
"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
msgstr ""
+"Ihr bearbeiteter Patch-Block kann nicht angewendet werden.\n"
+"Erneut bearbeiten? (\"n\" verwirft Bearbeitung!) [y/n]?"
#: git-add--interactive.perl:1196
msgid ""
"y - stage this hunk\n"
"n - do not stage this hunk\n"
"q - quit; do not stage this hunk or any of the remaining ones\n"
"a - stage this hunk and all later hunks in the file\n"
"d - do not stage this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block zum Commit vormerken\n"
+"n - diesen Patch-Block nicht zum Commit vormerken\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht zum Commit vormerken\n"
+"a - diesen und alle weiteren Patch-Blöcke dieser Datei zum Commit vormerken\n"
+"d - diesen oder alle weiteren Patch-Blöcke in dieser Datei nicht zum Commit vormerken"
#: git-add--interactive.perl:1202
msgid ""
"y - stash this hunk\n"
"n - do not stash this hunk\n"
"q - quit; do not stash this hunk or any of the remaining ones\n"
"a - stash this hunk and all later hunks in the file\n"
"d - do not stash this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block stashen\n"
+"n - diesen Patch-Block nicht stashen\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht stashen\n"
+"a - diesen und alle weiteren Patch-Blöcke dieser Datei stashen\n"
+"d - diesen oder alle weiteren Patch-Blöcke dieser Datei nicht stashen"
#: git-add--interactive.perl:1208
msgid ""
"y - unstage this hunk\n"
"n - do not unstage this hunk\n"
"q - quit; do not unstage this hunk or any of the remaining ones\n"
"a - unstage this hunk and all later hunks in the file\n"
"d - do not unstage this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block unstashen\n"
+"n - diesen Patch-Block nicht unstashen\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht unstashen\n"
+"a - diesen und alle weiteren Patch-Blöcke dieser Datei unstashen\n"
+"d - diesen oder alle weiteren Patch-Blöcke dieser Datei nicht unstashen"
#: git-add--interactive.perl:1214
msgid ""
"y - apply this hunk to index\n"
"n - do not apply this hunk to index\n"
"q - quit; do not apply this hunk or any of the remaining ones\n"
"a - apply this hunk and all later hunks in the file\n"
"d - do not apply this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block auf den Index anwenden\n"
+"n - diesen Patch-Block nicht auf den Index anwenden\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht auf den Index anwenden\n"
+"a - diesen und alle weiteren Patch-Blöcke dieser Datei auf den Index anwenden\n"
+"d - diesen oder alle weiteren Patch-Blöcke dieser Datei nicht auf den Index anwenden"
#: git-add--interactive.perl:1220
msgid ""
"y - discard this hunk from worktree\n"
"n - do not discard this hunk from worktree\n"
"q - quit; do not discard this hunk or any of the remaining ones\n"
"a - discard this hunk and all later hunks in the file\n"
"d - do not discard this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block im Arbeitsverzeichnis verwerfen\n"
+"n - diesen Patch-Block im Arbeitsverzeichnis nicht verwerfen\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht im Arbeitsverzeichnis verwerfen\n"
+"a - diesen und alle weiteren Patch-Blöcke dieser Datei im Arbeitsverzeichnis verwerfen\n"
+"d - diesen oder alle weiteren Patch-Blöcke dieser Datei nicht im Arbeitsverzeichnis verwerfen"
#: git-add--interactive.perl:1226
msgid ""
"y - discard this hunk from index and worktree\n"
"n - do not discard this hunk from index and worktree\n"
"q - quit; do not discard this hunk or any of the remaining ones\n"
"a - discard this hunk and all later hunks in the file\n"
"d - do not discard this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block im Index und Arbeitsverzeichnis verwerfen\n"
+"n - diesen Patch-Block nicht im Index und Arbeitsverzeichnis verwerfen\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht im Index und Arbeitsverzeichnis verwerfen\n"
+"a - diesen und alle weiteren Patch-Blöcke in der Datei verwerfen\n"
+"d - diesen oder alle weiteren Patch-Blöcke in der Datei nicht verwerfen"
#: git-add--interactive.perl:1232
msgid ""
"y - apply this hunk to index and worktree\n"
"n - do not apply this hunk to index and worktree\n"
"q - quit; do not apply this hunk or any of the remaining ones\n"
"a - apply this hunk and all later hunks in the file\n"
"d - do not apply this hunk or any of the later hunks in the file"
msgstr ""
+"y - diesen Patch-Block im Index und auf Arbeitsverzeichnis anwenden\n"
+"n - diesen Patch-Block nicht im Index und auf Arbeitsverzeichnis anwenden\n"
+"q - Beenden; diesen oder alle verbleibenden Patch-Blöcke nicht anwenden\n"
+"a - diesen und alle weiteren Patch-Blöcke in der Datei anwenden\n"
+"d - diesen oder alle weiteren Patch-Blöcke in der Datei nicht anwenden"
#: git-add--interactive.perl:1241
msgid ""
"g - select a hunk to go to\n"
"/ - search for a hunk matching the given regex\n"
"j - leave this hunk undecided, see next undecided hunk\n"
"J - leave this hunk undecided, see next hunk\n"
"k - leave this hunk undecided, see previous undecided hunk\n"
"K - leave this hunk undecided, see previous hunk\n"
"s - split the current hunk into smaller hunks\n"
"e - manually edit the current hunk\n"
"? - print help\n"
msgstr ""
+"g - Patch-Block zum Hinspringen auswählen\n"
+"/ - nach Patch-Block suchen der gegebenem regulärem Ausdruck entspricht\n"
+"j - diesen Patch-Block unbestimmt lassen, nächsten unbestimmten Patch-Block anzeigen\n"
+"J - diesen Patch-Block unbestimmt lassen, nächsten Patch-Block anzeigen\n"
+"k - diesen Patch-Block unbestimmt lassen, vorherigen unbestimmten Patch-Block anzeigen\n"
+"K - diesen Patch-Block unbestimmt lassen, vorherigen Patch-Block anzeigen\n"
+"s - aktuellen Patch-Block in kleinere Patch-Blöcke aufteilen\n"
+"e - aktuellen Patch-Block manuell editieren\n"
+"? - Hilfe anzeigen\n"
#: git-add--interactive.perl:1272
-#, fuzzy
msgid "The selected hunks do not apply to the index!\n"
-msgstr "den angegebenen Eintrag zum Commit vormerken"
+msgstr "Die ausgewählten Patch-Blöcke können nicht auf den Index angewendet werden!\n"
#: git-add--interactive.perl:1273
-#, fuzzy
msgid "Apply them to the worktree anyway? "
-msgstr "Pfad zum Arbeitsverzeichnis"
+msgstr "Trotzdem auf Arbeitsverzeichnis anwenden? "
#: git-add--interactive.perl:1276
msgid "Nothing was applied.\n"
-msgstr ""
+msgstr "Nichts angewendet.\n"
#: git-add--interactive.perl:1287
-#, fuzzy, perl-format
+#, perl-format
msgid "ignoring unmerged: %s\n"
-msgstr "Füge zusammengeführte Datei %s hinzu"
+msgstr "ignoriere nicht zusammengeführte Datei: %s\n"
#: git-add--interactive.perl:1296
msgid "Only binary files changed.\n"
-msgstr ""
+msgstr "Nur Binärdateien geändert.\n"
#: git-add--interactive.perl:1298
-#, fuzzy
msgid "No changes.\n"
-msgstr "Keine Änderungen"
+msgstr "Keine Änderungen.\n"
#: git-add--interactive.perl:1306
-#, fuzzy
msgid "Patch update"
-msgstr "[Tag Aktualisierung]"
+msgstr "Patch Aktualisierung"
#: git-add--interactive.perl:1358
#, perl-format
msgid "Stage mode change [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung der Staging-Area hinzufügen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1359
#, perl-format
msgid "Stage deletion [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung der Staging-Area hinzufügen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1360
#, perl-format
msgid "Stage this hunk [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Diesen Patch-Block der Staging-Area hinzufügen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1363
#, perl-format
msgid "Stash mode change [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung stashen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1364
#, perl-format
msgid "Stash deletion [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung stashen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1365
#, perl-format
msgid "Stash this hunk [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Diesen Patch-Block stashen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1368
#, perl-format
msgid "Unstage mode change [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung aus der Staging-Area entfernen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1369
#, perl-format
msgid "Unstage deletion [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung aus der Staging-Area entfernen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1370
#, perl-format
msgid "Unstage this hunk [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Diesen Patch-Block aus der Staging-Area entfernen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1373
#, perl-format
msgid "Apply mode change to index [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung auf Index anwenden [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1374
#, perl-format
msgid "Apply deletion to index [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung auf Index anwenden [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1375
#, perl-format
msgid "Apply this hunk to index [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Diesen Patch-Block auf Index anwenden [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1378
#, perl-format
msgid "Discard mode change from worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung im Arbeitsverzeichnis verwerfen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1379
#, perl-format
msgid "Discard deletion from worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung im Arbeitsverzeichnis verwerfen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1380
#, perl-format
msgid "Discard this hunk from worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "diesen Patch-Block im Arbeitsverzeichnis verwerfen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1383
#, perl-format
msgid "Discard mode change from index and worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung vom Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1384
#, perl-format
msgid "Discard deletion from index and worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung vom Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1385
#, perl-format
msgid "Discard this hunk from index and worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Diesen Patch-Block vom Index und Arbeitsverzeichnis verwerfen [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1388
#, perl-format
msgid "Apply mode change to index and worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Modusänderung auf Index und Arbeitsverzeichnis anwenden [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1389
#, perl-format
msgid "Apply deletion to index and worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Löschung auf Index und Arbeitsverzeichnis anwenden [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1390
#, perl-format
msgid "Apply this hunk to index and worktree [y,n,q,a,d,/%s,?]? "
-msgstr ""
+msgstr "Diesen Patch-Block auf Index und Arbeitsverzeichnis anwenden [y,n,q,a,d,/%s,?]? "
#: git-add--interactive.perl:1493
msgid "go to which hunk (<ret> to see more)? "
-msgstr ""
+msgstr "zu welchem Patch-Block springen (<Enter> für mehr Informationen)? "
#: git-add--interactive.perl:1495
msgid "go to which hunk? "
-msgstr ""
+msgstr "zu welchem Patch-Block springen? "
#: git-add--interactive.perl:1504
-#, fuzzy, perl-format
+#, perl-format
msgid "Invalid number: '%s'\n"
-msgstr "Ungültiger %s: '%s'"
+msgstr "Ungültige Nummer: '%s'\n"
#: git-add--interactive.perl:1509
#, perl-format
msgid "Sorry, only %d hunk available.\n"
msgid_plural "Sorry, only %d hunks available.\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Entschuldigung, nur %d Patch-Block verfügbar.\n"
+msgstr[1] "Entschuldigung, nur %d Patch-Blöcke verfügbar.\n"
#: git-add--interactive.perl:1535
msgid "search for regex? "
-msgstr ""
+msgstr "Suche nach regulärem Ausdruck? "
#: git-add--interactive.perl:1548
#, perl-format
msgid "Malformed search regexp %s: %s\n"
-msgstr ""
+msgstr "Fehlerhafter regulärer Ausdruck für Suche %s: %s\n"
#: git-add--interactive.perl:1558
-#, fuzzy
msgid "No hunk matches the given pattern\n"
-msgstr "Änderungen nur im angegebenen Pfad anwenden"
+msgstr "Kein Patch-Block entspricht dem angegebenen Pattern\n"
#: git-add--interactive.perl:1570 git-add--interactive.perl:1592
msgid "No previous hunk\n"
-msgstr ""
+msgstr "Kein vorheriger Patch-Block\n"
#: git-add--interactive.perl:1579 git-add--interactive.perl:1598
msgid "No next hunk\n"
-msgstr ""
+msgstr "Kein folgender Patch-Block\n"
#: git-add--interactive.perl:1606
#, perl-format
msgid "Split into %d hunk.\n"
msgid_plural "Split into %d hunks.\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "In %d Patch-Block aufgeteilt.\n"
+msgstr[1] "In %d Patch-Blöcke aufgeteilt.\n"
#: git-add--interactive.perl:1658
msgid "Review diff"
-msgstr ""
+msgstr "Diff überprüfen"
#. TRANSLATORS: please do not translate the command names
#. 'status', 'update', 'revert', etc.
#: git-add--interactive.perl:1677
msgid ""
"status - show paths with changes\n"
"update - add working tree state to the staged set of changes\n"
"revert - revert staged set of changes back to the HEAD version\n"
"patch - pick hunks and update selectively\n"
"diff\t - view diff between HEAD and index\n"
"add untracked - add contents of untracked files to the staged set of "
"changes\n"
msgstr ""
+"status - Pfade mit Änderungen anzeigen\n"
+"update - Zustand des Arbeitsverzeichnisses den zum Commit vorgemerkten Änderungen hinzufügen\n"
+"revert - zum Commit vorgemerkten Änderungen auf HEAD Version zurücksetzen\n"
+"patch - Patch-Blöcke auswählen und selektiv aktualisieren\n"
+"diff\t - Unterschiede zwischen HEAD und Index anzeigen\n"
+"add untracked - Inhalte von unversionierten Dateien zum Commit vormerken\n"
#: git-add--interactive.perl:1694 git-add--interactive.perl:1699
#: git-add--interactive.perl:1702 git-add--interactive.perl:1709
#: git-add--interactive.perl:1713 git-add--interactive.perl:1719
msgid "missing --"
-msgstr ""
+msgstr "-- fehlt"
#: git-add--interactive.perl:1715
-#, fuzzy, perl-format
+#, perl-format
msgid "unknown --patch mode: %s"
-msgstr "Unbekannter Wert für -s/--strategy: %s"
+msgstr "Unbekannter --patch Modus: %s"
#: git-add--interactive.perl:1721 git-add--interactive.perl:1727
-#, fuzzy, perl-format
+#, perl-format
msgid "invalid argument %s, expecting --"
-msgstr "ungültige Pfadspezifikation"
+msgstr "ungültiges Argument %s, erwarte --"
#: git-send-email.perl:121
msgid "local zone differs from GMT by a non-minute interval\n"
-msgstr ""
+msgstr "lokale Zeitzone unterscheidet sich von GMT nicht um einen Minutenintervall\n"
#: git-send-email.perl:128 git-send-email.perl:134
msgid "local time offset greater than or equal to 24 hours\n"
-msgstr ""
+msgstr "lokaler Zeit-Offset größer oder gleich 24 Stunden\n"
#: git-send-email.perl:202 git-send-email.perl:208
msgid "the editor exited uncleanly, aborting everything"
-msgstr ""
+msgstr "Der Editor wurde unsauber beendet, breche alles ab."
#: git-send-email.perl:282
#, perl-format
msgid ""
"'%s' contains an intermediate version of the email you were composing.\n"
-msgstr ""
+msgstr "'%s' enthält eine Zwischenversion der E-Mail, die Sie gerade verfassen.\n"
#: git-send-email.perl:287
#, perl-format
msgid "'%s.final' contains the composed email.\n"
-msgstr ""
+msgstr "'%s.final' enthält die verfasste E-Mail.\n"
#: git-send-email.perl:305
-#, fuzzy
msgid "--dump-aliases incompatible with other options\n"
-msgstr "Die Option --dirty kann nicht mit Commits verwendet werden."
+msgstr "--dump-aliases ist mit anderen Optionen inkompatibel\n"
#: git-send-email.perl:368 git-send-email.perl:623
-#, fuzzy
msgid "Cannot run git format-patch from outside a repository\n"
-msgstr ""
-"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "Kann 'git format-patch' nicht außerhalb eines Repositories ausführen.\n"
#: git-send-email.perl:437
#, perl-format
msgid "Unknown --suppress-cc field: '%s'\n"
-msgstr ""
+msgstr "Unbekanntes --suppress-cc Feld: '%s'\n"
#: git-send-email.perl:466
-#, fuzzy, perl-format
+#, perl-format
msgid "Unknown --confirm setting: '%s'\n"
-msgstr "Unbekannter Commit %s"
+msgstr "Unbekannte --confirm Einstellung: '%s'\n"
#: git-send-email.perl:498
#, perl-format
msgid "warning: sendmail alias with quotes is not supported: %s\n"
-msgstr ""
+msgstr "Warnung: sendemail Alias mit Anführungsstrichen wird nicht unterstützt: %s\n"
#: git-send-email.perl:500
#, perl-format
msgid "warning: `:include:` not supported: %s\n"
-msgstr ""
+msgstr "Warnung: `:include:` wird nicht unterstützt: %s\n"
#: git-send-email.perl:502
#, perl-format
msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
-msgstr ""
+msgstr "Warnung: `/file` oder `|pipe` Umleitung wird nicht unterstützt: %s\n"
#: git-send-email.perl:507
#, perl-format
msgid "warning: sendmail line is not recognized: %s\n"
-msgstr ""
+msgstr "Warnung: sendmail Zeile wird nicht erkannt: %s\n"
#: git-send-email.perl:589
#, perl-format
msgid ""
"File '%s' exists but it could also be the range of commits\n"
"to produce patches for. Please disambiguate by...\n"
"\n"
" * Saying \"./%s\" if you mean a file; or\n"
" * Giving --format-patch option if you mean a range.\n"
msgstr ""
+"Datei '%s' existiert, aber es könnte auch der Bereich von Commits sein,\n"
+"für den Patches erzeugt werden sollen. Bitte machen Sie dies eindeutig\n"
+"indem Sie ...\n"
+"\n"
+" * \"./%s\" angeben, wenn Sie eine Datei meinen, oder\n"
+" * die Option --format-patch angeben, wenn Sie einen Commit-Bereich meinen\n"
#: git-send-email.perl:610
-#, fuzzy, perl-format
+#, perl-format
msgid "Failed to opendir %s: %s"
-msgstr "Fehler beim Öffnen von '%s': %s"
+msgstr "Fehler beim Öffnen von %s: %s"
#: git-send-email.perl:634
#, perl-format
msgid ""
"fatal: %s: %s\n"
"warning: no patches were sent\n"
msgstr ""
+"fatal: %s: %s\n"
+"Warnung: Es wurden keine Patches versendet.\n"
#: git-send-email.perl:645
-#, fuzzy
msgid ""
"\n"
"No patch files specified!\n"
"\n"
-msgstr "kein Pfad angegeben"
+msgstr "\nkeine Patch-Dateien angegeben!\n\n"
#: git-send-email.perl:658
-#, fuzzy, perl-format
+#, perl-format
msgid "No subject line in %s?"
-msgstr "Objekt nicht gefunden: %s"
+msgstr "Keine Betreffzeile in %s?"
#: git-send-email.perl:668
-#, fuzzy, perl-format
+#, perl-format
msgid "Failed to open for writing %s: %s"
-msgstr "Fehler beim Öffnen von '%s': %s"
+msgstr "Fehler beim Öffnen von '%s' zum Schreiben: %s"
#: git-send-email.perl:678
msgid ""
"Lines beginning in \"GIT:\" will be removed.\n"
"Consider including an overall diffstat or table of contents\n"
"for the patch you are writing.\n"
"\n"
"Clear the body content if you don't wish to send a summary.\n"
msgstr ""
+"Zeilen, die mit \"GIT:\" beginnen, werden entfernt.\n"
+"Ziehen Sie in Betracht, einen allgemeinen \"diffstat\" oder ein\n"
+"Inhaltsverzeichnis, für den Patch den Sie schreiben, hinzuzufügen.\n"
+"\n"
+"Leeren Sie den Inhalt des Bodys, wenn Sie keine Zusammenfassung senden möchten.\n"
#: git-send-email.perl:701
-#, fuzzy, perl-format
+#, perl-format
msgid "Failed to open %s.final: %s"
-msgstr "Fehler beim Öffnen von '%s': %s"
+msgstr "Fehler beim Öffnen von %s.final: %s"
#: git-send-email.perl:704
-#, fuzzy, perl-format
+#, perl-format
msgid "Failed to open %s: %s"
-msgstr "Fehler beim Öffnen von '%s': %s"
+msgstr "Fehler beim Öffnen von %s: %s"
#: git-send-email.perl:739
msgid "To/Cc/Bcc fields are not interpreted yet, they have been ignored\n"
-msgstr ""
+msgstr "To/Cc/Bcc Felder wurden noch nicht interpretiert, sie wurden ignoriert\n"
#: git-send-email.perl:748
msgid "Summary email is empty, skipping it\n"
-msgstr ""
+msgstr "E-Mail mit Zusammenfassung ist leer, wird ausgelassen\n"
#. TRANSLATORS: please keep [y/N] as is.
#: git-send-email.perl:780
#, perl-format
msgid "Are you sure you want to use <%s> [y/N]? "
-msgstr ""
+msgstr "Sind Sie sich sicher, <%s> zu benutzen [y/N]? "
#: git-send-email.perl:809
msgid ""
"The following files are 8bit, but do not declare a Content-Transfer-"
"Encoding.\n"
msgstr ""
+"Die folgenden Dateien sind 8-Bit, aber deklarieren kein\n"
+"Content-Transfer-Encoding.\n"
#: git-send-email.perl:814
msgid "Which 8bit encoding should I declare [UTF-8]? "
-msgstr ""
+msgstr "Welches 8-Bit-Encoding soll deklariert werden [UTF-8]? "
#: git-send-email.perl:822
#, perl-format
msgid ""
"Refusing to send because the patch\n"
"\t%s\n"
"has the template subject '*** SUBJECT HERE ***'. Pass --force if you really "
"want to send.\n"
msgstr ""
+"Versand zurückgewiesen, weil der Patch\n"
+"\t%s\n"
+"die Betreffzeilenvorlage '*** SUBJECT HERE ***' enthält. Geben Sie --force an,\n"
+"wenn Sie den Patch wirklich versenden wollen.\n"
#: git-send-email.perl:841
msgid "To whom should the emails be sent (if anyone)?"
-msgstr ""
+msgstr "An wen sollen die E-Mails versendet werden (wenn überhaupt jemand)?"
#: git-send-email.perl:859
#, perl-format
msgid "fatal: alias '%s' expands to itself\n"
-msgstr ""
+msgstr "fatal: Alias '%s' erweitert sich zu sich selbst\n"
#: git-send-email.perl:871
msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
-msgstr ""
+msgstr "Message-ID zur Verwendung als In-Reply-To für die erste E-Mail (wenn eine existiert)? "
#: git-send-email.perl:921 git-send-email.perl:929
#, perl-format
msgid "error: unable to extract a valid address from: %s\n"
-msgstr ""
+msgstr "Fehler: konnte keine gültige Adresse aus %s extrahieren\n"
#. TRANSLATORS: Make sure to include [q] [d] [e] in your
#. translation. The program will only accept English input
#. at this point.
#: git-send-email.perl:933
msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
-msgstr ""
+msgstr "Was soll mit dieser Adresse geschehen? (Beenden [q]|Löschen [d]|Bearbeiten [e]): "
#: git-send-email.perl:1234
-#, fuzzy, perl-format
+#, perl-format
msgid "CA path \"%s\" does not exist"
-msgstr "Pfad '%s' existiert nicht"
+msgstr "CA Pfad \"%s\" existiert nicht"
#: git-send-email.perl:1309
msgid ""
" The Cc list above has been expanded by additional\n"
" addresses found in the patch commit message. By default\n"
" send-email prompts before sending whenever this occurs.\n"
" This behavior is controlled by the sendemail.confirm\n"
" configuration setting.\n"
"\n"
" For additional information, run 'git send-email --help'.\n"
" To retain the current behavior, but squelch this message,\n"
" run 'git config --global sendemail.confirm auto'.\n"
"\n"
msgstr ""
+" Die Cc-Liste oberhalb wurde um zusätzliche Adressen erweitert, die in der\n"
+" Commit-Beschreibung des Patches gefunden wurden. Wenn dies passiert, werden\n"
+" Sie von send-email zu einer Eingabe aufgefordert. Dieses Verhalten wird\n"
+" durch die Konfigurationseinstellung sendemail.confirm gesteuert.\n"
+"\n"
+" Für weitere Informationen, führen Sie 'git send-email --help' aus.\n"
+" Um das aktuelle Verhalten beizubehalten, aber diese Meldung zu unterdrücken,\n"
+" führen Sie 'git config --global sendemail.confirm auto' aus.\n"
+"\n"
#. TRANSLATORS: Make sure to include [y] [n] [q] [a] in your
#. translation. The program will only accept English input
#. at this point.
#: git-send-email.perl:1324
msgid "Send this email? ([y]es|[n]o|[q]uit|[a]ll): "
-msgstr ""
+msgstr "Diese E-Mail versenden? (Ja [y]|Nein [n]|Beenden [q]|Alle [a]): "
#: git-send-email.perl:1327
msgid "Send this email reply required"
-msgstr ""
+msgstr "Zum Versenden dieser E-Mail ist eine Antwort erforderlich."
#: git-send-email.perl:1353
msgid "The required SMTP server is not properly defined."
-msgstr ""
+msgstr "Der erforderliche SMTP-Server ist nicht korrekt definiert."
#: git-send-email.perl:1397
-#, fuzzy, perl-format
+#, perl-format
msgid "Server does not support STARTTLS! %s"
-msgstr "Server unterstützt kein --deepen"
+msgstr "Server unterstützt kein STARTTLS! %s"
#: git-send-email.perl:1403
msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
msgstr ""
+"Konnte SMTP nicht korrekt initialisieren. Bitte prüfen Sie Ihre Konfiguration\n"
+"und benutzen Sie --smtp-debug."
#: git-send-email.perl:1421
-#, fuzzy, perl-format
+#, perl-format
msgid "Failed to send %s\n"
-msgstr "Fehler beim Lesen von %s"
+msgstr "Fehler beim Senden %s\n"
#: git-send-email.perl:1424
#, perl-format
msgid "Dry-Sent %s\n"
-msgstr ""
+msgstr "Probeversand %s\n"
#: git-send-email.perl:1424
-#, fuzzy, perl-format
+#, perl-format
msgid "Sent %s\n"
-msgstr "Lösche %s\n"
+msgstr "%s gesendet\n"
#: git-send-email.perl:1426
msgid "Dry-OK. Log says:\n"
-msgstr ""
+msgstr "Probeversand OK. Log enthält:\n"
#: git-send-email.perl:1426
msgid "OK. Log says:\n"
-msgstr ""
+msgstr "OK. Log enthält:\n"
#: git-send-email.perl:1438
msgid "Result: "
-msgstr ""
+msgstr "Ergebnis: "
#: git-send-email.perl:1441
msgid "Result: OK\n"
-msgstr ""
+msgstr "Ergebnis: OK\n"
#: git-send-email.perl:1454
-#, fuzzy, perl-format
+#, perl-format
msgid "can't open file %s"
-msgstr "Kann Datei '%s' nicht öffnen"
+msgstr "Kann Datei %s nicht öffnen"
#: git-send-email.perl:1501 git-send-email.perl:1521
#, perl-format
msgid "(mbox) Adding cc: %s from line '%s'\n"
-msgstr ""
+msgstr "(mbox) Füge cc: hinzu: %s von Zeile '%s'\n"
#: git-send-email.perl:1507
#, perl-format
msgid "(mbox) Adding to: %s from line '%s'\n"
-msgstr ""
+msgstr "(mbox) Füge to: hinzu: %s von Zeile '%s'\n"
#: git-send-email.perl:1555
#, perl-format
msgid "(non-mbox) Adding cc: %s from line '%s'\n"
-msgstr ""
+msgstr "(non-mbox) Füge cc: hinzu: %s von Zeile '%s'\n"
#: git-send-email.perl:1578
#, perl-format
msgid "(body) Adding cc: %s from line '%s'\n"
-msgstr ""
+msgstr "(body) Füge cc: hinzu: %s von Zeile '%s'\n"
#: git-send-email.perl:1676
-#, fuzzy, perl-format
+#, perl-format
msgid "(%s) Could not execute '%s'"
-msgstr "Konnte %s nicht entfernen"
+msgstr "(%s) Konnte '%s' nicht ausführen"
#: git-send-email.perl:1683
#, perl-format
msgid "(%s) Adding %s: %s from: '%s'\n"
-msgstr ""
+msgstr "(%s) Füge %s: %s hinzu von: '%s'\n"
#: git-send-email.perl:1687
-#, fuzzy, perl-format
+#, perl-format
msgid "(%s) failed to close pipe to '%s'"
-msgstr "Konnte Datei nicht nach '%s' kopieren"
+msgstr "(%s) Fehler beim Schließen der Pipe nach '%s'"
#: git-send-email.perl:1714
-#, fuzzy
msgid "cannot send message as 7bit"
-msgstr "Kann keine Commit-Beschreibung für %s bekommen."
+msgstr "Kann Nachricht nicht als 7bit versenden."
#: git-send-email.perl:1722
-#, fuzzy
msgid "invalid transfer encoding"
-msgstr "Ungültige Referenz: %s"
+msgstr "Ungültiges Transfer-Encoding"
#: git-send-email.perl:1741 git-send-email.perl:1792 git-send-email.perl:1802
-#, fuzzy, perl-format
+#, perl-format
msgid "unable to open %s: %s\n"
-msgstr "kann %s nicht öffnen"
+msgstr "konnte %s nicht öffnen: %s\n"
#: git-send-email.perl:1744
#, perl-format
msgid "%s: patch contains a line longer than 998 characters"
-msgstr ""
+msgstr "%s: Patch enthält eine Zeile, die länger als 998 Zeichen ist"
#: git-send-email.perl:1760
#, perl-format
msgid "Skipping %s with backup suffix '%s'.\n"
-msgstr ""
+msgstr "Lasse %s mit Backup-Suffix '%s' aus.\n"
#. TRANSLATORS: please keep "[y|N]" as is.
#: git-send-email.perl:1764
#, perl-format
msgid "Do you really want to send %s? [y|N]: "
-msgstr ""
+msgstr "Wollen Sie %s wirklich versenden? [y|N]: "
#~ msgid "Use an experimental blank-line-based heuristic to improve diffs"
#~ msgstr ""
#~ "eine experimentelle, auf Leerzeilen basierende Heuristik zur "
#~ "Verbesserung\n"
#~ "der Darstellung von Unterschieden verwenden"
#~ msgid "Clever... amending the last one with dirty index."
--
2.11.0.864.ge7592a546
^ permalink raw reply related
* Re: [PATCH v3 03/16] files-backend: add files_path()
From: Junio C Hamano @ 2017-02-17 18:57 UTC (permalink / raw)
To: Nguyễn Thái Ngọc Duy
Cc: git, Michael Haggerty, Johannes Schindelin, Ramsay Jones,
Stefan Beller, novalis
In-Reply-To: <20170217140436.17336-4-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> This will be the replacement for both git_path() and git_path_submodule()
> in this file. The idea is backend takes a git path and use that,
> oblivious of submodule, linked worktrees and such.
>
> This is the middle step towards that. Eventually the "submodule" field
> in 'struct files_ref_store' should be replace by "gitdir". And a
s/replace/&d/;
> compound ref_store is created to combine two files backends together,
> one represents the shared refs in $GIT_COMMON_DIR, one per-worktree. At
> that point, files_path() becomes a wrapper of strbuf_vaddf().
I like the general direction, obviously ;-)
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> refs/files-backend.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/refs/files-backend.c b/refs/files-backend.c
> index f0c878b92..abb8a95e0 100644
> --- a/refs/files-backend.c
> +++ b/refs/files-backend.c
> @@ -930,6 +930,24 @@ struct files_ref_store {
> /* Lock used for the main packed-refs file: */
> static struct lock_file packlock;
>
> +__attribute__((format (printf, 3, 4)))
> +static void files_path(struct files_ref_store *refs, struct strbuf *sb,
> + const char *fmt, ...)
> +{
> + struct strbuf tmp = STRBUF_INIT;
> + va_list vap;
> +
> + va_start(vap, fmt);
> + strbuf_vaddf(&tmp, fmt, vap);
> + va_end(vap);
> + if (refs->submodule)
> + strbuf_git_path_submodule(sb, refs->submodule,
> + "%s", tmp.buf);
> + else
> + strbuf_git_path(sb, "%s", tmp.buf);
> + strbuf_release(&tmp);
> +}
> +
> /*
> * Increment the reference count of *packed_refs.
> */
^ permalink raw reply
* Re: [PATCH v3 04/16] files-backend: replace *git_path*() with files_path()
From: Junio C Hamano @ 2017-02-17 19:27 UTC (permalink / raw)
To: Nguyễn Thái Ngọc Duy
Cc: git, Michael Haggerty, Johannes Schindelin, Ramsay Jones,
Stefan Beller, novalis
In-Reply-To: <20170217140436.17336-5-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> This centralizes all path rewriting of files-backend.c in one place so
> we have easier time removing the path rewriting later. There could be
> some hidden indirect git_path() though, I didn't audit the code to the
> bottom.
>
> Side note: set_worktree_head_symref() is a bad boy and should not be in
> files-backend.c (probably should not exist in the first place). But
> we'll leave it there until we have better multi-worktree support in refs
> before we update it.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> refs/files-backend.c | 185 ++++++++++++++++++++++++++-------------------------
> 1 file changed, 94 insertions(+), 91 deletions(-)
In this step, files_path() is still "if refs->submodule field is
there, then use that to call strbuf_git_path_submodule() and
otherwise call strbuf_git_path()." That is a very sensible
refactoring for things like packed-refs-file in this hunk:
> static struct packed_ref_cache *get_packed_ref_cache(struct files_ref_store *refs)
> {
> char *packed_refs_file;
> + struct strbuf sb = STRBUF_INIT;
>
> - if (refs->submodule)
> - packed_refs_file = git_pathdup_submodule(refs->submodule,
> - "packed-refs");
> - else
> - packed_refs_file = git_pathdup("packed-refs");
> + files_path(refs, &sb, "packed-refs");
> + packed_refs_file = strbuf_detach(&sb, NULL);
But the original code of some other changes do not follow that
pattern, e.g.
> @@ -1585,7 +1578,7 @@ static int lock_raw_ref(struct files_ref_store *refs,
> *lock_p = lock = xcalloc(1, sizeof(*lock));
>
> lock->ref_name = xstrdup(refname);
> - strbuf_git_path(&ref_file, "%s", refname);
> + files_path(refs, &ref_file, "%s", refname);
Is it the right way to review these changes to make sure that a
conversion from the original that is an unconditional
strbuf_git_path() to files_path() happens only if the function is
"files-assert-main-repository" clean? lock_raw_ref() certainly is
one of those functions where the caller should not have a non-empty
submodule field in refs.
> @@ -2052,7 +2045,7 @@ static struct ref_lock *lock_ref_sha1_basic(struct files_ref_store *refs,
> if (flags & REF_DELETING)
> resolve_flags |= RESOLVE_REF_ALLOW_BAD_NAME;
>
> - strbuf_git_path(&ref_file, "%s", refname);
> + files_path(refs, &ref_file, "%s", refname);
So is this one; lock_ref_sha1_basic() is protected with assert-main-repo.
> @@ -2343,7 +2336,7 @@ static int pack_if_possible_fn(struct ref_entry *entry, void *cb_data)
> * Remove empty parents, but spare refs/ and immediate subdirs.
> * Note: munges *name.
> */
> -static void try_remove_empty_parents(char *name)
> +static void try_remove_empty_parents(struct files_ref_store *refs, char *name)
> {
> char *p, *q;
> int i;
> @@ -2368,7 +2361,7 @@ static void try_remove_empty_parents(char *name)
> if (q == p)
> break;
> *q = '\0';
> - strbuf_git_path(&sb, "%s", name);
> + files_path(refs, &sb, "%s", name);
But here it gets iffy. try_remove_empty_parents() itself does not
assert, and its sole caller prune_ref() does not, either. The sole
caller of prune_ref() which is prune_refs() does not. As we climb
the call chain up, we reach files_pack_refs(). Am I confused to
doubt that the method is inherently main-repo only?
... ah, OK, files_downcast() at the beginning of pack_refs
forbids submodule. So this is safe.
> @@ -2462,7 +2455,7 @@ static int repack_without_refs(struct files_ref_store *refs,
> if (lock_packed_refs(refs, 0)) {
> struct strbuf sb = STRBUF_INIT;
>
> - strbuf_git_path(&sb, "packed-refs");
> + files_path(refs, &sb, "packed-refs");
This is safe, as repack_without_refs() asserts that it is main-repo
only.
> @@ -2558,17 +2551,17 @@ static int files_delete_refs(struct ref_store *ref_store,
> */
> #define TMP_RENAMED_LOG "logs/refs/.tmp-renamed-log"
>
> -static int rename_tmp_log(const char *newrefname)
> +static int rename_tmp_log(struct files_ref_store *refs, const char *newrefname)
> {
The sole caller files_rename_ref() is main-repo only and that is
guaranteed when downcast is done.
> -static int log_ref_setup(const char *refname, struct strbuf *logfile, struct strbuf *err, int force_create)
> +static int log_ref_setup(struct files_ref_store *refs, const char *refname,
> + struct strbuf *logfile, struct strbuf *err,
> + int force_create)
> {
> int logfd, oflags = O_APPEND | O_WRONLY;
>
> - strbuf_git_path(logfile, "logs/%s", refname);
> + files_path(refs, logfile, "logs/%s", refname);
This and friends of log_ref_write() eventually rolls up to
commit_ref_update() that has the main-repo only assertion, so they
should be safe.
Another entry point files_create_symref() via create_symref_locked()
also reaches log_ref_write() and friends but the safety is guaranteed
via the downcast that asserts.
OK, overall I really like the loss of "Check the validity but we do
not need the result" with this step. The same checks are still done
but the code looks much less hacky.
^ permalink raw reply
* Re: [PATCH v3 11/16] refs.c: kill register_ref_store(), add register_submodule_ref_store()
From: Junio C Hamano @ 2017-02-17 19:29 UTC (permalink / raw)
To: Nguyễn Thái Ngọc Duy
Cc: git, Michael Haggerty, Johannes Schindelin, Ramsay Jones,
Stefan Beller, novalis
In-Reply-To: <20170217140436.17336-12-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> This is the last function in this code (besides public API) that takes
> submodule argument and handles both main/submodule cases. Break it down,
> move main store registration in get_main_ref_store() and keep the rest
> in register_submodule_ref_store().
Very nice.
^ permalink raw reply
* Re: [PATCH 3/3] rename_ref: replace empty deletion message in HEAD's log
From: Jeff King @ 2017-02-17 19:43 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Kyle Meyer, git
In-Reply-To: <xmqqk28ou2o1.fsf@gitster.mtv.corp.google.com>
On Fri, Feb 17, 2017 at 09:50:54AM -0800, Junio C Hamano wrote:
> > I see we actually already have a "logmsg" parameter. It already says
> > "Branch: renamed %s to %s". Could we just reuse that? I know that this
> > step is technically just the deletion, but I think it more accurately
> > describes the whole operation that the deletion is part of.
>
> True, but stepping back a bit,...
>
> Do we even want these "internal" delete_ref() invocations to be
> logged in HEAD's reflog? I understand that this is inside the
> implementation of renaming an old ref to a new ref, and reflog
> message given to delete_ref() would matter only if the HEAD happens
> to be pointing at old ref---but then HEAD will be repointed to the
> new ref by somebody else [*1*] that called this function to rename
> old to new and it _will_ log it. So I am not sure if it is a good
> thing to describe the deletion more readably with a message (which
> is what this patch does) in the first place. If we can just say
> "don't log this deletion event in HEAD's reflog", wouldn't that be
> more desirable?
Yes. I think the options are basically (in order of decreasing
preference in my opinion):
1. Log a rename entry (same sha1, but note the rename in the free-form
text).
2. Log a delete (sha1 goes to null) followed by a creation (from null
back to the original sha1).
3. Log nothing at all for HEAD.
This does half of (2). If we do the second half, then I'd prefer it to
(3). But if we can do (1), that is better still (IMHO).
> *1* Is the reason why the code in files_rename_ref() we are looking
> at does not adjust HEAD to point at the new ref is because it is
> just handing one ref-store and obviouvious to symrefs in other
> backends?
I'm actually confused about which bit of code is updating HEAD. I do not
see it either in files_rename_ref() or in the caller. Yet it clearly
happens. But that is the code that would know enough to do (1) or the
second half of (2) above.
-Peff
^ permalink raw reply
* Re: [PATCH 3/3] rename_ref: replace empty deletion message in HEAD's log
From: Jeff King @ 2017-02-17 19:55 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Kyle Meyer, git
In-Reply-To: <20170217194350.prhp5joh33cbvwsd@sigill.intra.peff.net>
On Fri, Feb 17, 2017 at 02:43:50PM -0500, Jeff King wrote:
> Yes. I think the options are basically (in order of decreasing
> preference in my opinion):
>
> 1. Log a rename entry (same sha1, but note the rename in the free-form
> text).
>
> 2. Log a delete (sha1 goes to null) followed by a creation (from null
> back to the original sha1).
>
> 3. Log nothing at all for HEAD.
>
> This does half of (2). If we do the second half, then I'd prefer it to
> (3). But if we can do (1), that is better still (IMHO).
>
> > *1* Is the reason why the code in files_rename_ref() we are looking
> > at does not adjust HEAD to point at the new ref is because it is
> > just handing one ref-store and obviouvious to symrefs in other
> > backends?
>
> I'm actually confused about which bit of code is updating HEAD. I do not
> see it either in files_rename_ref() or in the caller. Yet it clearly
> happens. But that is the code that would know enough to do (1) or the
> second half of (2) above.
Ah, I found it. It's in replace_each_worktree_head_symref() these days,
which does not bother to pass a log message.
So I think the second half of (2) is probably something like the patch
below.
Thinking on it more, we probably _do_ want two entries. Because the
operations are not atomic, it's possible that we may end up in a
half-way state after the first entry is written. And when debugging such
a case, I'd much rather see the first half of the operation logged than
nothing at all.
-Peff
---
diff --git a/branch.c b/branch.c
index b955d4f31..5c12036b0 100644
--- a/branch.c
+++ b/branch.c
@@ -345,7 +345,8 @@ void die_if_checked_out(const char *branch, int ignore_current_worktree)
branch, wt->path);
}
-int replace_each_worktree_head_symref(const char *oldref, const char *newref)
+int replace_each_worktree_head_symref(const char *oldref, const char *newref,
+ const char *logmsg)
{
int ret = 0;
struct worktree **worktrees = get_worktrees(0);
@@ -358,7 +359,7 @@ int replace_each_worktree_head_symref(const char *oldref, const char *newref)
continue;
if (set_worktree_head_symref(get_worktree_git_dir(worktrees[i]),
- newref)) {
+ newref, logmsg)) {
ret = -1;
error(_("HEAD of working tree %s is not updated"),
worktrees[i]->path);
diff --git a/branch.h b/branch.h
index 3103eb9ad..b07788558 100644
--- a/branch.h
+++ b/branch.h
@@ -71,6 +71,7 @@ extern void die_if_checked_out(const char *branch, int ignore_current_worktree);
* This will be used when renaming a branch. Returns 0 if successful, non-zero
* otherwise.
*/
-extern int replace_each_worktree_head_symref(const char *oldref, const char *newref);
+extern int replace_each_worktree_head_symref(const char *oldref, const char *newref,
+ const char *logmsg);
#endif
diff --git a/builtin/branch.c b/builtin/branch.c
index cbaa6d03c..383005912 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -471,14 +471,15 @@ static void rename_branch(const char *oldname, const char *newname, int force)
if (rename_ref(oldref.buf, newref.buf, logmsg.buf))
die(_("Branch rename failed"));
- strbuf_release(&logmsg);
if (recovery)
warning(_("Renamed a misnamed branch '%s' away"), oldref.buf + 11);
- if (replace_each_worktree_head_symref(oldref.buf, newref.buf))
+ if (replace_each_worktree_head_symref(oldref.buf, newref.buf, logmsg.buf))
die(_("Branch renamed to %s, but HEAD is not updated!"), newname);
+ strbuf_release(&logmsg);
+
strbuf_addf(&oldsection, "branch.%s", oldref.buf + 11);
strbuf_release(&oldref);
strbuf_addf(&newsection, "branch.%s", newref.buf + 11);
diff --git a/refs.h b/refs.h
index 9fbff90e7..b33035c4a 100644
--- a/refs.h
+++ b/refs.h
@@ -334,7 +334,8 @@ int create_symref(const char *refname, const char *target, const char *logmsg);
* $GIT_DIR points to.
* Return 0 if successful, non-zero otherwise.
* */
-int set_worktree_head_symref(const char *gitdir, const char *target);
+int set_worktree_head_symref(const char *gitdir, const char *target,
+ const char *logmsg);
enum action_on_err {
UPDATE_REFS_MSG_ON_ERR,
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 4f1a88f6d..fa8d08e3c 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -3024,7 +3024,7 @@ static int files_create_symref(struct ref_store *ref_store,
return ret;
}
-int set_worktree_head_symref(const char *gitdir, const char *target)
+int set_worktree_head_symref(const char *gitdir, const char *target, const char *logmsg)
{
static struct lock_file head_lock;
struct ref_lock *lock;
@@ -3052,7 +3052,7 @@ int set_worktree_head_symref(const char *gitdir, const char *target)
lock->lk = &head_lock;
lock->ref_name = xstrdup(head_rel);
- ret = create_symref_locked(lock, head_rel, target, NULL);
+ ret = create_symref_locked(lock, head_rel, target, logmsg);
unlock_ref(lock); /* will free lock */
strbuf_release(&head_path);
^ permalink raw reply related
* Re: body-CC-comment regression
From: Junio C Hamano @ 2017-02-17 20:05 UTC (permalink / raw)
To: Matthieu Moy; +Cc: Johan Hovold, git, Jeff King, Kevin Daudt, Larry Finger
In-Reply-To: <vpq7f4owtbi.fsf@anie.imag.fr>
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes:
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Johan Hovold <johan@kernel.org> writes:
>>
>>> That's precisely what the patch I posted earlier in the thread did.
>>
>> That's good. I didn't see any patch yet
>
> It's here:
>
> http://public-inbox.org/git/20170217110642.GD2625@localhost/
>
> but as I explained, this removes a feature suported since several major
> releases and we have no idea how many users may use the "mupliple emails
> in one field". The approach I proposed does not suffer from this.
OK, so you are aiming higher to please both parties, i.e. those who
place a single address but cruft at the end would get the cruft
stripped when we grab a usable address from the field, and those who
write two or more addresses would get all of these addresses?
That approach may still constrain what those in the former camp can
write in the "cruft" part, like they cannot write comma or semicolon
as part of the "cruft", no? If that does not pose a practical problem,
then I can imagine it would work well for people in both camps.
^ permalink raw reply
* Re: body-CC-comment regression
From: Matthieu Moy @ 2017-02-17 20:20 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Johan Hovold, git, Jeff King, Kevin Daudt, Larry Finger
In-Reply-To: <xmqqd1egshv1.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
> That approach may still constrain what those in the former camp can
> write in the "cruft" part, like they cannot write comma or semicolon
> as part of the "cruft", no?
Right. Indeed, this may be a problem since the use of "#" for stable
seem to include commit message, and they may contain commas.
So, maybe Johan's patch is better indeed.
--
Matthieu Moy
http://www-verimag.imag.fr/~moy/
^ permalink raw reply
* Re: git alias for options
From: Jeff King @ 2017-02-17 20:42 UTC (permalink / raw)
To: Ævar Arnfjörð Bjarmason; +Cc: hIpPy, Git Mailing List
In-Reply-To: <CACBZZX4Zmwb8ZHGBXCpm6=yH_uxc-K1X1vv1jQ+wwnUPneqM4A@mail.gmail.com>
On Fri, Feb 17, 2017 at 02:50:23PM +0100, Ævar Arnfjörð Bjarmason wrote:
> On Fri, Feb 17, 2017 at 9:23 AM, hIpPy <hippy2981@gmail.com> wrote:
> > Git has aliases for git commands. Is there a (an inbuilt) way to alias
> > options? If not, what is the reason?
>
> This has long been on my wishlist, because there's a lot of
> copy/pasted logic all over Git to make git foo --whatever aliased to
> foo.whatever in the config, but only for some options.
>
> It should ideally be part of something every option just supports, via
> the getopts struct.
>
> However, it can't allow you to modify whatever option you want,
> because some things like git-commit-tree should not be customized
> based on config, it would break things that rely on the plumbing
> commands.
>
> So it would have to be a whitelist for each option we allow to be
> configured like this via the getopts struct.
>
> Also there are surely other edge cases, like maybe the config option
> now doesn't 1=1 map to the name for the option in some cases, or the
> flag should be config-able but is has no long form (which we'd like
> for the config), then we'd want to add that etc.
I think your idea is roughly equivalent in functionality to just
allowing aliases to override command names. E.g., anything you could do
with:
[log]
follow = true
decorate = false
could be done with:
[alias]
log = "log --follow --no-decorate"
The reason we have historically not allowed that is for the
"commit-tree" plumbing reason you gave above. One option would be to
relax it for a whitelist of porcelain commands. Then your whitelist at
least only has to cover commands, and not each individual option.
I think there are a lot of corner cases in that whitelist, though. A lot
of commands serve dual porcelain/plumbing purposes. E.g., "log" and
"tag" are commonly used by both humans and by scripts.
A first step in that direction would probably be an environment variable
to tell Git to suppress command-aliases. Scripts would set that to
ensure a more vanilla experience. It doesn't fix _existing_ scripts, but
if that option were introduced, then over time scripts would start to
use it. Then eventually it would be safe(r) to introduce something like
command aliases.
But nobody has ever taken that first step, so here we are.
-Peff
^ permalink raw reply
* Re: dotfiles in git template dir are not copied
From: Jeff King @ 2017-02-17 20:44 UTC (permalink / raw)
To: greg0ire; +Cc: git
In-Reply-To: <ebd661c3-7d99-54d2-dda9-09c4a76cfe93@greg0ire.fr>
On Fri, Feb 17, 2017 at 10:31:37AM +0100, greg0ire wrote:
> I noticed yesterday that dotfiles inside the directory configured in
> init.templatedir are not copied when creating a new repository.
>
> Here is the line I think is responsible for this behavior :
> https://github.com/git/git/blob/master/builtin/init-db.c#L48
>
> Is it a bug or a feature?
I think it's probably a feature. You could, for example, have your
template directory itself be a git repository. You would not want to
copy the ".git" directory around.
I wouldn't be surprised if the documentation could be improved, though.
-Peff
^ permalink raw reply
* Re: [PATCH v2 00/16] Remove submodule from files-backend.c
From: Junio C Hamano @ 2017-02-17 20:49 UTC (permalink / raw)
To: Nguyễn Thái Ngọc Duy
Cc: git, Michael Haggerty, Johannes Schindelin, Ramsay Jones,
Stefan Beller, novalis
In-Reply-To: <xmqqzihksm0i.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
>
>> I'll be sending two more follow-up series, if you are interested, soon:
>>
>> 1) v2 of nd/worktree-gc-protection
>> ...
>> 2) the real worktree-gc-protection
>>
>> This series adds a bunch of new refs API, enough for revision.c to
>> traverses all sorts of refs with a ref store instead of "submodule".
>> Many _submodule API are removed as a result because they no longer
>> have any callers (yay!). One of them remains though.
>
> Yay indeed.
Having said all that, I have a bad news.
I won't be able to queue this as-is, as this heavily conflicts with
mh/ref-remove-empty-directory that has already been cooking in
'next' for some time. I started trying conflict resolution myself
and it seemed doable, but stopped after finishing perhaps 40% of it,
as I cannot afford the same amount of time for conflict resolution
every time the series gets rerolled.
If the topic is rebased on the result of doing:
- checking out master^0
- merging mh/ref-remove-empty-directory on it
- mergeing mh/submodule-hash on the result
I suspect that we might be able start cooking it in 'pu' sooner, but
I cannot spend any more time on this topic today so I'd stop analyzing
the situation for now.
^ permalink raw reply
* Re: [PATCH] tempfile: avoid "ferror | fclose" trick
From: Jeff King @ 2017-02-17 20:54 UTC (permalink / raw)
To: Michael Haggerty
Cc: Andreas Schwab, Junio C Hamano, Jáchym Barvínek, git
In-Reply-To: <64eedabd-c0de-a7e0-8d98-ad23a9625b45@alum.mit.edu>
On Fri, Feb 17, 2017 at 11:42:25AM +0100, Michael Haggerty wrote:
> On 02/17/2017 09:07 AM, Jeff King wrote:
> > [...]
> > That's similar to what I wrote earlier, but if we don't mind overwriting
> > errno unconditionally, I think just:
> >
> > errno = EIO; /* covers ferror(), overwritten by failing fclose() */
> > err |= ferror(fp);
> > err |= fclose(fp);
> >
> > does the same thing.
>
> True; I'd forgotten the convention that non-failing functions are
> allowed to change errno. Your solution is obviously simpler and faster.
I guess we are simultaneously assuming that it is OK to munge errno on
success in our function, but that fclose() will not do so. Which seems a
bit hypocritical. Maybe the "if" dance is better.
-Peff
^ permalink raw reply
* Re: [PATCH] tempfile: avoid "ferror | fclose" trick
From: Jeff King @ 2017-02-17 21:07 UTC (permalink / raw)
To: Michael Haggerty
Cc: Andreas Schwab, Junio C Hamano, Jáchym Barvínek, git
In-Reply-To: <20170217205442.wnldfsxbj3dnnqvj@sigill.intra.peff.net>
On Fri, Feb 17, 2017 at 03:54:42PM -0500, Jeff King wrote:
> I guess we are simultaneously assuming that it is OK to munge errno on
> success in our function, but that fclose() will not do so. Which seems a
> bit hypocritical. Maybe the "if" dance is better.
So here's that patch with a justification.
At this point, this snippet of code would be appropriate to pull into
xfclose() if we wanted. But possibly that is the wrong direction, as it
encourages callers to do:
if (xfclose(fp))
err = error_errno("failure writing to ...");
when they could do:
if (ferror(fp))
err = error("failure writing to ...");
if (fclose(fp))
err = error_errno("failure writing to ...");
While longer, it's arguably better for them to distinguish the two
cases. It's only worth doing the errno magic when the close is deep
inside a callstack, and passing out the two cases is awkward.
-- >8 --
Subject: tempfile: set errno to a known value before calling ferror()
In close_tempfile(), we return an error if ferror()
indicated a previous failure, or if fclose() failed. In the
latter case, errno is set and it is useful for callers to
report it.
However, if _only_ ferror() triggers, then the value of
errno is based on whatever syscall happened to last fail,
which may not be related to our filehandle at all. A caller
cannot tell the difference between the two cases, and may
use "die_errno()" or similar to report a nonsense errno value.
One solution would be to actually pass back separate return
values for the two cases, so a caller can write a more
appropriate message for each case. But that makes the
interface clunky.
Instead, let's just set errno to the generic EIO in this case.
That's not as descriptive as we'd like, but at least it's
predictable. So it's better than the status quo in all cases
but one: when the last syscall really did involve a failure
on our filehandle, we'll be wiping that out. But that's a
fragile thing for us to rely on.
In any case, we'll let the errno result from fclose() take
precedence over our value, as we know that's recent and
accurate (and many I/O errors will persist through the
fclose anyway).
Signed-off-by: Jeff King <peff@peff.net>
---
tempfile.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/tempfile.c b/tempfile.c
index ffcc27237..684371067 100644
--- a/tempfile.c
+++ b/tempfile.c
@@ -247,8 +247,13 @@ int close_tempfile(struct tempfile *tempfile)
tempfile->fd = -1;
if (fp) {
tempfile->fp = NULL;
- err = ferror(fp);
- err |= fclose(fp);
+ if (ferror(fp)) {
+ err = -1;
+ if (!fclose(fp))
+ errno = EIO;
+ } else {
+ err = fclose(fp);
+ }
} else {
err = close(fd);
}
--
2.12.0.rc1.612.ga5f664feb
^ permalink raw reply related
* Re: [PATCH] tempfile: avoid "ferror | fclose" trick
From: Junio C Hamano @ 2017-02-17 21:17 UTC (permalink / raw)
To: Jeff King
Cc: Michael Haggerty, Andreas Schwab, Jáchym Barvínek, git
In-Reply-To: <20170217205442.wnldfsxbj3dnnqvj@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
> On Fri, Feb 17, 2017 at 11:42:25AM +0100, Michael Haggerty wrote:
>
>> On 02/17/2017 09:07 AM, Jeff King wrote:
>> > [...]
>> > That's similar to what I wrote earlier, but if we don't mind overwriting
>> > errno unconditionally, I think just:
>> >
>> > errno = EIO; /* covers ferror(), overwritten by failing fclose() */
>> > err |= ferror(fp);
>> > err |= fclose(fp);
>> >
>> > does the same thing.
>>
>> True; I'd forgotten the convention that non-failing functions are
>> allowed to change errno. Your solution is obviously simpler and faster.
>
> I guess we are simultaneously assuming that it is OK to munge errno on
> success in our function, but that fclose() will not do so. Which seems a
> bit hypocritical. Maybe the "if" dance is better.
Yes. When both ferror() and fclose() are successful, we would
prefer to see the original errno unmolested, so the "if" dance,
even though it looks uglier, is better. The ugliness is limited
to the implementation anyway ;-)
But it does look ugly, especially when nested inside the existing
code like so.
Stepping back a bit, would this be really needed? Even if the ferror()
does not update errno, the original stdio operation that failed
would have, no?
-- >8 --
Subject: close_tempfile(): set errno when ferror() notices a previous error
In close_tempfile(), we may notice that previous stdio operations
failed when we inspect ferror(tempfile->fp). As ferror() does not
set errno, and the caller of close_tempfile(), since it encountered
and ignored the original error, is likely to have called other
system library functions to cause errno to be modified, the caller
cannot really tell anything meaningful by looking at errno after we
return an error from here.
Set errno to an arbitrary value EIO when ferror() sees an error but
fclose() succeeds. If fclose() fails, we just let the caller see
errno from that failure.
---
tempfile.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/tempfile.c b/tempfile.c
index ffcc272375..d2c6de83a9 100644
--- a/tempfile.c
+++ b/tempfile.c
@@ -247,8 +247,20 @@ int close_tempfile(struct tempfile *tempfile)
tempfile->fd = -1;
if (fp) {
tempfile->fp = NULL;
- err = ferror(fp);
- err |= fclose(fp);
+ if (ferror(fp)) {
+ err = -1;
+ if (!fclose(fp))
+ /*
+ * There was some error detected by ferror()
+ * but it is likely that the true errno has
+ * long gone. Leave something generic to make
+ * it clear that the caller cannot rely on errno
+ * at this point.
+ */
+ errno = EIO;
+ } else {
+ err = fclose(fp);
+ }
} else {
err = close(fd);
}
^ permalink raw reply related
* Re: [PATCH] tempfile: avoid "ferror | fclose" trick
From: Jeff King @ 2017-02-17 21:21 UTC (permalink / raw)
To: Junio C Hamano
Cc: Michael Haggerty, Andreas Schwab, Jáchym Barvínek, git
In-Reply-To: <xmqq37fcsejx.fsf@gitster.mtv.corp.google.com>
On Fri, Feb 17, 2017 at 01:17:06PM -0800, Junio C Hamano wrote:
> > I guess we are simultaneously assuming that it is OK to munge errno on
> > success in our function, but that fclose() will not do so. Which seems a
> > bit hypocritical. Maybe the "if" dance is better.
>
> Yes. When both ferror() and fclose() are successful, we would
> prefer to see the original errno unmolested, so the "if" dance,
> even though it looks uglier, is better. The ugliness is limited
> to the implementation anyway ;-)
>
> But it does look ugly, especially when nested inside the existing
> code like so.
I think our emails crossed, but our patches are obviously quite similar.
My commit message maybe explains a bit more of my thinking.
> Stepping back a bit, would this be really needed? Even if the ferror()
> does not update errno, the original stdio operation that failed
> would have, no?
Sure, but we have no clue what happened in between.
-Peff
^ permalink raw reply
* git diff --quiet exits with 1 on clean tree with CRLF conversions
From: Mike Crowe @ 2017-02-17 21:26 UTC (permalink / raw)
To: git
If "git diff --quiet" finds it necessary to compare actual file contents,
and a file requires CRLF conversion, then it incorrectly exits with an exit
code of 1 even if there have been no changes.
The patch below adds a test file that shows the problem.
The first test of diff without --quiet correctly has an exit status of zero
on both invocations.
The second test of diff with --quiet has an exit code of zero on the first
invocation, but an exit code of one on the second invocation. Further
invocations (not included in the test) may yield an exit code of 1. Calling
"git status" always fixes things.
(The touching with "tomorrow" was my attempt to avoid the sleep, but that
didn't seem to help - it appears that time must pass in order to ensure
that the cache is not used.)
The culprit would appear to be in diff_filespec_check_stat_unmatch where it
assumes that the files are different if their sizes are different:
if (!DIFF_FILE_VALID(p->one) || /* (1) */
!DIFF_FILE_VALID(p->two) ||
(p->one->oid_valid && p->two->oid_valid) ||
(p->one->mode != p->two->mode) ||
diff_populate_filespec(p->one, CHECK_SIZE_ONLY) ||
diff_populate_filespec(p->two, CHECK_SIZE_ONLY) ||
(p->one->size != p->two->size) ||
!diff_filespec_is_identical(p->one, p->two)) /* (2) */
p->skip_stat_unmatch_result = 1;
In the failing case p->one->size == 14 and p->two->size == 12.
Mike.
diff --git a/t/t4063-diff-converted.sh b/t/t4063-diff-converted.sh
new file mode 100755
index 0000000..a108dfb
--- /dev/null
+++ b/t/t4063-diff-converted.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Mike Crowe
+#
+
+test_description='git diff with files that require CRLF conversion'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+ echo "* text=auto" > .gitattributes &&
+ printf "Hello\r\nWorld\r\n" > crlf.txt &&
+ git add .gitattributes crlf.txt &&
+ git commit -m "initial"
+'
+test_expect_success 'noisy diff works on file that requires CRLF conversion' '
+ git status >/dev/null &&
+ git diff >/dev/null &&
+ sleep 1 &&
+ touch --date=tomorrow crlf.txt &&
+ git diff >/dev/null
+'
+# The sleep is required for reasons I don't fully understand
+test_expect_success 'quiet diff works on file that requires CRLF conversion with no changes' '
+ git status &&
+ git diff --quiet &&
+ sleep 1 &&
+ touch --date=tomorrow crlf.txt &&
+ git diff --quiet
+'
+
+test_done
^ permalink raw reply related
* Re: [PATCH] tempfile: avoid "ferror | fclose" trick
From: Junio C Hamano @ 2017-02-17 21:42 UTC (permalink / raw)
To: Jeff King
Cc: Michael Haggerty, Andreas Schwab, Jáchym Barvínek, git
In-Reply-To: <20170217212106.bew6krtb7pqpi3rr@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
> On Fri, Feb 17, 2017 at 01:17:06PM -0800, Junio C Hamano wrote:
>
>> Stepping back a bit, would this be really needed? Even if the ferror()
>> does not update errno, the original stdio operation that failed
>> would have, no?
>
> Sure, but we have no clue what happened in between.
Hmm, so we are protecting against somebody who does "errno = 0"
explicitly, because she knows that she's dealt with the error from
stdio earlier? Such a careful person would have called clearerr()
as well, I would guess.
So let's assume we only care about the case where some other error
was detected and errno was updated by a system library call.
> I think our emails crossed, but our patches are obviously quite similar.
> My commit message maybe explains a bit more of my thinking.
Yes, but ;-)
If we are trying to make sure that the caller would not say "failed
to close tempfile: ERRNO" with an ERRNO that is unrelated to any
stdio opration, I am not sure if the patch improves things. The
caller did not fail to close (most likely we successfully closed
it), and no matter what futzing we do to errno, the message supplied
by such a caller will not be improved.
If the caller used "noticed an earlier error while closing tempfile:
ERRNO", such a message would describe the situation more correctly,
but then ERRNO that is not about stdio is probably acceptable in the
context of that message (the original ERRNO might be ENOSPC that is
even more specific than EIO, FWIW). So I am not sure if the things
will improve from the status quo.
It's easy for us to either apply the patch and be done with it (or
drop and do the same), and in the bigger picture it wouldn't make
that much of a difference, I would think, so I can go either way.
^ permalink raw reply
* Re: [PATCH v2 00/19] object_id part 6
From: brian m. carlson @ 2017-02-17 21:45 UTC (permalink / raw)
To: Michael Haggerty; +Cc: git, Jeff King
In-Reply-To: <3644df30-71e2-584b-ebed-ae117a5ded3f@alum.mit.edu>
[-- Attachment #1: Type: text/plain, Size: 2532 bytes --]
On Fri, Feb 17, 2017 at 10:55:03AM +0100, Michael Haggerty wrote:
> On 02/14/2017 03:31 AM, brian m. carlson wrote:
> > This is another series in the continuing conversion to struct object_id.
> >
> > This series converts more of the builtin directory and some of the refs
> > code to use struct object_id. Additionally, it implements an
> > nth_packed_object_oid function which provides a struct object_id version
> > of the nth_packed_object function, and a parse_oid_hex function that
> > makes parsing easier.
> >
> > The patch to use parse_oid_hex in the refs code has been split out into
> > its own patch, just because I'm wary of that code and potentially
> > breaking things, and I want it to be easy to revert in case things go
> > wrong. I have no reason to believe it is anything other than fully
> > functional, however.
> >
> > Changes from v1:
> > * Implement parse_oid_hex and use it.
> > * Make nth_packed_object_oid take a variable into which to store the
> > object ID. This avoids concerns about unsafe casts.
> > * Rebase on master.
>
> Thanks as always for working on this!
>
> I skimmed over the patches (looking more carefully at the refs-related
> ones) and left a few minor comments but didn't find anything serious.
I'll send out a new series shortly with those changes.
> I'm curious; what fraction of the overall convert-to-object_id campaign
> do you estimate is done so far? Are you getting close to the promised
> land yet?
So I think that the current scope left is best estimated by the
following command:
git grep -P 'unsigned char\s+(\*|.*20)' | grep -v '^Documentation'
So there are approximately 1200 call sites left, which is quite a bit of
work. I estimate between the work I've done and other people's
refactoring work (such as the refs backend refactor), we're about 40%
done.
I'm hoping to send out more smaller series in the future, since running
make test on a huge series takes a long time.
Part of the problem is that some places are almost completely
convertible, except for one or two components that rely on something
like sha1_array. I have patches somewhere that convert that to
oid_array, but I'm not sure how well they'll be received at this point.
I think converting a lot of shallow-related code requires that
conversion, though.
--
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | https://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: https://keybase.io/bk2204
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 868 bytes --]
^ permalink raw reply
* Re: Re: dotfiles in git template dir are not copied
From: Grégoire PARIS @ 2017-02-17 21:42 UTC (permalink / raw)
To: Jeff King; +Cc: git
In-Reply-To: <20170217204411.2yixhuazgczxmmxa@sigill.intra.peff.net>
> You could, for example, have your template directory itself be a git
repository.
I can and I do and indeed, that might be the reason behind this.
I made a PR to document this : https://github.com/git/git/pull/325
--
greg0ire
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox