CentOS 7上搭建SVN服务器并配置同步更新web项目

2017-12-11  本文已影响0人  萧格

1、下载安装SVN

[vagrant@test ~]$ sudo yum install subversion -y

2、查看版本是否安装成功

[vagrant@test ~]$ svn --version
svnserve, version 1.7.14 (r1542130)
   compiled Aug 23 2017, 20:43:38

Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

Cyrus SASL authentication is available.

3、创建SVN版本库目录

[vagrant@test ~]$ sudo mkdir -p /var/svn/www

4、创建版本库(commonAuth文件用户存放多版本授权信息)

[vagrant@test ~]$ cd /var/svn/www/
[vagrant@test www]$ sudo mkdir commonAuth
# 创建版本库project1、project2
[vagrant@test www]$ sudo svnadmin create project1
[vagrant@test www]$ sudo svnadmin create project2
# 把svn密码文件和授权文件拷贝到commonAuth目录下统一管理
[vagrant@test www]$ sudo cp -r project1/conf/passwd commonAuth/
[vagrant@test www]$ sudo cp -r project1/conf/authz commonAuth/
[vagrant@test www]$ ls
commonAuth  project1  project2

5、SVN配置

[vagrant@test www]$ cd commonAuth/
[vagrant@test commonAuth]$ ls
authz  passwd

[vagrant@test commonAuth]$ sudo vim passwd 
# 添加账号密码 (账号test1,test2,密码123123)
[users]
test1=123123
test2=123123

[vagrant@test commonAuth]$ sudo vim authz 
[groups]
# 为用户组 svngroup(test1,test2) 添加对版本库 project1 的读写权限
svngroup=test1,test2
[project1:/]
@svngroup=rw
# 为用户 test1 添加对版本库 project2 的读写权限
[project2:/]
test1=rw

# 修改版本库的配置文件
[vagrant@test commonAuth]$ cd /var/svn/www/project1/conf/
[vagrant@test conf]$ sudo vim svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /var/svn/www/commonAuth/passwd
authz-db = /var/svn/www/commonAuth/authz

[vagrant@test conf]$ cd /var/svn/www/project2/conf/
[vagrant@test conf]$ sudo vim svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /var/svn/www/commonAuth/passwd
authz-db = /var/svn/www/commonAuth/authz
[vagrant@test conf]$ sudo svnserve -d -r /var/svn/www

至此,svn就搭建完成了,可以通过 svn://ip地址/project1 来检出项目

[vagrant@test conf]$ ps -ef|grep svn
root      4135     1  0 04:17 ?        00:00:00 svnserve -d -r /var/svn/www
[vagrant@test conf]$ sudo kill -9 4135
[vagrant@test ~]$ sudo vim /usr/lib/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -d -r /var/svn/www

[Install]
WantedBy=multi-user.target

[vagrant@test ~]$ sudo systemctl enable svnserve.service

利用 SVN 的 post-commit 钩子实现多项目自动同步

假如 web 项目的根目录在/home/wwwroot/,现在要实现www.project1.com 自动同步svn版本project1的项目。

[vagrant@test ~]$ cd /var/svn/www/project1/hooks/
[vagrant@test hooks]$ sudo cp post-commit.tmpl post-commit
[vagrant@test hooks]$ sudo chmod a+x post-commit
[vagrant@test hooks]$ ll
total 40
-rwxr-xr-x. 1 root root 1977 Dec 28 17:22 post-commit

# 在文末添加如下脚本
[vagrant@test hooks]$ sudo vim post-commit
export LANG=en_US.UTF-8
SVN=/usr/bin/svn                                     # svn执行文件的路径
WEB=/home/wwwroot/www.project1.com                   # 需同步的目录
$SVN update $WEB --username test1 --password 123123  # 通过用户test1做更新操作

[vagrant@test ~]$ sudo svn co svn://localhost/project1/ /home/wwwroot/www.project1.com

需要实现www.project2.com 自动同步svn版本project2的项目。配置操作同上。

svn 在 linux 下的基本操作命令

sudo svn checkout path(path是服务器上的目录)
eg: sudo svn checkout svn://localhost/project1 /home/wwwroot/www.project1.com
简写:sudo svn co
sudo svn add file
例如:sudo svn add test.php(添加test.php)
sudo svn add *.php(添加当前目录下所有的php文件)
sudo svn commit -m "log message" path
eg: sudo svn commit -m “add test file for my test“ test.php
简写:sudo svn ci
sudo svn lock -m "log message" [--force] path
eg: sudo svn lock -m "lock test file" test.php
eg: sudo svn unlock test.php
sudo svn update -r m path (m是版本号)
eg:
sudo svn update                  # 如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
sudo svn update -r 200 test.php  # 将版本库中的文件test.php还原到版本200
简写:sudo svn up
sudo svn status path # 目录下的文件和子目录的状态,正常状态不显示
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:sudo svn st
sudo svn delete path -m "log message"
eg: 
sudo svn delete test.php
sudo svn ci -m 'delete test file'
sudo svn log path
eg: sudo svn log test.php
sudo svn info path
eg: sudo svn info test.php
sudo svn diff path
eg: 
sudo svn diff test.php
sudo svn diff -r 200:201 test.php
简写:svn di
sudo svn merge -r m:n path
eg: sudo svn merge -r 200:205 test.php
上一篇 下一篇

猜你喜欢

热点阅读