Windows - subversionの導入

バージョン管理システムであるsubversionを導入します。
いい加減、VSS(VisualSourceSafe)とはおさらばしたいので・・







対象OS、バージョン

  • Windows2000 Server
  • subversion-1.1.4

目標

WebDAV経由でリポジトリへのアクセスを行える様にします。
WebDAVを使うという事で、apache2の導入も必要になります。

apache2の導入

http://httpd.apache.org/ から win32用のものをダウンロード。
ダウンロードしたのは、 apache_2.0.54-win32-x86-no_ssl.msi
ダウンロード後、ダブルクリックしてインストール。
インストール先は、c:\usr/apache2
インストール後、apache2が起動していなければ起動しておく。

subversionの導入

http://subversion.tigris.org/ から win32用のものをダウンロード。
ダウンロードしたのは、 svn-1.1.4-setup.exe
ダウンロード後、ダブルクリックしてインストール。
インストール先は、c:\usr/subversion

(*)インストール時のオプション(Select Additional Tasks)で、「Apache Modules」の項に
チェックする事を忘れない事。(デフォルトでチェックされています)

subversionを使う

「sample」というプロジェクトのソースをsubversionで管理する様にします。
(リポジトリ名もsampleとする)
なお、sampleプロジェクトは以下の様なディレクトリ/ファイル構成とする。
\sample
    +--src
        + aaaa.c
        + bbbb.c
        |
        + include
             +aaaa.h
             +bbbb.h
また、リポジトリの編成は以下の様にします。
sample/trunk        : 開発の主系
sample/branches     : ブランチのコピーを保持
sample/tags         : タグのコピーを保持
ここを参考に編成を構成しました。
編成は好みですが、subversion自身のリポジトリがいい参考になります。

リポジトリの作成

リポジトリの作成場所は、d:\svn\repos\sampleとします。
ディレクトリを作成後、リポジトリをcreateします。
# mkdir d:\svn\repos\sample
# svnadmin create d:\svn\repos\sample

リポジトリの編成/ソースの追加

リポジトリの編成及びソースの追加を行います。
編成及びソース追加を一度に行う場合は、「
リポジトリのインポート」で。

編成

sampleリポジトリにtrunk,branches,tagsディレクトリを作成します。
Dos窓から以下を行う。
# svn mkdir file://localhost/d:/svn/repos/sample/trunk -m "新規作成"
# svn mkdir file://localhost/d:/svn/repos/sample/branches -m "新規作成"
# svn mkdir file://localhost/d:/svn/repos/sample/tags -m "新規作成"

ソースの追加

sampleプロジェクトのソース一式がd:\sample以下にあると仮定します。
開発の主系であるtrunkにソース一式をインポートします。
#svn import d:\sample file://localhost/d:/svn/repos/sample/trunk -m "インポート" 


リポジトリのインポート

リポジトリの編成/ソースの追加では編成・ソース追加と2回の手順で
作業を行いましたが、「リポジトリのインポート」を使えば1回で作業が完了します。
(ここを参考にしました)

イメージの展開

リポジトリの編成イメージで、作業用ディレクトリにイメージを展開します。
ここでは、d:\tmp以下を作業ディレクトリとします。
# cd d:\tmp
# mkdir sample
# mkdir sample\trunk
# mkdir sample\branches
# mkdir sample\tags

(*)d:\tmp\sample\trunk下に、sampleプロジェクトのファイル群を配置します。

インポート

以下を実行し、リポジトリにインポートする。
#svn import d:\tmp\sample file://localhost/d:/svn/repos/sample -m "インポート"


タグの作成/ブランチの作成

タグ/ブランチとはソースのある時点でのスナップショットです。
例えば、「バージョン1.5」の時点での全ソースを後から取得したい場合にあらかじめバージョン1.5時点
でのスナップショットを作成しておけば、いつでも取り出せます。
なお、subversionではタグ/ブランチの区別はありません。
(ブランチは、最終的にtrunkにマージされるはず・・)
要は「どう使うか」です。
リポジトリの構成で、タグはtags、ブランチはbranchesと決めたので、
それぞれの所に以下を実行してtrunkのある時点でのスナップショットを作成します。
#svn copy file://localhost/d:/svn/repos/sample/trunk 
 file://localhost/d:/svn/repos/sample/tags/release-1.5 -m "Release 1.5"

