GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Arbeiten Sie mit Linux-Diff und -Patch an einer Datei zusammen

Ich bearbeite viele Textdateien. Manchmal ist es Code. In anderen Fällen ist es das geschriebene Wort für Rollenspiele (RPGs), Programmierbücher oder allgemeine Korrespondenz. Manchmal ist es schön, eine Änderung vorzunehmen, aber mein Mitarbeiter muss meine Änderung mit dem vergleichen, was er ursprünglich geschrieben hatte. Viele Benutzer verwenden standardmäßig Office-Suiten wie LibreOffice, die Kommentare oder Funktionen zur Änderungsverfolgung verwenden. Manchmal ist ein einfacheres Tool jedoch sinnvoller, und dafür können Sie in der Programmierhistorie nach Tools wie diff suchen und patch , die eine standardisierte Formatierung zum Nachverfolgen und Anwenden von Änderungen auf freigegebene Dateien bereitstellen.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Selbst bei einer einfachen Datei ist die Synchronisierung zweier Dokumente komplex. Einige Elemente werden geändert, andere bleiben unverändert, neue Inhalte werden hinzugefügt, und einige bleiben gleich, werden aber an andere Stellen im Dokument verschoben. Es ist schwierig, Änderungen zu replizieren, ohne glücklich zu akzeptieren, dass alle Änderungen gleichermaßen gültig sind, und die alte Datei durch die neue zu ersetzen. Es ist auch monolithisch undurchsichtig. Es gibt so viele Änderungen, dass es schwierig ist, genau herauszufinden, was sich geändert hat.

Mit dem diff Befehl können Sie eine Aufzeichnung darüber erstellen, wie sich die Datei geändert hat, und mit patch Sie können diese Änderungen über die alte Version "wiederholen", um sie mit der neuen Version auf den neuesten Stand zu bringen.

Einrichtung

Angenommen, Sie und ich arbeiten gemeinsam an einer Datei, die beschreibt, wie man eine Tasse Tee zubereitet.



Bisher die Datei tea.md enthält rohes Kopieren und Einfügen:

Boil water.
Warm the teapot.
Add tea and water to the teapot.
Place a tea cosy over the teapot.
Steep for 6 minutes.
Pour tea into cup.
Add milk.

Es scheint vernünftig, aber Sie können immer Optimierungen vornehmen, also senden Sie mir die Datei zur Verbesserung. Um den Prozess der Teezubereitung zu verdeutlichen, kopiere ich die Datei als tea-revision.md und bearbeiten Sie es, bis Sie Folgendes erhalten:

Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Wie erwartet sind einige Gegenstände (Boil water und Pour tea into cup ) bleiben unverändert, während andere Zeilen (Warm the teapot ) wurden ergänzt. Einige Zeilen sind komplett neu und einige Zeilen sind gleich, aber in einer anderen Reihenfolge.

Diff erstellen

Der diff Tool zeigt den Unterschied zwischen zwei Dateien an. Es gibt verschiedene Möglichkeiten, die Ergebnisse anzuzeigen, aber ich denke, die klarste ist --unified (-u kurz) Ansicht, die anzeigt, welche Zeilen hinzugefügt oder entfernt wurden. Eine Zeile, die in irgendeiner Weise geändert wurde, wird als Zeile behandelt, die subtrahiert und dann hinzugefügt wurde. Standardmäßig diff gibt seine Ausgabe an das Terminal aus.

Geben Sie diff an mit der alten Datei und dann der neuen Datei:

$ diff --unified tea.md tea-revised.md 
--- tea.md      2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+Warm a teapot in the proving drawer of your oven.
 Boil water.
-Warm the teapot.
-Add tea and water to the teapot.
-Place a tea cosy over the teapot.
-Steep for 6 minutes.
+Add tea leaves to a tea strainer.
+Add strainer and water to teapot.
+Steep for 6 minutes. Keep it warm with a tea cosy.
 Pour tea into cup.
-Add milk.
+Optionally, add warm milk.

Ein Pluszeichen (+ ) am Anfang einer Zeile gibt etwas an, das der alten Datei hinzugefügt wurde. Ein Minuszeichen (- ) am Anfang einer Zeile zeigt an, dass eine Zeile entfernt oder geändert wurde.

Erstellen Sie einen Patch mit diff

Eine Patch-Datei ist nur die Ausgabe von diff --unified Befehl in einer Datei abgelegt. Sie können dies mit der Standard-Bash-Umleitung tun:

$ diff -u tea.md tea-revised.md > tea.patch

Der Inhalt der Datei ist genau derselbe wie der, der an das Terminal ausgegeben wurde. Ich schaue mir gerne Patch-Dateien in Emacs an, die jede Zeile farblich kennzeichnen, je nachdem, ob sie hinzugefügt oder entfernt wurde.

Änderungen mit Patch anwenden

Sobald ich eine Patch-Datei habe, kann ich sie Ihnen zusenden, damit Sie sie überprüfen und optional auf Ihre alte Datei anwenden können. Einen Patch wenden Sie mit dem patch an Befehl:

$ patch tea.md tea.patch

Zeilen wurden hinzugefügt, Zeilen wurden subtrahiert, und am Ende erhalten Sie eine Datei, die mit meiner Version identisch ist:

$ cat tea.md
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Es gibt keine Begrenzung, wie oft Sie eine Datei patchen können. Sie könnten meine Änderungen iterieren, einen neuen Patch generieren und mir diesen zur Überprüfung zusenden. Durch das Senden von Änderungen anstelle von Ergebnissen kann jeder Mitwirkende überprüfen, was sich geändert hat, entscheiden, was er behalten oder entfernen möchte, und den Prozess genau dokumentieren.

Installieren

Unter Linux und macOS haben Sie bereits beide diff und patch Befehle. Unter Windows können Sie diff abrufen und patch über Cygwin, oder verwenden Sie Chocolatey, um nach diffutils und patch zu suchen.

Wenn Sie jemals versucht haben, per E-Mail oder Chat an Dateien zusammenzuarbeiten, und dabei festgestellt haben, dass Sie versucht haben, zu beschreiben wo Sie eine Änderung vornehmen müssen, dann werden Sie diff lieben und patch . Eine sorgfältig strukturierte Datei, wie z. B. Code oder zeilenbegrenztes Markdown, lässt sich leicht unterscheiden, patchen und warten.


Linux
  1. Wie dekomprimiere ich das .xz-Dateiformat unter Linux mit den Dienstprogrammen tar und xz?

  2. Linux .htaccess Tipps und Tricks

  3. So verschlüsseln und entschlüsseln Sie eine Datei mit GnuPG unter Linux

  4. 7 Patch-Befehlsbeispiele zum Anwenden von Diff-Patch-Dateien unter Linux

  5. Unterstützte und empfohlene Dateisysteme unter Linux

So verwenden Sie den Linux-diff-Befehl

So zeichnen Sie Linux-Terminalsitzungen mit den Befehlen „script“ und „scriptreplay“ auf und geben sie wieder

Alles über Tar-Dateien und wie man Dateien in Linux mit Terminal tart und enttarnt

So löschen Sie eine Festplatte und Datei sicher mit dem Linux-Befehl shred

So verstecken Sie Ordner und Dateien in Linux mithilfe einer Textdatei

Vergleichen Sie zwei Dateien unter Linux – Verwenden Sie diff, vimdiff und colordiff