美文网首页
CentOS 7上搭建SVN服务器并配置同步更新web项目

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

作者: 萧格 | 来源:发表于2017-12-11 17:26 被阅读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
  • 启动svn版本库
[vagrant@test conf]$ sudo svnserve -d -r /var/svn/www

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

  • 停止SVN命令
[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 下的基本操作命令

  • 将文件checkout到本地目录
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

相关文章

网友评论

      本文标题:CentOS 7上搭建SVN服务器并配置同步更新web项目

      本文链接:https://www.haomeiwen.com/subject/xpiiixtx.html