web-dev-qa-db-ja.com

SVNリポジトリ内のファイルから誰が行を削除したかを見つける方法は?

私は非常に大規模なプロジェクト(10000以上のバージョン)で作業していますが、他のユーザーの誰がファイルの行を削除したかを知る必要がある場合がありました。それを行う方法はありますか?できます svn blameリビジョン番号を使用して、そのリビジョンに行が存在するかどうかを確認し、行がなくなったリビジョンを確認し、誰がそのリビジョンをコミットしたかを確認しますが、その手順はその大規模なプロジェクトでは不十分です。

それを行うためのよりスマートな方法はありますか?

11
Ivan Petrushev

ファイルの履歴を確認して、その行が存在するリビジョンをすばやく見つけて、HEADとそのリビジョンのせいにします。

ファイルが開始以来100のリビジョンを経ている場合、その行を探してリビジョンをバイナリ検索する場合は、10を超える異なるリビジョンを調べる必要はありません。

5
ta.speot.is

これは必要なことを自動的に実行しますが、上記のようにバイナリ検索を使用しないため、それほど高速ではありません。

svn log FILE | egrep '^r[0-9]' | sed -e 's/ .*//' | while read rev; do echo $rev ; svn cat FILE -"$rev" | grep "case STRING" && break  ; done 
5
Peter Brülls

svn log --diffは、列0の「-」で削除を識別します。 「r」のgrepも、リビジョンを確認できるようにします。

% svn log --diff src/fozbo.cpp -r22222:HEAD | grep -e '^r' -e '^-.*xyzzy'
r22222 | jruser | 2016-07-19 20:16:07 -0400 (Tue, 19 Jul 2016) | 1 line
-   else if ( password== "xyzzy") {

もあります svn log --searchしかし、それはコミットメッセージのみを検索します。

2
Robert Calhoun