リビジョン指定でのSVNログ取得で、ファイルが削除されている場合の指定

このQ&Aのポイント
  • SVNのリビジョン指定において、削除されたファイルのログを取得する方法について教えてください。
  • CVSの場合はリビジョン指定で削除されたファイルのログを取得する方法がありますが、SVNでは構文エラーとなってしまいます。
  • 2つのタグの間の差分を出力するシェルを作成しており、リビジョン指定で変更ファイルの一覧は取得できましたが、削除ファイルのログの取得がうまくいきません。代替方法などがあれば教えてください。
回答を見る
  • ベストアンサー

リビジョン指定でのSVNログ取得で、ファイルが削除されている場合の指定

リビジョン指定での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つのタグの文字列になります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答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されていた(移動していた/リネームされた)場合にどうするか…という問題がありますが。 # 手元のリポジトリ、軽く見てもリネームしたモノが無い。 # まぁ、テスト用のリポジトリ作って実験できなくはない…のですが、そこはご容赦を。 シェルスクリプトの複雑さがかなり増しそうですね…。

mibusys
質問者

お礼

せっかくご回答いただいたのにお礼が遅れてしまい大変申し訳ありません。 教えていただいた方法で出来そうだなーと思いつつ 時間が無く取り掛かれずにいまだ試していません。 試行錯誤を行ないながら時間が出来たときに試してみたいと思います。 ご回答ありがとうございました。

