|
Red Hat Linux 7.3にインストールされているCVSを使って、リポジトリの作成と管理、
WindowsXPのPCからの遠隔アクセスを行う手順のメモです。
-
最新版をセンター管理することで、成果物の散逸を防ぐことができます。
-
センター管理することで、複数人による共同開発の際のバージョンの衝突や、先祖がえりなど、
プログラム開発の初歩的なミスを防止することができます。
-
履歴管理を自動化します。
いつ誰がどんな変更を加えたかは累積的に記録され、後で一覧することができます。
-
プログラムや開発資料のバックアップに使えます。
変更を行う際に、念のためバックアップをローカルPC上に取っておく、
といった作業を解消します。
以下の作業は全てRed Hat Linux 7.3上で行ったものです。
-
リポジトリを作成します。ルートとなるディレクトリは自由に決めます。
cd /usr/local/share
mkdir cvsroot
cvs -d /usr/local/share/cvsroot init
|
CVSROOTというディレクトリが作られます。
-
以後リポジトリを固定する場合は、利用ユーザのログインシェルで、
環境変数CVSROOTに設定しておきます。
export CVSROOT=/usr/local/share/cvsroot
|
-
モジュールを作って登録(インポート)してみます。
ここではモジュール名「cvsmemo」
ベンダータグ「uranom」
リリースタグ「cvsmemo_0_1」
とします。ベンダータグ、リリースタグはとりあえず、適当につけても問題ないです。
-
インポート元ですが、空のディレクトリでもよいですし、
初期文書の入ったディレクトリでもよいです。またそのパスはどこでもOKです。
ここでは ~/cvsmemo というディレクトリを作り、
その中に初期文書としてファイルを1つだけ、cvsmemo.txtというのを作ったとします。
-
次のコマンドでインポートできます。
cd ~/work/cvswork/cvsmemo
cvs import -m "Module Import Test" cvsmemo uranom cvsmemo_0_1
|
ここで重大な注意!
cvs importコマンドを使うときには、インポート元のディレクトリの中に入って
作業する必要があります。
その上のディレクトリで実行するとドツボにはまるので要注意です。
"No Conflicts created by this import" とメッセージが出ればOKです。
なお、インポート元が初期文書としてバイナリファイルを含む場合、
それらをバイナリと認識させるにはオプション(-W)の指定が必要ですが、
ややこしいです。そこで私はバイナリファイルを含むモジュールを登録する場合、
後述のWinCVSを使ってWindows環境からインポートするようにしています。
WinCVSを使えばバイナリと思われる拡張子のファイルを一覧で事前警告してくれるので、
間違いが少ないと思います。
-
このインポート元のディレクトリは不要なので、とりあえず改名して退避します。
後でチェックアウトが正常にできたら、削除してしまって構いません。
-
次にCVSで文書編集の作業を開始するために、チェックアウトしてみます。
このときは、利用ユーザのホームディレクトリ内に、作業用ディレクトリをどこか作って、
その下に各モジュールをチェックアウトするとよいでしょう。
これは強制ではないので、モジュールによって作業ディレクトリをいくつか切り替えることも可能です。
ここでは、~/work/cvsworkの下に各モジュールをチェックアウトすると仮定します。
cd ~/work/cvswork
cvs checkout cvsmemo
|
作られたモジュールのディレクトリ内には、CVSというディレクトリが増えているのが確認できます。
つまり cvsmemo/cvsmemo.txtの他に、cvsmemo/CVS というディレクトリがあるはずです。
この中には管理ファイルが置かれているので、触らないようにします。
-
cvsmemo.txtを編集し、更新を保存(=コミット)してみます。
cd ~/work/cvswork/cvsmemo
cvs commit cvsmemo.txt
|
cvs commitコマンドでは、1つ以上のファイルやディレクトリを指定できます。
ファイルやディレクトリの指定を省略すると、カレントディレクトリ以下を再帰的に調べて、
変更が加わっているファイルを全て更新します。
また-mオプションで更新コメントを指定しないと、環境変数CVSEDITOR
(CVSEDITORが未設定ならばEDITOR)で指定しているエディタが起動し、コメントの入力を求められます。
このコメントは更新ログとして記録されるので、
できればちゃんとした文章を書きます。
日本語のコメントを書く際には、エディタの文字コードに注意します。
今回の環境では、日本語EUCに統一することにしました。
なおWindows環境のGUIクライアントであるWinCVSの日本語対応「ごった煮」版には、
更新ログの文字コードを自動的に日本語EUCにする機能があるので、
日本語EUCに統一してもWindows環境で困る、ということはないと思います。
-
新規のファイルを追加する際には、ファイルを作っていきなりcommitしても認識されません。
まず、cvs addコマンドを実行します。
cvs add newfile.txt
cvs commit newfile.txt
|
ディレクトリの場合は、cvs addだけでリポジトリに反映されるので、
commitする必要はありません。
また、バイナリファイルの場合はaddの後ろに-kbオプションをつけることでバイナリと認識させます。
-
cvs updateコマンドは、
CVSリポジトリの内容が更新されていたら、
それをダウンロードし、ローカルの作業ディレクトリに反映します。
ディレクトリが追加されているとき、それをローカルに取得するには-dオプションをつけます。
常に-dをつけても問題ないでしょう。
-
状態の確認と履歴の確認を行うには、次のようなコマンド群があります。
cvs status
cvs annotate
cvs history
cvs log cvsmemo.txt
|
どのコマンドも、ファイルやディレクトリを指定する事も、省略する事もできます。
省略すると、カレントディレクトリの全ファイルが対象になります。
-
今作業中のファイルと最後のコミットとの比較をするには、
cvs diffコマンドを使います。
cvs diffコマンドは強力で、過去のある時点やあるバージョンのファイルと作業中のファイルを比較したり、
過去の複数の版同士の内容を比較したりすることもできます。
-
管理ファイル(CVSROOTディレクトリ内にあるファイル)を編集するために、CVSROOTをcheckoutします。
cd ~/work/cvswork
cvs checkout CVSROOT
|
./CVSROOT/configをエディタで編集。次の部分を変更します。
これで、pserverパスワードにユーザがいなかった場合に、
OSのパスワード(/etc/passwd)で認証を試みるのをやめさせることができます。
編集できたらコミットします。
-
次にpasswdファイルを作ります。このファイルは初期状態ではCVSROOT内に存在しないので、addします。
passwdファイルを作る方法ですが、
CVSには暗号化ツールは用意されていないので、
暗号化ツールをどこからかもって来る必要があります。
一番簡単なのは、Apache Web Serverに含まれるhtpasswdツールを使うことでしょう。
ここでは、ユーザ「uranocvs」だけを登録しています。
このユーザは、OSのアカウントに登録されていても、いなくても構いません。
cd ~/work/cvswork/CVSROOT
/usr/local/apache2/bin/htpasswd -c passwd uranocvs
New Password: ******
Retype Password: ******
cvs add passwd
cvs commit passwd
|
ここで、ユーザ(ここではuranocvs)がOSに存在しない場合は、
最後に:OSアカウントとして、OS上で代理となるアカウントを指定します。
uranocvs:XXXXXXXXXXX:urano
|
これでuranocvsはOSアカウントuranoとしてサーバ上では活動することになります。
なお、これでリポジトリにはpasswd,vというファイルはできますが、
passwdというファイルはできません。
これを追加するために、今度はcheckoutlistファイルを編集します。
デフォルトではコメントしか書かれていませんが、最後に
'passwd'という行(管理ファイルのエントリ)を追加してcommitします。
これで、passwdというファイルがリポジトリに作られているはずです。
-
/etc/servicesに次の2行を追加(RHL 7.3では最初から書かれています)
cvspserver 2401/tcp
cvspserver 2401/udp
|
-
/etc/xinetd.d/cvspserverを次のように作ります。
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
user = urano
wait = no
only_from = 127.0.0.1 192.168.0.0
server = /usr/bin/cvs
server_args = -f --allow-root=/usr/local/share/cvsroot pserver
}
|
-
xinetdを再起動します。
cd /etc/init.d
./xinetd restart
|
-
ローカルホストでtelnetを使って、接続を試します。
... bad auth protocol start:と出て終了したら一応OKです。
-
ここで、RetHat Linuxの場合は、ipchainsファイアウォールの働きによって、
リモートPCからのポート2401への接続が許可されない設定になっているので、
/etc/sysconfig/ipchainsを編集して、2401を開ける必要があります。
:input ACCEPT
:forward ACCEPT
:output ACCEPT
...(略)
-A input -s 0/0 -d 0/0 2401 -p tcp -y -j ACCEPT
-A input -s 0/0 -d 0/0 2401 -p udp -j ACCEPT
...
|
これでリモートPCから接続を試すことができます。
リモートPCとしてWindowsXPを使い、その上で動くWinCVSで接続を確認する手順は、
別のページでご説明します。
CVSにはモジュールを削除するコマンドというものはありません。
作業としては、
-
単にリポジトリから消す。
-
CVSROOT/historyとCVSROOT/val-tagsファイルの中に、
このモジュールに関する記述があったら削除する。(オプション)
これだけです。
(first uploaded 2004/09/26 last updated (not ever), URANO398)
|