{"id":848,"date":"2008-10-01T07:55:42","date_gmt":"2008-10-01T05:55:42","guid":{"rendered":"http:\/\/my.stargazer.at\/?p=848"},"modified":"2011-03-18T13:31:51","modified_gmt":"2011-03-18T12:31:51","slug":"patch-me-gently","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2008\/10\/01\/patch-me-gently\/","title":{"rendered":"Patch hin, Patch her"},"content":{"rendered":"<p>Patch &#8211; das magische Wort unter Linux. So viele Mythen, so viel Traum, so viel Ruiniert oder angest\u00fcckelt. Nur &#8211; was ist das, ein Patch? Ein Patch ist w\u00f6rtlich \u00fcbersetzt einfach ein Flicken, den man im Falle eines Loches dr\u00fcber n\u00e4ht &#8211; ein St\u00fcck Stoff, eine Ver\u00e4nderung am Ganzen. Unter Linux sogar eine Anleitung zur Ver\u00e4nderung.<\/p>\n<p>Wenn Programmierer etwas machen und ihre Arbeit weitergeben, ist es nicht zielf\u00fchrend, immer den ganzen Pulk an nicht ver\u00e4nderten Dateien mit zu \u00fcbertragen. Also wird ein Patch erstellt, der nur die Ver\u00e4nderungen darstellt &#8211; ein Textfile mit bestimmtem Format. Ein gutes Beispiel ist daf\u00fcr meist der Patch zum aktuellsten Kernel-Snapshot.<\/p>\n<p><!--more-->Aber wie generiert man das Ganze? Ich beginne hier einmal mit einem kleinen Programm namens &#8218;diff&#8216;. Wie der Name schon sagt, zeigt es Unterschiede zwischen zwei Dateien auf. Mit Hilfe dieses kleinen Tools kann man genau sehen, was sich bei Dateien ver\u00e4ndert hat. Aber brauchbar ist die Ausgabe noch nicht wirklich, wenn auch schon sehr nahe an dem, was wir wollen. Also versuchen wir es einmal mit ein paar Parametern:<\/p>\n<blockquote><p>diff -Naur file.old file.new > update.patch<\/p><\/blockquote>\n<p>Et voil\u00e0, hier ist unser Patch. Wer einen Haufen von Dateien \u00fcberpr\u00fcfen m\u00f6chte, der kann auch ganze Verzeichnisse angeben. Und wenn jemand gar Entwickler ist, der nutzt einfach eine Revisionsverwaltung, die eben diff benutzt, wie zum Beispiel Subversion.<\/p>\n<p>Nun wo wir unseren Patch in den H\u00e4nden haben, wollen wir einmal das Ganze einspielen &#8211; also den Weg des Anderen gehen, der das neue File noch nicht kennt. Wir patchen.<\/p>\n<p>Wenn der patch eine relative Pfadangabe verwendet, reicht -p1 als Parameter ansonsten kommt -p0 zum Zug:<\/p>\n<blockquote><p>patch -p0 < update.patch\npatch -p1 < update.patch<\/p><\/blockquote>\n<p>Das Ergebnis sollte in etwa so aussehen:<\/p>\n<blockquote><p>patching file file.old<\/p><\/blockquote>\n<p>Wenn wir nun die beiden Dateien file.new und file.old vergleichen, stellen wir fest, dass die beiden Dateien nun gleich sind. Der Patch hat unser file.old auf Stand gebracht.<\/p>","protected":false},"excerpt":{"rendered":"<p>Patch &#8211; das magische Wort unter Linux. So viele Mythen, so viel Traum, so viel Ruiniert oder angest\u00fcckelt. Nur &#8211; was ist das, ein Patch? Ein Patch ist w\u00f6rtlich \u00fcbersetzt einfach ein Flicken, den man im Falle eines Loches dr\u00fcber n\u00e4ht &#8211; ein St\u00fcck Stoff, eine Ver\u00e4nderung am Ganzen. Unter Linux sogar eine Anleitung zur Ver\u00e4nderung. Wenn Programmierer [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[22],"class_list":["post-848","post","type-post","status-publish","format-standard","hentry","category-it-related-stuff","tag-linux"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=848"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/848\/revisions"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}