[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian リファレンス
第 12 章 - バージョン管理システム


12.1 Concurrent Versions System (CVS)

詳細な情報は、lynx を使って /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook を見るか、 info cvsman cvs を実行して 下さい。


12.1.1 CVS サーバのインストール

次に示すセットアップにより、"src" グループのメンバのみが CVS リポジトリ にコミットでき、"staff" グループのメンバだけが CVS の管理を行うように 設定できます。これにより自爆する危険を低減できます。

     # cd /var/lib; umask 002; mkdir cvs # [Woody] FSH
     # apt-get install cvs cvs-doc cvsbook
     # export CVSROOT=/var/lib/cvs
     # cd $CVSROOT
     # chown root:src .  # プロジェクトの開始をさらに制限するには "staff" にする
     # chmod 3775 .             # 上記で "staff" を使っている場合は 2775 を使う
     # cvs -d /var/lib/cvs init # ここでは明示的に -d を指定する方が安全
     # cd CVSROOT
     # chown -R root:staff .
     # chmod 2775 .
     # touch val-tags 
     # chmod 664 history val-tags
     # chown root:src history val-tags

12.1.2 CVS セッションの例

次は CVS リポジトリへのアクセスのためのシェル環境をセットアップします。


12.1.2.1 Anonymous CVS (ダウンロードのみ)

読み込みのみのリモートアクセスのためには次を実行します。

     $ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
     $ cvs login
     $ cvs -z3 co qref

12.1.2.2 ローカル CVS サーバを使う

サーバと同じマシン上でシェルからローカルのアクセスを行うには次を実行します。

     $ export CVSROOT=/var/lib/cvs

12.1.2.3 リモート CVS サーバを使う

SSH を用いずに (cvs の RSH プロトコル機能を利用して) リモートアクセスを行うには次を実行します。

     $ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs
     $ cvs login

これは盗聴される危険があります。


12.1.2.4 ssh を通じてリモート CVS にアクセスする

SSH を用いてリモートアクセスするには次を実行します。

     $ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs

又は SourceForge の場合では次を実行します。

     $ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref

パスワードプロンプトを除外する RSA 認証 (パスワードの入力が少ない接続 – RSA, 第 9.5.3 節) も利用できます。


12.1.2.5 新規 CVS アーカイブの作成

次に示すプロジェクトのためにアーカイブを作成するとして、

     アイテム             値               意味
     ソースツリー      ~/project-x         全ソースコード
     プロジェクト名     project-x          作成するプロジェクト名
     ベンダータグ       Main-branch         ブランチ全体のタグ
     リリースタグ      Release-initial     指定したリリースのためのタグ

次の手順によりアーカイブを作成できます。

     $ cd ~/project-x                # ソースディレクトリに飛び込む
      ... ソースツリーを作成する ...
     $ cvs import -m "Start project-x" project-x Main-branch Release-initial
     $ cd ..; rm -R ~/project-x

12.1.2.6 CVS を用いた作業

ローカルの CVS リポジトリを用いて project-x の作業を 行うには、次のようにします。

     $ cd                            # 作業エリアに移動
     $ cvs co project-x              # CVS からソースを取得してローカルにコピー
     $ cd project-x
      ... 内容をいろいろ変更する ...
     $ cvs diff -u                   # diff -u repository/ local/ と同様の出力
     $ cvs up -C modified_file       # ファイルへの変更を undo する
     $ cvs ci -m "Describe change"   # ローカルのソースを CVS に保存
     $ vi newfile_added
     $ cvs add newfile_added
     $ cvs ci -m "Added newfile_added"
     $ cvs up                        # CVS から最新版をマージする
      ... CVS から新規に作成したサブディレクトリを作成するには、
      ... 代わりに "cvs up -d -P" を使います。
      ... "C filename" で始まる行を監視してください。
      ... 未修正のコードは `.#filename.version' に移動します。
      ... filename にある "<<<<<<<" と
      ... ">>>>>>>" を探してください。
     $ cvs tag Release-1             # リリースタグを追加
      ... さらに編集を続ける ...
     $ cvs tag -d Release-1          # リリースタグを削除
     $ cvs ci -m "more comments"
     $ cvs tag Release-1             # リリースタグを再び追加
     $ cd                            # 作業エリアに戻る
     $ cvs co -r Release-initial -d old project-x
      ... オリジナルのバージョンを old ディレクトリに置いておく
     $ cd old
     $ cvs tag -b Release-initial-bugfixes # ブランチ (-b) タグを作成
      ... 旧バージョンで作業できるようになりました (Tag=sticky)
     $ cvs update -d -P              # 空のディレクトリは作成不可
      ... ソースツリーは今 "Release-initial-bugfixes" sticky タグを持つ
      ... このブランチで作業
     $ cvs up -d -P # このブランチの他者により修正されたファイルを同期
     $ cvs ci -m "check into this branch"
     $ cvs update -kk -A -d -P
      ... sticky タグを削除し、内容を忘れる
      ... キーワード拡張無しで main trunk から更新
     $ cvs update -kk -d -P -j Release-initial-bugfixes
      ... Release-initial-bugfixes ブランチから main にマージ
      ... キーワード拡張無しの trunk。エディタで衝突を修正
     $ cvs ci -m "merge Release-initial-bugfixes"
     $ cd
     $ tar -cvzf old-project-x.tar.gz old  # アーカイブを作成。bz2 にするには -z の代わりに -j とする
     $ cvs release -d old            # ローカルのソースを削除 (任意)

覚えておくべき役立つオプションを次に挙げます。(cvs の第一引数と して使います)

     -n      効果を及ぼさずに起動
     -t      cvs の活動の各ステップごとに示されるメッセージを表示

12.1.2.7 CVS からのエクスポート

CVS から最新版を取得するには、"tomorrow" を使います。

     $ cvs ex -D tomorrow module_name

12.1.2.8 CVS 管理者

(ローカルサーバの) プロジェクトへのエイリアスを追加します。

     $ su - admin           # staff のメンバ
     $ export CVSROOT=/var/lib/cvs
     $ cvs co CVSROOT/modules
     $ cd CVSROOT
     $ echo "px -a project-x" >>modules
     $ cvs ci -m "Now px is an alias for project-x"
     $ cvs release -d .
     $ exit                 # 又は su から戻るために Ctrl-D を実行
     $ cvs co -d project px 
      ... CVS から project ディレクトリに project-x 
     (エイリアス:px) をチェックアウトする
     $ cd project
      ... 内容を変更する

12.1.3 CVS のトラブルシュート


12.1.3.1 リポジトリのファイルアクセス権限

CVS はカレントのリポジトリファイルを上書きしませんが、他のファイルで 置き換えることはあります。それゆえ、リポジトリディレクトリに書き込み 権限を設定する ことは致命的です。全ての新しいリポジトリの作成には、 必要ならばこの条件を保証するために次の手順を行ってください。

     # cd /var/lib/cvs
     # chown -R root:src repository
     # chmod -R ug+rwX   repository
     # chmod    2775     repository  # 必要ならば、これをサブディレクトリに対しても行う

12.1.3.2 実行権ビット

ファイルの実行権ビットはチェックアウト時にも保持されます。 チェックアウトしたファイルの実行権が設定されているのを見掛けたときはいつでも 次のコマンドで CVS リポジトリにあるファイル権限を変更してください。

     # chmod ugo-x filename

12.1.4 CVS コマンド

ここに CVS のコマンドとそのショートカットを示します。

     {add|ad|new} [-k kflag] [-m 'message'] files...
     {admin|adm|rcs} [rcs-options] files...
     {annotate|ann} [options] [files...]
     {checkout|co|get} [options] modules...
     {commit|ci|com}   [-lnR]  [-m  'log_message'  |  -f  file] \
             [-r revision] [files...]
     {diff|di|dif} [-kl] [rcsdiff_options] [[-r rev1 | -D date1] \
             [-r rev2 |  -D date2]] [files...]
     {export|ex|exp} [-flNn] -r rev|-D date [-d dir] [-k kflag] module...
     {history|hi|his} [-report] [-flags] [-options args] [files...]
     {import|im|imp} [-options] repository vendortag releasetag...
     {login|logon|lgn}
     {log|lo|rlog} [-l] rlog-options [files...]
     {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules...
     {release|re|rel} [-d] directories...
     {remove|rm|delete} [-lR] [files...]
     {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  tag  |  -D  date] \
              symbolic_tag modules...
     {status|st|stat} [-lR] [-v] [files...]
     {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D date]  [-f] \
              symbolic_tag [files...]
     {update|up|upd} [-AdflPpR] [-d] [-r tag|-D date] files...

12.2 Subversion

Subversion は CVS の置換を意図した次世代のバージョン管理システムです。 Subversion の開発者は現在 "α版" と考えていますが、ほとんどの人が使うには 十分安定しています。本文書の執筆時では、Subversion は Debian unstable でのみ得られます。


12.2.1 Subversion サーバのインストール

subversion メタパッケージは サーバを設定するために必要なパッケージ (libapache2-dav-svnsubversion-tools) に依存します。


12.2.1.1 リポジトリの設定

現在、subversion パッケージはリポジトリを設定しませんので、 手動で設定する必要があります。リポジトリの場所としては /var/local/repos が考えられます。

ディレクトリを作成します。

     # mkdir -p /var/local/repos

リポジトリデータベースを作成します。

     # svnadmin create /var/local/repos

リポジトリに WWW サーバが書き込み可能にします。

     # chown -R www-data:www-data /var/local/repos

12.2.1.2 Apache2 の設定

ユーザ認証を通じてリポジトリへのアクセスを許可するには、 /etc/apache2/mods-available/dav_svn.conf に次の行を 追加 (又はコメントアウト) しましょう。

     <Location /repos>
       DAV svn
       SVNPath /var/local/repos
       AuthType Basic
       AuthName "Subversion repository"
       AuthUserFile /etc/subversion/passwd
       <LimitExcept GET PROPFIND OPTIONS REPORT>
         Require valid-user
       </LimitExcept>
     </Location>

そして、次のコマンドでユーザ認証ファイルを作成します。

     htpasswd2 -c /etc/subversion/passwd some-username

Apache2 を再起動すると、新しい Subversion リポジトリは URL http://hostname/repos によりアクセス可能になります。


12.2.2 CVS リポジトリから Subversion への移行


12.2.3 Subversion の使用例

次の章は Subversion での異なるコマンドの使いかたについて教えます。


12.2.3.1 新規 Subversion アーカイブの作成

新規 Subversion アーカイブを作成するには、次をタイプします。

     $ cd ~/your-project         # ソースディレクトリに移動
     $ svn import http://localhost/repos your-project \
       project-name -m "initial project import"

これはプロジェクトファイルを含む Subversion リポジトリに project-name という名前のディレクトリを作成します。 アーカイブが存在するかどうかを調べるには http://localhost/repos/ を見てください。


12.2.3.2 Subversion を用いた作業

Subversion を用いて project-y の作業を行います。

     $ cd                            # 作業エリアに移動
     $ svn co http://localhost/repos/project-y  # ソースをチェックアウト
     $ cd project-y
      ... 作業を行う ...
     $ svn diff                      # diff -u repository/ local/ と同様の出力
     $ svn revert modified_file      # ファイルへの変更を undo する
     $ svn ci -m "Describe changes"  # 変更をリポジトリにチェックインする
     $ vi newfile_added
     $ svn add newfile_added
     $ svn add new_dir               # new_dir に全ファイルを再帰的に追加
     $ svn add -N new_dir2           # 非再帰的にディレクトリを追加
     $ svn ci -m "Added newfile_added, new_dir, new_dir2"
     $ svn up                        # リポジトリから最新版をマージ
     $ svn log                       # コミットした全変更を表示
     $ svn copy http://localhost/repos/project-y \
           http://localhost/repos/project-y-branch \
           -m "creating my branch of project-y"  # project-y ブランチを作成
     $ svn copy http://localhost/repos/project-y \
           http://localhost/repos/proj-y_release1.0 \
           -m "project-y 1.0 release"    # リリースタグを作成
      ... ブランチ作成とタグづけは同じであることに注意。唯一の違いは
      ... ブランチはコミットされるがタグはそうではないことです。
     
      ... ブランチへ変更を施す
     
     # ブランチに分けたコピーをメインのコピーにバックマージする
     $ svn merge http://localhost/repos/project-y \
        http://localhost/repos/project-y-branch
     $ svn co -r 4 http://localhost/repos/project-y # バージョン 4 を取得

[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian リファレンス

CVS, 2007年 1月 18日 木曜日 11時54分01秒 UTC時間

Osamu Aoki (青木 修) osamu#at#debian.org
翻訳: 角田 慎一 tsuno#at#ngy.1st.ne.jp
著者, 第 A.1 節