• 締切済み

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

みんなの回答

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.1

SVNは比較的なんでも自由にできてしまうために明確な運用ルールが必要になってくるのではないかと思います。 また、CVSとSVNは目的は似てますが異なったシステムですから、同じ運用ルールでは無理が生じます。タグの考え方も異なるのではないかと思います。 ブランチの概念は理解されているということなんですが、だとしたら数十のグループに分かれての開発はブランチを使えば良いのではないでしょうか? 例えば「ブランチを作ったチームはトランクへの適用まで責任を持って作業を行う」なんて運用ルールを作るのはいかがでしょうか? そうすれば、リリースは常にトランクにつけたタグから行えると思います。 予断になってしまいますが、運用ルールや複数できるであろうブランチの管理、変更作業の明確化などを踏まえてTracの導入などもお考えになられることをオススメします。 SVN,Wiki,BTSが連動するので、BTSのチケット情報から変更点の洗い出しなどができますし、SVN単体ではなかなか把握できないリビジョンごとの変更点をチェンジセットという形で視覚化することができます。

参考URL:
http://sourceforge.jp/projects/traclight/wiki/FrontPage

関連するQ&A

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

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

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

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

  • ffmpegの古いリビジョンを使いたい

    http://blog1.papanda.jp/2008/05/ffserveruvcusb.html にあるように、UVC対応のUSBカメラでキャプチャーしたいのと、 http://codezine.jp/article/detail/2444 のサンプルを動作させたいこともあり、 ffmpegの古いリビジョンを使いたいのですが、 svnでチェックアウトすると、libswscaleだけ外部項目ということで 最新のリビジョンがチェックアウトされます。 ソースの相性が悪く、コンパイルが通りません。 WindowsのExeだけは、アーカイブを提供しているサイトを見つけたの ですが、Linux版は見つけることができませんでした。 古いリビジョンを取得する方法もしくはアーカイブがあるサイトを ご存知の方はいらっしゃらないでしょうか。 リビジョンを特定しろと言われれば、 9133,9778,13235 です。 よろしくお願いします。

  • svnの差分を出力するバッチを作りたい

    現在ソース管理でsvnを使用しており、windows7で 毎日決まった時間に差分をエクスポートするバッチを作成しようと思っています。 今まではsvnのGUIツールTortoiseSVNを使用していて、手動で行っていたのですが、 対象ファイルが多く、この作業をwindows batchなどで出来たらいいなと思いました。 やりたいことは以下です。 (1)デスクトップに差分をエクスポートするフォルダを作る(例:差分フォルダを作成) ↓ (2)svnのリビジョンやタグを基準にして差分を(1)で作成したフォルダにエクスポート  (例:svn://XXX.XXX/turnkとsvn://XXX.XXX/branchの差分を差分フォルダにエクスポート) ↓ (3)差分一覧のようなものをテキストで(1)のフォルダに出力 (1)は出来たのですが、(2)と(3)がネット上で見てもあまり情報なくてわからず… 特に(3)とかは出来るかもわからず…javaやantだと出来ると同僚には伺ったのですが、javaに関して知識がなくて…antは少し書いていたことがある位です。 antなどでは上記のようなことは難しいのでしょうか? もし、参考になるサイトなどあれば教えていただけると助かります。 よろしくお願い致します。

  • UNIXとWindowwsでのバージョン管理連携

    毎度お世話になっております。 Subversionを利用したバージョン管理について質問です。 現在、Windows Server2008 R2にSubversionのリポジトリを作成しています。 このリポジトリには、Javaソース(Windowsで動作するもの)やCOBOL、Cなどのソース(UNIXで動作するもの)を管理しています。 チェックアウトを実施する際は、クライアントPC(Windows)上でTortoiseSVNを利用しています。 また、COBOL等のソースも一度、クライアントPCへチェックアウトを行った後、FFFTPを使ってUNIXサーバへ転送しています。 ここで、質問です。 上記操作を実施しないで、COBOL等のソースはUNIXサーバから直接チェックアウトを実施したいと考えています。 この場合、UNIXサーバにもSubversionをインストールしておかないとチェックアウトはできないのでしょうか?? それとも、TortoiseSVN的なSVNクライアント(コマンドベースのものを想定)がUNIXにも存在するのでしょうか? 知識不足で申し訳ありませんが、ご存じの方、どうかご教授お願いいたします。 ちなみに、プロトコルはSVNサービスを利用しています。

  • [svn+python]tracのinitenv中のsubversionエラー

    自分のマシン(Mac OS 10.5.5)にtracを導入に挑戦してる途中でのエラーで困っています。 tracのインストールを終え、リポジトリ作成、作業コピー作成を終えた後にinitenvしました。 Prohect Name, Database connection string, Repository type, Path to Repositoryを入力してEnterを押すと、以下の様なエラーが出ます。 ...(略) WikiStart imported from /Library/Python/2.5/site-packages/Trac-0.11.1.ja2-py2.5.egg/trac/wiki/default-pages/WikiStart Initenv for '/[Projetを作ろうとしたディレクトリ]/ProjectName' failed. ("Expected FS format '2'; found format '3'", 160043) Traceback (most recent call last): File "/Library/Python/2.5/site-packages/Trac-0.11.1.ja2-py2.5.egg/trac/admin/console.py", line 586, in do_initenv repos = self.__env.get_repository() File "/Library/Python/2.5/site-packages/Trac-0.11.1.ja2-py2.5.egg/trac/env.py", line 270, in get_repository return RepositoryManager(self).get_repository(authname) File "/Library/Python/2.5/site-packages/Trac-0.11.1.ja2-py2.5.egg/trac/versioncontrol/api.py", line 157, in get_repository repos = self._connector.get_repository(rtype, rdir, authname) File "/Library/Python/2.5/site-packages/Trac-0.11.1.ja2-py2.5.egg/trac/versioncontrol/svn_fs.py", line 280, in get_repository 'branches': self.branches}) File "/Library/Python/2.5/site-packages/Trac-0.11.1.ja2-py2.5.egg/trac/versioncontrol/svn_fs.py", line 401, in __init__ self.repos = repos.svn_repos_open(self.path, self.pool()) File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/libsvn/repos.py", line 47, in svn_repos_open return apply(_repos.svn_repos_open, args) SubversionException: ("Expected FS format '2'; found format '3'", 160043) 自分なりに調べ、「マシン内に複数バージョンのSubversionがあって、Pythonに通っているsvnへのパスがSubverion 1.5.xx。期待されていたのは1.4.xx」という風に認識しています。が、この先どうしたら良いかわからなくなってしまい、困ってしまいました。 質問は以下の3つ(4つ)です。 ■自分のマシンに入っているSubversionの一覧を知りたい ■Terminalで"which svn"と打つと、「/opt/local/bin/svn」と返ってきます。これが自分のマシン内に複数あるSubversionのどれを見に行っているのかを知りたい ■1.4.xxにパスを通したい or 1.5.xxを期待させたい (■その他上記エラーの解決策を知りたい) よろしくお願いします。

  • 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! ※尚、上記配下のソースなどその他のものは全て、正常にコミットできています。

  • ClickOnceでのテスト/本番の運用について

    お世話になっております。 ClickOnceの運用について質問させていただきたいことがございます。 vb.net(vs2005)で作成したアプリケーションをClickOnceでWEBサーバを使用して配布する予定です。これを以下のようにテスト用配布環境と本番用配布環境に分けたいと思っています。 プログラム:project.sln (1)テスト用配布サイト:http://xxxxxx/projecttest/publish.htm (2)本番用配布サイト :http://xxxxxx/project/publish.htm (1)に配置するClickOnceのモジュールはプロジェクトのプロパティの「インストールのURL」を「http://haifudrv/projecttest/publish.htm」に設定してからコンパイル、発行しています。 (2)に配置するClickOnceのモジュールはプロジェクトのプロパティの「インストールのURL」を「http://haifudrv/project/publish.htm」に設定してからコンパイル、発行しています。 ((1)・(2)のリビジョンは一致させています。) まずは(1)のモジュールをテストサイトにアップして特定のユーザに配布。ユーザが動作確認をしてリリース判定を行う。 ↓ リリースOKをもらった時点で(2)を本番サイトにアップして配布 というフローで今後運用したいと思っています。 つまり同一のクライアントで本番用、テスト用の両バージョンをそれぞれ動かしたいというのが希望です。 ところが上記のサイトからクライアントにインストールすると、スタートメニューに登録されるプログラムが後にインストールされたプログラムで上書きされてしまいます。 (\Local Settings\Apps\2.0\配下のプログラムも上書きされているように思えます。) プロジェクトのプロパティである発行名や製品名を変更しても同様の現象が発生しました。 同じプロジェクトから生成したモジュールなので上書きしあっていることが予想できるのですがなんとかして同一クライアントPCに同一のログオンでテスト用、本番用のプログラムを同居させることはできませんでしょうか? また、現在配布元のURLがテスト/本番と異なるために二度コンパイル、発行を行っているのですが、この処置ですと、「テスト完了済みのモジュールを本番に配布」という運用ができず、本番環境でもテスト作業が必要となってしまいます。 ためしに.applicationファイルのURLを書き換えるなどしてやってみたのですがダウンロード時にエラーとなってしまいうまく動きませんでした。同一モジュールで配布サイトを変更するようなことは可能でしょうか? 上記2点について実際にClickOnceにて運用されているかた、また手法をご存知の方いらっしゃいましたら恐れ入りますが情報をいただけませんでしょうか?

  • svnでマージ中止後からマージできない

    trunkフォルダ内のsoftwareというフォルダ内でcpp builder2009で作成のプロジェクトファイルで作業をしているのですが、修正などの編集を行いたくなり、softwareのフォルダをtortoise svnのブランチ機能で/branch/20140722_softwareというフォルダでブランチして、修正作業はこのフォルダ内で行いました。 一通り修正作業が完了したので、/trunk/software/のフォルダ内にマージ機能を使って見ようと思いました。 とりあえず現在の/branch/20140722_software/内で変更のあったソースコード関連のテキストファイル関連のファイルを/trunk/software/フォルダ内にマージをしたかったのですが、dfmという拡張子のファイルでconfrictが起こったようで、Abort mergeでマージを中止させました。 そして、競合があったファイルをResolveというのを/trunk/software/に行って、再度マージを行おうとするとマージが完了しているという内容が出てきました。 /branch/20140722_software/の最新リビジョン /trunk/software/の最新リビジョン この2つのフォルダをDFという比較閲覧ソフトで確認してみたところ、/branch/20140722_software/で変更をかけたソースコードのテキストファイルは/trunk/software/フォルダ内にはコピーされていない状態でした。 tortoise svnのマージの操作方法はこちらのサイトを参考にして実施しました。 http://hide.xsv.info/tips/svnmanual/merge1/ マージの種類としては”リビジョン範囲のマージ”というのを使用しました。 また、”マージするリビジョンの範囲(specific range)”というのはshow log機能で、/branch/20140722_software/が作成されたrev128から最後の修正までのrev168までを指定しました。 Merge depth:というのはWorking copyを洗濯 Compare whitespaces という機能ボタンをONにしてマージをしました。 なお、現在/trunk/software/の最新リビジョンで、/branch/20140722_software/の最新リビジョンからのファイルでマージしようとしても、できない状態なのですが、 ”マージするリビジョンの範囲(specific range)” この時の設定で”URL to merge from”で設定している/branch/20140722_software/フォルダのshowlogを見ると、 Actions:Modified Already merged とすべての変更があったリビジョンに表示されています。 たぶんですが、/trunk/software/フォルダは/branch/20140722_software/の内容を既にマージしているということになっているようなのですが、これを取り消す方法などをありますでしょうか? また、このようなマージ機能の使用方法として適切な方法などご教示頂きまうよう、よろしくお願い致します。