Ich habe eine Anwendung, foobar
für die jemand einen Patch geschrieben hat, um eine Funktion hinzuzufügen, die mir gefällt. Wie kann ich den Patch verwenden?
Ich habe eine Anwendung, foobar
für die jemand einen Patch geschrieben hat, um eine Funktion hinzuzufügen, die mir gefällt. Wie kann ich den Patch verwenden?
Antworten:
Patches sind normalerweise in .diff
Dateien enthalten, da die Patches mit dem diff
Befehl erstellt werden .
Ein Patch ist eine Reihe von Einfügungen und Löschungen in den Quellcode. Aus diesem Grund müssen Sie die Anwendung (z. B. "foobar") nach dem Anwenden des Patches aus dem Quellcode erstellen, um den Patch verwenden zu können. Also, in Schritten:
1. Holen Sie sich das Quellpaket für foobar .
Die meisten Linux-Distributionen (nb patching ist nicht Linux-spezifisch) haben "Quellpakete", die Sie für diesen Zweck verwenden können. Da diese jedoch heterogen sind, beziehe ich mich hier nur auf das Format der Originalquelle. Die Originalquelle ist nicht Teil der Distribution und möglicherweise schwer zu finden. Ein guter Ausgangspunkt ist Wikipedia, das Artikel für viele beliebte Anwendungen enthält. Der Artikel sollte einen Link zu einer Homepage mit einem Quelldownload enthalten. Sie können natürlich auch selbst googeln. Das Quellpaket wird ungefähr so heißen foobar.0.1.tar.bz2
. Entpacken Sie diese - Sie haben jetzt ein Verzeichnis namens foobar.0.1
.
2. Fügen Sie den Patch hinzu.
Manchmal handelt es sich bei Patches um einzelne Dateien und manchmal um mehrere Dateien. Kopieren Sie diese in foobar.0.1
und cd foobar.0.1
. Als nächstes müssen Sie den patch
Befehl ausführen . Dies wird von der Standardeingabe gelesen, sodass Sie die .diff
Datei weiterleiten möchten . Der schwierige Teil besteht darin, zu bestimmen, was für die -p
Option verwendet werden soll (wenn der Patch keine Anweisungen enthält). Dazu müssen Sie sich den Anfang der Patch-Datei ansehen. Beispielsweise:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
In diesem Fall comm.c
ist dies der Name der Quelldatei, die geändert wird. Beachten Sie jedoch, dass ein Verzeichnis angehängt ist. Da dies nicht dasselbe Verzeichnis ist ("alt" vs. "neu"), ist dies ein großer Hinweis darauf, dass dieser Teil des Pfades (für unsere Zwecke) Junk ist. Der Zweck des -p
Schalters (siehe man patch
) besteht darin, dieses Präfix zu entfernen. Es wird eine Zahl benötigt, dh die Anzahl der Schrägstriche ( /
), die entfernt werden müssen, wobei sich alles dazwischen befindet. In diesem Fall würden wir -p1
den Pfad auf einfach reduzieren comm.c
.
Das setzt voraus, dass comm.c
es sich tatsächlich in demselben Verzeichnis befindet, was ein weiterer Hinweis darauf ist, ob Ihre Interpretation korrekt ist. Wenn beide diese Linien waren src/comm.c
, und comm.c
ist tatsächlich im src
Unterverzeichnis des Build - Baum, dann müssen Sie verwenden -p0
- aufpassen , dass nicht mit -p
überhaupt werden alle Schrägstriche entfernen. Wenn der Pfad absolut ist (dh mit beginnt /
), ist es wahrscheinlich das, was Sie wollen. Wenden Sie nun den Patch an:
patch -p1 < patch.diff
Die Quelle wurde jetzt geändert. Wenn mehr .diff
Dateien vorhanden sind , wenden Sie diese auf die gleiche Weise an.
3. Erstellen und installieren.
Dies ist der normale Prozess , den Sie durch zu bauen etwas von der Quelle gehen würden - zuerst ./configure
, dann make
, make check
, make install
. Wenn Sie bereits eine Installation von haben foobar
, entscheiden Sie vor der letzten, ob Sie diese entfernen oder überschreiben möchten oder wie Sie mit dem Namenskonflikt umgehen möchten. Sie möchten wahrscheinlich foobar
auf Ihre neue, gepatchte Version verweisen und nicht auf die alte.