関連するQ&A

  • SVNでタグ指定でコミット履歴を見る方法は?

    SVNでタグ指定でコミット履歴を見る方法は? SVNで特定のファイルにのコミットコメント履歴を見たいと思っています。 その際に、2つのタグを指定しその間の履歴のみを参照したいと思っています。 CVSでは普通に用意されていて、容易に実行できました。 SVNでも同等の機能があるはずだと思っていたのですが、 少し調べたところCVSとは違い、タグを指定してコマンドを 実行する文化が無いようだということは分かりました。 代わりに、タグをつけたときのリビジョンを指定すればいいのですが タグをつけたときのリビジョンの取得方法が分かりませんでした…。 そこで質問です (1)(もしあるならば)SVNコマンドでタグを指定して  コミットコメントの履歴を取得する方法 (2)SVNコマンドでタグを指定してそのリビジョン番号を取得する方法 ※(1)(2)ともにそうですが、出来ないことが分かっているのなら 「出来ない」という情報をいただけるとうれしいです。 ※作業自体はシェルに書き込むので、SVNへの複数回のアクセスや Linuxコマンドを組み合わせて実行するのでもかまいません。 よろしくお願いします。

  • SVNで外部参照した際のリビジョンについて

    SVNで外部参照した際のリビジョンについて SVNで過去のリビジョンを取得した際、外部参照しているファイルは最新のリビジョンを取得してしまいます。 外部参照の設定で-rを付けると、特定のリビジョンを指定できるのですが、この方法では参照元のりビジョンが上がった場合、最新を取得することが出来ません。 過去のリビジョンを取得したとき、そのリビジョンの時点での外部参照のリビジョンを取得する方法は無いのでしょうか? サーバーはSubversion-1.5.6.msiをXP上で動かし、 クライアントはTortoiseSVN 1.6.7を使用しています。 何かご存知の方いらっしゃったらよろしくお願いいたします。

  • SVNでの最新のリビジョン番号取得について

    SVNで最新のリビジョン番号をLinuxのコマンドを取得したいです。 svnlook youngestだと引数にURLを指定できないので実行できません。 イメージとして、 [コマンド] <リポジトリブラウザのURL> を想定しています。

  • 仮にCVSで誤って極秘情報(パスワード・住所など)をコミットしてしまった場合、単一リビジョンのみの削除は可能でしょうか?

     仮にCVSでうっかり誤って極秘情報(パスワード・住所など)をコミットしてしまったとします。この場合そのリビジョンのみの削除はCVSからできるのでしょうか?実験でクリーンコピーで取得してもサーバに残っていました。これはサーバ管理者に依頼しないといけないのでしょうか?単一リビジョンのみの削除はできずファイルごと(これまでのすべての履歴ごと)削除しないといけないのでしょうか?

  • CVSコマンドrlogでブランチにつけたタグで実行したいがうまくいかな

    CVSコマンドrlogでブランチにつけたタグで実行したいがうまくいかない CVSコマンドのrlogを実行したいのですが、うまくいきません。 「cvs rlog: invalid branch or revision pair…」というメッセージが出ます。 ※「コマンド」と表現していますが、シェルの中で「FROM_TAG」「TO_TAG」 を指定し、連続的に指定ファイルのrlogを機械的に取得するという 処理を行ないたいと思っています。 コマンドは以下のような単純なコマンドです。 ------------------------------- PERIOD=${FROM_TAG}::${TO_TAG} cvs -d ${CVSROOT} rlog -N -r${PERIOD} ${ファイル名} ------------------------------- 指定しているタグはブランチに付与した「つもり」のタグです。 そこで、タグを確認してみたところ TO_TAGは確かにブランチに付与されていました。一方で FROM_TAGはtrunkに付与されていました。 「それが原因だろ」といわれるとそのとおりなのですが、 タグは確かにブランチを指定しタグを付与しました。 FROM_TAGをつけたのはブランチを作成した直後です。 つまり、trunkとまったく同じファイル。 なので、リビジョンはtrunk用の「1.n」のままです。 この時点で、ブランチの最新にタグをつけたのですが、 するとタグは「1.n」系のリビジョンにつきました。 ファイル自体はまったく変更していないので当然といえば当然です。 それではと、とりあえず以下のコマンドにしたところ一応うまくいきました。 ------------------------------- PERIOD=::${TO_TAG} cvs -d ${CVSROOT} rlog -N -r${PERIOD} ${ファイル名} ------------------------------- ただ、これが通用するのはブランチを作成してから 何も修正していない状態のファイルにだけです。 つまり、ブランチを作成してから、タグA, B, Cを打っており BとCを指定してrlogを取得するときに、 AとBの間、BとCの間で修正があったソースは成功するけれども BとCの間だけで修正があったソースは失敗してしまうことになると思います。 この現象を回避するコマンドの書き方はありますでしょうか? タグのつけ方が何か悪いのでしょうか? タグを適切につけたらこのようなことはおこらないのでしょうか? (SVNならこんな苦労はしないはずなのに…とも思っています) 対応方法・アドバイス等よろしくお願いします。 (SVNを使ってとかはナシで)

  • SUBVERSIONを使った一般的なリリース管理、運用ルールについて

    SVNを使ったリリース管理、運用方法について教えてください。 現在、CVSを使って大規模プロジェクトのソース管理及びリリース管理を実施しています。 その方法は大まかに以下のような仕組みとルールで実施しています。 (1)複数の製造者→自分に必要な資材をチェックアウト→適宜修正→自由にコミット (2)リリースすべき資材のリビジョンの特定 (人間系でEXCELの一覧作成 タグ番号1つに対し、複数ファイルの、ファイル名、リポジトリ上のパス、特定リビジョンを記載) (3)製造者は上記(2)のリリースすべき資材の特定リビジョンへのタグ付け 上記(2)のEXCEL一覧からcvs tag コマンドを自動生成するツールを利用 (4)上記(2)のEXCEL一覧をリリース担当者へ提出 (5)リリース担当者は、上記(4)で受け付けたEXCEL一覧に記載のタグ番号をキーに CVSエクスポートし、共通のコンパイル環境へソースを持ち込みコンパイル (6)コンパイル後の資材を、リリース先の環境へ適宜反映(反映方法等はここでは割愛します) -----ここから本題----- CVSとSVNの差異(SVNでのリビジョン、タグ・ブランチの概念の違い)については、一通り関連サイトを調べて理解しました。 CVSで実施していた上記(1)~(6)は若干面倒ですが、以下のメリットがありました。 ・(2)によって製造元が自分が何をいつリリースしようとしているかソース単位で把握させることができる ・(3)によって複数の人間が修正した複数の資材の様々なリビジョンにひとつのタグをつけてくくれる。 ・(5)によってリリース担当者は製造元が依頼したソースをタグによって間違いなく取得できる。 これらは、数百人以上の製造者が数十のグループにわかれて製造を実施するようなシステム開発においては、リリースコントロールの面で一定の作業品質を保つためにはそれなりに有効でした。(シンプルな運用ルールなので作業にばらつきがあまり出ない。) ★悩み事★ SUBVERSIONでは、 ・リビジョンは常にある時点でのツリー全体のスナップショットである。 ・異なるリビジョンには同一名のタグは付与できない。 ・タグを付与する際に選択したディレクトリ配下のサブディレクトリ及びファイルにしかタグが付与されない。 (CVSでは、タグ指定のCVSエクスポート時に選択したディレクトリ配下は空の階層も含め全て取得できた。) このため、リリース担当者側が資材を受取りコンパイル環境に持込みコンパイルする作業がかなり非効率になります。 一度に複数のグループからLIB管担当に対してリリース依頼を行うような運用体制を前提にしなければならない前提でも、 SVNでは、リリース時の資材の受渡しにおいて、タグを使用せず、リビジョン番号だけ通知するほうがよいのでしょうか?

  • .svnフォルダを削除するソフトウェア

    SVNの作業フォルダ内のサブフォルダなどにできる”.svn”フォルダを一括で削除してくれるソフトがあると聞いたのですが、ご存じの方いらっしゃいましたら教えて頂きますようお願い致します。 バッチファイル削除する方法も知っているのですが、指定したフォルダを右クリックしてその削除を実行できるようなソフトのようなのですが、 よろしくお願いします。

  • AIXでの指定ディレクト以下の全ファイル削除について

    お世話になっております。 AIX5.1のOSで、指定ディレクトリ以下(ファイルのみしか存在しない)ファイルを全て自動で削除するようにシェルを組むことは可能でしょうか? 以下のようにシェルを作成しましたが、ファイル数が多すぎるらしくエラーで削除することができませんでした。 ちなみに、ファイル数は約4000以上あります。 rm -f /(指定ディレクトリ)/* ファイル数が多くても削除できるようにしたいのですが、何かよい方法はありますでしょうか? 以上宜しくお願い致します。

  • solarisにおけるファイルアクセスのログ取得に関しまして

    SolarisでWWWサーバを構築しています。 htdocs以下のデイレクトリに、ファイルが置かれた場合、削除された場合、更改された場合などのファイルアクセスログを取得したいと思っています。なにかよい方法はありますでしょうか? よろしくお願いいたします。

  • 【CVS】exportすると削除したファイルがある

    お世話になっております。 CVSに詳しい方ご教示ください。 現在CVSの1.11.20を使用しているのですが、 タグを使用してexportもしくはcheckoutすると、removeした(Atticには残っている)ファイルが作成されます。 このAtticに入っているファイルは作成しないようにしたいのですが、 オプションなど指定することで削除しなくするようにできますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう