2016-11-21更新:

  今天被svn的钩子搞了半天,网上找解决方法都无效,下午被我试出来了,特此记录。

  在svn的钩子中可以使用update来更新配置文件,比如ansible的,puppet的,具体过程是先co到本地,本地修改完更新到svn服务器,触发钩子,更新ansible等服务器。

  遇到的问题是:

    

  本地修改完提交到服务器显示工作副本被lock,网上的解决方法是去工作副本clean up,但是根本没用,因为问题根本不出在这。

  问题来源:

  我的svn是用root运行的,apache是daemon用户运行的,钩子是

    svn update /etc/ansible --username wj --password ' '

  在运行update的时候其实是daemon用户进行的,而daemon用户显然运行不了svn命令,所以我认为是权限不够导致的。

  解决方法:

     因此,在/etc/sudoers文件中添加运行apache用户的sudo权限,并在钩子前面加sudo,再次测试,完美解决,修改co到本地的ansible中的hosts文件,commit之后,在服务器的/etc/ansible中的hosts也更新了

  具体操作:

    echo "daemon ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

     修改post-commit:sudo svn update /etc/ansible --username wj --password ' '

  最近公司各个部门陆陆续续搬迁到上地,机房也搬过去,老大叫我把我们部门的svn库都迁移到备份机上防止原svn服务器搬迁过程损坏造成无法使用的情况。我表示svn以前都没碰过,git倒是学过一段时间,后来网上找了找文档发现使用方法和思想都差不多。我发现这种类似于lnmp之流或是常用的源码编译我已经越来越懒得过多去讲述了,因为configure -h你想知道的都有了,可能会碰到些许坑,不过都是一些路径或是缺少库导致的,仔细排查就能知道。奉上svn安装的官方文档http://svn.apache.org/repos/asf/subversion/trunk/INSTALL。讲的很详细,至少比起mysql之流要好太多了。

  安装我就讲两点

  1、依赖

  编译需要gcc和make,还有几个第三方依赖库,apr、apr-util、SQLite,apr和apr-util包很好找,SQLite没有的话会直接提示你并给出链接,下载解压后将里面的3个文件全部拷贝至svn源码目录的sqlite-amalgamation(没有就自己创建)中,重新执行3部曲即可。

  2、正确的安装顺序

  yum install expat-devel(serf需要)

  serf下载地址wget http://archive.apache.org/dist/serf/serf-1.2.1.tar.bz2

  先安装apr、apr-util和serf、serf的编译参数:./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

在安装apache,apache的编译参数是./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-dav --enable-so --enable-maintainer-mode --enable-ssl,最后安装subversion,编译参数是 ./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --with-apxs=/usr/local/apache2/bin/apxs --with-serf=/usr/local/serf --with-sqlite=$PWD/sqlite-amalgamation/sqlite3.c --with-openssl --with-zlib --enable-shared --enable-maintainer-mode --enable-mod-activation,个人建议apache用2.4.20版本,svn用1.8.16,亲测可用

  安装完毕后在http的配置文件下有dav_svn_module和authz_svn_module这两个模块说明支持apache的svn安装成功。

  搭建

  1、创建仓库

  创建repos目录作为仓库,然后创建svntest项目,在这里,所有的操作都是对svntest做的,

  mkdir /path/to/repos/svntest

  svnadmin create /path/to/repos/

  在目录/path/to/repos使用默认数据存储方式创建了一个新的版本库。在Subversion 1.2之前,缺省值是Berkeley DB;而现在是FSFS。你可以通过--fs-type参数明确地指定文件系统类型,可选的值包括fsfsbdb

  svnadmin create --fs-type fsfs(bdb) /path/to/repos

  2、配置/path/to/repos/svntest/conf/下的authz、passwd、serve.conf

     在server.conf中将anon-access、auth-access、password-db和authz-db前面的注释符号去掉并顶格。

     在passwd文件中添加用户=密码

     在authz文件中添加组和权限

   3、开启服务

  svnserve -d -r /path/to/repos

  4、导入项目至版本库

  svnadmin import svntest svn://localhost/svntest -m "Init commit"

  第一个svntest是本地的项目

  此时可以在客户端使用svn co将svntest同步为你的工作副本了。

    svn checkout svn://ip/svntest

 迁移

  有很多种方法,dump是官方推荐的备份方法,不过我做了一次感觉导出的dump文件太大,过于占用磁盘空间,svnsync是不错的选择。

  源目录:svn://192.168.1.10/mu

  目标目录:svn://192.168.1.20/mu

  1、创建备份版本库

  svnadmin create mu

  此时mu下就有hooks目录,拷贝mu/hooks/pre_revprop-change.tmpl至mu/hooks/pre_revprop-change,修改pre_revprop-change,替换为exit 0

  2、初始化版本库

  svnsync init mu svn://192.168.1.10/mu

  即svnsync init 目标库 源库

  会向你询问源库的用户名和密码,输入完毕显示Copied properties for revision 0.

  3、同步

   svnsync sync file:///localhost/mu

  

  sync初次同步是全量备份,可能耗时较长,第一次备份过后,sync后续的备份就是增量备份了  

  

  附上我的备份脚本

