English ▾ Themen ▾ Neueste Version ▾ git-am zuletzt aktualisiert in 2.52.0

NAME

git-am - Eine Reihe von Patches aus einer Mailbox anwenden

SYNOPSIS

git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--no-verify]
	 [--[no-]3way] [--interactive] [--committer-date-is-author-date]
	 [--ignore-date] [--ignore-space-change | --ignore-whitespace]
	 [--whitespace=<action>] [-C<n>] [-p<n>] [--directory=<dir>]
	 [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
	 [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
	 [--quoted-cr=<action>]
	 [--empty=(stop|drop|keep)]
	 [(<mbox> | <Maildir>)…​]
git am (--continue | --skip | --abort | --quit | --retry | --show-current-patch[=(diff|raw)] | --allow-empty)

BESCHREIBUNG

Teilt Mail-Nachrichten in einer Mailbox in Commit-Log-Nachrichten, Autorenschaftsinformationen und Patches auf und wendet sie auf den aktuellen Branch an. Man kann sich das als umgekehrte Operation von git-format-patch[1] vorstellen, die auf einem Branch mit einer geraden Historie ohne Merges ausgeführt wurde.

OPTIONEN

(<mbox>|<Maildir>)…

Die Liste der Mailbox-Dateien, aus denen Patches gelesen werden sollen. Wenn Sie dieses Argument nicht angeben, liest der Befehl von der Standardeingabe. Wenn Sie Verzeichnisse angeben, werden diese als Maildirs behandelt.

-s
--signoff

Fügt eine Signed-off-by-Tabelle zur Commit-Nachricht hinzu, wobei die Committer-Identität von Ihnen selbst verwendet wird. Weitere Informationen finden Sie in der Option signoff in git-commit[1].

-k
--keep

Übergibt das Flag -k an git mailinfo (siehe git-mailinfo[1]).

--keep-non-patch

Übergibt das Flag -b an git mailinfo (siehe git-mailinfo[1]).

--keep-cr
--no-keep-cr

Mit --keep-cr wird git mailsplit (siehe git-mailsplit[1]) mit derselben Option aufgerufen, um zu verhindern, dass CR am Ende von Zeilen gestrippt wird. Die Konfigurationsvariable am.keepcr kann verwendet werden, um das Standardverhalten festzulegen. --no-keep-cr ist nützlich, um am.keepcr zu überschreiben.

-c
--scissors

Entfernt alles im Body vor einer "scissors"-Zeile (siehe git-mailinfo[1]). Kann standardmäßig durch die Konfigurationsvariable mailinfo.scissors aktiviert werden.

--no-scissors

Ignoriert "scissors"-Zeilen (siehe git-mailinfo[1]).

--quoted-cr=<aktion>

Dieses Flag wird an git mailinfo weitergegeben (siehe git-mailinfo[1]).

--empty=(drop|keep|stop)

Umgang mit einer E-Mail-Nachricht ohne Patch

drop

Die E-Mail-Nachricht wird übersprungen.

keep

Es wird ein leerer Commit erstellt, dessen Inhalt die E-Mail-Nachricht als Log enthält.

stop

Der Befehl schlägt fehl und stoppt mitten in der aktuellen am-Sitzung. Dies ist das Standardverhalten.

-m
--message-id

Übergibt das Flag -m an git mailinfo (siehe git-mailinfo[1]), sodass der Message-ID-Header zur Commit-Nachricht hinzugefügt wird. Die Konfigurationsvariable am.messageid kann verwendet werden, um das Standardverhalten festzulegen.

--no-message-id

Fügt den Message-ID-Header nicht zur Commit-Nachricht hinzu. no-message-id ist nützlich, um am.messageid zu überschreiben.

-q
--quiet

Sei leise. Gib nur Fehlermeldungen aus.

-u
--utf8

Übergibt das Flag -u an git mailinfo (siehe git-mailinfo[1]). Die vorgeschlagene Commit-Log-Nachricht aus der E-Mail wird in UTF-8-Kodierung neu kodiert (die Konfigurationsvariable i18n.commitEncoding kann verwendet werden, um die bevorzugte Kodierung des Projekts festzulegen, falls diese nicht UTF-8 ist).

Dies war in früheren Versionen von git optional, ist aber jetzt der Standard. Sie können --no-utf8 verwenden, um dies zu überschreiben.

--no-utf8

Übergibt das Flag -n an git mailinfo (siehe git-mailinfo[1]).

-3
--3way
--no-3way

Wenn der Patch nicht sauber angewendet werden kann, greift das Programm auf einen 3-Wege-Merge zurück, falls der Patch die Identität der Blobs aufzeichnet, auf die er angewendet werden soll, und wir diese Blobs lokal verfügbar haben. --no-3way kann verwendet werden, um die Konfigurationsvariable am.threeWay zu überschreiben. Weitere Informationen finden Sie unter am.threeWay in git-config[1].

--rerere-autoupdate
--no-rerere-autoupdate

Nachdem der rerere-Mechanismus eine aufgezeichnete Auflösung für den aktuellen Konflikt wiederverwendet hat, um die Dateien im Arbeitsbaum zu aktualisieren, erlauben Sie ihm auch, den Index mit dem Ergebnis der Auflösung zu aktualisieren. --no-rerere-autoupdate ist eine gute Möglichkeit, zu überprüfen, was rerere getan hat, und potenzielle Fehlmerges zu erkennen, bevor das Ergebnis mit einem separaten git add in den Index übernommen wird.

--ignore-space-change
--ignore-whitespace
--whitespace=<aktion>
-C<n>
-p<n>
--directory=<dir>
--exclude=<pfad>
--include=<pfad>
--reject

Diese Flags werden an das Programm git apply (siehe git-apply[1]) übergeben, das den Patch anwendet.

Gültige <aktion> für die Option --whitespace sind: nowarn, warn, fix, error und error-all.

--patch-format

Standardmäßig versucht der Befehl, das Patch-Format automatisch zu erkennen. Diese Option ermöglicht es dem Benutzer, die automatische Erkennung zu umgehen und das Patch-Format anzugeben, als das die Patches interpretiert werden sollen. Gültige Formate sind mbox, mboxrd, stgit, stgit-series und hg.

-i
--interactive

Interaktiv ausführen.

-n
--no-verify

Standardmäßig werden die Hooks pre-applypatch und applypatch-msg ausgeführt. Wenn einer von --no-verify oder -n angegeben wird, werden diese umgangen. Siehe auch githooks[5].

--committer-date-is-author-date

Standardmäßig zeichnet der Befehl das Datum aus der E-Mail-Nachricht als Commit-Autoren-Datum auf und verwendet die Zeit der Commit-Erstellung als Committer-Datum. Dies ermöglicht es dem Benutzer, über das Committer-Datum zu lügen, indem derselbe Wert wie das Autoren-Datum verwendet wird.

--ignore-date

Standardmäßig zeichnet der Befehl das Datum aus der E-Mail-Nachricht als Commit-Autoren-Datum auf und verwendet die Zeit der Commit-Erstellung als Committer-Datum. Dies ermöglicht es dem Benutzer, über das Autoren-Datum zu lügen, indem derselbe Wert wie das Committer-Datum verwendet wird.

--skip

Überspringt den aktuellen Patch. Dies ist nur sinnvoll, wenn ein abgebrochener Patch neu gestartet wird.

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG-sign Commits. Das Argument keyid ist optional und standardmäßig die Committer-Identität; wenn es angegeben wird, muss es ohne Leerzeichen an die Option angehängt werden. --no-gpg-sign ist nützlich, um sowohl die Konfigurationsvariable commit.gpgSign als auch einen früheren Befehl --gpg-sign zu überschreiben.

--continue
-r
--resolved

Nach einem Patch-Fehler (z. B. einem Versuch, einen widersprüchlichen Patch anzuwenden) hat der Benutzer ihn manuell angewendet und die Indexdatei speichert das Ergebnis der Anwendung. Erstellt einen Commit unter Verwendung der Autorenschaft und des Commit-Logs, die aus der E-Mail-Nachricht extrahiert wurden, sowie der aktuellen Indexdatei und fährt fort.

--resolvemsg=<msg>

Wenn ein Patch-Fehler auftritt, wird <msg> vor dem Beenden auf dem Bildschirm ausgegeben. Dies überschreibt die Standardnachricht, die Sie auffordert, --continue oder --skip zu verwenden, um den Fehler zu behandeln. Dies ist ausschließlich für die interne Verwendung zwischen git rebase und git am bestimmt.

--abort

Stellt den ursprünglichen Branch wieder her und bricht die Patch-Operation ab. Stellt den Inhalt der Dateien, die an der am-Operation beteiligt waren, in ihren Zustand vor am zurück.

--quit

Bricht die Patch-Operation ab, behält aber HEAD und den Index unverändert bei.

--retry

Versucht, den letzten widersprüchlichen Patch erneut anzuwenden. Dies ist im Allgemeinen nur nützlich, um zusätzliche Optionen an den Wiederholungsversuch zu übergeben (z. B. --3way), da Sie sonst denselben Fehler wieder sehen würden.

--show-current-patch[=(diff|raw)]

Zeigt die Nachricht an, bei der git am aufgrund von Konflikten gestoppt ist. Wenn raw angegeben ist, wird der Rohinhalt der E-Mail-Nachricht angezeigt; wenn diff, wird nur der Diff-Teil angezeigt. Standardmäßig wird raw verwendet.

--allow-empty

Nach einem Patch-Fehler bei einer Eingabe-E-Mail-Nachricht ohne Patch wird ein leerer Commit mit dem Inhalt der E-Mail-Nachricht als Log-Nachricht erstellt.

DISKUSSION

Der Commit-Autor-Name wird aus der "From: "-Zeile der Nachricht entnommen, und das Commit-Autor-Datum aus der "Date: "-Zeile der Nachricht. Die "Subject: "-Zeile wird als Titel des Commits verwendet, nachdem gängige Präfixe "[PATCH <beliebig>]" entfernt wurden. Die "Subject: "-Zeile soll kurz beschreiben, worum es in dem Commit geht, in einer Textzeile.

"From: ", "Date: " und "Subject: "-Zeilen am Anfang des Body überschreiben die jeweiligen Commit-Autor-Namen und Titelwerte, die aus den Headern übernommen wurden.

Die Commit-Nachricht besteht aus dem Titel aus dem "Subject: ", einer Leerzeile und dem Body der Nachricht bis zum Beginn des Patches. Überflüssige Leerzeichen am Ende jeder Zeile werden automatisch entfernt.

Der Patch wird inline erwartet, direkt nach der Nachricht. Jede Zeile, die wie folgt aussieht:

  • drei Bindestriche und Zeilenende, oder

  • eine Zeile, die mit "diff -" beginnt, oder

  • eine Zeile, die mit "Index: " beginnt,

wird als Beginn eines Patches betrachtet, und die Commit-Log-Nachricht wird vor dem ersten Vorkommen einer solchen Zeile beendet.

Bei der anfänglichen Ausführung von git am geben Sie die Namen der zu verarbeitenden Mailboxen an. Beim Auftreten des ersten Patches, der nicht angewendet werden kann, bricht er mitten in der Ausführung ab. Sie können dies auf eine von zwei Arten beheben:

  1. Überspringen Sie den aktuellen Patch, indem Sie den Befehl mit der Option --skip erneut ausführen.

  2. Lösen Sie den Konflikt im Arbeitsverzeichnis manuell und aktualisieren Sie die Indexdatei, um sie in einen Zustand zu bringen, den der Patch hätte erzeugen sollen. Führen Sie dann den Befehl mit der Option --continue aus.

Der Befehl weigert sich, neue Mailboxen zu verarbeiten, bis die aktuelle Operation abgeschlossen ist. Wenn Sie sich also entscheiden, von vorne zu beginnen, führen Sie git am --abort aus, bevor Sie den Befehl mit den Mailbox-Namen ausführen.

Bevor Patches angewendet werden, wird ORIG_HEAD auf die Spitze des aktuellen Branches gesetzt. Dies ist nützlich, wenn Sie Probleme mit mehreren Commits haben, z. B. wenn Sie git am auf dem falschen Branch ausführen oder ein Fehler in den Commits vorliegt, der leichter durch Ändern der Mailbox behoben werden kann (z. B. Fehler in den "From:"-Zeilen).

HOOKS

Dieser Befehl kann die Hooks applypatch-msg, pre-applypatch und post-applypatch ausführen. Weitere Informationen finden Sie unter githooks[5].

KONFIGURATION

Alles unterhalb dieser Zeile in diesem Abschnitt wird selektiv aus der git-config[1]-Dokumentation übernommen. Der Inhalt ist derselbe wie dort zu finden.

am.keepcr

Wenn true, ruft git-am git-mailsplit für Patches im mbox-Format mit dem Parameter --keep-cr auf. In diesem Fall entfernt git-mailsplit kein \r von Zeilen, die mit \r\n enden. Kann durch Angabe von --no-keep-cr von der Kommandozeile aus überschrieben werden. Siehe git-am[1], git-mailsplit[1].

am.threeWay

Standardmäßig schlägt git am fehl, wenn der Patch nicht sauber angewendet werden kann. Wenn dieser Wert auf true gesetzt ist, weist dies git am an, auf einen 3-Wege-Merge zurückzugreifen, wenn der Patch die Identität der Blobs aufzeichnet, auf die er angewendet werden soll, und wir diese Blobs lokal verfügbar haben (entspricht der Angabe der Option --3way von der Kommandozeile aus). Standardmäßig ist dies false. Siehe git-am[1].

GIT

Teil der git[1] Suite