Manfred89 hat geschrieben: 04.09.2023 12:34:32
Ich möchte mir einfach Wissen aneignen und bin auf das Programm patch gestoßen und habe mich gefragt, warum man das braucht [...]
Ach so, dann erzaehle ich dir vielleicht am besten etwas zum Hintergrund von patch (aufbauend auf Livingstons Post).
Ein ueblicher Fall in der Softwareentwicklung und auch generell bei der Arbeit mit Textdateien ist es, herauszufinden, worin sich zwei Versionen der Datei unterscheiden. Also beispielsweise die Version von heute von der Version von gestern oder meine Version von der meines Kollegen. Diese Antwort liefert `diff'. Diff ist ein sehr altes Programm, das zwei Dateien vergleicht und ihre Unterschiede ausgibt. Das was sie ausgibt nennt man einen Diff oder alternativ und gleichbedeutend einen Patch.
Diff kann verschiedene Formate ausgeben. Das heute uebliche Format ist der Unified Diff, das man mit `diff -u' erhaelt. Das Standardformat dagegen ist genau genommen ein Set an Befehlen fuer den Zeileneditor `ed', um aus der einen Datei die andere zu machen. Um mittels eines Unifed Diffs eine Datei in die andere umwandel zu koennen, braucht es ein anderes Programm, und das ist `patch'. Waehrend ed ganz stupide arbeitet, hat patch einige Intelligenz und versucht auch leicht abweichende Patches noch korrekt anzuwenden oder kann die eindeutigen Teile des Patches anwenden und die unklaren dem User zum manuellen einpflegen hinterlassen.
Auf dieses Basis war es dann ueblich, dass man Aenderungsvorschlaege an freie Softwareprojekte einreicht: man laedt sich also den Quellcode des Projekts runter, macht lokal bei sich ein paar Anpassungen, erzeugt dann einen Diff zwischen der Originalversion und der veraenderten Version und schickt diesen dem Projekt zurueck, mit der Bitte um Aufnahme. Die Entwickler konnten dann mit dem Diff also der Patch-Datei die Aenderungen bei sich einspielen, sie anschauen und letztlich aufnehmen.
Alle Versionskontrollsysteme basieren auch darauf, die Aenderungen (mit diff erzeugt und mit patch angewendet) zu erfassen und zu verwalten.
Als Endanwender braucht man heutzutage patch gar nicht mehr. Um es sinnvoll verwenden zu koennen, muss man selber eigentlich auch Entwickler sein. (Frueher, als es noch eher noetig war, waren alle Anwender zumindest halbe Entwickler.) Auch in der Entwicklung machen das die Versionsverwaltungssysteme heutzutage automatisch intern. Ein manueller Aufruf von patch kommt im Alltag kaum noch vor.
Diff dagegen ist durchaus ueblich, wenn man viel in der Shell arbeitet. Damit kann man sich beim Shellscripting das Leben immer wieder mal einfacher machen.
Damit aber genug der Geschichtenerzaehlerei ... Und wenn sie nicht gestorben sind, leben Diff und Patch noch immer gluecklich in der Unix Shell.