PS:这篇大约是11年写的,一直放到文档中心,没有更新到博客上来,今天把它更新上来了!
-
源代码安装
-
官网下载源码包
#SVN依赖文件: wget http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz; #SVN主文件: wget http://subversion.tigris.org/downloads/subversion-1.6.12.tar.gz;
-
依赖文件和主文件两个压缩包解压后都会自动放到此subversion-1.6.12目录下
tar -zxv -f subversion-deps-1.6.12.tar.gz; tar -zxv -f subversion-1.6.12.tar.gz; cd subversion-1.6.12; ./configure --prefix=/usr/local/subversion; make && make install;
-
svn svnadmin加入到系统命令,直接使用
添加环境变量
#vi /etc/profile 在文件最后加入: PATH=$PATH:/usr/local/subversion/bin export PATH #source /etc/profile
-
判断是否安装成功
svnserve --version svnserve, version 1.6.12 (r955767)
-
检查svn服务
netstat -tunl | grep ':3690'
-
-
建立SVN版本库
-
创建多库方式,SVN 管理多个项目
在多项目开发中会经常用到,不同的项目通过独自的svn仓库来实现开发者访问代码和日志的彻底隔离,举例有(blog和video)两个不同的大型项目,有两队开发团队,有时开发人员也会在两个项目中被调派开发项目。这种情况非常适合“在一台服务器上”创建多个版本库来管理各自项目。
#svn仓库总路径/home/repos/下面用来存放各个独立仓库 #例如:blog库和video库 mkdir -p /home/repos/ svnadmin create /home/repos/blog svnadmin create /home/repos/video #执行上面的命令后,自动在blog和video下建立多个文件,分别是conf,db,format,hooks,locks,README.txt
多库方式下svnserve.conf共用一个authz和passwd的配置来管理所有人员,非常方便开发人员的项目变动
#移动公用authz和passwd配置到/home/repos/ mv /home/repos/blog/conf/authz /home/repos/authz; mv /home/repos/blog/conf/passwd /home/repos/passwd; rm -fr /home/repos/video/conf/authz /home/repos/video/conf/passwd; #修改blog仓库下svnserve.conf配置公用authz和passwd文件目录 vim /home/repos/blog/conf/svnserve.conf [general] #匿名用户只读(read或none) anon-access = none #认证用户可写 auth-access = write #公用password文件的位置 password-db = ../../passwd #公用authz文件的位置 authz-db = ../../authz #仓库的文件名(具体在客户端更新下载的时候能看到仓库名字) realm = blog #修改video下svnserve.conf配置公用authz和passwd文件目录 vim /home/repos/video/conf/svnserve.conf [general] #匿名用户只读(read或none) anon-access = none #认证用户可写 auth-access = write #公用password文件的位置 password-db = ../../passwd #公用authz文件的位置 authz-db = ../../authz #仓库的文件名(具体在客户端更新下载的时候能看到仓库名字) realm = video
多库下的passwd用户名和密码配置
# vim /home/repos/passwd [users] #"="两边都必须空格和去掉行首尾两头的空格 admin = admin dever1 = dever1 dever2 = dever2
多库下的authz用户访问权限配置
# vim /home/repos/authz [groups] admin = admin blog_rw = dever1 video_rw = dever2 [/] @admin = rw [blog:/] @blog_rw = rw [video:/] @video_rw = rw #根据权限设置:admin用户能同时获取和修改blog和video库,而dever1只能读写repos1库,dever2只能读写video库,
-
创建单库方式
单库方式比较简单,只是对于单一项目的开发管理,并且单库方式一台服务器只能创建一个样本库,无法创建多个样本库,限制较大!
#例如:CMS版本库 mkdir -p /home/repos1/; svnadmin create /home/repos1/cms;
单库模式和多库模式在 svnserve.conf和passwd配置上相似,但是authz配置上差距较大,需要注意!
#单库下的authz权限控制 vi /home/repos1/cms/conf/authz [groups] admin = user1 dev = user2 [/] #正确的方式 @admin = rw @dev = r [cms:/] #错误的方式 @admin = rw @dev = r #因为[repos3:/]表示库repos3的根目录,而按上面的启动参数,是没有库的概念的
-
-
启动与访问
-
启动和停止服务
多库启动命令: svnserve -d -r /home/repos 单库启动命令: svnserve -d -r /home/repos/repos3
指令简介:此指令用于启动svn服务,-d指明以守护模式运行,svn自动在3690端口监听
3690是默认端口,可以使用“–listen-port=”或者“–listen-host=”来指定其它端口
-r选项用来指定svn服务的根目录,这样用户就可以使用相对路径访问,而不用提供完整路径#停止svn服务命令: killall svnserve
-
访问方式:
单库访问只需要访问地址或者域名,这个需要和多库区别对待,莫混淆!
#多库访问: URL:svn://192.168.0.1/repos1访问repos1 URL:svn://192.168.0.1/repos2访问repos2 #单库访问: URL:svn://192.168.0.1
-
-
三、配置用户和权限—认证和授权策略
-
版本库结构
├─conf │ ├─svnserve.conf │ ├─passwd │ └─authz ├─dav ├─db │ ├─revprops │ ├─revs │ └─transactions ├─hooks └─locks
其中authz 是权限控制,可以设置哪些用户可以访问哪些目录,passwd是设置用户和密码的,svnserve是设置svn相关的操作
-
对每个库的conf文件夹下的authz, passwd, svnserve.conf进行配置
例子:多库中的其中一个库blog配置 cd /home/repos/blog/conf vim snvserv.conf [general] #匿名用户只读(read或none) anon-access = read #认证用户可写 auth-access = write #保存用户名密码的password文件的位置 password-db = passwd #确定用户对某一路径具有操作权限的authz文件的位置 authz-db = authz #仓库的文件名(具体在客户端更新下载的时候能看到仓库名字) # realm = haha first vim passwd (“=”两边都必须空格 和 去掉两头的空格) [users] # harry = harryssecret # sally = sallyssecret wangying = wangying vim authz [groups] blog_rw = wangying [/] * = r [blog:/] * = @repos1_rw = rw
-
-
Subversion的使用经验
大标题描述
-
多库方式下svnserve.conf共用一个authz 和 passwd的配置
例子:多库中的其中一个库repos1配置
cd /home/repos/repos1/conf
mv authz ../../authz
mv passwd ../../passwdvim svnserve.conf 配置文件 [general] ### These options control access to the repository for unauthenticated ### and authenticated users. Valid values are "write", "read", ### and "none". The sample settings below are the defaults. anon-access = none auth-access = write ### The password-db option controls the location of the password ### database file. Unless you specify a path starting with a /, ### the file's location is relative to the directory containing ### this configuration file. ### If SASL is enabled (see below), this file will NOT be used. ### Uncomment the line below to use the default password file. password-db = ../../passwd ### The authz-db option controls the location of the authorization ### rules for path-based access control. Unless you specify a path ### starting with a /, the file's location is relative to the the ### directory containing this file. If you don't specify an ### authz-db, no path-based access control is done. ### Uncomment the line below to use the default authorization file. authz-db = ../../authz ### This option specifies the authentication realm of the repository. ### If two repositories have the same authentication realm, they should ### have the same password database, and vice versa. The default realm ### is repository's uuid. realm = repos
对提交到库中的文件做精确权限控制
举例:提交中库中的文件目录结构 ├─aa │ ├─bb │ ├ ├-cc vim authz [groups] repos1_rw = wangying repos1_rw2 = wangying2 [repos1:/] * = @repos1_rw = rw [repos1:/aa/bb] * = @repos1_rw2 = rw
通过这个可以看出
同一个库,wangying是不能更新得到bb目录的 wangying2 可以得到
结论:对库中的某一目录限定权限,则这一目录下的所有目录的权限将是继承上一目录的权限 -
SVN 显示日志 “no date”bug的解决方法
你想将你的代码库开放给所有人访问,于是你就开放了匿名访问权限,在 svnserve.conf 文件中添加一行: ‘anon-access=read’ 。
可是对于部分目录,你又不希望别人看到,于是针对那些特别目录,你在 authz.conf 里面进行配置,添加了授权访问的人,并添加了 ‘* =’ 标记
你认为一切OK了,可是你缺发现,那个特别目录却无法访问了,总是提示 ‘Not authorized to open root of edit operation’
或者 ‘未授权打开根进行编辑操作’ 。你再三检查你配置的用户名与密码,确认一切正确,还是无法解决问题。
原来,Subversion 有个小 bug ,当 ‘anon-access=read’ 并且某个目录有被设置上 ‘* =’ 标记,则会出现上述问题。
解决的办法:在 svnserve.conf 中,将 anon-access 设置成 none 。 -
crontab实现以秒执行检出svn服务器上的源代码放在/opt/svnhtdocs/aa/并覆盖/home/www/htdocs/aa下的源代码
-
#检出svn服务器上的源代码放在/opt/svnhtdocs/aa/ mkdir /opt/svnhtdocs; cd /opt/svnhtdocs; svn checkout --username ** --password ** svn://**/aa /opt/svnhtdocs/aa #同步rsync命令 yum install rsync
-
脚本文件编辑
源代码: vim /root/runscript/svn.sh svn.sh源代码: #!/bin/bash # PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH export LANG=zh_CN.UTF-8 #设定环境变量,如果没有设定可能会出现update报错 cd /opt/svnhtdocs/aa svn up #.* 代表.svn文件不同步 rsync -vauP --exclude=".*" /opt/svnhtdocs/aa /home/www/htdocs/aa chown -R www:www /home/www/htdocs/aa #修改权限700 chmod 700 /root/runscript/svn.sh
-
以下方法将每10秒执行一次
crontab -e # 或vim /var/spool/cron/root * * * * * /root/runscript/svn.sh * * * * * sleep 10;/root/runscript/svn.sh * * * * * sleep 20; /root/runscript/svn.sh * * * * * sleep 30; /root/runscript/svn.sh * * * * * sleep 40; /root/runscript/svn.sh * * * * * sleep 50; /root/runscript/svn.sh #重启cron service crond restart
- rsync例分析
rsync -vauP --exclude=".*" --exclude="common/config" projectA/ projectAA #第一个exclude表示跳过所有.开头的隐藏文件 #第二个表示调过projectA/common/config目录,因为config目录下的文件,轻易不需改变,如果需要手动调整即可,注意这个参数是后面SRC参数的相对路径 rsync -vzrtopg --exclude-from="/data/web/ignore.list" --progress projectA/* /data/web/projectAA #这里的ignore.list是忽略的文件列表: .svn Runtime
-
-