2012-04-02 2 views
49

Ich weiß, es gibt mehrere Threads auf diesem bereits, aber niemand hat vollständig erklärt, genau, wie das anfängliche diff ausführen, um die Patch-Datei zu erstellen, dann wie gelten, die Patch auf das ursprüngliche Verzeichnis, um es zu aktualisieren.Wie erstellt man einen Patch für ein ganzes Verzeichnis, um es zu aktualisieren?

In meinem Fall gibt es ein Verzeichnis von Dateien, die jeder aus dem Internet herunterladen kann. Ich habe dieses Verzeichnis übernommen und Änderungen daran vorgenommen, und ich möchte eine Patch-Datei erstellen, so dass andere sie auf das heruntergeladene Verzeichnis anwenden können, um genau das zu reproduzieren, was ich in meinem geänderten Verzeichnis habe.

Hilfe? Was muss ich der anderen Person in Bezug auf die Anwendung meines Patches mitteilen?

Antwort

91

Ich hatte gerade das gleiche Problem - viele Tipps, wie man es halb macht. Nun, hier ist das, was ich sowohl das Patchen bekommen habe und unpatching arbeiten:

die Patch-Datei zu erstellen:

  1. Put Kopien von beiden Verzeichnissen in etwa/tmp, so können wir den Patch erstellen Datei oder, wenn mutig, sie Seite an Seite bekommen - in einem Verzeichnis.

  2. Führen Sie eine entsprechende diff auf die beiden Verzeichnisse, alt und neu:

    diff -ruN orig/ new/ > file.patch 
    # -r == recursive, so do subdirectories 
    # -u == unified style, if your system lacks it or if recipient 
    #  may not have it, use "-c" 
    # -N == treat absent files as empty 
    

Wenn eine Person das orig/Verzeichnis hat, kann sie die neue, indem Sie Patch neu.

die neuen Ordner aus dem alten Ordner und Patch-Datei zu erstellen:

  1. Bewegen Sie die Patch-Datei in ein Verzeichnis, in dem der orig/Ordner

  2. Dieser Ordner verprügelt erhält vorhanden ist, so hält eine Backup von irgendwo, oder Verwenden Sie eine Kopie.

    patch -s -p0 < file.patch 
    # -s == silent except errors 
    # -p0 == needed to find the proper folder 
    
  3. An diesem Punkt der orig/Ordner enthält die neue/content, aber immer noch hat seinen alten Namen, so:

    mv orig/ new/ # if the folder names are different 
    
+3

Ich wünschte, ich könnte deine Hand schütteln. Vielen Dank! – poundifdef

+0

@DavidH Funktioniert das unter Windows mit Cygwin? – onmyway133

+0

Ich bin ein Mac-Typ, also keine Ahnung. Was Sie tun müssen, ist die Optionen für Patch und Diff auf Cygwin zu überprüfen. Deshalb habe ich die obigen Kommentare hinzugefügt, was die Optionen bedeuten - wenn also das eine oder andere Programm verschiedene Optionen anbietet, können Sie herausfinden, was geändert werden muss, damit es funktioniert. Konzeptionell sollten alle Patch/Diff-Programme die Funktionalität unterstützen. –

2

Check out Open-Source-Scarab C++ Bibliothek: https://github.com/loyso/Scarab

Es tut genau das, was Sie beschrieben haben. Es erstellt pro-Datei-Diff mit Xdelta-Bibliothek und legt es zu Archiv-Paket. Sie können dieses Paket neu verteilen und den Unterschied anwenden. Es gibt Binärdateien für Win32.

Ich bin der Autor von Scarab Projekt.