2

問題を説明するための例を挙げます。

ソースファイルにいくつかの変更を加えました。例:フォルダ内:

project/foo/src
project/fun/src
.
.

差分は次のように表示できます。

# svn diff -r 2000:2001 <svn url>

次に、プロジェクトの単体テストをフォルダーに変更しました。

project/foo/tst
project/fun/tst
.
.

これらの特定の変更の差分は、次のように表示できます。

# svn diff -r 2001:2002 <svn url>

後で、ソースコードにいくつかの間違いを見つけ、project / foo/srcにいくつかの変更を加えました。これらの特定の変更の差分は、次のように表示できます。

# svn diff -r 2002:2003 <svn url>

ここで、ソースコードの変更のみを表示するための単一のsvn diffコマンドが必要です(単体テストの変更を除く)。

連続していない変更(つまり、2000-2001および2002-2003)を表示するコマンドが1つも見つかりませんでした。これはどういうわけか可能ですか(注:2つの別々のdiffコマンドで可能であることがわかっています。単一のコマンドで可能かどうかを調べようとしています)。

または、コマンドのsvnurlで正規表現を指定することは可能ですか。つまり、次のようなものです。

# svn diff -r 2000:2001 <svn url pattern>
//where 'pattern' lists folders that does not contain 'tst' in name. 
4

4 に答える 4

1

svnを1回呼び出すだけではそれができないと思います。(2つの呼び出しを行うことの何が問題になっていますか?何かを一緒にハックしようとするよりも簡単です。)

ワイルドカードを使用する必要がある場合は、grepを使用しました。与える

svn diff -r 2000:2001 <svn url pattern> | grep -v 'test'
于 2012-09-03T14:25:00.183 に答える
0

ユースケースでは、ファイルパスごとにスライスする方がよいでしょう。それでも複数のコマンドになりますが、暫定バージョンで更新を行った場合は、最小の累積差分が得られます。

svn diff -r2000:2003 project/foo/src
svn diff -r2000:2003 project/fun/src

パスが多数ある場合、これは面倒になりすぎる可能性があります。1回限りのジョブの場合、履歴をGitなどのDVCSにインポートし、そのリベース機能(または同等の機能)を使用して履歴を書き換えて、配布する差分を取得できます。

于 2012-09-03T18:49:18.133 に答える
0

私は答えを得ました。:)

このためのチェンジリストを作成できます。

詳細については、http ://svnbook.red-bean.com/en/1.5/svn.advanced.changelists.htmlをご覧ください。

したがって、ソースコードの変更用の変更リストと、単体テストの変更用の別の変更リストを作成できます。

作業コピーでしか使用できないという欠点があります。

チェンジリストは特定の作業コピーの成果物です。つまり、チェンジリストの割り当てをリポジトリに伝播したり、他のユーザーと共有したりすることはできません。

于 2012-09-05T05:25:22.047 に答える
0

Subversion 1.7(およびそれ以降)では、次のことができます。

svn log --diff -r 2000:2003 project/foo/src

これにより、srcに適用されるすべてのリビジョンの個別の差分が得られます。(ただし、同じリビジョンで変更された他のターゲットについても)

于 2012-09-06T15:29:24.837 に答える