Subversion
Table of Contents
解説書
まずは、svnbookを読むべき。 [Diary2007.html#svnbook]] を参照のこと
下記ページでは、Subversionのマニュアルの内容をピックアップして解説をまとめられている。
- Subversion メモ (東京大学 高木氏のページ)
サーバへのインストール及び設定
概要
ここでは、Linux(Debian)をサーバとして、WebDAV経由で使用する場合について解説する。
インストールするパッケージ
Debian の場合、subversion と libapache2-svn を入れれば良い。
- etchの時
- subversion (1.4.2dfsg1-2)
- libneon26 (0.26.2-4)
- libsvn1 (1.4.2dfsg1-2)
- libapache2-svn (1.4.2dfsg1-2)
- subversion (1.4.2dfsg1-2)
- lennyの時
- subversion (1.5.1dfsg1-4)
- libneon27-gnutls (0.28.2-6.1)
- libserf-0-0 (0.2.0-1)
- libsvn1 (1.5.1dfsg1-4)
- libapache2-svn (1.5.1dfsg1-4)
- subversion (1.5.1dfsg1-4)
設定
WebDAV
- /etc/apache2/mods-avalable/dav_svn.conf に設定する
- 認証ファイルは、上記設定ファイルのサンプルでは /etc/apache2/dav_svn.passwd に設定しているのでそれに従う。
$ sudo htpasswd -c /etc/apache2/dav_svn.passwd ユーザ名 New password: Re-type new password: Adding password for user ユーザ名
- ここでは、認証要の /svn と認証不要の /svn2 を配置している
- Require valid-user とすると、全てのアクセスに対して認証を要求する
- リポジトリのパスは、SVNPath で設定する方法と SVNParentPath で設定する方法がある
- SVNPath の場合は、一つのリポジトリのみ。SVNParentPath では、その下に複数のリポジトリを置くことができる
- SVNParentPath を使用した場合 SVNListParentPath on とすると、Webページとして参照した場合に、リポジトリのリストが表示される
<Location /svn> DAV svn SVNParentPath /var/lib/svn SVNListParentPath on AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user </Location> <Location /svn2> DAV svn SVNParentPath /var/lib/svn2 SVNListParentPath on </Location>
注意点
- リポジトリは、apache2が書き換え可能である必要がある
- Debianだったら、所有を www-data にしておく
$ sudo chown -R www-data.www-data リポジトリ
- 設定後は、apache2 の再起動が必要
/etc/init.d/apache2 restart
リポジトリの作成方法
コマンド
- 「svnadmin create リポジトリ名」を実行する
- 上記の設定の場合であれば、svn 又は svn2 以下で下記を実行する
$ sudo svnadmin create リポジトリ名 $ sudo chown -R www-data.www-data リポジトリ名
サーバ上で(クライアントとして)リポジトリを参照する方法
- file:///d:/ (スラッシュ3つ)で参照する
$ svn list file:///var/lib/svn/リポジトリ名
リポジトリへのプロジェクト作成方法
コマンド
(注意)下記は、クライアントから実行する場合
$ svn import http://IPアドレス/svn/リポジトリ名/プロジェクト名 -m"コメント"
<a name="subversion_lock" id="subversion_lock">
Subversionのロックについて
ロックの使用方法
- バージョン 1.2以降ではロックを使うことができる
各ファイルに needs-lock 属性をつければ、必ずロックしないとコミットできないようにすることができる- 上記は間違い
- needs-lock属性が設定されている場合
- ファイルはread-onlyになる
- ロックした時にファイルシステム上のread-only属性が解除され、編集が可能になる。
- つまり、「ロックしないと編集可能にならない」→「ロックしないとコミットできない」という感覚でファイルを扱うことができる
- ただし、ファイルシステム上のread-only属性を手動で解除した場合でも、コミットできてしまう ので、「ロックしないとコミットできない」わけではない
- ロックが開放されると、ファイルはread-onlyに戻る
- 下記コマンドにより、needs-lock 属性をつけることができる。この後 コミット する必要がある
$ svn propset svn:needs-lock '*' ファイル名
自動でneeds-lock属性を付ける方法
- サーバ側で行うことはできない
- クライアント側では、auto-props を使うことで可能
- TortoiseSVNだったら、右クリック -> TortoiseSVN -> 設定
- 「一般」の Subversion の設定ファイル 「編集」 のボタンを押すと config ファイルが開くのでこれを編集する
- config は、Windows XPならば Documents and Settings\ユーザ名\Application Data\Subversion にある
[miscellany] enable-auto-props = yes [auto-props] *= svn:needs-lock
Emacs(Meadow) で使用する場合
vc-svn.el
Meadow2のversion-controlはデフォルトでは対応していない。ソースをダウンロードし、contrib\client-side\vc-svn.el をsite-lispに入れ、.emacに下記を記述する。
(add-to-list 'vc-handled-backends 'SVN)
psvn.el
vc(vc-svn.el) ではロックができなさそう。コマンドが無い。それでちょっと探していたら、vc-svn.el 以外にも psvn.el というのがあることがわかった。 見落としていたが、これもソースに入っていた。(contrib\client-side\psvn\psvn.el) 下記設定で有効になるが、結構インタラクティブに実行するものらしく、使い易いかどうか、まだ判断できていない。
(when (locate-library "psvn") (require 'psvn) )