- ベストアンサー
リビジョン指定でのSVNログ取得で、ファイルが削除されている場合の指定
- SVNのリビジョン指定において、削除されたファイルのログを取得する方法について教えてください。
- CVSの場合はリビジョン指定で削除されたファイルのログを取得する方法がありますが、SVNでは構文エラーとなってしまいます。
- 2つのタグの間の差分を出力するシェルを作成しており、リビジョン指定で変更ファイルの一覧は取得できましたが、削除ファイルのログの取得がうまくいきません。代替方法などがあれば教えてください。
- みんなの回答 (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されていた(移動していた/リネームされた)場合にどうするか…という問題がありますが。 # 手元のリポジトリ、軽く見てもリネームしたモノが無い。 # まぁ、テスト用のリポジトリ作って実験できなくはない…のですが、そこはご容赦を。 シェルスクリプトの複雑さがかなり増しそうですね…。
お礼
せっかくご回答いただいたのにお礼が遅れてしまい大変申し訳ありません。 教えていただいた方法で出来そうだなーと思いつつ 時間が無く取り掛かれずにいまだ試していません。 試行錯誤を行ないながら時間が出来たときに試してみたいと思います。 ご回答ありがとうございました。