詳細な情報は、 lynx
を使って
/usr/share/doc/cvs/html-cvsclient
,
/usr/share/doc/cvs/html-info
, /usr/share/doc/cvsbook
を見るか、 info cvs や man 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
次は CVS リポジトリへのアクセスのためのシェル環境をセットアップします。
読み込みのみのリモートアクセスのためには次を実行します。
$ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref $ cvs login $ cvs -z3 co qref
サーバと同じマシン上でシェルからローカルのアクセスを行うには次を実行します。
$ export CVSROOT=/var/lib/cvs
SSH を用いずに (cvs
の RSH プロトコル機能を利用して)
リモートアクセスを行うには次を実行します。
$ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs $ cvs login
これは盗聴される危険があります。
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 節) も利用できます。
次に示すプロジェクトのためにアーカイブを作成するとして、
アイテム 値 意味 ソースツリー ~/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
ローカルの 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 の活動の各ステップごとに示されるメッセージを表示
CVS から最新版を取得するには、"tomorrow" を使います。
$ cvs ex -D tomorrow module_name
(ローカルサーバの) プロジェクトへのエイリアスを追加します。
$ 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 ... 内容を変更する
CVS はカレントのリポジトリファイルを上書きしませんが、他のファイルで 置き換えることはあります。それゆえ、リポジトリディレクトリに書き込み 権限を設定する ことは致命的です。全ての新しいリポジトリの作成には、 必要ならばこの条件を保証するために次の手順を行ってください。
# cd /var/lib/cvs # chown -R root:src repository # chmod -R ug+rwX repository # chmod 2775 repository # 必要ならば、これをサブディレクトリに対しても行う
ファイルの実行権ビットはチェックアウト時にも保持されます。 チェックアウトしたファイルの実行権が設定されているのを見掛けたときはいつでも 次のコマンドで CVS リポジトリにあるファイル権限を変更してください。
# chmod ugo-x filename
ここに 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...
Subversion は CVS の置換を意図した次世代のバージョン管理システムです。 Subversion の開発者は現在 "α版" と考えていますが、ほとんどの人が使うには 十分安定しています。本文書の執筆時では、Subversion は Debian unstable でのみ得られます。
subversion-server
メタパッケージは
サーバを設定するために必要なパッケージ (libapache2-dav-svn
と
subversion-tools
) に依存します。
現在、subversion
パッケージはリポジトリを設定しませんので、
手動で設定する必要があります。リポジトリの場所としては
/var/local/repos
が考えられます。
ディレクトリを作成します。
# mkdir -p /var/local/repos
リポジトリデータベースを作成します。
# svnadmin create /var/local/repos
リポジトリに WWW サーバが書き込み可能にします。
# chown -R www-data:www-data /var/local/repos
ユーザ認証を通じてリポジトリへのアクセスを許可するには、
/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 によりアクセス可能になります。
次の章は Subversion での異なるコマンドの使いかたについて教えます。
新規 Subversion アーカイブを作成するには、次をタイプします。
$ cd ~/your-project # ソースディレクトリに移動 $ svn import http://localhost/repos your-project \ project-name -m "initial project import"
これはプロジェクトファイルを含む Subversion リポジトリに project-name という名前のディレクトリを作成します。 アーカイブが存在するかどうかを調べるには http://localhost/repos/ を見てください。
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 を取得
Debian リファレンス
CVS, 2005年 4月 3日 月曜日 22時59分00秒 UTC時間osamu@debian.org
tsuno@ngy.1st.ne.jp