Contents
概要
Subversionは最も普及しているバージョン管理システムの1つです。
バージョン管理システムとは、主にソースコードを管理するためのシステムです。 ソースコードは日々の開発の中で更新されていく為、特にチームでの開発を行っているとどうしても次のような状況になってします。
- 最新版はどこにあるのか?
- 誰が更新しているのか?
- 誰が何時更新したのか?
- 更新を戻したいんだが…
このような「いつ・誰が・どのバージョンを」更新したのかを管理し、運用を間違えなければトラブルを未然に防ぐことが出来ます。 言い換えれば、チーム開発ではバージョン管理システムの導入は必須となります。
初期設定
CentOSではyumでインストールできます。
yum install subversion
リポジトリの作成
リポジトリとはSubversionで管理するファイルのデータを格納するデータベースです。 リポジトリはあるディレクトリ以下のファイルの集まりで構成されています。これらのファイルはディレクトリ毎にコピーすれば簡単にバックアップできる点もSubversionの特徴でしょう。
リポジトリはsvnadminコマンドを使って作成しますが、先ずはどこにどのような名前で作成するかを決める必要があります。
リポジトリの場所 |
/var/svn/repos |
リポジトリの名前 |
example |
# mkdir -p /var/svn/repos/example # svnadmin create /var/svn/repos/example
リポジトリは幾つでも作成することができます。どこかリポジトリ用のディレクトリを決め(ここでは/var/svn/repos/)、その下にリポジトリを作成すると管理しやすいでしょう。
Apache経由での利用
Subversionは主にファイルのバージョン管理を行う目的で導入する為、自然と様々な端末からアクセスできるようにする必要があります。ネットワーク越しにSubversionを利用する場合は幾つかの方法がとれますが、簡単で応用が利きやすいApache経由での利用方法を説明します。 SubversionとApacheの連携にはmod_dav_svnを使います。yumでインストールしましょう。
# yum install mod_dav_svn
次にApacheのconfファイルを作成します。yumでインストールをすれば、subversion.conf が/etc/httpd/conf.d/に追加されていると思いますので、これを開いて設定を追加しましょう。
<Location /repos> DAV svn SVNParentPath /var/svn/repos/ </Location>
このように記述すれば、http://hostname/repos/example でリポジトリにアクセスできるようになります。 ※ここに認証の設定もできますが、後述。
セキュリティに関する補足
社内のみでSubversionをApache経由で利用する場合はともかく、インターネット経由で複数の会社が利用する場合などにはセキュリティを考慮する必要があります。特定のIPアドレスからの利用に限定する、SSLを使用するなどの方法で必ずセキュリティを強化してください。
ダイジェスト認証
このままですと、誰でもリポジトリにアクセスできる状態です。社内だけで使用するならばそれでも大丈夫な場合もありますが、誰がコミットしたかなどが追跡できる方が便利です。そこでユーザ名とパスワードによるダイジェスト認証を行うようにします。
htdigest を使ってパスワードファイルを作成し、subversion.confに設定します。 パスワードファイルは、/var/svn/.htdigest としました。
# htdigest -c .htdigest svn shuji New password: Re-type new password: Adding password for user shuji
subversion.conf
<Location /repos> DAV svn SVNParentPath /var/svn/repos/ AuthType Digest AuthName svn AuthUserFile /var/svn/.htdigest Require valid-user </Location>
以上でダイジェスト認証が行われるようになります。
運用
まず、プロジェクトで使用するファイルをどのようなディレクトリ構成で管理するかを決めます。Subversionではtrunk/branches/tagsの3つのディレクトリを作成しておく事が一般的です。
trunk |
最新版のファイルを管理 |
branches |
ブランチを管理 |
tags |
タグを管理 |
タグはある時点でのスナップショット、ブランチは特定のバージョンです。ブランチに関しては最新版を変更しながら、前のバージョンのバグフィックスを行うなど、ソースが2系統に分かれるような場合に更新していきます。
これらをリポジトリの下に配置していきますが、以下のようなルールで運用すると更に便利です。
PROJECT_ROOT |
docs |
trunk/brances/tags |
ドキュメント、資料、画面のモックアップなどを管理 |
workspace |
trunk/brances/tags |
プロジェクトで作成するソースコードを管理 |
|
share |
開発環境など更新されないような共有ツールなどを管理 |
||
このような構成のディレクトリを作成して、インポートします。
適当なディレクトリに貼り付けて、上記の構成のディレクトリを作成するスクリプト
REPOS='http://localhost/repos/example'
PROJECT_NAME='example'
USER_NAME='shuji'
mkdir -p ./${PROJECT_NAME}/docs/branches
mkdir -p ./${PROJECT_NAME}/docs/tags
mkdir -p ./${PROJECT_NAME}/docs/trunk
mkdir -p ./${PROJECT_NAME}/share
mkdir -p ./${PROJECT_NAME}/workspace/brances
mkdir -p ./${PROJECT_NAME}/workspace/tags
mkdir -p ./${PROJECT_NAME}/workspace/trunk
svn import --username ${USER_NAME} -m "import project layout." ./${PROJECT_NAME} ${REPOS}※適当な空のディレクトリを作成して実行してください
運用ルール
バックアップ
ミラーリポジトリ
SVNクライアント
基本操作
Subversionでの操作に関する用語をまとめる。
import |
インポート |
リポジトリに新たに管理するファイルを追加する操作 |
checkout |
チェックアウト |
リポジトリで管理しているファイルをローカルのワークフォルダにコピーする操作 |
commit |
コミット |
ローカルのワークフォルダでの変更をリポジトリに反映させる操作 |
update |
アップデート |
リポジトリで管理しているファイルの変更をローカルのワークフォルダに反映する操作 |
export |
エクスポート |
リポジトリで管理しているファイルをローカルフォルダにコピーする操作 |
※checkoutしないとcommit/updateが出来ない。exportはローカルに管理用のファイルが作成されない。
チェックアウト
コミット
エクスポート
エクスポートはリポジトリのファイルをローカルフォルダにコピーする。管理情報は作成されない為、アップデート等はできない。
メディアファイルをSVNから取得して更新するサンプル
svn export file:///var/svn/repos/hoge/trunk/media/ /var/site/media/ --force
※forceオプションを使うことで上書き可能
