CVSについて

  • CVS (Concurrent Version System) の略ですが、このCVSできることはソースバージョン管理と、
    リリース管理、あと便利なのがブランチ管理(別バージョン)が便利でして、しかもOSのプラットフォーム
    に依存しないため最近ではJavaの開発eclipsなどでも使用されたしています。
  • ソースバージョン管理は、常にしておくべきです。開発に身をおく私自身が思うのは、よく
    「ソースが先祖がえりした、ファイルを消された、バックアップない」とか聞きます。
    このようなことがなくなるようにソースバージョン管理は、しっかりするようにしましょう。
    ※Microsoft Visual Source Safe信者からは、cvsって「えー」って言われますが、ようはソース管理すればいいだけのこと
前提条件
cvsパッケージがインストール*1されていることが条件。
パッケージの確認は、rpm -q cvsコマンドで確認できるよ。

CVSROOTの設定(はじめだけ♪)

  • cvsの運用ポリシーと好みの問題ですが、私はCVSROOT を誰でもが参照できる場所、グループとして
    作成しだれもが参照できる運用とします。個人の認証については下の方で説明します。
  1. cvs のユーザを作成する
    # groupadd -g 20020 cvs
    # useradd -u 20020 -g cvs -s /bin/bash -m cvs
    # passwd cvs
    新しいパスワード:
    新しいパスワードの再入力:
  2. CVSROOT の環境設定を行います。.bashrc に記述しておくと毎回設定しないので楽です。
    export CVSROOT=/home/cvs/cvsroot
  3. CVS の初期化を行います。※1回だけです
    $ cvs init

レポジトリ登録

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

チェックアウト、コミット

  • CVSでソースバージョン管理されたソースを修正する場合、チェックアウトという動作を行い修正作業を行います。
    修正作業が全て終わったら、CVSに管理を戻すためコミットという動作を行うことにより、ソースの一元管理を行う事ができます。
    1. 適当な作業ディレクトリに移動し、レポジトリ「hoge-cvs」をチェックアウトします。
      ここでは、/tmp/test1 というディレクトリにチェックアウトする方法を例にとって説明します。
      $ cd /tmp
      $ cvs checkout -d test1 hoge-cvs
      cvs checkout: Updating test1
      U test1/hoge.java
    2. チェックアウトされた、レポジトリ名「hoge-cvs」の内容を確認します。
      $ ls test1
      ./ ../ CVS/ hoge.java
    3. 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)の設定

  • CVSサーバを設定することによるメリットは、クライアントの環境(OS)に依存しないということです。
    例えていうならば、CVS管理を行うのは Linixマシンで、そのソースを修正するのは Windowsマシンと言うような
    使い方もできるからです。
  • このスタイルの一般的な運用方法としては、多人数でプログラム開発を行う際に使用され。
    分散されたマシン(クラアント)で修正&実行しコミットするという方法がとられます。
    この場合、CVSサーバにしなくとも nfs共有しても同じことですが、Javaの統合環境には
    CVSクライアント機能が標準で付いているものも多くCVSサーバにした方が便利に使用することができるようです。
  1. pserver用にパスワードを設定します。パスワードファイル(passwd)は、username:passwd で、
    パスワードは暗号化した書式で作成します。
  2. ユーザ名 hoge、パスワード hogehoge を設定する場合は、以下の様に設定します。
    ※便利,高林哲さんのサイトの cvsadduser を使うと便利です。本サイトにもある。
    $ echo -n "hoge:" >> $CVSROOT/CVSROOT/passwd
    $ crypt se hogehoge >> $CVSROOT/CVSROOT/passwd
    ※ seにあたるソルト文字列は、本来であれば乱数を生成して作るべきところですが、
       適当な2文字を使って設定してみました。
  3. /etc/services に以下の行が存在するか確認します。
    cvspserver  2401/tcp            # CVS client/server operations
    cvspserver  2401/udp            # CVS client/server operations
  4. /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
    }
  5. rootユーザにて、xinetd を再起動します。
    # /etc/rc.d/init.d/xinetd restart
はまった
/etc/xinetd.d/cvspserver に server_args = -f --allow-root=/home/cvs/cvsroot pserver
とかかないと "cvs [login aborted]: unrecognized auth response from " って怒られます。

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

  • 基本的な使用方法は同じです。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
便利なように
環境変数CVSROOTに :pserver:hoge@localhost:/home/cvs/cvsroot と設定しておくと便利です。

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

  • pserverを使うと通信経路の情報が生でやりとりされるため、インターネットを介してのやりとりは
    通常sshで行うのが定例的です。
  • サーバを cvs.hoge.jp、ユーザ(unixアカウント)を hoge だとします。注意点として、接続先サーバには、
    ssh による設定が既に済んでいるものとします。
    1. レポジトリ登録するディレクトリに移動します。ここでは、hoge ディレクトリとして話を進めます。
      hoge ディレクトリには、hoge.java ファイルがあるとします。
      export CVSROOT=:ext:hoge@cvs.hoge.jp:/home/hoge/cvsroot
      export CVS_RSH=ssh
    2. 通常の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)以外を指定できないので・・・
  1. /tmp/ssh_with_portファイルを作成する。
    $ vi /tmp/ssh_with_port
    ssh -p ${CVS_SSH_PORT} $*
    
    $ chmod +x /tmp/ssh_with_port
  2. 環境変数を設定する
    export CVSROOT=:ext:hoge@cvs.hoge.jp:/home/hoge/cvsroot
    export CVS_RSH=/tmp/ssh_with_port
    export CVS_SSH_PORT=25252

cvswebによるwebからのリポジトリ参照

  • CVSでソースバージョン管理を行うと、履歴とか差分とか簡単に見ることができます。
    しかしコマンドラインから実行しないといけないのと、サーバにログインしないといけないなど結構面倒です。
    セキュリティのことは考慮しないとすれば、cvswebというツールを使えば、webから最新ソースや
    履歴等などの情報を簡単にみることができ非常に便利です。
前提条件
cvswebパッケージがインストール*2されていることが条件。
パッケージの確認は、rpm -q cvswebコマンドで確認できるよ。
  • cvswebパッケージのインストールが終わったら、/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/
はまる?
こういうエラーがでるときがあります
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

参考にさせて頂いたサイト様


*1 パーケッジのインストール方法はこちらを参照
*2 パーケッジのインストール方法はこちらを参照

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-30 (水) 15:29:31 (689d)