(2007.8.9 更新。)
複数のPCでひとつのファイルを更新したい。しかし、たとえばノートPCがある場合などは、すべての機械が常にネットワークに接続しているわけではない。
並行して同じファイルを更新しないなら、各機械にファイルをコピーして、定期的に同期させるのがいい。
バージョン管理システム(ソフトウェア構成管理; SCM)のSubversionを導入する。
[サーバ、クライアント両方]
Fedora Core 6には、Subversionパッケージが含まれる。rpmコマンドで確認し、インストールされていなければyumコマンドでインストールする。
# rpm -q subversion xinetd subversion-1.4.2-2.fc6 xinetd-2.3.14-8
[サーバのみ]
Subversionでは、バージョン管理したいファイルなどを格納するデータベースをリポジトリという。まずリポジトリを作成する。ひとつのリポジトリで複数のプロジェクトを扱える。
どこでもいいが、例えば /var/svn ディレクトリに作ってみる。リポジトリのディレクトリを掘って、svnadmin createする。
# mkdir /var/svn # cd /var/svn # mkdir myrepo # svnadmin create myrepo
確認してみよう。
# ls myrepo README.txt conf dav db format hooks locks
svnserve経由でアクセスするときは、svnユーザを作成し(後述)、このディレクトリ以下の所有者をchownコマンドでsvn:svnに変更すること。
[クライアント側]
バージョン管理したいファイルを用意する。お薦めのレイアウトがあるので、それに沿ってレイアウトする;
リポジトリ / プロジェクトA / trunk branches tags プロジェクトB / trunk branches tags
「プロジェクト」は、人間の捉えかたで、Subversionにとってはただのディレクトリにすぎない。
プロジェクトの格納方法だが、リポジトリを分けるか、ひとつのリポジトリのなかでディレクトリを分けるか最初に考えておく。
認証、コミットメールの設定などはリポジトリの単位で設定するので、これらが違う場合はリポジトリを分ける。同じでいい場合は、バックアップなどの管理の手間を考え、リポジトリのなかでディレクトリを分けたほうがいい。リポジトリを跨いで(履歴を維持して)ファイルのコピーなどはできない。
初期ファイルを用意したら、svn importでインポートする。リポジトリの場所はURLで指定する。ローカルの場合は file:/// で指定できる。
# svn import repo_initial file:///var/svn/myrepo svn: ログメッセージを取得するのに外部エディタを使えませんでした。$SVN_EDITOR 環境変数を設定するか、--message (-m) か --file (-F) オプションを用いてみてください svn: 環境変数 SVN_EDITOR, VISUAL, EDITOR のどれも設定されていなく、実行時の設定オプション 'editor-cmd' も見つかりません
あらら。環境変数EDITORにviなどを設定し、もう一度。
(中略) 追加しています repo_initial/rb2html/trunk/rb2html/java2html.rb 追加しています repo_initial/rb2html/trunk/rb2html/cpp2html.rb 追加しています repo_initial/rb2html/trunk/rb2html/html2html.rb 追加しています repo_initial/rb2html/trunk/rb2html/pattern_lexer.rb 追加しています repo_initial/rb2html/trunk/rb2d.rb 追加しています repo_initial/rb2html/trunk/rb2html.rb 追加しています repo_initial/rb2html/trunk/README リビジョン 1 をコミットしました。 ~#
今度はできた。
[サーバのみ]
ローカルPCからはリポジトリに file:/// でアクセスできるが、それだけではあまり威力を発揮しない。ネットワーク経由でアクセスできるようにする。
Subversionに含まれるsvnserveサーバを使う。
まずサーバを動かすユーザを作成する。
# /usr/sbin/useradd -M -r -s /sbin/nologin svn
useraddのオプション:
svnserveはデーモンとして動かす方法と、xinetd経由で動かす方法がある。頻繁にアクセスするわけではないので、xinetd経由にする。
Fedora Coreでは,/etc/xinetd.d/ に設定ファイルを置く。/etc/xinetd.d/svnファイルを用意する。こんな感じ。
# default: off # description: The svnserve server is a Subversion server. service svn { disable = no socket_type = stream wait = no user = svn server = /usr/bin/svnserve server_args = -i -r /var/svn log_on_failure += USERID only_from = 192.168.24.0/24 127.0.0.1 }
ここで-rオプションは、ルートとなるディレクトリを指定する。
/etc/services ファイルに次の行が含まれる。
svn 3690/tcp # Subversion svn 3690/udp # Subversion
xinetd を再起動するのを忘れずに。
以上で、svn://localhost/myrepo でリポジトリにアクセスできる。
(2007.8.9 この節追加。)
checkoutは誰でもできるが、commitは特定のユーザだけに許したいことがある。まず、/var/svn/リポジトリ/conf/svnserve.confファイルを編集する。
generalセクションで、パスワードを記述するファイルを指定する。
[general] password-db = passwd
次に、passwdファイルでユーザ名とパスワードを指定する。思い切り平文だ。
[users] harry = harryssecret
[クライアント側]
Fedora Core 6には、Subversionクライアントがいくつか用意されている。そのうち、RapidSVNを試してみる。
メニュー -> Bookmarks -> Add Existing Repository でリポジトリを追加できる。そのほかいろいろ機能がある。