プロが教える店舗&オフィスのセキュリティ対策術

リビジョン指定でのSVNログ取得で、ファイルが削除されている場合の指定
SVNとCVSの違いで少しはまっています。


やりたいことは、リビジョンを指定しその間の変更ログの取得です。

CVSの場合は、対象としたいリビジョンの範囲で
追加・変更・削除の場合でそれぞれ以下のような指定で取得できました。
変更「cvs rlog -r100::200」
追加「cvs rlog -r::200」
削除「cvs rlog -r100::」


SVNの変更の場合は以下でうまくいきます。
「svn log -r 100:200」

しかし、削除があった場合には「構文エラー」となります。
以下のバリエーションを試しましたがダメでした。
「svn log -r 100:」「svn log -r 100」
「svn log -r 100:HEAD」「svn log -r 100:BASE」
「svn log -r 100:COMMITTED」「svn log -r 100:PREV」

途中での追加の場合は試していませんが、削除と同じ問題が
発生すると思っています。


削除・追加の場合のコマンドの表記方法、これを教えてください。
もしもSVNには上記の方法では情報を取得することが出来ない場合、
代替方法等あればそれを教えていただきたいです。

以上、よろしくお願いします。


背景を少し書いておきます。
2つのタグの間の差分を出力するシェルを作っています。
タグからリビジョン番号を取得し、そのリビジョンを使用して
svn diffを実行し、変更ファイルの一覧を取得する方法は成功しました。
で、ここから得られたリストを元に、各ファイルの
コミットコメントのログを取得したいと思っています。
なので、シェルの入力値は基本的には、2つのタグの文字列になります。

A 回答 (1件)

>svn diffを実行し、変更ファイルの一覧を取得する方法は成功しました。



svn diff -r XXX:YYY --summarize URL
で変更リストの取得…でしょうか?
その場合、1文字目で追加/削除/変更は判定できますよね?
# ただ、どのリビジョンで追加/削除されたかまでは判りません。
# 他に方法あるかも知れませんけど。リビジョン1つずつ上げながらsvn diffとか…

追加の場合、追加前のリビジョンを指定すると…
svn log -r 40:43 URL
svn: Unable to find repository location for 'URL' in revision 43
となりますな。(Rev62で追加している場合)
まぁ、この場合はsvn diffで指定したリビジョン外なら出てこないので問題ないでしょうが…。

Rev42で削除しているモノだと…
svn log -r 40:43 URL
svn: File not found: revision 69, path '/trunk/Resource/XXXX.cpp'
となります。
コレでRev42(ファイル削除のみでコミット)のログを取りたいとすると……URLの指定にちょっとした細工が必要なようです。
1つ上のディレクトリを指定すると…
svn log -r 40:43 URL(ただしディレクトリ指定)
------------------------------------------------------------------------
r42 | username | 2007-08-05 22:06:00 +0900 (日, 05 8月 2007) | 1 line

不要ファイルの削除。
------------------------------------------------------------------------
こんなんなります。

ディレクトリ下の他のファイルに付いての変更も一緒に出てきますから…
削除されたファイル(svn diff --summarize で1文字目がDのファイル)で、
構文エラーになったときだけそのリビジョンと1つ上のディレクトリを指定してログ取得を行い、以降はそのファイルについてのログ取得は実施しない。
というやり方でどうでしょう?

ただ…これでもsvn moveされていた(移動していた/リネームされた)場合にどうするか…という問題がありますが。
# 手元のリポジトリ、軽く見てもリネームしたモノが無い。
# まぁ、テスト用のリポジトリ作って実験できなくはない…のですが、そこはご容赦を。

シェルスクリプトの複雑さがかなり増しそうですね…。
    • good
    • 0
この回答へのお礼

せっかくご回答いただいたのにお礼が遅れてしまい大変申し訳ありません。

教えていただいた方法で出来そうだなーと思いつつ
時間が無く取り掛かれずにいまだ試していません。

試行錯誤を行ないながら時間が出来たときに試してみたいと思います。
ご回答ありがとうございました。

お礼日時:2010/10/19 15:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!