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

このQ&Aのポイント
  • SVNで特定のファイルにのコミットコメント履歴を見たいと思っています。その際に、2つのタグを指定しその間の履歴のみを参照したいと思っています。
  • SVNでタグを指定してコミットコメントの履歴を取得する方法、およびタグを指定してリビジョン番号を取得する方法について質問です。
  • SVNでタグ指定でコミット履歴を見るには、タグをつけたリビジョンを指定すれば良いですが、リビジョンの取得方法が分かりません。タグを指定してコミットコメントの履歴を取得する方法やリビジョン番号を取得する方法について教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

Subversionでは、タグの扱いがCVSとは違いますが…その辺りは理解されています? 推奨されているSubversionのリポジトリレイアウトでリポジトリを作成した場合、 タグを設定すると、「その時のリポジトリのコピー」を作成するような感覚になります。 タグ1を作成(Rev10) ブランチ2を作成(Rev11) ブランチ2にコミット(Rev12~14) トランクにコミット(Rev15) ブランチ2にコミット(Rev16) トランクにブランチ2をマージしてコミット(Rev17) タグ2を作成(Rev18) とした場合、どこのログが欲しいのでしょうか? svn log タグ1のURL の場合は、タグ1を作成した時に記録したログしか出ませんし、 svn log タグ2のURL の場合は、タグ2を作成した時に記録したログしか出ません。 上記のRev11~Rev17のログは取得できません。 リポジトリのルートでRev10~Rev18のログを取得することで、全部のログが取得できますが… コミットした時のパスは異なっているので、そこから抽出するの少々手間が掛かるかと思われます。 一般的なSubversionの運用では、タグを切った後はそのタグに対してコミットすることはない…と思われますが。 この場合は、 svn info タグのURL とすることで、Last Changed Revがリビジョンとなります。 # もちろん、タグの下でコミットしていたらアテになりませんが… # その場合は svn log タグのURL で、最後に表示されたリビジョン…となるでしょう。

mibusys
質問者

お礼

> svn info タグのURL これでとりあえず、質問の(2)に該当する、やりたかったことが実現できました。 開発者として単にリポジトリを使っている際には CVNとそれほど大きくは変わらないと思っていました。 しかし最近、ライブラリアンとしてdiffやlogを駆使して シェルを作ったりしなければならなくなり、そうなったときに 意外と差があることに(ようやく)気付き戸惑っていました。 大変助かりました。ありがとうございました。

mibusys
質問者

補足

> とした場合、どこのログが欲しいのでしょうか? # 2つのタグを指定しその間の履歴 コマンドでいうと 「svn log -r 10:18 URL」もしくは「svn log -r 11:17 URL」 です。 ※タグ・ブランチ作成のコメントはどうでもいいです。 含まれていても問題ないし、含まれていなくても問題ありません。 シェルではタグを指定することになるので、実質的には 「svn log -r 10:18 URL」になります。 さらにほしい情報を具体的に書きますと 「svn log -r 10:18 トランクURL」の場合には、15, 17のみ 「svn log -r 10:18 ブランチURL」の場合には、12, 14, 16のみ となります。 トランクURLを指定した際にはブランチの履歴は出てほしくありません。 ブランチURLを指定した際にも指定したブランチ以外の情報が出ると困ります。 上記のコマンドでいけそうかなと思っています。 もしお気づきの点・アドバイス等ありましたら 追加でコメントよろしくお願いします。

関連するQ&A

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

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

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

  • 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を使ってとかはナシで)

  • Eclipsのコミットでエラー

    Eclipsで、パッケージ・エクスプローラーの一番上のプロジェクト?で、 コミットをするとコミット中に下記エラーがでて、 コミットが中断してしまいます。 解決方法がわかりますでしょうか? "cvs コミット" コマンドの実行中にサーバーがエラーを報告しました。 sample: cvs commit: sticky tag `1.1' for file `.classpath' is not a branch sample: cvs [commit aborted]: correct above errors first! ※尚、上記配下のソースなどその他のものは全て、正常にコミットできています。

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

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

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

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

  • 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では、リリース時の資材の受渡しにおいて、タグを使用せず、リビジョン番号だけ通知するほうがよいのでしょうか?

  • シェルでGitからデータを取得する方法

    シェルでGitからソースを取得する方法があれば教えて下さい。 現在、Linuxサーバー上に配置しているシェル内で、以下の処理を行っています。 [svn export --force "Linux上のAフォルダパス" "svn://・・・・"] 1.SVNからファイルを取得 2.Linux上のフォルダに「1」で取得したファイルを配置 今度、ソース管理がSVNからGitに代わることになるのですが、 上記のシェルで行っていたことをGitに対してもできるのでしょうか? 「git archive~」や「git checkout-index~」でファイルは取得できそうですが、 シェルに書くコードとしてはどのように書けばいいのでしょうか? よろしくお願いします。

  • Linuxでsvnコマンドでcommitしたい。

    現在Ubuntu Linuxを使用しています。svn管理のディレクトリ内で、a.outというフォルダを削除しました。 これをSVNサーバー側のリポジトリ側へも反映したいのでcommitしたいのですがどうやれば良いでしょうか? 現在カレントディレクトリは /root/20140411 このディレクトリです。 20140411のディレクトリがSVNで管理しているディレクトリです。 /root/20140411 カレントディレクトリ内で # svn update このようにアップデートを行ってみたら、アップデートできました。 しかし、 # svn commit これをやっても、コミットされませんでした。 現在のカレントディレクト内をコミットする方法をご教示頂きますよう、お願い致します。

  • android Logcat関数のタグ指定について

    こんにちは。 以下のコマンドを実行すると、アンドロイドのログのタグ名が"abc"のもののログが取得できます。 \adb shell #logcat -d -s abc (↑(1)) さてここで質問なのですが、タグ名が " abc"の場合(頭にスペースを含んでいる)と 先ほどのコマンドでは結果が表示されません。 #logcat -d -s " abc" (↑(2)) 上記でやっても取得できませんでした。 これを取得できる方法はあるのでしょうか? シェルのスペースの取り扱いの問題でしょうか? 宜しくお願い致します。

専門家に質問してみよう