2012-09-02 12 views
85

Sowohl git am als auch git apply können zum Anwenden von Patches verwendet werden. Ich sehe den Unterschied nicht. Ich sehe jetzt einen Unterschied: git am wird automatisch festgelegt, während git apply nur die Dateien berührt, aber kein Commit erstellt. Ist das der einzige Unterschied?Was ist der Unterschied zwischen Git am und Git anwenden?

+7

'am' könnte man sich als eine Abkürzung von' Apply Mail' vorstellen ... –

Antwort

74

Sowohl die Eingangs- und Ausgangs sind unterschiedlich:

  • git apply einen Patch nimmt (beispielsweise die Ausgabe von git diff) und wendet sie auf das Arbeitsverzeichnis (oder Index, wenn --index oder --cached verwendet wird).
  • git am nimmt ein Postfach von als E-Mail-Nachrichten formatierten Commits (z. B. die Ausgabe von git format-patch) und wendet sie auf den aktuellen Zweig an.

git am uses git apply behind the scenes, aber macht mehr Arbeit vor und nach (zur Schaffung von Commits) (a Maildir oder mbox und Analysieren von E-Mails zu lesen).

+5

Hinweis: 'git apply' scheint auch' git format-patch' zu akzeptieren. –

+3

'git apply' würde auch für die Ausgabe von' git format-patch' funktionieren, aber die Änderungen wären nicht gesetzt und müssten festgeschrieben werden (wodurch ein anderer Commit-Punkt im Index erzeugt wird, auf den sie angewendet werden). Mit "git am" würden Sie die Commit-Informationen (zusammen mit dem Autor usw.) in den Index übernehmen, auf den sie angewendet wird. 'git apply' ist dann zum Patchen Ihres Repos (schlecht),' git am' kann legit feature changes nehmen und es in Ihr Repo aufnehmen (bevorzugter Ansatz). –

6

Mit git am Sie den Patch so, wenn Sie git status verwenden, werden Sie keine lokalen Änderungen sehen.

git apply ermöglicht es Ihnen, die Änderungen in den Quelldateien zu machen, als ob Sie selbst den Code geschrieben haben, damit git status und git diff ausgeben wird, die in der Patch-Änderungen Sie sich beworben haben, dann können Sie beheben/weitere Änderungen hinzu und sende sie zusammen als einen neuen Patch ein.

9

git apply ist für gerade diffs Anwendung (beispielsweise von git diff) während git am ist für Patches und Sequenzen von Patches von E-Mail, oder entweder mbox- Maildir Format und ist die „entgegengesetzte“ von git format-patch Anwendung. git am versucht, Commit-Nachrichten und Autorendetails aus E-Mail-Nachrichten zu extrahieren, weshalb es Commits machen kann.

Verwandte Themen