Ich möchte einen Patch aus einem bestimmten gcc
Zweig erstellen , der ihn mit den offiziellen Releases vergleicht. Wenn ich also den Tarball aus der Stable-Version entpacke, kann ich den Patch anwenden und das Äquivalent dessen erhalten, was sich in diesem speziellen Zweig befand.
Es ist das erste Mal, dass ich einen Patch erstellen muss. Daher mache ich das zum ersten Mal. Mein Hauptanliegen ist es, die richtigen Optionen und das richtige Parsing zu finden, da es sich um eine äußerst wichtige Software handelt
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Ist das genug und der beste Weg, es zu tun?
gcc
aus dem offiziellen Stabletar.bz2
und eine andere instabile Version davon aus einemgit
Repository, ich möchte einen Patch erstellen, natürlich möchte ich nur mit demmaster
Branch vergleichen, nicht mit dem gesamten Repository.tar.bz2
ist eindeutig keingit
Aufbewahrungsort. Wie sollte ich Ihrer Meinung nach vorgehen?Antworten:
Ja, dies ist eine gute Möglichkeit, einen Patch zu erstellen.
Zusamenfassend:
Zum Erstellen eines Patches für eine einzelne Datei sieht Ihr Befehl möglicherweise so aus
diff -Naru file_original file_updated > file.patch
wo
-N
: Abwesende Dateien als leer behandeln-a
: Alle Dateien als Text behandeln-r
: vergleicht rekursiv alle gefundenen Unterverzeichnisse-u
: NUM (Standard 3) Zeilen mit einheitlichem Kontext ausgebenSo erstellen Sie einen Patch für das gesamte Verzeichnis:
diff -crB dir_original dir_updated > dfile.patch
wo
-c
: NUM (Standard 3) Zeilen des kopierten Kontexts ausgeben-r
: vergleicht rekursiv alle Unterverzeichnisse-B
: Änderungen ignorieren, deren Zeilen alle leer sindImmerhin kann man diesen Patch anwenden
Dabei
p
weist switch patch an, das Pfadpräfix zu entfernen, damit die Dateien korrekt identifiziert werden. In den meisten Fällen sollte es sein1
.Entfernen
--dry-run
Sie, wenn Sie mit dem Ergebnis auf dem Bildschirm zufrieden sind.quelle
dir_updated
vergleich zu dem was dort war gelöscht wirddir_original
? Diediff
kümmert sich um das zu oder es wird übersprungen?file.patch
Sie können es also in einem beliebigen Editor oder in einer Textdatei öffnencat
und sehen eine Zeile wieonly in dir_original: missingfile.txt
patch
wird das gelöschtmissingfile.txt
oder was noch?diff -N ...
wie in meinem ersten Beispiel. Normalerweisepatch
werden leere Dateien standardmäßig entfernt. Wenn Sie nicht möchten, verwenden Sie einfach nurdiff -crB
wie in Ihrer Frage. In einigen (seltenen) Fällen ist die-E
Option impatch
Befehl erforderlich, um leere Dateien nach dem manuellen Patch zu entfernen:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
immercan't find file to patch at input line 3
mit derpatch -p0 --dry-run < diff.patch
ersten Zeile des Patches liest--- dir/file
zweiten+++ dir/file.new
mit Zeitstempeln, der Unterschied scheint genau richtig zu sein, gibt es eine Option, wie die genauen Dateinamen zu melden, die der Befehl sucht?