git 虽然一时风头无两,但是不可否认在windows环境下使用git还是相对比较麻烦,而且在一个惯用svn的团队中推广git,不得不考虑其易用性和学习曲线的问题。所以svn还是大多数技术团队的首选。
下面以在centos7 中安装svn服务器为例说明。
首先建立svn用户(非必要)
useradd svn
passwd svn
然后在svn的home目录中建立版本库
svnadmin create repo1 // 创建版本库repo1
svnadmin create repo2 // 创建版本库repo2
...
然后对版本库进行用户管理和权限控制,在每个版本库下面都有一个conf目录,里面有svnserve.conf, authz, passwd三个文件,它们的作用分别为:
- svnserve.conf 版本库的配置文件
- passwd 用户名和口令文件
- authz 权限配置文件
在svnserve.conf文件中配置以下选项
- anon-access 非授权用户的权限,一般设置为none,即没有任务权限
- auth-access 授权用户的权限, 一般设置为write,即可读写
- password-db 将该配置项去掉注释,维持原值即可
- auth-db 将该配置项去掉注释,维持原值即可
一个开发测试团队往往要负责多个版本库,每个版本库是单独指定访问权限未免啰嗦,我们一般在版本库的共同父目录中指定控制文件,本例中为(/home/svn),以下是配置文件的例子
# file: svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
# file: passwd
#该文件中是用户名和密码的列表
[users]
user1 = passwd1
user2 = passwd 2
# file: authz
# 一般来说在团队中以组来管理权限,当然也可以为个人指定权限,组和个人的区别是组的前面有@
[groups]
dev = user1,user2 //定义开发组
test = user2 // 定义测试组
# 下面单独为每个版本库定义权限
# 注意版本库的写法,其中`:/`代表当前指定版本库的根目录
[repo1:/]
@dev = rw // 开发组可以读写
@test = r // 测试组只可以看
#当然你也可以单独为某个用户指定权限
user3 = rw
定义好后就可能开启svn服务了
su - // 切换到root下来启用服务
svnserve -d -r /home/svn --config-file /home/svn/svnserve.conf
# -d 表示在后台执行
# -r 表示版本库的根目录(这里是多个版本库总的你级目录)
# --config-file 因为我们的多个版本库要共用同一套配置,所以要通过此选项指定配置文件
关闭svn服务
ps -ef | grep svnserve
kill -p [pid]
svn迁移:
# 首先在源服务器上备份
$ svnadmin dump [repo] > repo.svn
# 建议备份后进行压缩
$ svnadmin dump [repo] | gzip > repo.svn
# 然后在目标服务器上恢复
$ svnadmin create [repo]
$ svnadmin load [repo] < repo.svn