アプリケーションをビルドしてリモートマシンにアップロードし、そこでパフォーマンステストを実行して、気になるメトリックをキャプチャするスクリプトがあります。このスクリプトは、ワークスペースで行ったローカル変更用のパッチファイルを作成し、パフォーマンス番号とともに表示します。これは、さまざまな調整オプションの効果を比較するのに役立ちます。後でワークスペースを再作成する場合は、SVNリビジョン番号とパッチを使用できます。
最初に明示的にsvn diff
を使用しない限り、ワークスペースに追加した新しいファイルはsvn add
から報告されません。新しいファイルも含むパッチファイルを作成する方法はありますか?
PS:同様の質問が尋ねられました here が適切に回答されていませんでした、IMO。
svn diff
にローカルの作業用コピーからバージョン管理されていないすべてのファイルを含めるには、これらのファイルを最初に追加する必要があります。 svn diff
は、svn commit
が使用するのと同じチェンジセットを出力します。
バージョン管理されていないすべてのファイルをここに追加する必要があることが確実にわかっている場合は、次のことを実行できます。
svn status
の出力から疑問符で始まるすべての行を取得して、バージョン管理されていないファイルのリストを準備します。
svn status | grep ^? | sed -r 's/^\? +//' > ../unversioned_files_list.txt
次に、そのファイルのリストをsvn add
using xargs
に渡すことができます。
xargs -r -d '\n' svn add < ../unversioned_files_list.txt
次に、パッチを作成します。
svn diff > ../my_patch.patch
これらのファイルを追加したままにしたくない場合は、ファイルのリストを使用して、ファイルの追加を解除します。
xargs -r -d '\n' svn rm --keep-local < ../unversioned_files_list.txt
アレクサンドルに感謝します。最初は、彼のアプローチは私の場合うまくいきませんでした。すべての新しいファイルがsvn status
でA
になっていることを確認しましたが、diffファイルはまだ空でした。最後に、svn status
の出力に違いがあることがわかりました。私の場合、4番目の列にはすべて次のように+
が入力されています。
$ svn st
M .
A + New.Java
これは、アイテムがaddition-with-history
[1]にスケジュールされていることを意味します。これは通常、ファイルまたはディレクトリをsvn move
またはsvn copy
したときに発生します[2]。私の場合、New.Java
は別のブランチからのsvn merged
であり、そのブランチの以前のコミット履歴も含まれています。これらの履歴情報を削除してみましょう。
まず、すべてのaddition-with-history
アイテムを見つけます:
svn status | grep ^A | sed -r 's/^A[ +]+//' > /tmp/add_list
必要に応じて、/tmp/add_list
のディレクトリパスを削除して、次のステップでの警告を回避します。
次に、svn remove
を使用して履歴コミット情報を削除します。
xargs -r -d '\n' svn remove --keep-local --force < /tmp/add_list
次に、Alexandreのソリューションに戻り、それらを再度Subversionに追加して、差分を取得します。
参照:
[1]http://svnbook.red-bean.com/nightly/en/svn.ref.svn.c.status.html
[2]http://www.linuxtopia.org/online_books/programming_tool_guides/version_control_with_Subversion/svn.ref.svn.c.status.html