質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SVN

SVNは、CollabNet社が開発したソースコードなどを管理する集中型のバージョン管理システムです。 Subversionとも呼ばれ、CVSの問題点を解決すべく開発された次世代のバージョン管理システムとして開発されました。基本的なコマンドはCVSと共通しています。複数人の開発者が共同でひとつのソフトウェアの開発にあたるときなどに、ドキュメント及びソースコードなどを管理するのに使用されます。

Q&A

解決済

3回答

5175閲覧

SVNで管理しているソースから「特定の文字列がなくなった」リビジョン番号を調べたい

kataware

総合スコア17

SVN

SVNは、CollabNet社が開発したソースコードなどを管理する集中型のバージョン管理システムです。 Subversionとも呼ばれ、CVSの問題点を解決すべく開発された次世代のバージョン管理システムとして開発されました。基本的なコマンドはCVSと共通しています。複数人の開発者が共同でひとつのソフトウェアの開発にあたるときなどに、ドキュメント及びソースコードなどを管理するのに使用されます。

0グッド

1クリップ

投稿2015/02/12 03:56

例として一つのファイルをSVNで管理しているとして
3つのリビジョンがあります。

r.3
ほげ
ふが

r.2
ほげ
ぴよ

r.1
ほげ

この時、
ソースから「ぴよ」が消失したのがr.3
ソースに「ぴよ」を含んでいるのはr.2です。

このように特定の文字列が消失したリビジョン、
もしくは特定の文字列を含むリビジョンを調べたいのですが
どうしたらいいのかわかりません。

調べる方法を教えていただけないでしょうか?
(検査対象のファイルの変更内容をすべて出せるならgrepで拾えそうですが。。。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

$ svn blame -r リビジョン http://svn/repos/ | grep "ぴよ"

とすれば、そのリビジョン以前で「ぴよ」が追加されたリビジョンがわかります。

また、リビジョンを変えて繰り返せば、「ぴよ」が最後に出現したリビジョンもわかります。この場合、繰り返しの回数は最大で log2(リビジョン総数) ですみます。

投稿2016/10/13 10:32

ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kataware

2017/10/06 04:59

すみません、だいぶ時間が空いてしまいました。 この方法ですと 「追加されたタイミング」はわかりそうですね 試してみたら十分に早い時間で対応できました。
guest

0

勉強になりました。
ありがとうございます。

munyaXさんの解答を元にスクリプトを作成しても解決しないなら難しい問題のようですね。

差支えなければ、どれくらいの規模の容量やファイル数でしょうか?
探したい文字列は日本語でしょうか?

その規模に対して"ぴよ"探しにどれくらいの時間なら許容範囲なのでしょうか?

たとえば、探すのに何時間待てるなら問題は解決しますか?

逆に極論ですが100MBのファイルで1000のリビジョンという条件で1個探すのに「1分以内」でという要求はかなり専門的な分野になってくるのかと。

逆質問ですみませんが、個人的に興味があります。よろしくお願いします。

投稿2015/02/13 15:53

編集2015/02/13 16:01
hirumahanemui

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kataware

2017/10/06 05:51

ずいぶん遅い回答になってしまいましたが 既にリビジョンが3000を超えています。 コードとしては #!/usr/bin/bash begin=`date +"%s"` for i in `seq 1 3000` do j=`expr "$i" + 1` echo "$i=>$j" svn diff -r $i:$j http://svn/repos/ | grep "ぴよ" done end=`date +"%s"` echo "begin:$begin end:$end" echo "time:"`expr $end - $begin` こういう感じです。 あくまで検証用なので表示は見やすくないです。 実際に使う場合はgrepに引っかかった時だけリビジョン番号を出すとかすべきかと思います。 3000リビジョンの捜査を 単体のファイルに対して使用した場合は約10分 全体に使用した場合は約24分かかりました 当時の僕が何を求めていたかは思い出せないので何とも言えませんが どうしても見つけたい場合に使用するという想定だったら これで十分な気がします。 当時は余裕がなかったのかもしれません。
guest

0

ベストアンサー

$ svn diff -r 1:2 http://svn/repos/ | grep "ぴよ"
$ svn diff -r 2:3 http://svn/repos/ | grep "ぴよ"

とかですかね。
大量にあるならシェルで適当なスクリプト組めると思います。

もっとうまい方法がありそうですが、ひとまず。

投稿2015/02/12 04:32

munyaX

総合スコア783

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kataware

2015/02/12 07:18

ありがとうございます。 スクリプト組んだんですが、 リビジョンが1000超えてると結構時間かかりますね。 もう少しうまい方法が出てくるのを期待して 締め切らないでおきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問