(*)実際は一行で・・
(*)赤字の部分が、branchesになったりします。
これで、Release1.5のタグが作成されました。


WebDAVでのリポジトリ公開

WebDAVでリポジトリを公開すべく、apache2の設定を行います。
apache2の設定ファイルは、c:\usr\apache2\conf\httpd.confです。

LoadModule行の設定確認

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
は、subversionのインストール時に自動で追加されているはず。
もし、コメントアウトされている場合はコメントをはずす。

Locationセクションの追加

httpd.confに以下を追加する。
<Location /svn/sample>
    DAV svn
    SVNPath d:/svn/repos/sample
</Location>

apache2の再起動

サービス(apache2)を再起動する。

確認

ブラウザで、http://localhost/svn/sample/ にアクセスすると、リポジトリが表示されます。


WebDAVアクセス認証

WebDAVでのリポジトリ公開の設定では、全ての人がリポジトリの参照及び更新ができてしまいます。
これではまずいので、細かい認証の設定例を記載する。
(ここを参考にしました)

authzsvn.confの作成

d:/svn/repos/sample/authzsvn.confを以下の様な内容で作成します。
[groups]
#開発者
developers = foo, bar
#管理者
manager = foo
[/]
#すべての人が読み込み可能
* = r
[sample:/trunk]
#開発者は読み書き可能
@developers = rw
[sample:/branches]
#管理者は書き込みも可能
@manager = rw
[sample:/tags]
#管理者は書き込みも可能
@manager = rw
リポジトリ管理者をfoo , 開発者をfoo,barとして定義してます。
その他(匿名ユーザ)は読み込み専用とし、foo,barはtrunk下の読み書き可能
fooユーザは、branches,tags下の読み書きが可能となる

匿名アクセスの設定例

すべての人に対して自由にアクセスすることを許します。ユーザは匿名で扱われます。
apache2の設定ファイル(httpd.conf)のSVNのLocationセクションを以下の様に定義します。
<Location /svn/sample>
    DAV svn
    SVNPath d:/svn/repos/sample

    # our access control policy
    AuthzSVNAccessFile d:/svn/repos/sample/authzsvn.conf
</Location>

認証つきアクセスの設定例

すべての人に対して認証を求めます。
apache2の設定ファイル(httpd.conf)のSVNのLocationセクションを以下の様に定義します。
<Location /svn/sample>
    DAV svn
    SVNPath d:/svn/repos/sample

    # our access control policy
    AuthzSVNAccessFile d:/svn/repos/sample/authzsvn.conf

    # only authenticated users may access the repository
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion repository(sample)"
    AuthUserFile d:/svn/repos/sample/htpasswd
</Location>

(*) htpasswdの作成は、
      #c:\usr\apache2\bin\htpasswd -c d:/svn/repos/sample/htpasswd foo
    でOK。


認証つき/匿名の両方でアクセスする場合の設定例

読み込み時は匿名でアクセスするが、更新時に認証を聞いてくる様な設定です。
apache2の設定ファイル(httpd.conf)のSVNのLocationセクションを以下の様に定義します。
<Location /svn/sample>
    DAV svn
    SVNPath d:/svn/repos/sample

    # our access control policy
    AuthzSVNAccessFile d:/svn/repos/sample/authzsvn.conf

    # try anonymous access first, resort to real
    # authentication if necessary.
    Satisfy Any
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion repository(sample)"
    AuthUserFile d:/svn/repos/sample/htpasswd
</Location>


TortoiseSVN のインストール

Subversion の GUIクライアントであるTortoiseSVN をインストールします。
これを使えば、Windows上で、マウスの右クリックでリポジトリにアクセスし
ソースの取得や更新等が行え便利です。
こんな感じ



インストール

http://tortoisesvn.tigris.org/download.htmlよりダウンロードする。
ダウンロードしたのは、TortoiseSVN-1.1.7-UNICODE_svn-1.1.4.msi
インストールは、同ファイルをダブルクリックして実行した。
インストール後、再起動の要求をされるので、それに従い再起動した。

日本語化

上記と同じサイトから、Language Packs をダウンロードする。
ダウンロードしたのは、LanguagePack_1.1.7_ja.exe
インストールは、同ファイルをダブルクリックして実行した。
インストール後、適当なファイルを選択して
右クリック -> TortoiseSVN -> setting で設定画面を開き、
Languageを「日本語」にする。