Einführung
Diese Seite erklärt, wie Sie eine Patch-Datei anwenden können. Patch ist ein Standardformat, und es gibt viele Möglichkeiten, wie Sie einen Patch anwenden können. Wählen Sie diejenige, die für Sie am einfachsten ist.
Am wichtigsten ist vielleicht die Verwendung des Flags -p, das Patch über die Beziehung zwischen dem Verzeichnis, in dem sich die Patch-Datei befindet, und den Dateien, die gepatcht werden, informiert. Sehen Sie sich die Referenzen unten für Details an und nehmen Sie NICHTS an.
Patch unter Windows mit gnuwin32 anwenden
- Patch für Windows von sourceforge herunterladen und entpacken Ich habe die patch.exe Binärdatei in C:\bin platziert (HINWEIS: Es ist viel einfacher, wenn Sie es in ein Verzeichnis ohne Leerzeichen legen.)
- Moodle herunterladen und irgendwo entpacken. z.B.: C:\moodle
- Laden Sie die Patch-Datei herunter und legen Sie sie in das gleiche Verzeichnis, in dem Sie Moodle abgelegt haben (C:\moodle\password-policy-17.diff)
- Öffnen Sie die Patch-Datei mit Wordpad und klicken Sie auf „Datei“ >> „Speichern unter…“, wählen Sie einen anderen Namen für die Datei z.B. („mynewpatch.diff‘) und „Speichern unter Typ“ >> ‚Textdokument – MS-DOS Format‘
- Öffnen Sie ein Befehlstextfenster und geben Sie ein:
cd \moodle c:\bin\patch.exe --dry-run -p1 < mynewpatch.diff
Die Zahl nach der Option ‚-p‘ kann je nach Patch-Datei variieren, da sie davon abhängt, wie die Patch-Datei erzeugt wurde. Werfen Sie einen Blick auf die Handbuchseite des Dienstprogramms ‚patch‘, um zu sehen, wie die Option ‚-p‘ funktioniert. Sie können auch einen Blick auf dieses diff- und patch-Tutorial werfen.
- Sie sollten eine Ausgabe ähnlich dieser erhalten (die Namen und die Anzahl der gepatchten Dateien variieren von Patch zu Patch):
patching file admin/settings/security.php patching file lang/en_utf8/admin.php patching file lib/moodlelib.php patching file login/change_password.php patching file login/signup.php patching file user/edit.php Hunk #1 succeeded at 430 (offset 2 lines).
In diesem Stadium ist der Patch noch nicht angewendet worden. Wir haben die Anwendung nur simuliert (mit der Option „–dry-run“), um zu sehen, ob wir irgendwelche Probleme damit finden werden. Bevor wir erklären, wie man den Patch tatsächlich einspielt, werden wir darüber sprechen, was falsch sein könnte und wie man damit umgeht.
Potenzielle Probleme und wie man damit umgeht
Potenzielle Probleme
Wenn alles gut geht, wird der Patch sauber angewendet und das Leben sollte gut sein! Aber manchmal wird der Patch nicht zu 100 % sauber angewendet, weil es eine Versionsabweichung zwischen den Originaldateien, die zur Erstellung der Patchdatei verwendet wurden, und Ihren lokalen Dateien gibt. In diesem Fall versucht der ‚patch‘-Befehl, so viele Änderungen wie möglich anzuwenden, und gibt einige Diagnosen aus, die die Probleme beschreiben, auf die er stößt.
- Wenn Sie irgendwelche ‚Hunk #n succeeded…‘-Meldungen erhalten, wurde der Patch korrekt angewendet, wenn auch an anderen Zeilennummern als in der Originaldatei. Hätten wir den Patch tatsächlich angewendet, hätte der ‚patch‘-Befehl für jede der Dateien, in denen der Hunk an einem anderen Offset angewendet wurde, eine zusätzliche Datei erzeugt, die wie die Originaldatei mit der zusätzlichen Erweiterung .orig benannt wäre.
- Wenn Sie irgendwelche ‚Hunk #n failed…‘-Meldungen erhalten, wäre der Patch nicht korrekt angewendet worden. In diesem Fall hätte der ‚patch‘-Befehl zwei zusätzliche Dateien für jede der Dateien erstellt, bei denen der Hunk nicht korrekt angewendet wurde, und zwar mit den Namen:
- Original-Dateiname.orig Dies wäre die Originaldatei, bevor der Patch angewendet wurde, genau wie oben.
- Original-Dateiname.rej Diese Datei würde die Hunks enthalten, die nicht korrekt angewendet werden konnten, so dass Sie sie überprüfen können.
Behandlung möglicher Probleme
Die Behandlung des ersten Problems (die verschobenen Hunks) ist trivial: Wir müssen nur die .orig-Dateien löschen, sobald wir den Patch tatsächlich anwenden.
Im zweiten Fall (fehlgeschlagene Hunks) sollten Sie den Patch nicht anwenden, es sei denn, Sie wissen, wie Sie die fehlgeschlagenen Hunks von Hand reparieren können, da dies Ihre Moodle-Installation beschädigen würde. Wenn Sie den Patch einspielen und versuchen wollen, die fehlgeschlagenen Hunks von Hand zu reparieren, sollten Sie die Option ‚-b‘ verwenden. Diese Option erstellt automatisch ein Backup aller Dateien, auf die der Patch angewendet wird, mit der Erweiterung .orig. Das würde es Ihnen ermöglichen, zum ursprünglichen Zustand der Dateien zurückzukehren, indem Sie einfach die geänderten Dateien mit ihren .orig-Backups überschreiben.
Manchmal gibt es einen großen Unterschied in den Zeilennummern, seit ein Patch erzeugt wurde, und der Patch wird nicht angewendet. Sie können Patch veranlassen, größere Unterschiede in den Zeilennummern zuzulassen, indem Sie die Fuzz-Option ‚-F‘ verwenden, um die Anzahl der möglichen Zeilenunterschiede zu erhöhen. Zum Beispiel würde patch -F 100 einen Unterschied von 100 Zeilen zulassen.
Den Patch tatsächlich anwenden
Nun, da wir wissen, was schiefgehen kann und wie man damit umgeht, wollen wir sehen, wie man den Patch anwendet. Wir müssen nur die Option ‚–dry-run‘ entfernen:
cd \moodle c:\bin\patch.exe -p1 < mynewpatch.diff
und optional die Option ‚-b‘ verwenden, wenn wir versuchen wollen, die fehlgeschlagenen Hunks von Hand zu reparieren:
cd \moodle c:\bin\patch.exe -b -p1 < mynewpatch.diff
Mit NetBeans einen Patch in Windows anwenden
NetBeans verfügt über integrierte Werkzeuge für die Versionskontrolle und die Zusammenarbeit von Entwicklern, die leistungsstarke grafische Diff-Tools und das einfache Anwenden (und Erstellen) von Patches umfassen. Sie können jeden Patch über das Kontextmenü der Datei anwenden.
Patch unter Linux mit „patch“ anwenden
Verwenden Sie etwas wie:patch -p1 < patchfile.diffsiehe hier für weitere Details zur Verwendung von Patch in Linux
See Also
- Patch
- Entwicklung:How_to_create_a_patch
- Drupal – mit Cygwin unter Windows einen Patch anwenden
- Drupal – wie man einen Patch unter Mac OS X anwendet
- moodle post – mit gnuwin32 einen Patch anwenden