開発環境の設定関連(続き)

前回の設定からの続き。
おさらいとしては、

Subversionsvn+sshで接続する前提でリポジトリ作成

と言う事で、リポジトリ作成の方法を前回から以下のように変更した。
面倒くさいので、簡単なシェルスクリプトを作成。

#!/bin/bash
〜余計なものは省略〜
REPOS_NAME=./$1

# make repository
mkdir $REPOS_NAME
svnadmin create --fs-type fsfs $PWD/$REPOS_NAME

# make management dir
# mkdir -p $REPOS_NAME/branches
# mkdir -p $REPOS_NAME/tags
# mkdir -p $REPOS_NAME/trunk

# change authority
chgrp -R svn $REPOS_NAME
chmod -R 770 $REPOS_NAME
chmod g+s $REPOS_NAME/db

svn+sshで接続するときのポイントは、

  • リポジトリディレクトリとファイルのグループをsvn用のグループに変更し、そのグループにアクセス権限を付与する。
    • リポジトリにアクセスするユーザには、svn用のグループに所属する必要がある。
  • リポジトリのdbディレクトリにグループのSGIDを設定する。
  • svnserveをあらかじめ起動する必要がない。
    • svn接続の場合は、inetdなどを利用してあらかじめ起動する必要がある。
    • Subversionが「-t(トンネル)」オプションを使ってsvnserveを起動してくれるらしい。
  • ssh経由の場合、認証はLinux(Unix)のアカウント情報を利用する。
    • もちろんクライアント、サーバ共にsshに対応している必要がある。(最近のLinuxなら問題ないはず。)

と言った感じ。

Subclipseからsvn+sshで接続してみる。

URLの設定は、以下の通り。

svn+ssh://ユーザ名@ホスト名/usr/local/svnrepos/<リポジトリ名(プロジェクト名)>

で、実行して見る。
・・・エラー発生。

ロケーション検証中にエラー:"org.tigris.subversion.javahl.ClientException:文字化けxx:svn: Can't create tunnel"

だそうです。
ちょこっと調べて、EclipseSubclipse)の設定で
ウィンドウ>設定>チーム>SVNSVNインターフェース
で「javaSVN(Pure Java)」を選択し適用する。
それから、再度実行。
そしたら「SSH証明書の入力」画面がでてきた。
イントラなので、パスワード認証を使うって事で・・・、設定完了。
ユーザ名もこの画面で設定できるので、もしかするとURLにユーザ名はいらないかも・・・

svn+ssh://ホスト名/usr/local/svnrepos/<リポジトリ名(プロジェクト名)>

って感じでURLを設定しても同じようにできましたが、どっちが正しいのやら・・・。
<追記>
後者のやり方でできました。はじめから後者(ユーザ名なし)でやった場合でも「SSH証明書の入力」画面がでてきて、ユーザ名とパスワードが設定できる。
ただし後者の場合、パスワード認証であることが条件らしい。
証明書による認証を行う場合、Windowsの場合PuTTYを使ってパスワード認証をするらしい。その場合には「ユーザ名@ホスト名」とするらしい。ただしホスト名のところはPuTTYの設定名になるらしい。(やってないのでよくわからんが・・・。)

プロジェクトを登録してみる

リポジトリごとに「trunk」「tags」「branches」と作って管理すると良い(らしい)。

trunk

まずEclipseからプロジェクトの共有をする。
そのとき上記で作成したリポジトリ・ロケーションを指定する。
そしてコピー先のURLを「リポジトリルート/trunk」として登録する。
ようはプロジェクト名をtrunkにして登録するイメージ。
(「リポジトリルート/trunk/WEB-INF」みたいなイメージ。)

tags

EclipseSVNリポジトリエクスプローラにて、該当リポジトリ・ロケーションを選択。
右クリックで「新規>リモート・フォルダ新規作成」で「tags」ディレクトリを作成。
「trunk」を選択して右クリックで「ブランチ/タグ」を選択して、コピー先のURLで「tags/バージョン」みたいな感じでタグを作成する。

branches

上記tagsの「tags」を「branches」に変えればOK。
つまりtagsとbranchesの違いは、開発者(利用者)が意識しないと何もない。


なんでこんなこと書いたかと言うと、サーバ側でリポジトリを作成したときに「trunk」「tags」「branches」をmkdirしていたら、Subclipseの設定でエラーになったため。
なので上記リポジトリ作成用のシェルスクリプトは、以下のようにコメントアウトしてある。

# make management dir
# mkdir -p $REPOS_NAME/branches
# mkdir -p $REPOS_NAME/tags
# mkdir -p $REPOS_NAME/trunk

これらのディレクトリは、リポジトリルートのLinux(Unix)ディレクトリにできるわけではなく、リポジトリ(BDB、FSFS)にできるため見えないみたい。