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












网友评论