質問
ソース管理としてSubversionを使用するオープンソースプロジェクトにいくつかのローカル変更があります。 (元のプロジェクトリポジトリに対するコミットアクセス権はありません。)
変更によりファイルが追加されますが、このファイルは" svn diff"の出力には含まれません。 (新しいファイルはプレーンテキストではなくバイナリであることに注意してください。)
新しいファイルを含むパッチを作成するにはどうすればよいですか
$ svn st
A tests/foo.zip
$ svn diff
$
解決
ファイルがバイナリであるという事実が、まさに表示されない理由です。 Subversionのdiffコマンドは、テキストによる差分/パッチのみを行います(Subversionは内部的にバージョン間のバイナリファイルの違いを効率的に処理できますが)。
他のヒント
私はポッツァーに似た行動を経験しました。そして、彼の答えは、通常のsvn diff --forceよりもうまく機能しました。ただし、DOSマシン(Cygwin経由など)で実行している場合は、彼の答えをわずかに変更する必要があります。次のdiff +パッチは、-binary argを使用してCygwinのテキスト+バイナリファイルにパッチを適用しました:
svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff
patch -p0 --binary -i mybinarydiff.diff
diffコマンドには--forceオプションがありますが、私のマシンのバイナリに対して誤ったパッチファイルが生成されます。 --diff-cmdオプションと一緒に使用すると、私にとってはうまくいきます:
svn diff --force --diff-cmd /usr/bin/diff -x -au
これはまさにあなたが望むものを生み出すと思います。
パッチを作成している場合は、欠落しているファイルを空として処理する--new-fileオプションを指定した単純な古い 'diff'を使用できます。
このオプションの構文は、実際に使用している従来のdiffのバージョンによって異なる場合があることに注意してください。