Subversion事始め

最近のバージョン管理は SubVersion がはやっているようなので、SubVersionを利用する為の練習をしてみた。参考にした、URLは次のようなところ。

すでにServerに入っていたのでリポジトリの作成からやらないと(ディレクトリは適当)。

  svnadmin create /var/svn/repository

という感じでやればいいようだ。svn の約束事として、trunk, tags, branchesというのをその下につくるらしい。が、個人で利用するのだし、本の説明をみると、リポジトリの下にプロジェクト名が来て、その下に trunk, tags, branches の各ディレクトリを作成する形が紹介されていた。後々使いそうだから、そのように作成することにしてみる。また、本をみるとimportで作成するのが楽そうだ。

何度か手動でコマンドから作成して練習をしてみた。大体分かってきたので、シェルにしておく。

#!/bin/sh

PROJ=$1
if [ "X$PROJ" = "X" ]; then
        echo "$0 <project-name>"
        exit
fi
 
mkdir -p $PROJ
mkdir -p ${PROJ}/trunk
mkdir -p ${PROJ}/tags
mkdir -p ${PROJ}/branches
echo "Project $PROJ was created. " > ${PROJ}/trunk/readme.txt

svn import $PROJ file:///var/svn/repository/$PROJ -m "Initial import for $PROJ"

適当に保存して、実行時にプロジェクト名を渡す。

  $ init_project.sh testproject1

ディレクトリで区切られたプロジェクト(foo/barのようなやつ)は、考えていない。必要なら、そのときに考えよう。

次に、ネットワーク経由でアクセスできるようにする為に設定をした。いくつか方法が書いてあったが、とりあえず、xinetd経由でアクセスを考えることにする。外に出すわけではないので、アクセスができればいいのだが、xinetdの設定は書いてなさそうだ。なので、自分で設定を作る。

  # cat /etc/services | grep svn
  svn             3690/tcp                        # Subversion
  svn             3690/udp                        # Subversion

のようにして/etc/services/にエントリがあることを確認して、/etc/xinetd.d/ に次のようなファイルを作成した。

------ /etc/xinetd.d/svn -----
$ cat svn
# default: on
# description: A subversion server. This is the tcp \
# version.

service svn
{
        socket_type     = stream
        protocol        = tcp
        user            = svnrep
        server          = /usr/bin/svnserve
        server_args     = -i -r /var/svn/repository
        wait            = no
        disable         = no
}
------ end of file ------

これで、xinetd を再起動などすれば、xinetd.d経由でアクセスできそうだ。

  $ telnet localhost 3690

とかで接続できれば、問題ないと思う。

次に、接続の許可/不許可 の設定を行う。いくつかやり方があるが、簡単にユーザ名を認証して書き込めればいいかなと思うので、設定をした。
作成したリポジトリの下にある

  リポジトリ/conf/svnserve.conf

を開けばいろいろコメントがある。その中で次のような感じで設定をしておけばよさそうだ。

  [general]
  anon-access = read
  auth-access = write
  ...
  password-db = password.conf

そして、

  リポジトリ/conf/password.conf

  [users]
  hogeuser = hogepass

とでも書いておけば、hogeuser でアクセスすれば commit できそうだ。パスワードは、平文でもいいのか?とおもったら、これで通った。いいのか?と思いつつ、必要なら、SSHでのアクセスも確認しようと思う。

クライアントは、Linux でやる場合は、コマンドラインで大体わかっているが、Windows でも使いたいのでどうするか調べてみた。Shell Extension ? かな。右クリックで使えるのが、tigris というサイトでDownload できるので使ってみた。インストールも問題なく入り、Checkout してみたら、svn:// ... と入れるDialog がでてきた。

  svn://host/testproject1/trunk

で、取り出せばtrunkのファイルがちゃんと(あたりまえだけど...)取り出せた。適当にファイルを追加して、commit してみた。すると、認証ダイアログが出るので、先ほどのなんちゃってユーザとパスワードを入れればCommitできた。

大体この辺を使えば、HEAD(tagとかつけたりしない) に対する作業はなんとかなりそうだ。