CentOS4/CentOS5 - subversionの導入
バージョン管理システムであるsubversionを導入します。 Windows版の導入記録はこちら
更新履歴
- 2007.02.07 特定ディレクトリ以下を参照不可にしたいを追加
- 2007.02.07 コミットログを変更できる様にする為にはを追加
対象OS、バージョン
- CentOS4/CentOS5
目標
導入
yumにて導入を行います。
rootにて以下を実行します。
rootにて以下を実行します。
# yum install subversionこれで、導入は完了です。
subversionを使ってみる
「sample」というプロジェクトのソースをsubversionで管理する様にします。
(リポジトリ名もsampleとする)
なお、sampleプロジェクトは以下の様なディレクトリ/ファイル構成とする。
編成は好みですが、subversion自身のリポジトリがいい参考になります。
(リポジトリ名もsampleとする)
なお、sampleプロジェクトは以下の様なディレクトリ/ファイル構成とする。
sample
+--src
+ aaaa.c
+ bbbb.c
|
+ include
+aaaa.h
+bbbb.h
また、リポジトリの編成は以下の様にします。sample/trunk : 開発の主系 sample/branches : ブランチのコピーを保持 sample/tags : タグのコピーを保持ここを参考に編成を構成しました。
編成は好みですが、subversion自身のリポジトリがいい参考になります。
リポジトリの作成
リポジトリの作成場所は、/home/svn/repos/sampleとします。
ディレクトリを作成後、リポジトリをcreateします。
rootにて以下を実行します。
ディレクトリを作成後、リポジトリをcreateします。
rootにて以下を実行します。
# mkdir -p /home/svn/repos/sample # svnadmin create /home/svn/repos/sample
リポジトリの編成/ソースの追加
リポジトリの編成及びソースの追加を行います。
編成及びソース追加を一度に行う場合は、「リポジトリのインポート」で。
編成及びソース追加を一度に行う場合は、「リポジトリのインポート」で。
編成
sampleリポジトリにtrunk,branches,tagsディレクトリを作成します。
rootにて以下を実行します。
rootにて以下を実行します。
# svn mkdir file://localhost/home/svn/repos/sample/trunk -m "create" # svn mkdir file://localhost/home/svn/repos/sample/branches -m "create" # svn mkdir file://localhost/home/svn/repos/sample/tags -m "create"
ソースの追加
sampleプロジェクトのソース一式が/tmp/sample/以下にあると仮定します。
開発の主系であるtrunkにソース一式をインポートします。
開発の主系であるtrunkにソース一式をインポートします。
#svn import /tmp/sample file://localhost/home/svn/repos/sample/trunk -m "import!!"
リポジトリのインポート
リポジトリの編成/ソースの追加では編成・ソース追加と2回の手順で
作業を行いましたが、「リポジトリのインポート」を使えば1回で作業が完了します。
(ここを参考にしました)
ここでは、/tmp以下を作業ディレクトリとします。
作業を行いましたが、「リポジトリのインポート」を使えば1回で作業が完了します。
(ここを参考にしました)
イメージの展開
リポジトリの編成イメージで、作業用ディレクトリにイメージを展開します。ここでは、/tmp以下を作業ディレクトリとします。
# mkdir -p /tmp/sample # mkdir -p /tmp/sample/trunk # mkdir -p /tmp/sample/branches # mkdir -p /tmp/sample/tags (*)/tmp/sample/trunk下に、sampleプロジェクトのファイル群を配置します。
インポート
以下を実行し、リポジトリにインポートする。
#svn import /tmp/sample file://localhost/home/svn/repos/sample/trunk -m "import!!"
タグの作成/ブランチの作成
タグ/ブランチとはソースのある時点でのスナップショットです。
例えば、「バージョン1.5」の時点での全ソースを後から取得したい場合にあらかじめバージョン1.5時点
でのスナップショットを作成しておけば、いつでも取り出せます。
なお、subversionではタグ/ブランチの区別はありません。
(ブランチは、最終的にtrunkにマージされるはず・・)
要は「どう使うか」です。
リポジトリの構成で、タグはtags、ブランチはbranchesと決めたので、
それぞれの所に以下を実行してtrunkのある時点でのスナップショットを作成します。
例えば、「バージョン1.5」の時点での全ソースを後から取得したい場合にあらかじめバージョン1.5時点
でのスナップショットを作成しておけば、いつでも取り出せます。
なお、subversionではタグ/ブランチの区別はありません。
(ブランチは、最終的にtrunkにマージされるはず・・)
要は「どう使うか」です。
リポジトリの構成で、タグはtags、ブランチはbranchesと決めたので、
それぞれの所に以下を実行してtrunkのある時点でのスナップショットを作成します。
#svn copy file://localhost/home/svn/repos/sample/trunk file://localhost/home/svn/repos/sample/tags/release-1.5 -m "Release 1.0" (*)実際は一行で・・ (*)赤字の部分が、branchesになったりします。これで、Release1.5のタグが作成されました。
WebDAVでのリポジトリ公開
WebDAVでリポジトリを公開すべく、設定を行います。
mod_dav_svn の導入
yumにて導入を行います。
rootにて以下を実行します。
rootにて以下を実行します。
# yum install mod_dav_svn
設定
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)に対して
以下の設定を行う
以下の設定を行う
Locationセクションの追加
以下を追加する。
<Location /svn/sample>
DAV svn
SVNPath /home/svn/repos/sample
</Location>
リポジトリのパーミッション変更
Apacheプロセスがリポジトリにアクセス(読み込み・書き込み)ができる様に
適切にパーミッションを変更します。
適切にパーミッションを変更します。
# chown -R apache:apache /home/svn/repos/sample
SELinuxの為の設定
SELinuxが有効(Enforcing)の場合、/home/svn/repos以下に対して、ラベルを付与し
アクセス可能となる様にする。
アクセス可能となる様にする。
# chcon -R -h -t httpd_sys_content_t /home/svn/repos
apache2の再起動
apache2を再起動する
# /etc/rc.d/init.d/httpd restart
動作確認
ブラウザで、http://localhost/svn/sample/ にアクセスすると、リポジトリが表示されます。
WebDAVアクセス認証
WebDAVでのリポジトリ公開の設定では、全ての人がリポジトリの参照及び更新ができてしまいます。
これではまずいので、細かい認証の設定例を記載する。
(ここを参考にしました)
これではまずいので、細かい認証の設定例を記載する。
(ここを参考にしました)
authzsvn.confの作成
/home/svn/repos/sample/authzsvn.confを以下の様な内容で作成します。
その他(匿名ユーザ)は読み込み専用とし、foo,barはtrunk下の読み書き可能
fooユーザは、branches,tags下の読み書きが可能となる
[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用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を
以下の様に再定義します。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を
以下の様に再定義します。
<Location /svn/sample>
DAV svn
SVNPath /home/svn/repos/sample
# our access control policy
AuthzSVNAccessFile /home/svn/repos/sample/authzsvn.conf
</Location>
認証つきアクセスの設定例
すべての人に対して認証を求めます。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を
以下の様に再定義します。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を
以下の様に再定義します。
<Location /svn/sample>
DAV svn
SVNPath /home/svn/repos/sample
# our access control policy
AuthzSVNAccessFile /home/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 /home/svn/repos/sample/.htpasswd
</Location>
(*) htpasswdの作成は、
#/usr/bin/htpasswd -c /home/svn/repos/sample/.htpasswd foo
でOK。
認証つき/匿名の両方でアクセスする場合の設定例
読み込み時は匿名でアクセスするが、更新時に認証を聞いてくる様な設定です。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を
以下の様に再定義します。
apache2用のsubversion設定ファイル(/etc/httpd/conf.d/subversion.conf)を
以下の様に再定義します。
<Location /svn/sample>
DAV svn
SVNPath /home/svn/repos/sample
# our access control policy
AuthzSVNAccessFile /home/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 /home/svn/repos/sample/.htpasswd
</Location>
SVNクライアント
TortoiseSVN
その他
コミットログを変更できる様にする為には
TortoiseSVN等で、コミットログを変更できる様にする為には、
サーバ側で設定が必要になります。
設定は以下になります。
サーバ側で設定が必要になります。
設定は以下になります。
pre-revprop-changeの配置
リポジトリの作成場所の下に、hookディレクトリがあります。
(上述リポジトリの作成例で言えば、/home/svn/repos/sample/hookになる)
このhookディレクトリ内に、
以上で、TortoiseSVN等からコミットログの変更は可能となります。
(上述リポジトリの作成例で言えば、/home/svn/repos/sample/hookになる)
このhookディレクトリ内に、
pre-revprop-change.tmplというファイルがありますので、これを、
pre-revprop-changeにリネームするかコピーして、hookディレクトリ内に配置します。
以上で、TortoiseSVN等からコミットログの変更は可能となります。
特定ディレクトリ以下を参照不可にしたい
Subversionを使って会社間で共同開発する場合、見られたくないドキュメント等があると思います。
ここでは、特定ディレクトリ以下についてのみ特定グループの人のみ参照不可とする為の設定を行います。
(ディレクトリの存在そのものが知られる事はありません)
ここでは、特定ディレクトリ以下についてのみ特定グループの人のみ参照不可とする為の設定を行います。
(ディレクトリの存在そのものが知られる事はありません)
想定するディレクトリ構成
以下の様なディレクトリ構成を仮定し、「local」ディレクトリ以下は協力会社には見えない様に設定します。
sample
+trunk
+--src
+ aaaa.c
+ bbbb.c
: :
: :
+--docs
+ 設計書.xls
: :
+--local <-- ここから下を不可視にする。
+ 見積書.xls
: :
authzsvn.confの設定
協力会社のグループを「partner」として設定し、authzsvn.confを以下の様に設定します。
(リポジトリ名は「sample」です)
(リポジトリ名は「sample」です)
[groups] #開発者のアカウント (staff1,staff2,staff3というアカウントを定義) developers = staff1, staff2, staff3 #管理者のアカウント (oresamaというアカウントを定義) manager = oresama #協力会社のアカウント (other1,other2というアカウントを定義) partner = other1, other2 [/] @manager = rw [sample:/trunk] @developers = rw @manager = rw @partner = rw # パートナーは、/trunk/local以下のアクセスは拒否 [sample:/trunk/local] @partner =これで、trunk/local以下は協力会社からは存在さえ気付かれないはずです。
Copyright ima All Rights Reserved.
