** CVSについて [#pc5d352e]
- CVS (Concurrent Version System) の略ですが、このCVSできることはソースバージョン管理と、~
リリース管理、あと便利なのがブランチ管理(別バージョン)が便利でして、しかもOSのプラットフォーム~
に依存しないため最近ではJavaの開発eclipsなどでも使用されたしています。

- ソースバージョン管理は、常にしておくべきです。開発に身をおく私自身が思うのは、よく~
「ソースが先祖がえりした、ファイルを消された、バックアップない」とか聞きます。~
このようなことがなくなるようにソースバージョン管理は、しっかりするようにしましょう。~
COLOR(RED){※Microsoft Visual Source Safe信者からは、cvsって「えー」って言われますが、ようはソース管理すればいいだけのこと}

: 前提条件 | COLOR(RED){''cvs''}パッケージがインストール((パーケッジの[[インストール方法>パーケッジのインストールの巻]]はこちらを参照))されていることが条件。~
パッケージの確認は、COLOR(RED){''rpm -q cvs''}コマンドで確認できるよ。~

** CVSROOTの設定(はじめだけ♪) [#e4ca31d5]

- cvsの運用ポリシーと好みの問題ですが、私はCVSROOT を誰でもが参照できる場所、グループとして~
作成しだれもが参照できる運用とします。個人の認証については下の方で説明します。

++ cvs のユーザを作成する
 # groupadd -g 20020 cvs
 # useradd -u 20020 -g cvs -s /bin/bash -m cvs
 # passwd cvs
 新しいパスワード:
 新しいパスワードの再入力:
++ CVSROOT の環境設定を行います。.bashrc に記述しておくと毎回設定しないので楽です。
 export CVSROOT=/home/cvs/cvsroot
++ CVS の初期化を行います。※1回だけです
 $ cvs init

** レポジトリ登録 [#i9767b47]

- CVSでソースバージョン管理をする場合、ソースバージョン管理する単位(プロジェクト、ディレクトリ)に~
レポジトリを登録します。レポジトリ登録は、1回行えば良いです。
- 運用ポリシーとして「誰でもが参照できる場所」としているので、特にどのユーザからレポジトリ登録を行っても~
問題はありませんが、COLOR(RED){''CVSROOT''}環境変数だけは必ず設定しておいてください。
++ レポジトリ登録するディレクトリに移動します。ここでは、hoge ディレクトリとして話を進めます。~
hoge ディレクトリには、hoge.java ファイルがあるとします。
 $ cd /home/hoge
 $ ls
 ./ ../ hoge.java
++ レポジトリ名「hoge-cvs」として登録を行います。
 $ cvs import -m "" hoge-cvs avendor start
 N hoge-cvs/hoge.java
 
 No conflicts created by this import
++ レポジトリ名「hoge-cvs」が、正しくレポジトリ登録されたか確認します。
 $ cd $CVSROOT
 $ ls
 ./ ../ CVSROOT/ hoge-cvs/
++ レポジトリ登録が正しく行われれば、チェックアウトでファイルを取り出せるため、~
ポジトリ登録したもとの hoge ディレクトリは削除しても問題ありません。

** チェックアウト、コミット [#kf7e55a8]

- CVSでソースバージョン管理されたソースを修正する場合、チェックアウトという動作を行い修正作業を行います。~
修正作業が全て終わったら、CVSに管理を戻すためコミットという動作を行うことにより、ソースの一元管理を行う事ができます。
++  適当な作業ディレクトリに移動し、レポジトリ「hoge-cvs」をチェックアウトします。~
ここでは、/tmp/test1 というディレクトリにチェックアウトする方法を例にとって説明します。
 $ cd /tmp
 $ cvs checkout -d test1 hoge-cvs
 cvs checkout: Updating test1
 U test1/hoge.java
++ チェックアウトされた、レポジトリ名「hoge-cvs」の内容を確認します。
 $ ls test1
 ./ ../ CVS/ hoge.java
++ hoge.java の内容を修正しコミットを実行します。
 $ cd test1
 $ vi hoge.java
 $ cvs commit -m ""
 cvs commit: Examining .
 Checking in hoge.java;
 /home/cvs/cvsroot/hoge-cvs/hoge.java,v <-- hoge.java
 new revision: 1.x; previous revision: 1.x
 done
-- ※ソース上にバージョン情報の文字列を設定しておくと便利です。赤字の部分がコミット後に展開されます。
 $ cd test1
 $ vi hoge.java
   /* $Id:$ */
 $ cvs commit -m ""
 $ vi hoge.java
     /* $Id: hoge.java,v 1.15 2003/01/15 03:43:17 hoge Exp $Checking in hoge.java */

** CVSサーバ(pserver)の設定 [#lf9d64ef]

- CVSサーバを設定することによるメリットは、クライアントの環境(OS)に依存しないということです。~
例えていうならば、CVS管理を行うのは Linixマシンで、そのソースを修正するのは Windowsマシンと言うような~
使い方もできるからです。

- このスタイルの一般的な運用方法としては、多人数でプログラム開発を行う際に使用され。~
分散されたマシン(クラアント)で修正&実行しコミットするという方法がとられます。~
この場合、CVSサーバにしなくとも nfs共有しても同じことですが、Javaの統合環境には~
CVSクライアント機能が標準で付いているものも多くCVSサーバにした方が便利に使用することができるようです。

++  pserver用にパスワードを設定します。パスワードファイル(passwd)は、username:passwd で、~
パスワードは暗号化した書式で作成します。
++ ユーザ名 hoge、パスワード hogehoge を設定する場合は、以下の様に設定します。~
※便利,高林哲さんのサイトの cvsadduser を使うと便利です。本サイトにもある。
 $ echo -n "hoge:" >> $CVSROOT/CVSROOT/passwd
 $ crypt se hogehoge >> $CVSROOT/CVSROOT/passwd
 ※ seにあたるソルト文字列は、本来であれば乱数を生成して作るべきところですが、
    適当な2文字を使って設定してみました。
++ /etc/services に以下の行が存在するか確認します。
 cvspserver  2401/tcp            # CVS client/server operations
 cvspserver  2401/udp            # CVS client/server operations
++ /etc/xinetd.d に "cvspserver"ファイルを作成します。
 service cvspserver
 {
     socket_type     = stream
     protocol = tcp
     wait = no
     user = root
     server = /usr/bin/cvs
     server_args = -f --allow-root=/home/cvs/cvsroot pserver
     disable = no
 }
++ rootユーザにて、xinetd を再起動します。
 # /etc/rc.d/init.d/xinetd restart

: COLOR(RED){はまった} | /etc/xinetd.d/cvspserver に server_args = -f --allow-root=/home/cvs/cvsroot COLOR(RED){pserver}~
とかかないと "cvs [login aborted]: unrecognized auth response from " って怒られます。

** CVSサーバ(pserver)からのチェックアウト、コミット [#tfa03c95]

- 基本的な使用方法は同じです。TCP/IP で接続するので、ログインアカウント名、ホスト名の情報が若干付与されるだけです。~
チェックアウト、コミットする場合の手順として「ログイン → チェックアウト/コミット → ログアウト」が必要となります♪

-- CVSサーバにログイン
 $ cvs -d :pserver:hoge@localhost:/home/cvs/cvsroot login
 (Logging in to hoge@localhost)
 CVS password:
-- CVSサーバからチェックアウト
 $ cvs -d :pserver:hoge@localhost:/home/cvs/cvsroot checkout -d kkk hoge-cvs
 cvs server: Updating kkk
 U kkk/hoge.java
 cvs checkout: reading from localhost: Connection reset by peer
-- CVSサーバにコミット
 $ cvs -d :pserver:hoge@localhost:/home/cvs/cvsroot commit
-- CVSサーバからログアウト
 $ cvs -d :pserver:hoge@localhost:/home/cvs/cvsroot logout

: COLOR(RED){便利なように} | 環境変数CVSROOTに ''':pserver:hoge@localhost:/home/cvs/cvsroot''' と設定しておくと便利です。

** CVSサーバ(ssh)からのチェックアウト、コミット [#j982267e]

- pserverを使うと通信経路の情報が生でやりとりされるため、インターネットを介してのやりとりは~
通常sshで行うのが定例的です。

- サーバを cvs.hoge.jp、ユーザ(unixアカウント)を hoge だとします。注意点として、接続先サーバには、~
ssh による設定が既に済んでいるものとします。
++ レポジトリ登録するディレクトリに移動します。ここでは、hoge ディレクトリとして話を進めます。~
hoge ディレクトリには、hoge.java ファイルがあるとします。
 export CVSROOT=:ext:hoge@cvs.hoge.jp:/home/hoge/cvsroot
 export CVS_RSH=ssh
++ 通常のCVSコマンドとを実行すると、毎回パスフレーズを求められます。
 % cvs checkout -d hoge_dir hoge-cvs
 Enter passphrase for key :   ← パスフレーズ
 cvs server: Updating hoge_dir
 U hoge_dir/oooo

- sshのデフォルトポート(22)以外を使用する場合には、下記の様にラッパーのシェルを中継します。~
※CVS_RSH環境変数で、デフォルトポート(22)以外を指定できないので・・・

++ COLOR(RED){''/tmp/ssh_with_port''}ファイルを作成する。
 $ vi /tmp/ssh_with_port
 ssh -p ${CVS_SSH_PORT} $*
 
 $ chmod +x /tmp/ssh_with_port
++ 環境変数を設定する
 export CVSROOT=:ext:hoge@cvs.hoge.jp:/home/hoge/cvsroot
 export CVS_RSH=/tmp/ssh_with_port
 export CVS_SSH_PORT=25252

** cvswebによるwebからのリポジトリ参照 [#v9751891]

- CVSでソースバージョン管理を行うと、履歴とか差分とか簡単に見ることができます。~
しかしコマンドラインから実行しないといけないのと、サーバにログインしないといけないなど結構面倒です。~
セキュリティのことは考慮しないとすれば、cvswebというツールを使えば、webから最新ソースや~
履歴等などの情報を簡単にみることができ非常に便利です。

: 前提条件 | COLOR(RED){''cvsweb''}パッケージがインストール((パーケッジの[[インストール方法>パーケッジのインストールの巻]]はこちらを参照))されていることが条件。~
パッケージの確認は、COLOR(RED){''rpm -q cvsweb''}コマンドで確認できるよ。~

- cvswebパッケージのインストールが終わったら、COLOR(RED){''/etc/cvsweb/cvsweb.conf''}ファイルを修正します。~
 @CVSrepositories = (
         'local'   => ['Local Repository', '/home/cvs/cvsroot'],
 #       'freebsd' => ['FreeBSD',          '/var/ncvs'],
 #       'openbsd' => ['OpenBSD',          '/var/ncvs'],
 #       'netbsd'  => ['NetBSD',           '/var/ncvs'],
 #       'ruby'    => ['Ruby',             '/var/anoncvs/ruby'],
 );
 
 # For example:
 #
 #$cvstreedefault = $CVSrepositories[2 * 0];
 $cvstreedefault = 'local';

- あとは、webからアクセスしてみます
 http://www.sea-bird.org/cgi-bin/cvsweb.cgi/

: COLOR(RED){はまる?} | こういうエラーがでるときがあります~
&size(9){Root '/home/cvs/cvsroot' defined in @CVSrepositories is not a directory, entry ignored at /var/www/cgi-bin/cvsweb.cgi line 491.};~
この場合は、ディレクトリのパーミッションが正しくないときです。chmod -R o+r とやればok

-- [[はやぐい/cvsweb>http://www.hayagui.com/cvsweb.html]]

** 参考にさせて頂いたサイト様 [#g0d01030]

-- [[marz wiki>http://marz-soho.dyndns.org/pukiwiki/]]
-- [[学外からのCVSアクセス>http://www.jaist.ac.jp/~kiyoshiy/memo/fep/cvs-to-jaist.html]]
-- [[CVS, サーバ(pserver)の設定について>http://www.sea-bird.org/doc/Linux/cvs_pserver.html]]
-- [[はやぐい/cvsweb>http://www.hayagui.com/cvsweb.html]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS