UNIX/Subversion の変更点


* UNIX/Subversion [#g1f8a074]

** リポジトリ生成 [#xb2d3776]
 svnadmin create --fs-type fsfs リポジトリディレクトリ
~

** リポジトリ移行 [#ucc819a4]
 1.3リポジトリから1.4リポジトリ等
 svnadmin dump リポジトリディレクトリ > リポジトリダンプファイル
 svnadmin create --fs-type=fsfs リポジトリディレクトリ
 svnadmin load リポジトリディレクトリ < リポジトリダンプファイル
~

** 環境設定 [#e4b6e11f]
-ディレクトリ作成~
 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スクリプト [#pa94cc7f]
-/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)
~


** リポジトリ生成スクリプト [#f301663e]
-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."
~

** ユーザー環境設定 [#vf2cc036]
*** 置換キーワードの設定 [#j82fea33]
-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管理下ファイルの設定を変更する。~ [#kf1b3db8]
フォルダ、ファイルを右クリック-->チーム-->プロパティの設定~
プロパティ名    :svn:eol-style~
プロパティの内容:native~
プロパティ名    :svn:keywords~
プロパティの内容:Id Date Author Rev URL~
~

** 関連ページ [#s308afb5]
-[[Debian GNU Linux/3.1 sarge/Subversion]]