IDEとしてEclipseを利用していることもあり、バージョン管理をもっと簡単に行えれば...と常々思っていて何度もトライしていたのですが、いまいち知識が足りず上手くいきませんでした。なんなのだ。

しかし今回まっさらな状態からもう一度順序立ててトライしてみたところ、サーバーの設定が更新されているのか意外なほどあっさり出来たのでまとめておきます。


以下、簡単な手順です。

  1. インストール
  2. svnのシンボリックリンクを貼る
  3. Eclipseの設定
  4. 既存のWebをSubversionで管理するようにする
  5. 他のPCでのチェックアウト


なお、今回の設定に関しては以下のエントリを参考にさせていただきました。特に「サクっとly.com」さんにはインストールのほぼ全てを参考にさせていただいています。感謝します。

インストールの上で最も嵌りやすいであろう点は以下の2点です。

  • サーバ上のSubversionは$HOME/binでアクセスできなければならない。
  • Eclipseで使用する秘密鍵はOpenSSH形式でなければならない。

これを解決しておかないと、アクセスできません。ここ、テストに出ますよ。




インストール

以前は自分がインストールしているものがなにやらわからぬまま様々なものをインストールしていましたが、別にTracを使うんじゃなくただバージョン管理をしたいだけなのならSubversionだけ入れれば良いんですね。そういえば検索で引っかかるのは皆、それだけが目的ではありませんでした。

というわけで、Subversionをインストール。

$ mkdir -p ~/local/src
$ cd ~/local/src
$ wget http://subversion.tigris.org/downloads/subversion-1.6.3.tar.gz
$ wget http://subversion.tigris.org/downloads/subversion-deps-1.6.3.tar.gz
$ tar zxvf subversion-1.6.3.tar.gz
$ tar zxvf subversion-deps-1.6.3.tar.gz
$ cd subversion-1.6.3
$ ./configure --prefix=$HOME/local --with-ssl --without-berkeley-db
$ gmake clean
$ gmake
$ gmake install

大事なのは、prefix。ここを適当にやると、自分がどこに入れたのかわからないという間抜けなことになります。というか今までの自分は相当間抜けでした。はい。


インストールが完了したら確認。

$ which svn
/home/user/local/bin/svn

$ svn -version
svn, version 1.6.3 (r38063)
(以下略)

それぞれ2行目が表示されればOKです。


インストールが大丈夫そうなので、適当なディレクトリにレポジトリを作ってみます。

レポジトリ作成テスト

$ mkdir -p ~/svn/repos
$ cd ~/svn/repos
$ svnadmin create test

チェックアウトテスト

$ mkdir ~/temp
$ cd ~/temp
$ svn co file:///home/user/svn/repos/test test

コミットテスト

$ cd test
$ svn mkdir trunk branches tags
$ svn commit -m "first commit"

コミット確認

$ svn list file:///home/user/svn/repos/test
branches/
tags/
trunk/

最後に、3つのディレクトリ(branches、tags、trunk)が表示されれば確認全てOK。tempディレクトリは削除してしまって構いません(レポジトリの場所を変えるならsvn/reposも)




svnのシンボリックリンクを貼る

嵌りやすい点で上げた1点目がこれです。

Subversionのコマンド群がインストールされていますが、$HOME以下でSSHのコマンド検索パス上にあるのは

$HOME/bin

だけです。
 

とのことで、これはどうやらさくらインターネットのサーバ設定によるもののようです。以下のようにシンボリックリンクを貼ってやれば解決します。

$ ln -s $HOME/local/bin $HOME/bin

もちろん、以前はここで嵌りました。






Eclipseの設定

続いて嵌りやすい点2点目です。

SSH接続のために例えばPoderosaを利用して公開鍵、秘密鍵を作りますがそこで出来るのはSECSH形式のもの。EclipseでSubversiveを使ってアクセスするにはOpenSSH形式の秘密鍵が必要になるそうです。しらんよそんなの...

というわけで、ひろ式めもちょうさんを参考に秘密鍵を変換しておきます。


次にEclipseでの設定。プロジェクトを右クリックし「チーム > プロジェクトの共用」をクリック。SVNを選択してOK。一般タブでURLに以下を入力。

svn+ssh://user@user.sakura.ne.jp/home/user/svn/repos/test

ユーザー、パスワードはログインに使用するものを入力。SSH設定タブを開き、秘密鍵を選択。秘密鍵は先ほど生成したOpenSSH形式のものを指定し、パスフレーズを入力してOKこれで多分行けると思います。もちろん既存のプロジェクトに設定するのではなく、SVNレポジトリに追加しておいてチェックアウトしても良いと思います。




既存のWebをSubversionで管理するようにする

ここまでやれば、Subversionは利用できるようになっているはずです。

僕の目的は開発中のプロジェクトのバージョン管理を行うことだけではなくて、サーバの構造自体をバージョン管理することだったので、既に組み込まれている部分をバージョン管理していく必要が。というわけで、次のコマンド。

$svn add --non-recursive www

wwwは削除もリネームも出来ないディレクトリなので、コマンドラインでwwwディレクトリだけを追加。通常は、svn addするとその回のディレクトリやファイルも再帰的にバージョン管理に追加されますが、「--non-recursive」オプションを付けることで対象だけが追加されるようになる見たいです。そーなのかー

他のディレクトリやファイルについては追加するかどうかの選択が必要だったので、かなり泥臭いですが1つずつチェックしながら作業しました。




他のPCでのチェックアウト

おまけ。

他のPCでも同様にセットアップして上手く行きかけたのですが、次のエラーが出てしまいました。



「Malform」とは余り聞き慣れない言葉ですが、要するに、サーバ上のSubversionに比べてクライアント側のプラグイン(Subclipse)のバージョンが古いよということらしいです。サーバ上では1.6系のSubversionが動いていたので、Subclipseも1.6系を使わないといけなかったのですが...1.2系でした(苦笑)古いね。

これはちょっといろいろと問題を引き起こして地味に解決に時間が掛かったのですが、意を決してEclipseのバージョンをそれまでの3.3から3.5に上げ、Subclipseから最新版のSubversiveに乗り換えることで解決しました。接続成功後、チェックアウトすれば一部の設定ファイルなどを除いてすぐに環境が構築できました。あー素晴らしい。




今まで仕事ではもちろん使ってきましたが、プライベートで書くプログラムは裏紙に走り書きみたいなところがあって場当たり的に書いてきました。サンプル程度ならそれでも良いのですが、何か複雑なものを作ろうとしたときバージョン管理をしていないと、どうしても齟齬が生じ、環境の移行も非常に面倒でした。バージョン管理はSubversionだけではないわけで、CVSやBazaarの他、最近流行のgitなどがありますが、とりあえずは慣れたSubversionで管理していこうかなと言うのが当面の目的です。レポジトリにしてあればgitをSubversionと併用することも出来るようなので...なかなかに夢が広がります。はい。