
リビジョン指定での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つのタグの文字列になります。
No.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されていた(移動していた/リネームされた)場合にどうするか…という問題がありますが。
# 手元のリポジトリ、軽く見てもリネームしたモノが無い。
# まぁ、テスト用のリポジトリ作って実験できなくはない…のですが、そこはご容赦を。
シェルスクリプトの複雑さがかなり増しそうですね…。
せっかくご回答いただいたのにお礼が遅れてしまい大変申し訳ありません。
教えていただいた方法で出来そうだなーと思いつつ
時間が無く取り掛かれずにいまだ試していません。
試行錯誤を行ないながら時間が出来たときに試してみたいと思います。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TortoiseSVNでリポジトリURLの...
-
Tortoise SVNでのファイルをア...
-
SVNへ登録した際の「日時」につ...
-
svnでファイル移動すると履歴が...
-
svnadmin loadをするとエラーする
-
Subversionのチェックアウトが...
-
TortoiseSVN1.6.7でのhttps接続
-
Subversionで日本語ファイル名...
-
TortoiseSVNにおける削除ファイ...
-
「.svn」の隠しフォルダが勝手...
-
[SVN]Subversionリポジトリの容...
-
".svn-base"という拡張子の追加...
-
Excel: ファイル名になぜ、[...
-
Access VBAから使用したExcelプ...
-
「このファイルを開く前に常に...
-
自動で.xlsを閉じて指定フォル...
-
PTBファイルの変換
-
「セキュリティの警告 発行元...
-
CSVファイルの特定行の削除
-
DataTableに入っているデータを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TortoiseSVNでリポジトリURLの...
-
svnでファイル移動すると履歴が...
-
Subversionで日本語ファイル名...
-
Tortoise SVNでのファイルをア...
-
Subversionのチェックアウトが...
-
[SVN]Subversionリポジトリの容...
-
TortoiseSVNにおける削除ファイ...
-
svnadmin loadをするとエラーする
-
SVNへ登録した際の「日時」につ...
-
Subversionのリビジョン番号一...
-
subversionでログを表示しよう...
-
FFFTPでディレクトリを上の階層...
-
Subversionでチェックアウトが...
-
SVNのアンロック
-
Subversionのインポート操作を...
-
subversionクライアントでメッ...
-
svnリポジトリ内の一部のフォル...
-
Subversionでのチェックアウト...
-
TortoiseSvnをバッチファイルで...
-
Subvirsion サーバに接続できま...
おすすめ情報