So fügen Sie eine neue Datei in einen Patch ein


9

Ich versuche einen Patch wie hier vorgestellt zu machen .
Angenommen, ich habe zwei Verzeichnisse pp1(modified version)und pp0(clean version)erstelle eine Patch-Datei pp0.patchmit dem folgenden diffBefehl:

 diff -crB pp0 pp1 > pp0.patch

Das Problem ist, wenn eine Datei nur in pp1 vorhanden ist, wird sie nicht in den Patch aufgenommen. Wie kann man das umgehen?

UPDATE :
Ich wechsle zuerst in das Verzeichnis von pp0 und teste, ob der Patch erfolgreich sein wird

  patch --dry-run -p1 -i /path-to-pp0.patch

Obwohl ich --new-filedem diffBefehl hinzugefügt habe , werden diese nur in pp1nicht im Ergebnis aufgeführt

UPDATE :
Ich habe also versehentlich die falsche Datei gepatcht

  diff -crb --new-file pp1 pp0 > pp0.patch

oder

  diff -crNb pp1 pp0 > pp0.patch

Wird besorgt

Antworten:


9

Sie sollten dies mit dem --new-fileSchalter tun können . Entnommen aus der Manpage von diff :

 --new-file
          In directory comparison, if a file is found in only  one  direc-
          tory, treat it as present but empty in the other directory.

Versuche dies:

diff -crB --new-file pp0 pp1 > pp0.patch

Ich weiß nicht, ob ich es richtig gepatcht habe, aber die neue Datei ist nicht enthalten
Manuzhang

Ich entschuldige mich, das funktioniert
Manuzhang

3

Die sofortige Antwort: diff -NWie von Pootzko erklärt . Sie werden feststellen, dass viele Patches von erstellt wurden diff -urN.

Was kann Ihr Leben verbessern: Verwenden Sie ein Tool zur Versionskontrolle. Wenn Sie keine kennen, beginnen Sie mit einem der drei wichtigsten verteilten Revisionskontrollsysteme , Bazaar , Git oder Mercurial . Checken Sie die saubere Version ein, arbeiten Sie, checken Sie Ihre Arbeit so oft ein, wie Sie möchten, und fragen Sie Ihr Versionskontrollsystem nach einem Unterschied zwischen der sauberen Version und Ihrer Arbeit.


Danke, ich wünschte, ich könnte einen im wirklichen Leben haben und in die Vergangenheit zurückkehren, wenn ich einen Fehler mache :)
Manuzhang
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.