在linux上搭建SVN服务器、使用命令svnsync完整迁移SVN仓库的过程及使用PHP发布SVN代码的程序

一、在linux上创建SVN服务器及进行正确配置的全流程

    今天老板有了新项目,今天又开始部署新项目源代码至SVN上,步骤也很简单。

    我这里因为之前已经有几个项目了,所以SVNserver已经装过了,现在只是加个SVN项目,也简单很多。

第一步:当然是创建项目了,很简单,一句命令:

svnadmin create /usr/svn/newpro

当然这后面跟的就是你的项目存放的地址。

这一步操作之后就会在svn下面新建一个newpro目录以及其下的子目录和文件:如下

conf  db  format  hooks  locks  README.txt

比较重要的就是conf目录,里面有三个文件:authz  passwd  svnserve.conf

svnserve.conf是SVN服务器的配置文件:里面有些比较重要的项目:

anon-access = none    #指明没有验证过的用户没有权限
auth-access = write  #验证过的用户有写的最高权限
password-db = /usr/svn/newpro/conf/passwd  #账号密码文件所在
authz-db =/usr/svn/newpro/conf/authz   #权限验证文件所在

    记住上面这些行最前面不要有空格,我也不记得是啥时候碰到过这个问题,就是前面有空格导致的。

    然后就是配置passwd和authz文件了,passwd比较容易就是账写密码一一对应写即可,中间用=号隔开,一行一个账号密码,比如:

test =123456
hello=123456789

即表示两个用户,一个是test(密码123456)等等。

另一个文件authz里需要配置用户分级,然后对组进行权限设置,如:

[groups]
adminers = hellome,helloyou    #将这两个用户分到adminers分组里(在passwd里指定这两个用户的账号密码,即上方的hello和test)

[newpro:/]
@adminers = rw  #指明这个用户组具有读写的权限。

    到此SVN服务器的配置已经完成,使用如下命令启动项目svn服务,(-d表示后台运行, -r 指定根目录是 /usr/svn/newpro ) 

svnserve -d -r /usr/svn/newpro

    如遇到错误:svnserve: Can't bind server socket: Address already in use (原因:默认的启动svn服务,系统默认开启的端口为3690,当你启动第二个版本库时还是开启3690,所以就冲突了,因此再启动时只要更改端口号即可。)

    启动命令改为:svnserve -d -r /usr/svn/newpro --listen-port 3691 就可以了。

二、使用命令svnsync将SVN仓库数据完整迁移的操作过程

    新的服务器上需要把原来的SVN代码同步过来,因为想把历史的提交记录也保存下来,因此需要对SVN仓库记录进行保留,当然通过dump出源机器SVN代码,然后再load到新服务器上也是可以的,我这里是通过命令直接同步svn的数据(dump我没试,估计dump出来的文件非常大)。

    我原SVN仓库版本是svn, version 1.6.11 (r934486)。新的服务器使用docker搭建,版本为svn, version 1.14.1 (r1886195)。版本并不相同,不过通过实践这并没影响我操作。操作步骤记录如下:

1、在新服务器上部署好SVN仓库:
#创建仓库repostory
docker exec -it svn-server svnadmin create repostory 
cd /usr/opt/svn/repostory
cp hooks/pre-revprop-change.tmpl hooks/pre-revprop-change 
chmod 777 hooks/pre-revprop-change
#修改hooks/pre-revprop-change 最后一行exit 1代码为exit 0,如下
vim hooks/pre-revprop-change 
exit 0
 
2、执行仓库迁移
#初始化仓库迁移
svnsync init file:///usr/opt/svn/repostory svn://ip或域名/repostory(源地址)
#此步操作会提示输入源地址所在服务器的root账号密码和SVN账号密码

#执行仓库迁移
#此步操作会提示输入SVN账号密码
svnsync sync file:///usr/opt/svn/repostory

     执行上面的命令后,就会把原SVN仓库下的文件拷贝到新服务器,每个仓库需要进行独立操作。

三、PHP里执行svn命令以同步SVN服务器和网站服务器的代码 

    现在很多都使用github作为代码托管了,好处这里不说,不过也有很多使用SVN管理代码协同开发,我也觉得SVN也挺好用的。

    不过代码上传到了SVN后的存储并不是和编写的代码文件一样的文件存储格式,所以SVN服务器上的代码不能直接当作网站运行代码,SVN里本身有一个hooks可以实现当提交代码后直接更改网站代码文件夹里的内容。

    PHP也能实现这样的功能,在网站根目录下加上一个PHP文件,代码如下:

header("Content-type:text/html;charset=utf-8");
echo "----------------------------update start--------------------------------<br><br>"; 
error_reporting(E_ALL);
putenv('export LANG=C.UTF-8');
error_reporting(E_ALL);
$handle = popen('LANG=en_US.UTF-8 svn update --username 0407 --password 123456  --config-dir /home/www/web/.subversion  /home/www/web/ 2>&1','r');
while(!feof($handle)) {
   $buffer = fgets($handle);
   echo "$buffer<br/>\n";
   ob_flush();
   flush();
}
pclose($handle);
echo "<br><br><br><br>----------------------------".date("Y-m-d H:i:s");

    注意更改上面的账号密码内容,这样执行一下这个文件就可以将提交到SVN服务器上的代码更新到网站文件夹了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值