web-dev-qa-db-ja.com

svn cpまたはsvn mvが使用されたときに、svn diffでパッチが適用されるファイルを生成するにはどうすればよいですか?

シナリオは次のとおりです。

  1. svn cpまたはmvファイル
  2. そのファイルを修正する
  3. svn diff> mypatch

他のマシン(同じ作業コピー、ただし変更なし):

  1. Mypatchを適用してみてください。
  2. 失敗->存在しないファイルを変更しようとします。

どうすればsvn diffでパッチ適用可能なパッチを作成したり、この場合svn diffで作成したパッチをきれいに適用したりできますか?コミットできません。 mergeinfoを保存したいと思います(明らかな回避策は、前のファイルに接続せずに、ファイルをまったく新しいものとして追加することです)。

64
Paweł Hajdan

Subversionでは、使用するdiffバイナリとそれに渡すパラメーターを指定できます。 svn diffの マニュアル を参照してください。

Svn diffから通常のパッチファイルを作成したいので、svn diffを通常のdiffのように見せたいでしょう。これを試して:

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

コンセプトの証明:

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

パッチ適用後、2つのファイルに違いはありません。

63
Ray

パッチ内のsvnプロパティも削除したい場合、そのためのオプションがあります:

svn diff --patch-compatible > mypatch.diff

svn help diff言う:

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

この方法で作成されたパッチは、古き良きプレーンpatchユーティリティと互換性があると想定されています。

9
Apteryx

--show-copies-as-addsオプションは svn diff Webページに記載され、 svn options page ?.

5
Adrian Pronk