svn版本控制系统有很多用途,最近公司使用它加脚本实现产品补丁小更新(因为如果每次都大更新的话,每次都要重新打rpm包,更新yum源等,很麻烦)。
一、服务器端安装
1、安装svn
[[email protected] ~]#yum install -y subversion
2、新建svn目录
[[email protected] ~]#mkdir -p /root/svn/svnserver
3、启动svn服务
[[email protected] ~]#svnserve -d -r /root/svn/svnserver/
如果有这个报错:svnserve: error while loading shared libraries: libaprutil-1.so.0: cannot open shared object file: No such file or directory
解决办法:
(1)找到这个文件所在目录
[[email protected] ~]#find / -name "libaprutil-1.so.0" /usr/local/xxx/service/apache/lib/libaprutil-1.so.0
(2)查看共享库配置文件
[[email protected] ~]#more /etc/ld.so.conf include ld.so.conf.d/*.conf
(3)添加共享库,并更新共享库
[[email protected] ~]#vi /etc/ld.so.conf.d/httpd-apr.conf /usr/local/xxx/service/apache/lib/ [[email protected] ~]#ldconfig -v
4、启动svn
[[email protected] ~]#svn --version [[email protected] ~]#svnserve -d -r /root/svn/svnserver/
备注:如果要更改端口启动的时候接上“--listen-port”新端口。
5、创建版本库
[[email protected] ~]#svnadmin create /root/svn/svnserver/patch
6、修改svnserve.conf配置文件,在[general]下方加入这四行
[[email protected] ~]#vim /root/svn/svnserver/patch/conf/svnserve.conf anon-access = none auth-access = write password-db = passwd authz-db = authz realm = patch
备注:realm 这行也可以不加。
7、创建svn用户和权限分配
在 /root/svn/svnserver/patch/conf目录下,有两个文件是配置用户账号密码和用户权限的。
passwd 此文件配置用户账号和密码 [[email protected] ~]#vim /root/svn/svnserver/patch/conf/passwd [users] # harry = harryssecret # sally = sallyssecret xxx = 123456 zhangsan = 123456 lisi = 123456
authz 此文件配置用户权限 [[email protected] ~]#vim /root/svn/svnserver/patch/conf/authz [groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe admin = xxx user = xxx,zhangsan,lisi # [/foo/bar] # harry = rw # &joe = r # * = # [repository:/baz/fuz] # @harry_and_sally = rw # * = r [/] @admin = rw @user = rw
备注:authz这个文件详细控制权限,请见最后的备注。
8、设置iptables防火墙允许3690端口,或者关闭防火墙
9、 编写启动脚本
[[email protected] ~]#vi /etc/init.d/server_init #!/bin/bash #chkconfig: 345 90 90 #description: server_init for patch. svnserve -d -r /root/svn/svnserver/
10、 启动脚本放入/etc/init.d/目录下,并设置开机启动
[[email protected] ~]#chkconfig --add server_init [[email protected] ~]#chkconfig server_init on [[email protected] ~]#chmod 755 server_init
备注:如果要杀掉svnserver,用killall svnserver,然后svnserve -d -r /root/svn/svnserver/启动。
二、客户端安装
1、下载TortoiseSVN客户端
http://sw.bos.baidu.com/sw-search-sp/software/b2ea78514e765/TortoiseSVN-1.9.7.27907-x64.msi
2、右键点击桌面上空白区域,然后会发现右键的菜单中多了“SVN Checkout...”工具栏,点击。
3、填入服务器版本库的路径,和本地存放版本库文件的目录,这里本地C盘新建一个patch目录,会提示输入密码,并下载更新。
4、更新并提交2个文件,如下图:
如果要提交某一个文件,可以选中这个文件,然后右键选择TortoiseSVN---Add添加,提交的时候最好写上备注:
5、清除登录帐号和密码信息,然后用另外一个帐号登录(本地C盘新建一个test2目录)
备注:我这里只是举例,实际情况下是让另外一个人在其他电脑上登录另外一个帐号,验证相互提交的数据是否能同步。
如上图,表示同步成功。
疑问:
或许有很多人会以为这些文件会以文件方式存储在服务器上,其实不是。
上传的文件放在SVN服务器的哪个目录下,SVN服务器版本库有两种格式。一种为FSFS,一种为BDB。
把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中。
如果是FSFS格式,这些数据存放在版本库的db目录中,里面的revs和revprops分别存放着每次提交的差异数据和日志等信息
备注:
这是一个权限实例需求,如果需要对权限精确控制,请参考这个。
-----------------------------------------------------------------
策划组:开策划、美术读写
后端组:开后端读写,策划只读
前端组:开前端读写,策划、美术只读
美术组:开美术读写,策划只读
管理员组:所有的读写
authz:用户权限配置
示例:
[groups]
#管理组
manager = boss
#服务端用户组
server = server1,server2
#客户端用户组
client = client1,client2
#美术组
art = art1,art2
#策划组
design=design1,design2
[game:/]
@manager=rw
[game:/server]
@server=rw
[game:/client]
@client=rw
@design=r
@art=r
[game:/art]
@design=rw
@art=rw
@client=r
[game:/design]
@design=rw
@server=r
@client=r
@art=r
passwd:用户密码
[users]
boss=123456
server1=123456
server2=123456
client1=123456
client2=123456
art1=123456
art2=123456
design1=123456
design2=123456