it-swarm.com.de

Wie kann man svn diff erzeugen lassen, dass der Patch angewendet wird, wenn svn cp oder svn mv verwendet wird?

Das Szenario ist:

  1. svn cp oder mv eine datei
  2. ändere diese Datei
  3. svn diff> mypatch

Auf einem anderen Computer (dieselbe Arbeitskopie, aber keine Änderungen):

  1. Versuchen Sie, mypatch anzuwenden.
  2. Fail -> versucht, eine nicht vorhandene Datei zu ändern.

Wie kann ich svn diff dazu bringen, Patches zu erstellen, die für Patches geeignet sind, oder in diesem Fall Patches, die von svn diff erstellt wurden, sauber anwenden? Ich kann mich nicht festlegen. Ich möchte mergeinfo beibehalten (da die offensichtliche Problemumgehung darin besteht, die Datei als vollständig neu hinzuzufügen, ohne dass eine Verbindung zur vorherigen besteht).

64
Paweł Hajdan

Mit Subversion können Sie angeben, welche Diff-Binärdatei verwendet und welche Parameter an Subversion übergeben werden sollen. Siehe das Handbuch auf Svn Diff.

Sie möchten eine reguläre Patch-Datei aus einem SVN-Diff erstellen, damit der SVN-Diff wie ein normaler Diff aussieht. Versuche dies:

svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch
...
patch -p0 < mypatch

Konzeptioneller Beweiß:

echo "newline" >> README.txt
svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch
cp README.txt README.txt.patched
svn revert README.txt
patch -p0 < mypatch
diff README.txt README.txt.patched

Kein Unterschied zwischen den beiden Dateien nach dem Patchen.

63
Ray

Wenn Sie die svn-Eigenschaften auch in Ihren Patches entfernen möchten, gibt es dafür eine Option:

svn diff --patch-compatible > mypatch.diff

svn help diff sagt:

  --patch-compatible   : generate diff suitable for generic third-party
                         patch tools; currently the same as
                         --show-copies-as-adds --ignore-properties

Auf diese Weise erstellte Patches sollen mit dem guten alten Dienstprogramm plain patch kompatibel sein.

9
Apteryx

Haben Sie die Option --show-copies-as-adds Ausprobiert, die auf der Webseite svn diff angegeben und auf der Seite ) beschrieben ist? svn options page ?.

5
Adrian Pronk