#!/bin/bash
init_repo() {
cp $backupdir/$line/hooks/pre-revprop-change.tmpl $backupdir/$line/hooks/pre-revprop-change
sed -i '3,65d;s/exit 1/exit 0/g' $backupdir/$line/hooks/pre-revprop-change
chmod a+x $backupdir/$line/hooks/pre-revprop-change
svnsync init file://$backupdir/$line/ http://ip/svn/$line --username apache --password DslhDBk #--allow-non-empty
if [ $? -eq ];then
echo " init $backupdir/$line success "
else
echo " init $backupdir/$line faild "
exit
fi
} create_repo() {
svnadmin create $backupdir/$line
if [ $? -eq ];then
echo " create $backupdir/$line success "
else
echo " create $backupdir/$line faild "
exit
fi
} sync_repo() {
cat repofile |while read line
do
echo "start $backupdir/$line "
svnsync sync file://$backupdir/$line --username apache --password DslhDBk
if [ $? -eq ];then
echo " sync $backupdir/$line success "
else
echo " sync $backupdir/$line faild "
exit
fi
done
} backupdir=/data0/www/svnroot
if test -e $backupdir;then
echo "backup dir exists"
else
mkdir -p $backupdir
fi
cat repofile |while read line
do
if test -e $backupdir/$line;then
echo "repo $backupdir/$line exists"
if test -e $backupdir/$line/hooks/pre-revprop-change;then
echo "repo $backupdir/$line has been init"
else
init_repo
fi
else
create_repo
init_repo
fi
done
echo "start svn sync "
sync_repo

 

  




svn服务器搭建与迁移的更多相关文章

  1. SVN服务器搭建和使用(一)

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  2. SVN服务器搭建和使用(一)(转)

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  3. SVN服务器搭建--Subversio与TortoiseSVN的配置安装

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  4. SVN服务器搭建和使用

    SVN服务器搭建和使用 Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下 ...

  5. SVN服务器搭建(1)

    转自:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html SVN服务器搭建和使用(一) Subversion是优秀的版 ...

  6. SVN服务器搭建和配置使用详解

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  7. Win7 x64 svn 服务器搭建

    SVN服务器搭建和使用   Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了 ...

  8. SVN服务器搭建和使用-转载

    SVN服务器搭建和使用(一)-转载 原文地址:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html Subversion ...

  9. SVN 服务器搭建及使用 一

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

随机推荐

  1. cf299C Weird Game

    Weird Game Yaroslav, Andrey and Roman can play cubes for hours and hours. But the game is for three, ...

  2. 【Tomcat】解决Tomcat catalina.out 不断成长导致档案过大的问题

    Tomcat的网站上的说法http://wiki.apache.org/tomcat/FAQ/Logging#Q6: System.out 和 System.err 都被打印到 catalina.ou ...

  3. python3里的Urllib库

    首先Urllib是python内置的HTTP请求库. 包括以下模块: urllib.request 请求模块: urllib.error 异常处理模块: urllib.parse url解析模块: u ...

  4. php——解决中文乱码问题

    一般写代码的时候遇到中文乱码的问题还是比较烦躁的,下面是我总结的几种中文乱码的解决办法: 1:php在头部设置header设置编码方式: header('Content-type:text/html; ...

  5. Android UI设计--半透明效果对话框及activity(可做遮罩层)

    下面是style的一些属性及其解释 <style name="dialog_translucent" parent="@android:style/Theme.Di ...

  6. hdu4848 求到达每个点总时间最短(sum[d[i]])。

    开始的时候是暴力dfs+剪枝,怎么也不行.后来参考他人思想: 先求出每个点之间的最短路(这样预处理之后的搜索就可以判重返回了),截肢还是关键:1最优性剪枝(尽量最优:目前的状态+预计还有的最小时间&g ...

  7. POJ2752 NEXT[J]特性应用利用。

    题意:求一个字符串所有的前缀和后缀相同的情况,每个情况输出长度,如 ababcababababcabab :2 4 9 18 思路:next数组应用,利用j=nxet[i],i之前与开头相同的字符串长 ...

  8. 2017 ACM/ICPC Asia Regional Shenyang Online 记录

    这场比赛全程心态爆炸…… 开场脑子秀逗签到题WA了一发.之后0贡献. 前期状态全无 H题想复杂了,写了好久样例过不去. 然后这题还是队友过的…… 后期心态炸裂,A题后缀数组理解不深,无法特判k = 1 ...

  9. codevs——1507 酒厂选址

    1507 酒厂选址  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description Abstinence(戒酒) ...

  10. 字符串哈希hash

    题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转 ...