Was ist das Format einer Patch-Datei?


74

Was bedeutet folgendes?

diff -rBNu src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java
--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700
+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java  2009-03-10 14:11:55.000000000 -0700
@@ -4,9 +4,12 @@

+  int CJK = 21;
+  int DIGIT = 22;

   int DEFAULT = 0;

   String[] tokenImage = {
     "<EOF>",
+    "\"OR\"",
     "<WORD>",
     "<ACRONYM>",
     "<SIGRAM>",
@@ -39,6 +42,8 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",

Antworten:


107

Die von -uIhnen verwendete Option gibt das einheitliche Format an. In diesem Format sind die ersten beiden Zeilen eine Kopfzeile: ---ist die Originaldatei, +++ist die neue Datei und die Zeitstempel.

@@ Block-Header

Darauf folgen Chunks (Change Hunks), die mit der @@ -R,r +R,r @@Syntax beginnen.

Dies sind zwei Bereiche, der mit dem -Bereich für den Block in der Originaldatei und der mit +dem Bereich in der neuen Datei. Das Rbezeichnet die Zeilennummer, unter der die Diff-Operation gestartet wird.

Die Zahlen nach dem Komma geben die Anzahl der betroffenen Zeilen in jeder Datei an .

  • Jedes Mal , wenn Sie eine Zeile entfernen , ist die +rZahl kleiner als -r.
  • Jedes Mal, wenn Sie eine Zeile hinzufügen , ist die +rZahl größer als-r
  • Durch Ändern einer Zeile wird 0die +rZahl erhöht. (gleicher Zeilenumfang)

Teile von Codezeilen

Innerhalb dieser Chunks werden Zeilen als Hinzufügungen oder Löschungen bezeichnet, -bedeutet Löschen, +bedeutet Hinzufügen. Linien, die sich in diesem Block nicht geändert haben, haben weder +noch eine -Vorderseite.

In Ihrem Beispiel bedeutet dies, dass zwei Blöcke oder Abschnitte zwischen den beiden Dateien geändert wurden und die darin enthaltenen Zeilen +die neuen sind. Es wurde nichts gelöscht.

Sie können viel mehr Informationen über die Syntax finden, indem Sie eine Google-Suche nach Unified Diff durchführen.


3
Sie haben die Syntax "@@ -R + R @@" erwähnt, aber es ist tatsächlich "@@ -R, r + R, r @@". Was bedeutet die andere Zahl?
Omg

4
Die Zahlen nach dem Komma geben die Anzahl der betroffenen Zeilen in jeder Datei an. Jedes Mal, wenn Sie eine Zeile entfernen, ist die +rZahl kleiner als -r. Jedes Mal, wenn Sie eine Zeile hinzufügen, ist die +rZahl größer als-r
New Alexandria

@NewAlexandria Ich würde dies neu formatieren, sodass beim Auflisten von Elementen jedes Element in einer separaten Zeile eingerückt ist.
Bob

3
Lines that did not change in that chunk will have neither + or - front of it.Ich denke, es wäre genauer / spezifischer zu sagen, dass es einen Platz davor haben wird. Dies ist wichtig, da eine Zeile in einer geänderten Datei, mit der begonnen wurde @@, nicht mit der Diff-Syntax verwechselt werden darf.
Nateowami

1
Alternative Erklärung für r: -rist die Anzahl der Zeilen im Block der Originaldatei; +rist die Anzahl der Zeilen im Block in der neuen Datei. Zählen Sie grundsätzlich die Anzahl der Zeilen im Block vor und nach der Änderung.
Poke

19

Der alte Dateiname

--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700

Der neue Dateiname

+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java  2009-03-10 14:11:55.000000000 -0700
  • -4: Chunk beginnt in Zeile 4 in der alten Datei (einschließlich Kontextzeilen);
  • 9: Anzahl der Zeilen im Block in der alten Datei, einschließlich Kontextzeilen (also insgesamt Zeilen, vor denen ein -oder nichts steht);
  • +4: Chunk beginnt in Zeile 4 in der neuen Datei;
  • 12: Anzahl der Zeilen im Block in der neuen Datei, einschließlich Kontextzeilen (also insgesamt Zeilen, vor denen ein +oder nichts steht).

Hinweis : Ich habe das Diff so geändert, dass es eine geänderte Zeile enthält, also eine gelöschte Zeile, gefolgt von einer hinzugefügten Zeile.

@@ -4,9 +4,12 @@

+  int CJK = 21;
+  int DIGIT = 22;

-  int DEFAULT = 0;
+  int DEFAULT = 42;

   String[] tokenImage = {
     "<EOF>",
+    "\"OR\"",
     "<WORD>",
     "<ACRONYM>",
     "<SIGRAM>",

Wie oben, aber beachten Sie, dass der Block in der neuen Datei 3 Zeilen weiter beginnt, da der vorherige Block einen Nettowert von 3 Zeilen hinzugefügt hat.

@@ -39,6 +42,8 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",

1
Vielen Dank für die Erklärung der 9 und 12 in diesem Beispiel
Fragen und Lernen

1

Die +Zeichen bedeuten, dass diese Zeilen seit der letzten Version von hinzugefügt wurden NutchAnalysisConstants.java. Die @@Zeile zeigt an, dass der Diff zu einem anderen Abschnitt der Datei gesprungen ist, in diesem Fall Zeile 39 im Original oder Zeile 43 im neuen.


2
@@ -39,6 +43,8 @@ was bedeuten 6 und 8 konkret?
Omg

1
Dies ist die Anzahl der Zeilen, auf die der Änderungsblock für die jeweilige Datei angewendet wird. Für die alte Datei gilt dies für 6 Zeilen gegenüber 8 für die neue Datei.
John G

Es stellt sich jedoch heraus, dass die neue Datei nicht geändert wird. Ist das beabsichtigt?
Omg

0

Das hängt davon ab, was Sie fragen. Diff zeigt Ihnen die Unterschiede zwischen zwei Dateien. In Ihrem Fall unterscheiden Sie sich NutchAnalysisConstants.javavon zwei verschiedenen Orten und generieren Informationen über diese Unterschiede.

-r diff bedeutet "rekursives Diff", obwohl es in diesem Fall nichts bewirkt, da Sie Dateien und keine Verzeichnisse unterscheiden.

-B bedeutet, Änderungen zu ignorieren, die nur Leerzeilen betreffen.

-N bedeutet, dass wenn in Verzeichnis1 ich eine Datei habe, diese aber nicht in Verzeichnis2 vorhanden ist, diff sie so behandeln sollte, als ob die Datei vorhanden, aber in Verzeichnis2 leer ist (wodurch Sie effektiv den vollständigen Inhalt der Datei in Verzeichnis1 erhalten).

-u bedeutet, das einheitliche Ausgabeformat zu verwenden, das nur von GNU diff und GNU patch unterstützt wird.

Was die Ausgabe bedeutet, kann dieser Link für Sie nützlich sein.


1
Link nicht gefunden. Bitte
korrigieren
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.