本文部分例子引用linux下搭建SVN服务器完全手册
一、简介
Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
二、安装与部署
yum install subversion-xxxx
在这个安装这个之前可能需要先安装
yum install perl-URI-xxxx
后面表示相应的版本号。
比如:
三、配置
这里主要涉及authz、passd、svnserve.conf三个主文件
(1)创建版本发布的主目录
mkdir -p /home/lorieskate/svn
(2)创建版本库目录(版本库与版本主目录的区别是子集的关系,好比mount命令,版本库挂载在版本主目录下。当然版本主目录下可以有多个版本库,所以它们之间是一对多的关系)
mkdir -p /home/lorieskate/svn/project
svnadmin create /home/lorieskate/svn/project
(3)配置密码
当上一步执行成功之后,会在该目录的conf目录下自动生成authz、passwd和svnserve.conf三个文件。
并不是一定要按以下的步骤来配置,可以随个人喜好。
[users]
# harry = harryssecret
# sally = sallyssecret
lorieskate = 123456
pm = pm_pw
server_group = server_pw
client_group = client_pw
test_group = test_pw
(4)配置用户授权( 这里配置的时候一定要小心,很多的问题都是源于此)
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = lorieskate
project_p = pm
project_s = server_group
project_c = client_group
project_t = test_group
[project:/]
@admin = rw
@project_p = rw
* =
[project:/server]
@project_p = rw
@project_s = rw
* =
[project:/client]
@project_p = rw
@project_c = rw
* =
[project:/test]
@project_p = rw
@project_t = rw
* =
[project:/doc]
@project_p = rw
@project_s = rw
@project_c = rw
@project_t = rw
* =
(5)配置svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
#realm = project
(6)启动服务
svnserve -d -r /home/lorieskate/svn
其中路径是指版本的主目录。顺便提一下关闭服务:
#! /bin/bash
proc=$(ps -ef | grep svn | grep -v grep | awk '{print $2}')
if [ ! -z "$proc" ]
then
kill $proc
fi
四、测试
svn checkout svn://192.168.72.128/project
如果有需要,我们可以还原到最初的版本库。首先先找到.subversion目录,然后删除.subversion/auth/svn.simple/下的文件,最后可以重新设定了。
五、svn相关命令(所以命令后面再加上 --help,可以查看更多的命令帮助,必须得在working directory)
(1)常用命令
a) checkout将文件上传到本地目录下(这里的本地目录指的就是path,有时我们经常会碰到svn: '.' is not a working copy directory这个问题,就是因为当前操作的目录不是在path下)
形式:svn checkout path
例子:svn checkout svn://192.168.72.168/project
b) add 添加新文件到当前版本库
形式:svn add filename
例子:svn checkout test.c
c) info 查看文件详细信息
形式:svn info filename
例子:svn info test.c
d) commit 将改动的文件提交到版本库
形式:svn commit filename -m ''
例子:svn commit test.c -m 'testing'
e) update 更新到某个版本
形式:svn update filename
例子:svn update 默认将当前目录及子目录下的文件更新到最新的版本。
svn update -r 200 test.c 将版本库中的文件还原到版本200。
svn update test.c 更新,于版本同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后在提交commit。
f) help 命令帮助
形式:svn help
例子:svn help
g) lock/unlock 加锁/解锁
形式:svn lock/unlock -m '' path
例子:svn lock/unlock -m 'lock/unlock' test.c
h) status 查看文件或目录的状态
形式:svn status path
例子:svn status test.c
i)log查看日志
形式:svn log path
例子:svn log test.c
j) diff 比较文本差异
形式:svn diff path
例子:svn diff test.c 与基础版本对比
svn diff -r 200:201 test.c 对比第200版本与第201版本的test.c文件
k) merge 合并文本
形式:svn merge -r m:n path
例子:svn merge -r 200:201 test.c 合并第200版本与第201版本的test.c文件
(2)不常用命令
a) mkdir 创建纳入版本库下的新目录
形式:svn mkdir path
例子:svn mkdir logs
b) list 列出版本库下的目录以及文件
形式:svn list
例子:svn list
c) resolved 解决冲突
形式:svn resolved path
例子:svn resolved test.c
d) revert 恢复本地修改(原始未改变的工作副本文件)
形式:svn revert path
例子:svn revert test.c
e) switch 代码库URL变更(更新工作副本至不同的URL)
形式:svn switch path
f) cat 指定输出文件或URL的内容
形式:svn cat 目标[@版本] 如果指定了版本,将从指定的版本开始查找