svnsyncでリポジトリミラーのメモ


・syncする側される側ともにバージョンは1.4以降(じゃないとsvnsync自体がない)

・sync用のリポジトリを作成→svnadmin create hoge

リポジトリ内のhooks/pre-revprop-change を作成(中身は #!/bin/sh\nexit 0)

・svnsync init file:///path_to_repos http://url_to_repos

・svnsync sync file:///path_to_repos

ということで以下履歴

$ sudo -u www-data -s

$ cd /home/svn

$ svnadmin create hoge

$ echo -e "#! /bin/sh\nexit 0" > hoge/hooks/pre-revprop-change

$ svnsync init file:///home/svn/hoge http://url_to_repos/svn/hoge
Copied properties for revision 0.

$ svnsync sync file:///home/svn/hoge
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Committed revision 3.
Copied properties for revision 3.
Committed revision 4.
Copied properties for revision 4.
Committed revision 5.
...


ついでにcronでsyncを自動化するためのシェルスクリプト

/root/svnsync.sh

#!/bin/sh

SVN_ROOT_LOCAL="/home/svn"
SVN_ROOT_REMOTE="http://[path_to_remote_root]/"
SVN_USERNAME_REMOTE="[リモートの認証ユーザ]"
SVN_PASSWORD_REMOTE="[リモートの認証ユーザパスワード]"
SVN_USERNAME_LOCAL="www-data"

SVNADMIN_CMD="svnadmin"
SVNSYNC_CMD="svnsync"
SUDO_CMD="sudo -u $SVN_USERNAME_LOCAL"

for arg in $@; do

    if [ ! -d $SVN_ROOT_LOCAL/$arg ]; then
        $SUDO_CMD $SVNADMIN_CMD create $SVN_ROOT_LOCAL/$arg

        $SUDO_CMD /bin/echo -e '#!/bin/sh\nexit 0' \
          | $SUDO_CMD tee $SVN_ROOT_LOCAL/$arg/hooks/pre-revprop-change > /dev/null

        chmod 755 $SVN_ROOT_LOCAL/$arg/hooks/pre-revprop-change

        $SUDO_CMD $SVNSYNC_CMD init \
          file://$SVN_ROOT_LOCAL/$arg $SVN_ROOT_REMOTE/$arg \
          --username $SVN_USERNAME_REMOTE --password $SVN_PASSWORD_REMOTE
    fi 

    $SUDO_CMD $SVNSYNC_CMD sync \
      file://$SVN_ROOT_LOCAL/$arg $SVN_ROOT_REMOTE/$arg \
      --username $SVN_USERNAME_REMOTE --password $SVN_PASSWORD_REMOTE 

done

exit


※一応パスワードとか書いてるので「chmod 700 /root/svnsync.sh」しておくこと。

あとはcronで

00 4 * * *    /root/svnsync.sh project1 project2 project3 ...

という感じで登録しておけば毎日定時に自動syncが行われる。