質問

私はソース管理システムとして SVN を使用していますが、メタデータの違いを無視してディレクトリを比較する方法を疑問に思っています。伝える方法はありますか svn diff 実際のコンテンツのみを比較し、メタデータを無視するには?

SVN プロパティなどのメタデータを意味します。ファイルの内容には影響しません。ファイル X には、トランク T と比較してブランチ B に追加のプロパティがあると仮定します。残念ながら、ファイル X の実際の内容は同じであっても、「svn diff T B」に表示されます。

私は次のようなものを探します:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize

アップデート: SVN ツールを使用する代わりに、ファイルシステム上で直接 diff を実行することで、この問題を部分的に解決しました。以下の私自身の答えを参照してください...

役に立ちましたか?

解決 5

svn 組み込みツールを使用してこれを行う方法はないようです。私がそれを解決した方法:両方のツリーをエクスポートし、お気に入りの差分ツールを使用してファイルシステム上で直接比較します。どういうわけかこれがこれを実現する唯一の方法です:/

他のヒント

「filterdiff --clean」を介して svn diff 出力を渡すと、プロパティの変更を含む無関係な行を削除できます。

を使用する場合は、 --summarize オプションを使用すると、プロパティの変更が最初の列ではなく 2 番目の列に示されます。

つまり、

M  URL  -- indicates content change
 M URL  -- property change
MM URL  -- content and property change

grepするのは少し簡単です。完全な差分が必要な場合は、2 段階のプロセスが必要になると思います。最初に要約を使用して内容が変更されたファイルを見つけ、次にそれらの差分を調べます。

JosephWatkins からの素敵なヒント。

grep-junior-users のコマンドは次のとおりです。

svn diff A B --summarize | grep '^. '

grep は、行の 2 番目の文字としてスペースを探します。

svnヘルプドキュメントを検索中にこれを見つけました

svn diff --patch-compatible

走るのと同じだよ

svn diff --show-copies-as-adds --ignore-properties

これをすべて実行する 1 つのコマンドを次に示します。現在のディレクトリにあるリビジョン 54833 から 57215 までのすべてのファイルの (プロパティ以外の) 差分をすべて検索したいとします。このコマンドはそれを行う必要があります:

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215

注意:変更されたファイルのみを比較し、追加または削除されたファイルは比較しません。

使用 svn diff --ignore-properties. 。これは、コンテンツのみの差分を行う Subversion の組み込みメソッドです。アイテムのプロパティへの変更は無視されます。

オンラインで見つからなかったので、これを行うためのスクリプトを書きました。

スクリプトは、スクリプトの先頭に入力された正規表現の配列に基づいてデータを削除します。現在、プロパティの変更をフィルターで除外するように設定されていますが、一連の正規表現に一致する変更はすべて削除できます。

の出力をパイプするだけです svn diff スクリプトを設定した後、スクリプトに追加します。常に同じフィルターを実行するため、パラメーターの代わりにフィルターをスクリプトに配置しました。

GPLv2としてリリースしました。

clean_svn_diff.bash

よくわかりませんが、シンプルな 'svn diff | grep -iv「無視するもの」は回避策です。

設定できるのは、 svn:無視 svn diff で無視したいファイルとディレクトリのプロパティ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top