UNIX/Subversion
UNIX/Subversion
リポジトリ生成
svnadmin create --fs-type fsfs リポジトリディレクトリ
リポジトリ移行
1.3リポジトリから1.4リポジトリ等
svnadmin dump リポジトリディレクトリ > リポジトリダンプファイル svnadmin create --fs-type=fsfs リポジトリディレクトリ svnadmin load リポジトリディレクトリ < リポジトリダンプファイル
環境設定
- ディレクトリ作成
mkdir /etc/subversion/conf/ mkdir /etc/subversion/hooks/ mkdir /etc/subversion/hook-scripts/
- /etc/subversion/passwd.default
複数リポジトリで共通で使用するpasswdファイルを用意する。
[users] username1 = password1 username2 = password2 username3 = password3
- /etc/subversion/conf/svnserve.conf
passwd.defaultファイルを使用するように変更したsvnserve.conf。
リポジトリ生成スクリプトでコピーする。
realmも自動に設定できるように、置換用キーワードを埋め込んだ。
[general] anon-access = none auth-access = write password-db = /etc/subversion/passwd.default realm = {REPOSITORY_NAME}
tagsへのコミット防止HOOKスクリプト
- /etc/subversion/hooks/pre-commit
pre-commit.tmplをsvnperms.pyを使用するように変更。
また、リポジトリ生成スクリプトで使用するの置換用キーワードを埋め込んだ。
#!/bin/sh REPOS="$1" TXN="$2" # Make sure that the log message contains some text. SVNLOOK=/usr/bin/svnlook $SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null if [ $? -ne 0 ]; then echo "error: There isn't comment." >&2 exit 1 fi /etc/subversion/hook-scripts/svnperms.py -r "$REPOS" -t "$TXN" -f {REPOSITORY_DIR}/conf/svnperms.conf -s tagrestrict || exit 1 # All checks passed, so allow the commit. exit 0
- /etc/subversion/hook-scripts/svnperms.py
スクリプト本体。
subversionをインストールしたらどこかにあると思われる。
cp -p どこかのディレクトリ/svnperms.py /etc/subversion/hook-scripts/svnperms.py
- /etc/subversion/conf/svnperms.conf
svnperms用の設定ファイル。
リポジトリ構成が/project-name/{trunk,tags,branches}の場合
[tagrestrict] .*/ = *(add,remove,update) trunk/.* = *(add,remove,update) tags/[^/]+/ = *(add,remove) branches/[^/]+/.* = *(add,remove,update)
リポジトリ構成が/{trunk,tags,branches}/project-nameの場合
[tagrestrict] trunk/.* = *(add,remove,update) tags/.*/ = *(add,remove) branches/.* = *(add,remove,update)
リポジトリ生成スクリプト
- svnrepcr.sh
次の処理を行うスクリプトです。
・リポジトリ生成。
・trunk/tags/branchesのインポート。
・リポジトリディレクトリへ/etc/subversion/{conf,hooks}のキーワード置換とコピー。
#!/bin/sh ### 引数チェック if [ "$1" = "" ]; then echo "usage : svnrepcr.sh [REPOSITORY-DIR]" echo echo "ex. svnrepcr.sh /var/data/svn/category/newrepository" exit 0 fi REPOSITORY_DIR=$1 ### 環境設定 umask 0002 ETC_DIR=/etc/subversion REPOSITORY_NAME=`basename ${REPOSITORY_DIR}` ### リポジトリ生成 svnadmin create --fs-type=fsfs ${REPOSITORY_DIR} ### リポジトリ初期登録 TEMP_DIR=`mktemp -d` mkdir ${TEMP_DIR}/trunk mkdir ${TEMP_DIR}/branches mkdir ${TEMP_DIR}/tags svn import ${TEMP_DIR} file://${REPOSITORY_DIR} -m "Initial import" rm -rf ${TEMP_DIR} ### リポジトリ環境設定 cp ${ETC_DIR}/conf/* ${REPOSITORY_DIR}/conf/ sed "s/{REPOSITORY_NAME}/${REPOSITORY_NAME}/" ${ETC_DIR}/conf/svnserve.conf > ${REPOSITORY_DIR}/conf/svnserve.conf sed "s:{REPOSITORY_DIR}:${REPOSITORY_DIR}:" ${ETC_DIR}/hooks/pre-commit > ${REPOSITORY_DIR}/hooks/pre-commit chmod +x ${REPOSITORY_DIR}/hooks/pre-commit echo "create repository done."
ユーザー環境設定
置換キーワードの設定
- C:\Documents and Settings\user\Application\Subversion\configに次の項目を設定する。
[miscellany] enable-auto-props = yes [auto-props] *.java = svn:eol-style=native;svn:keywords=Id Date Author Rev URL
この設定により、JavaDoc等に/** * @author $Author$ * @version $Revision$ $Date:: 2008-05-26 19:06:45 +0900 $ */
と記述した場合、次のように置換される。 (Dateは文字化け対策のため、始めから置換した形で記述するのを推奨。)/** * @author $Author: user $ * @version $Revision: 1173 $ $Date:: 2008-05-26 19:06:45 +0900 $ */
ただし、この設定はファイル新規追加時にしか効果がない。
既にSubversion管理下のファイルに、上記の設定を反映させるにはSubversionのプロパティ設定を行う必要がある。
Eclipse上でSubversion管理下ファイルの設定を変更する。~
フォルダ、ファイルを右クリック-->チーム-->プロパティの設定
プロパティ名 :svn:eol-style
プロパティの内容:native
プロパティ名 :svn:keywords
プロパティの内容:Id Date Author Rev URL