本帖最后由 Miku的大葱 于 2016-7-23 11:24 编辑
1.首先介绍SVN(SubVersion)
Svn是近年来崛起的非常优秀的版本管理工具,与CVS一样,SVN是一个跨平台的开源的版本控制系统。SVN版本管理着随时间改变的各种数据。这些数据放置在一个中央资料档案(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是与众不同的是,SVN会备份并记录每个文件每一次修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。
2.那么为什么会有SVN这样一个项目呢?
官方的解释是,为了接管CVS用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。问题见SVN官方首页。
SVN是一个非常通用的软件系统, 他常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视频、图片等等。
截止到目前为止,常见的版本管理软件有:vss(微软),cvs,svn,git。
static/image/hrline/1.gif
SVN相关站点:
http://subversion.tigris.org/
https://subversion.apache.org/
客户端:https://tortoisesvn.net/
SVN中文社区:http://www.iusesvn.com/
中文常见问题解答:http://subversion.apache.org/faq.zh.html
官方手册:http://svnbook.red-bean.com
static/image/hrline/1.gif
3.SVN与git的区别?
3.1 SVN集中式版本控制系统
SVN版本控制系统是集中式数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这版本库,提交代码也都必须提交到这个中央版本库。
SVN版本控制系统工作流程如下:
①在中央库创建或从主干复制一个分支。
②从中央库check out下这个分支的代码。
③增加自己的代码文件,修改现存的代码或删除代码的文件。
④commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先update一下然后再提交。,up代码的时候如果出现了冲突,需要解决好冲突之后再进行提交。
使用SVN的缺点:
当你无法连接到中央版本库的情况下,那么你无法提交代码,将代码加入版本控制;你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码我们都默认公国自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中管理的,因此,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些!SVN的备份要备份所有代码数据以及所有更改的版本记录。
3.2 git分布式的版本控制
Git是由Linus开发的,所以很自然的git和linux文件系统结合的非常紧密。以至于windows上你必须使用cygwin才能使其完美的工作。
那git凭啥叫分布式版本控制系统呢?还是从其工作模式讲起吧。git中没有了中央版本库的说法了,但是为了开发小组的代码共享,我们通常还是会搭建一个远程的git仓库。但是和svn不同的是,开发者本地包含了一个完整的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。如果你的项目是闭源的,或者你习惯于以往的集中式管理模式的话,那么在git下你也可以像svn那样的工作,并将其add到远程git 。
①你本地创建一个git库,并将其add到远程git库中。
②你在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中(其实是提交到git目录下的objects目录中去了)
③将本地git库的分支push到远程git库的分支,如果这个远程git库中已经有别的人push过,那么远程git库将不允许你push,这时候你需要先pull,然后如果有冲突,处理好冲突,commit到本地库后,再push到远程git库。
4.运维人员掌握版本管理
对于管理系统运维人员需要掌握的技术点:
1.安装、部署、维护、排障
2.简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号。
3.对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。
SVN服务(SubVersion)
[index]
[#]
[#]
[/index]
[#]
[#]
[/index]
1.首先介绍SVN(SubVersion)
Svn是近年来崛起的非常优秀的版本管理工具,与CVS一样,SVN是一个跨平台的开源的版本控制系统。SVN版本管理着随时间改变的各种数据。这些数据放置在一个中央资料档案(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是与众不同的是,SVN会备份并记录每个文件每一次修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。
2.那么为什么会有SVN这样一个项目呢?
官方的解释是,为了接管CVS用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。问题见SVN官方首页。
SVN是一个非常通用的软件系统, 他常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视频、图片等等。
截止到目前为止,常见的版本管理软件有:vss(微软),cvs,svn,git。
static/image/hrline/1.gif
SVN相关站点:
http://subversion.tigris.org/
https://subversion.apache.org/
客户端:https://tortoisesvn.net/
SVN中文社区:http://www.iusesvn.com/
中文常见问题解答:http://subversion.apache.org/faq.zh.html
官方手册:http://svnbook.red-bean.com
static/image/hrline/1.gif
3.SVN与git的区别?
3.1 SVN集中式版本控制系统
SVN版本控制系统是集中式数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这版本库,提交代码也都必须提交到这个中央版本库。
SVN版本控制系统工作流程如下:
①在中央库创建或从主干复制一个分支。
②从中央库check out下这个分支的代码。
③增加自己的代码文件,修改现存的代码或删除代码的文件。
④commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先update一下然后再提交。,up代码的时候如果出现了冲突,需要解决好冲突之后再进行提交。
使用SVN的缺点:
当你无法连接到中央版本库的情况下,那么你无法提交代码,将代码加入版本控制;你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码我们都默认公国自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中管理的,因此,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些!SVN的备份要备份所有代码数据以及所有更改的版本记录。
3.2 git分布式的版本控制
Git是由Linus开发的,所以很自然的git和linux文件系统结合的非常紧密。以至于windows上你必须使用cygwin才能使其完美的工作。
那git凭啥叫分布式版本控制系统呢?还是从其工作模式讲起吧。git中没有了中央版本库的说法了,但是为了开发小组的代码共享,我们通常还是会搭建一个远程的git仓库。但是和svn不同的是,开发者本地包含了一个完整的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。如果你的项目是闭源的,或者你习惯于以往的集中式管理模式的话,那么在git下你也可以像svn那样的工作,并将其add到远程git 。
①你本地创建一个git库,并将其add到远程git库中。
②你在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中(其实是提交到git目录下的objects目录中去了)
③将本地git库的分支push到远程git库的分支,如果这个远程git库中已经有别的人push过,那么远程git库将不允许你push,这时候你需要先pull,然后如果有冲突,处理好冲突,commit到本地库后,再push到远程git库。
4.运维人员掌握版本管理
对于管理系统运维人员需要掌握的技术点:
1.安装、部署、维护、排障
2.简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号。
3.对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。
0
本帖最后由 Miku的大葱 于 2016-7-23 12:32 编辑
1.SVN服务运行方式和访问模式
1.1 SVN服务运行方式
SVN服务常见的运行访问方式
①独立服务器访问:比如svn://svn.xxxxx.org
②借助apache等http服务:如http://svn.xxxxx.org/sadoc
a.单独安装apache+svn
b.CSVN(apache+svn)是一个单独的整合软件,带web界面管理的svn软件。
③直接本地访问:比如file://application/svndata/sadoc
1.2 SVN客户端访问模式
Svn客户端可以通过很多种方式访问服务端,例如:本地磁盘访问,或各种各样不同的网络协议访问,但一个版本库地址永远是一个URL,URL反映了访问方法。
1.3 SVN档案库数据格式
SVN存储版本数据有两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时有可能锁住数据,所以还是FSFS方式更安全一点。
BDB:
伯克利DB(Berkeley DB),版本局可以使用的一种经过充分测试的后台数据库实现,不能在通过网络共享的文件系统上使用,伯克利DB是SVN1.2版本以前的缺省版本库格式。
FSFS:
一个专用于SunVersion版本库的文件系统后端,可以使用网络文件系统(NFS或SMBFS)。是1.2版本及其后的缺省版本库格式
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件加上一些额外的信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库(BDB)或一系列二进制文件的(FSFS)一方面解决了许多问题(例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性)。然而另一方面,数据存储由此变得不透明,不能像ftp,samba,nfs等能看到实体文件了。
1.4 SVN逻辑架构图
1.5 SVC版本管理使用的工作流程以及优缺点介绍开始新一天的工作
①首先从SVN服务器下载项目组最新代码
②进入自己的分支进行开发工作,每隔一小时向服务器提交自己的分支提交一次代码(很多程序员都有这个习惯。因为有时候自己对代码改来改去,最后又想恢复到前一个小时的版本或者看看前一个小时自己修改了哪些代码,就需要这样做了)
③下班时间到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器
缺点:
1、由于每一次提交都保留一个原始副本,因此SVN数据库容量会暴增
2、如果不能连接到SVN服务器上,基本上不可以工作,例如第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、不适合开源系统开发【当然也未必,但是很多人的话svn未必运行的很好】(开发人数非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确地权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
优点:
1、管理方便,逻辑清晰明确,符合一般人的思维习惯。
2、易于管理,集中式svn服务器更能保证数据的安全型
3、代码一致性非常高
4、适合开发人数不多的项目开发
5、普及度高,大部分软件配置管理的大学教材都是使用svn和vss。
1.SVN服务运行方式和访问模式
1.1 SVN服务运行方式
SVN服务常见的运行访问方式
①独立服务器访问:比如svn://svn.xxxxx.org
②借助apache等http服务:如http://svn.xxxxx.org/sadoc
a.单独安装apache+svn
b.CSVN(apache+svn)是一个单独的整合软件,带web界面管理的svn软件。
③直接本地访问:比如file://application/svndata/sadoc
1.2 SVN客户端访问模式
Svn客户端可以通过很多种方式访问服务端,例如:本地磁盘访问,或各种各样不同的网络协议访问,但一个版本库地址永远是一个URL,URL反映了访问方法。
访问方式 | 说明 |
file:// | 直接通过本地磁盘或者网络磁盘访问版本库 |
http:// | 通过WebDAV协议访问支持SubVersion的Apache服务器 |
https:// | 与http://类似,但是支持SSL加密访问。 |
Svn:// | 通过TCP/IP自定义协议访问svnserve服务器 |
Svn+ssh:// | 通过认证并加密的TCP/IP自定义协议访问svnserve服务器 |
SVN存储版本数据有两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时有可能锁住数据,所以还是FSFS方式更安全一点。
BDB:
伯克利DB(Berkeley DB),版本局可以使用的一种经过充分测试的后台数据库实现,不能在通过网络共享的文件系统上使用,伯克利DB是SVN1.2版本以前的缺省版本库格式。
FSFS:
一个专用于SunVersion版本库的文件系统后端,可以使用网络文件系统(NFS或SMBFS)。是1.2版本及其后的缺省版本库格式
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件加上一些额外的信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库(BDB)或一系列二进制文件的(FSFS)一方面解决了许多问题(例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性)。然而另一方面,数据存储由此变得不透明,不能像ftp,samba,nfs等能看到实体文件了。
1.4 SVN逻辑架构图
1.5 SVC版本管理使用的工作流程以及优缺点介绍开始新一天的工作
①首先从SVN服务器下载项目组最新代码
②进入自己的分支进行开发工作,每隔一小时向服务器提交自己的分支提交一次代码(很多程序员都有这个习惯。因为有时候自己对代码改来改去,最后又想恢复到前一个小时的版本或者看看前一个小时自己修改了哪些代码,就需要这样做了)
③下班时间到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器
缺点:
1、由于每一次提交都保留一个原始副本,因此SVN数据库容量会暴增
2、如果不能连接到SVN服务器上,基本上不可以工作,例如第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、不适合开源系统开发【当然也未必,但是很多人的话svn未必运行的很好】(开发人数非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确地权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
优点:
1、管理方便,逻辑清晰明确,符合一般人的思维习惯。
2、易于管理,集中式svn服务器更能保证数据的安全型
3、代码一致性非常高
4、适合开发人数不多的项目开发
5、普及度高,大部分软件配置管理的大学教材都是使用svn和vss。
0
本帖最后由 Miku的大葱 于 2016-7-23 12:39 编辑
1.安装配置SVN服务
1.1准备操作系统环境并查看操作系统。
本次我搭建服务的环境为一个VPS。内存512,磁盘20G,双核CPU
1.2安装SVN
功能性的东西,没有特殊需求,就直接yum安装,不要去编译。
①检查subversion是否安装了,如果没有安装的话那么就yum安装一下
补充:yum安装rpm包安装后本地不清除的方法
1.3配置并启动SVN
建立SVN数据存储根目录(svndata)及用户、密码权限目录(svnpasswd)
当然创建这个目录并不是必须的
启动SVN服务并制定服务的SVN根目录
当然上述的SVN端口你也可以自己去指定,通过--help查看使用方法,到此为止,SVN的安装就完事了
1.安装配置SVN服务
1.1准备操作系统环境并查看操作系统。
本次我搭建服务的环境为一个VPS。内存512,磁盘20G,双核CPU
- [root@lamber ~]# cat /etc/redhat-release
- CentOS release 6.2 (Final)
- [root@lamber ~]# uname -m
- x86_64
- [root@lamber ~]# uname -r
- 2.6.32-042stab094.7
功能性的东西,没有特殊需求,就直接yum安装,不要去编译。
①检查subversion是否安装了,如果没有安装的话那么就yum安装一下
- [root@lamber ~]# rpm -qa subversion
- [root@lamber ~]# yum -y install subversion
- [root@lamber ~]# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
- [root@lamber ~]# grep "keepcache" /etc/yum.conf
- keepcache=1 //rpm包下载以后不清除
建立SVN数据存储根目录(svndata)及用户、密码权限目录(svnpasswd)
当然创建这个目录并不是必须的
- [root@lamber /]# ll /svn/
- total 8
- drwxr-xr-x 2 root root 4096 Jul 23 08:06 svndata
- drwxr-xr-x 2 root root 4096 Jul 23 08:06 svnpasswd
- [root@lamber /]# svn //如果是yum安装的话,打上svn再按两下tab就能查到
- svn svndumpfilter svnserve svnversion
- svnadmin svnlook svnsync
- [root@lamber /]# svnserve --help
- usage: svnserve [-d | -i | -t | -X] [options]
- Valid options: //这里把常用的列出来了,如果有需要你们可以去查看
- -d [--daemon] : daemon mode //守护进程模式
- -r [--root] ARG : root of directory to serve //指定存储根目录
- [mode: daemon]
- --log-file ARG : svnserve log file
- --pid-file ARG : write server process ID to file ARG //指定存放进程号的位置
- [root@lamber /]# svnserve -d -r /svn/svndata/
- [root@lamber /]# ps -ef | grep svn
- root 30526 1 0 08:16 ? 00:00:00 svnserve -d -r /svn/svndata/
- [root@lamber /]# netstat -lnt | grep 3690 //查看SVN端口,SVN有固定端口3690
- tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
- [root@lamber /]# netstat -lntup | grep svn
- tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 30526/svnserve
- [root@lamber /]# lsof -i :3690
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- svnserve 30526 root 3u IPv4 2628099398 0t0 TCP *:svn (LISTEN)
0
本帖最后由 Miku的大葱 于 2016-7-23 12:57 编辑
1.建立项目版本库
创建一个新的Svn项目,名字叫做sadoc。其实类似sadoc这样的项目可以创建多个,每隔一项目对应不同的代码,这里知识创建一个项目作为演示
首先我们可以通过help来查看svn命令的用法,比如:那么,现在我要创建目录,那么我就看看svnadmin create怎么用的
查看完用法以后我们就可以开始创建新的版本库了
接下来,看一下树状图,conf(配置文件),db,hook(钩子),lock锁。
1.建立项目版本库
创建一个新的Svn项目,名字叫做sadoc。其实类似sadoc这样的项目可以创建多个,每隔一项目对应不同的代码,这里知识创建一个项目作为演示
首先我们可以通过help来查看svn命令的用法,比如:
- [root@lamber /]# svnadmin help
- general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
- Type 'svnadmin help <subcommand>' for help on a specific subcommand.
- Type 'svnadmin --version' to see the program version and FS modules.
- Available subcommands:
- crashtest
- create
- deltify
- dump
- help (?, h)
- hotcopy
- list-dblogs
- list-unused-dblogs
- load
- lslocks
- lstxns
- pack
- recover
- rmlocks
- rmtxns
- setlog
- setrevprop
- setuuid
- upgrade
- verify
- [root@lamber /]# svnadmin help create
- create: usage: svnadmin create REPOS_PATH
- Create a new, empty repository at REPOS_PATH.
- Valid options:
- --bdb-txn-nosync : disable fsync at transaction commit [Berkeley DB]
- --bdb-log-keep : disable automatic log file removal [Berkeley DB]
- --config-dir ARG : read user configuration files from directory ARG
- --fs-type ARG : type of repository: 'fsfs' (default) 'or 'bdb'
- --pre-1.4-compatible : use format compatible with Subversion versions earlier than 1.4
- --pre-1.5-compatible : use format compatible with Subversion versions earlier than 1.5
- --pre-1.6-compatible : use format compatible with Subversion versions earlier than 1.6
- [root@lamber /]# svnadmin create /svn/svndata/sadoc //注意:这里的这个目录是不可以使用mkdir来创建的,因为这是svn的版本库,svn要进行初始化会生成很多文件
- [root@lamber /]# ll /svn/svndata/
- total 4
- drwxr-xr-x 6 root root 4096 Jul 23 08:40 sadoc
- [root@lamber /]# tree /svn/svndata/
- /svn/svndata/
- └── sadoc
- ├── conf
- │ ├── authz
- │ ├── passwd
- │ └── svnserve.conf
- ├── db
- │ ├── current
- │ ├── format
- │ ├── fsfs.conf
- │ ├── fs-type
- │ ├── min-unpacked-rev
- │ ├── rep-cache.db
- │ ├── revprops
- │ │ └── 0
- │ │ └── 0
- │ ├── revs
- │ │ └── 0
- │ │ └── 0
- │ ├── transactions
- │ ├── txn-current
- │ ├── txn-current-lock
- │ ├── txn-protorevs
- │ ├── uuid
- │ └── write-lock
- ├── format
- ├── hooks
- │ ├── post-commit.tmpl
- │ ├── post-lock.tmpl
- │ ├── post-revprop-change.tmpl
- │ ├── post-unlock.tmpl
- │ ├── pre-commit.tmpl
- │ ├── pre-lock.tmpl
- │ ├── pre-revprop-change.tmpl
- │ ├── pre-unlock.tmpl
- │ └── start-commit.tmpl
- ├── locks
- │ ├── db.lock
- │ └── db-logs.lock
- └── README.txt
- 11 directories, 28 files
0
1. 调整SVN配置文件及权限文件
进入配置文件目录查看
主要有三个文件,svnserver.conf这个是主配置文件,passwd是用户和密码文件,authz这个是权限的管理文件。svnserve.conf包含passwd和authz。
首先对配制文件进行备份,任何一步操作都有必要深思熟虑。
备份文件有助于恢复和修改后进行对比。
使用vim打开svnserve.conf这个配置文件,使用set nu查看行号,然后把对应上面的几行改成一样的配制,之前说过svndata和svnpasswd这两个目录的创建并不是必须的,之所以去创建这两个目录是为了方便统一管理。(注意去掉注释以后,配置命令必须顶格写,不然可能会出现一些奇葩的问题,所以还是按照规范来比较好)
做运维务必要细心,改前备份,改后对比,检查语法,平滑重启,这些都有必要做好。
上面的操作也可以使用sed来替换。
sed -i 's/# auth-access = write/auth-access = write' svnserver.conf
sed -i 's/# aono-access =read/anon-access = none/' svnserver.conf
sed -i 's%# password-db = passwd%password-db = /svn/svnpasswd/passwd%' svnserve.conf
sed -i 's%# authz-db = authz%authz-db = /svn/svnpasswd/authz%g' svnserver.conf
修改后比较或者查看方法
好了,虽然我们在配置文件中把目录指定过去了,但是实际上在我们指定的目录中是没有任何文件的,因此我们要把文件模版拷过去一份。
现在我们发现现在文件的权限是644,谁都能看,所以首先修改一下权限
这样就只能root可以访问了!想进一步安全的话可能还会有其他的加密手段,后期补充
进入配置文件目录查看
- [root@lamber /]# cd /svn/svndata/sadoc/conf/
- [root@lamber conf]# ll
- total 12
- -rw-r--r-- 1 root root 1080 Jul 23 08:40 authz
- -rw-r--r-- 1 root root 309 Jul 23 08:40 passwd
- -rw-r--r-- 1 root root 2279 Jul 23 08:40 svnserve.conf
首先对配制文件进行备份,任何一步操作都有必要深思熟虑。
- [root@lamber conf]# cp svnserve.conf svnserve.conf.backup
- 12 anon-access = none
- 13 auth-access = write
- 20 password-db = /svn/svnpasswd/passwd //默认是passwd
- 27 authz-db = /svn/svnpasswd/authz //默认是authz
做运维务必要细心,改前备份,改后对比,检查语法,平滑重启,这些都有必要做好。
- [root@lamber conf]# diff svnserve.conf.backup svnserve.conf
- 12,13c12,13
- < # anon-access = read
- < # auth-access = write
- ---
- > anon-access = none
- > auth-access = write
- 20c20
- < # password-db = passwd
- ---
- > password-db = /svn/svnpasswd/passwd
- 27c27
- < # authz-db = authz
- ---
- > authz-db = /svn/svnpasswd/authz
sed -i 's/# auth-access = write/auth-access = write' svnserver.conf
sed -i 's/# aono-access =read/anon-access = none/' svnserver.conf
sed -i 's%# password-db = passwd%password-db = /svn/svnpasswd/passwd%' svnserve.conf
sed -i 's%# authz-db = authz%authz-db = /svn/svnpasswd/authz%g' svnserver.conf
修改后比较或者查看方法
- [root@lamber conf]# egrep "\-access|\-db =" svnserve.conf
- anon-access = none
- auth-access = write
- password-db = /svn/svnpasswd/passwd
- authz-db = /svn/svnpasswd/authz
- [root@lamber conf]# cp passwd authz /svn/svnpasswd/
- [root@lamber conf]# ll /svn/svnpasswd/
- total 8
- -rw-r--r-- 1 root root 1080 Jul 23 09:22 authz
- -rw-r--r-- 1 root root 309 Jul 23 09:22 passwd
- [root@lamber conf]# chmod 700 /svn/svnpasswd/*
- [root@lamber conf]# ll /svn/svnpasswd/
- total 8
- -rwx------ 1 root root 1080 Jul 23 09:22 authz
- -rwx------ 1 root root 309 Jul 23 09:22 passwd
0
本帖最后由 Miku的大葱 于 2016-7-23 14:19 编辑
1.为SVN版本库创建用户并授权访问指定项目版本库
那么接下来看看这俩配置文件吧。
首先看看passwd文件
这里我添加了两个用户,添加用户的话按照它的模版来就可以了。
提示:①等号前为SVN帐号,等号后为SVN密码,密码是明文的,注意密码权限
②更改svnserver.conf时,需要重启SVN,更改authz,passwd文件时则不需要
重启SVN命令【非必须】
其中,1个用户组可以包含1个或多个用户,用户间以逗号进行分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名>=<权限>
<用户名>=<权限>
其中,方框号内部分可以有多种写法:
[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/svn/svndata,[/]就是表示对全部版本库设置权限
[repos:/],表示对版本库repos设置权限;
[repos:/sadoc],表示对版本库repos中的sadoc项目设置权限;
[repos:/sadoc/lamber],表示对版本库repos中的sadoc项目的lamber目录设置权限;
权限主体可以是用户组、用户或者是*,用户组在前面添加@,*表示全部用户。
权限可以是w、r、wr和空,空表示没有任何权限。
authz中的每个参数都要顶格写,开头不能有空格。对于组,要以@开头,用户则不需要
这里我起了一个组叫做ziyuanzu,然后把用户扔进来,不同用户之间用逗号隔开,然后再[sadoc:/]下直接给用户组授权,这样可以进行统一管理,那么我们也可以在库下直接给单个用户授权,就像我注释掉的maxiaoyu和mengxiaodong,都可以给予单独的权限。
有几个需要注意的地方:①权限配置文件中出现的用户必须在配置文件中已经定义过
②权限配置文件的修改立即生效没不必要重启SVN
1.为SVN版本库创建用户并授权访问指定项目版本库
那么接下来看看这俩配置文件吧。
首先看看passwd文件
- [root@lamber svnpasswd]# vim passwd
- ### This file is an example password file for svnserve.
- ### Its format is similar to that of svnserve.conf. As shown in th
- e
- ### example below it contains one section labelled [users].
- ### The name and password for each user follow, one account per li
- ne.
- [users]
- # harry = harryssecret
- # sally = sallyssecret
- maxiaoyu = 123456789
- mengxiaodong = 987654321
提示:①等号前为SVN帐号,等号后为SVN密码,密码是明文的,注意密码权限
②更改svnserver.conf时,需要重启SVN,更改authz,passwd文件时则不需要
重启SVN命令【非必须】
- [root@lamber svnpasswd]# pkill svnserve
- [root@lamber svnpasswd]# ps -ef | grep svn
- root 30646 30437 0 09:56 pts/1 00:00:00 grep svn
- [root@lamber svnpasswd]# svnserve -d -r /svn/svndata/
- [root@lamber svnpasswd]# ps -ef | grep svn
- root 30648 1 0 09:56 ? 00:00:00 svnserve -d -r /svn/svndata/
- root 30650 30437 0 09:56 pts/1 00:00:00 grep svn
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名>=<权限>
<用户名>=<权限>
其中,方框号内部分可以有多种写法:
[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/svn/svndata,[/]就是表示对全部版本库设置权限
[repos:/],表示对版本库repos设置权限;
[repos:/sadoc],表示对版本库repos中的sadoc项目设置权限;
[repos:/sadoc/lamber],表示对版本库repos中的sadoc项目的lamber目录设置权限;
权限主体可以是用户组、用户或者是*,用户组在前面添加@,*表示全部用户。
权限可以是w、r、wr和空,空表示没有任何权限。
authz中的每个参数都要顶格写,开头不能有空格。对于组,要以@开头,用户则不需要
- [root@lamber svnpasswd]# vim authz
- ### - a single user,
- ### - a group of users defined in a special [groups] section,
- ### - an alias defined in a special [aliases] section,
- ### - all authenticated users, using the '$authenticated' token,
- ### - only anonymous users, using the '$anonymous' token,
- ### - anyone, using the '*' wildcard.
- ###
- ### A match can be inverted by prefixing the rule with '~'. Rules can
- ### grant read ('r') access, read-write ('rw') access, or no access
- ### ('').
- [aliases]
- # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
- [groups]
- # harry_and_sally = harry,sally
- # harry_sally_and_joe = harry,sally,&joe
- # [/foo/bar]
- # harry = rw
- # &joe = r
- # * =
- # [repository:/baz/fuz]
- # @harry_and_sally = rw
- # * = r
- ziyuanzu = maxiaoyu,mengxiaodong
- [sadoc:/]
- @ziyuanzu = rw
- # maxiaoyu = rw
- # mengxiaodong =r
- "authz" 38L, 1173C written
有几个需要注意的地方:①权限配置文件中出现的用户必须在配置文件中已经定义过
②权限配置文件的修改立即生效没不必要重启SVN
0
本帖最后由 Miku的大葱 于 2016-7-23 15:27 编辑
1.Win32下安装svn客户端去访问版本库服务
自己网上搜索然后下载。。。
我这里使用的是TortoiseSVN,可以自己下载汉化包打补丁。默认是英文
下面就以Tortoise为例说明一下!
①首先安装好以后,先创建一个文件夹,这时你去在文件夹下右键直接点击check out,之后他会要求你去输入相关的地址,我们这里使用的就是:svn://我的服务器IP/sadoc(这里是库名)
②输入完成以后会要求你输入用户名密码,这里就把咱们之前在配置文件中定义的用户名和密码输入进去吧。
删除文件:直接再本地删除然后commit就ok
查看历史版本:右击同步文件夹→show log
并且我们可以通过某一次历史版本查看文档发生了什么变化,如下图所示
1.Win32下安装svn客户端去访问版本库服务
自己网上搜索然后下载。。。
我这里使用的是TortoiseSVN,可以自己下载汉化包打补丁。默认是英文
下面就以Tortoise为例说明一下!
①首先安装好以后,先创建一个文件夹,这时你去在文件夹下右键直接点击check out,之后他会要求你去输入相关的地址,我们这里使用的就是:svn://我的服务器IP/sadoc(这里是库名)
②输入完成以后会要求你输入用户名密码,这里就把咱们之前在配置文件中定义的用户名和密码输入进去吧。
③这样就算是操作成功了,那么我向这个同步文件夹里放一点东西,然后再文件夹图标上右键点击SVN commit,会看到文件在刷刷的同步!
④同步完成以后,我们可以直接再本地查看是否已经正常同步到服务器,本地同步文件夹右击,选择TortoiseSVN→Repo Browser即可查看!
每回使用的时候先SVN Update一下。确保你的内容是最新的
在windows里面,SVN有一个缺省目录:%APPDATA%\Subversion\auth的三个子目录内保存认证信息:
①svn.simple:包含基本认证方式所需要的认证信息,密码通过Wincrypt API加密。不是文本的形式。
②svn.ssl.server:包含SSL服务器证书
③svn.username:包含用户名认证的认证信息(不需要提供密码)
进度会话框使用颜色来高亮显示标识不同的提交行为:
蓝色→提交一个修改
紫色→提交一个新增项
深红→提交一个删除或是替换
黑色→所有其他项
这些都是默认设置,我们都可以自定义
删除文件:直接再本地删除然后commit就ok
查看历史版本:右击同步文件夹→show log
并且我们可以通过某一次历史版本查看文档发生了什么变化,如下图所示
那么如果版本库地址发生了变化该怎么更换地址呢?
右击同步文件夹→TortoiseSVN→Relocate,修改地址确认提交即可!
0
1.1 同步文件,checkout
当然如果我就在SVN服务器本地的话我可以使用本地的访问方式,上述是在非客户端的一台linux上查看的,现在我切换到SVN服务器上,在data目录下直接查看!但是这种方式一般都是本地的去查看,无法跨网络所以用到的机会也并不是很多!
如果checkout过程中遇到如下报错!
svn:Can't convert string from 'UTF-8' to native encoding:
造成这种情况的原因就是字符集不对,可以查看如下帖子解决字符集问题:
[url=http://www.cnblogs.com/xuxm200 ... .html]http://www.cnblogs.com/xuxm200 ... .html[/url]
或者:
export LC_CTYPE="en_US.UTF-8"
export LC_ALL=
打上这两条命令
假如说版本库内容更新了,现在我要Update我的SVN目录
查看svn中的数据
从本地的提交数据到SVN
1.2 SVN的目录树
一般比较规范的SVN它会有三个目录,分别为:
/svn/trunk:主干
/svn/branch:个人或者团队开发的分支
/svn/tag:标记版本,比如某一个版本开发ok了。
那么好,现在我要创建三个这样的目录,然后我要导入到版本库中去,这里会用到的是import命令
import:将未纳入版本控制的文件或目录树提交到版本库。要分清楚它和commit的区别,commit指的是把工作副本的修改提交到版本库。
再来看看add:把文件和目录纳入版本控制,通过调度加到版本库。它们会在下一次提交时加入
现在我把主干的东西拷贝到一个分支(这个命令并不常用。。如果在windows上的话这个其实就是点点点的操作)
更新后去查看这个分支:
还记得之前在配置文件中我们怎么写的么?
[sadoc:/]
这里指的意思是直接把根的权限给了,我们为了便于管理和权限把控可以把权限细化到版本库中的相应目录。
本帖最后由 Miku的大葱 于 2016-7-24 22:27 编辑
1.Linux下SVN客户端的管理
把linux做为SVN客户端,所以你操作的并不一定是SVN的服务器那台,以后如果说我要定时自动发布代码等等,这时候就要用到脚本了,所以接下来的也是很重要的
首先安装SVN,步骤同上,在此就不在赘述。
- [root@lamber ~]# svn --help<br/>用法: svn</p><subcommand>[options] [args]<br/>Subversion 命令行客户端,版本 1.6.11。<br/>使用“svn help<subcommand>” 显示子命令的帮助信息。<br/>使用“svn --version”查看程序的版本号和版本库访问模块,或者<br/>使用“svn --version --quiet”只查看程序的版本号。<br/><br/>大多数的子命令可接受文件或目录参数,对目录进行递归处理。<br/>如果没有指定参数,默认对当前目录(包含当前目录)递归处理。<br/><br/>可用的子命令: <br/>
- add<br/>
- blame (praise, annotate, ann)<br/>
- cat<br/>
- changelist (cl)<br/>
- checkout (co) //从源码库中取出一个工作版本的拷贝,括号中的co是简写<br/>
- cleanup<br/>
- commit (ci) //提交当前工作拷贝的更改,这个地方是有可能出现代码冲突的<br/>
- copy (cp) //做一个工作拷贝的拷贝<br/>
- delete (del, remove, rm) //删除本地或者svn server response上的文件或者目录<br/>
- diff (di) //比较某个文件与库中的对应文件的不同,类似于系统的diff命令,参数:文件名<br/>
- export //导出一个无版本控制的目录树拷贝。一般用于导出发型,或者投入运行的版本<br/>
- help (?, h)<br/>
- import //将本地当前目录下的文件导入到svn response中。<br/>
- info //当前目录工作拷贝中某文件信息,如URL,版本,修改日期等,参数:文件<br/>
- list (ls) //列出当前工作拷贝下文件,相当于系统ls命令,只能在工作拷贝目录下使用<br/>
- lock<br/>
- log<br/>
- merge //将两个来源之间的差异应用至工作拷贝路径<br/>
- mergeinfo //在贝蒂或者svn respon上新建一个文件夹,参数:URL或者路径<br/>
- mkdir<br/>
- move (mv, rename, ren)<br/>
- propdel (pdel, pd)<br/>
- propedit (pedit, pe)<br/>
- propget (pget, pg)<br/>
- proplist (plist, pl)<br/>
- propset (pset, ps)<br/>
- resolve<br/>
- resolved<br/>
- revert<br/>
- status (stat, st) //svn工作拷贝当前状态,与svn server上的源码比较的结果<br/>
- switch (sw)<br/>
- unlock<br/>
- update (up) //将svn server端文件同步到本地<br/><br/>Subversion 是版本控制工具。<br/>欲取得详细资料,请参阅 <a href="http://subversion.tigris.org/" rel="nofollow" target="_blank">http://subversion.tigris.org/</a>
- [root@lamber svndata]# svn co svn://23.110.85.249/sadoc /data/svndata/ --username=我的用户名 --password=我的密码<br/><br/>-----------------------------------------------------------------------<br/>注意! 你的密码,对于认证域:<br/><br/>
- <svn://23.110.85.249:3690> 68cfb7eb-c123-4643-8825-8a067020e3f4<br/><br/>只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion<br/>可以保存加密后的密码。请参阅文档以获得详细信息。<br/><br/>你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,<br/><h2>来避免再次出现此警告。</h2>保存未加密的密码(yes/no)?yes<br/>A /data/svndata/Linux<br/>A /data/svndata/Linux/4.Linux企业问题集.docx<br/>A /data/svndata/Linux/~$Linux基础整合.docx<br/>A /data/svndata/Linux/2.Linux简单服务搭建.docx<br/>取出版本 9。
- [root@lamber svndata]# ll<br/>总用量 16<br/>drwxr-xr-x. 3 root root 4096 7月 24 21:10 Linux<br/>drwxr-xr-x. 4 root root 4096 7月 24 21:10 代理软件<br/>drwxr-xr-x. 3 root root 4096 7月 24 21:12 华为IE资料<br/>-rw-r--r--. 1 root root 56 7月 24 21:12 下载链接文档.txt
- [root@lamber data]# svn co file:///svn/svndata/sadoc<br/>A sadoc/Linux<br/>A sadoc/Linux/4.Linux企业问题集.docx<br/>A sadoc/Linux/~$Linux基础整合.docx<br/>A sadoc/Linux/2.Linux简单服务搭建.docx<br/>A sadoc/Linux/6.Linux面试题高级题合集.docx<br/>A sadoc/Linux/5.Linux面试题基础题合集.docx<br/>A sadoc/Linux/1.Linux基础整合.docx<br/>A sadoc/Linux/3.Linux高级服务搭建.docx<br/>A sadoc/下载链接文档.txt<br/>A sadoc/代理软件<br/>A sadoc/代理软件/ss-win-dotnet<br/>A sadoc/代理软件/ss-win-dotnet/gui-config.json<br/>A sadoc/代理软件/ss-win-dotnet/pac.txt<br/>A sadoc/华为IE资料<br/>A sadoc/华为IE资料/1.网络基础.docx<br/>A sadoc/华为IE资料/HCIE 综合面试指导-V1.0.pdf<br/>Checked out revision 9.
- [root@lamber sadoc]# pwd<br/>/data/sadoc<br/>[root@lamber sadoc]# ll<br/>total 16<br/>drwxr-xr-x 3 root root 4096 Jul 24 17:08 Linux<br/>-rw-r--r-- 1 root root 56 Jul 24 17:08 下载链接文档.txt<br/>drwxr-xr-x 4 root root 4096 Jul 24 17:08 代理软件<br/>drwxr-xr-x 3 root root 4096 Jul 24 17:08 华为IE资料
svn:Can't convert string from 'UTF-8' to native encoding:
造成这种情况的原因就是字符集不对,可以查看如下帖子解决字符集问题:
[url=http://www.cnblogs.com/xuxm200 ... .html]http://www.cnblogs.com/xuxm200 ... .html[/url]
或者:
export LC_CTYPE="en_US.UTF-8"
export LC_ALL=
打上这两条命令
假如说版本库内容更新了,现在我要Update我的SVN目录
- [root@lamber svndata]# svn update svn://23.110.85.249/sadoc /data/svndata/ --username=我的用户名 --password=我的密码<br/>跳过“svn://23.110.85.249/sadoc”<br/>A /data/svndata/资源清单.txt<br/>U /data/svndata/华为IE资料/1.网络基础.docx<br/>更新到版本 10。<br/>冲突概要:<br/>
- 跳过的路径:1
- [root@lamber svndata]# svn ls svn://23.110.85.249/sadoc --username=我的用户名 --password=我的密码<br/>Linux/<br/>下载链接文档.txt<br/>代理软件/<br/>华为IE资料/<br/>资源清单.txt
- [root@lamber svndata]# svn ls svn://23.110.85.249/sadoc --username=我的用户名 --password=我的密码 --verbose<br/>
- 10 maxiaoyu 7月 24 21:19 ./<br/>
- 1 maxiaoyu 7月 23 14:28 Linux/<br/>
- 4 maxiaoyu 56 7月 23 15:11 下载链接文档.txt<br/>
- 7 maxiaoyu 7月 23 16:09 代理软件/<br/>
- 10 maxiaoyu 7月 24 21:19 华为IE资料/<br/>
- 10 maxiaoyu 0 7月 24 21:19 资源清单.txt
- [root@lamber svndata]# touch linux_client<br/>[root@lamber svndata]# svn add linux_client <br/>A linux_client<br/>[root@lamber svndata]# svn ci -m "commit data"<br/>增加 linux_client<br/>传输文件数据.<br/>提交后的版本为 11。<br/>其中:<br/>
- -m [--message] ARG : 指定日志信息ARG //不添加这个-m参数是会报错的!
一般比较规范的SVN它会有三个目录,分别为:
/svn/trunk:主干
/svn/branch:个人或者团队开发的分支
/svn/tag:标记版本,比如某一个版本开发ok了。
那么好,现在我要创建三个这样的目录,然后我要导入到版本库中去,这里会用到的是import命令
import:将未纳入版本控制的文件或目录树提交到版本库。要分清楚它和commit的区别,commit指的是把工作副本的修改提交到版本库。
再来看看add:把文件和目录纳入版本控制,通过调度加到版本库。它们会在下一次提交时加入
- [root@lamber svndata]# mkdir -p svn/{trunk,branch,tag}<br/>[root@lamber svndata]# svn import ./svn svn://23.110.85.249/sadoc --username=我的用户名 --password=我的密码 -m "import"<br/>增加 svn/trunk<br/>增加 svn/tag<br/>增加 svn/branch<br/><br/>提交后的版本为 12。
- [root@lamber svndata]# svn copy svn://23.110.85.249/sadoc/trunk svn://23.110.85.249/sadoc/branch/branch1 -m "create a branch" --username=我的用户名 --password=我的密码<br/><br/>提交后的版本为 13。
- [root@lamber svndata]# ll branch/<br/>总用量 4<br/>drwxr-xr-x. 3 root root 4096 7月 24 22:15 branch1
[sadoc:/]
这里指的意思是直接把根的权限给了,我们为了便于管理和权限把控可以把权限细化到版本库中的相应目录。
0
1.SVN中的钩子
SVN钩子脚本简介:
钩子脚本的具体写法就是操作系统中shell脚本程序的写法,可根据自己的SVN所在的操作系统和shell程序进行相应的开发。
钩子脚本就是被某些版本库事件触发的程序,比如:创建新版本库或修改未被版本控制的属性。每个钩子多能掌管足够多的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号。
根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起。简单来说就是版本库触发时间,钩子会采取一些操作。
在安装好的目录中有不少svn钩子的模版,之前tree的时候我们是查看过的。
默认这些模版都是以tmpl格式存在的,当我们想使用的时候把.tmpl去掉就可以使用了
对于每种Subversion版本库支持的钩子都有一个模版,通过查看这些脚本的内容,你能看到是什么事件触发了脚本以及如何给脚本传递数据。
同时,这些模版也是如何使用这些脚本,结合subversion支持的工具来完成有用任务的例子。
要实际安装一个可用的钩子,你需要在repos/hooks目录下安装一些与钩子同名(如:start-commit或者post-commit)的可执行程序或脚本,注意,去掉模版的扩展名。
重要提示:
由于安全原因,SubVersion版本库在一个空环境中执行钩子脚本,相当于没有任何环境变量,甚至没有$PATH或%PATH%。由于这个原因,许多管理员会感到困惑,他们的钩子脚本手工运行正常,可是在SVN中却不能正常云星。要注意的是,必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径。
SVN钩子脚本简介:
钩子脚本的具体写法就是操作系统中shell脚本程序的写法,可根据自己的SVN所在的操作系统和shell程序进行相应的开发。
钩子脚本就是被某些版本库事件触发的程序,比如:创建新版本库或修改未被版本控制的属性。每个钩子多能掌管足够多的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号。
根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起。简单来说就是版本库触发时间,钩子会采取一些操作。
在安装好的目录中有不少svn钩子的模版,之前tree的时候我们是查看过的。
- ├── hooks
- │ ├── post-commit.tmpl
- │ ├── post-lock.tmpl
- │ ├── post-revprop-change.tmpl
- │ ├── post-unlock.tmpl
- │ ├── pre-commit.tmpl
- │ ├── pre-lock.tmpl
- │ ├── pre-revprop-change.tmpl
- │ ├── pre-unlock.tmpl
- │ └── start-commit.tmpl
- [root@lamber sadoc]# cd hooks/
- [root@lamber hooks]# ll
- total 36
- -rw-r--r-- 1 root root 1977 Jul 23 08:40 post-commit.tmpl
- -rw-r--r-- 1 root root 1638 Jul 23 08:40 post-lock.tmpl
- -rw-r--r-- 1 root root 2289 Jul 23 08:40 post-revprop-change.tmpl
- -rw-r--r-- 1 root root 1567 Jul 23 08:40 post-unlock.tmpl
- -rw-r--r-- 1 root root 3426 Jul 23 08:40 pre-commit.tmpl
- -rw-r--r-- 1 root root 2410 Jul 23 08:40 pre-lock.tmpl
- -rw-r--r-- 1 root root 2786 Jul 23 08:40 pre-revprop-change.tmpl
- -rw-r--r-- 1 root root 2100 Jul 23 08:40 pre-unlock.tmpl
- -rw-r--r-- 1 root root 2780 Jul 23 08:40 start-commit.tmpl
同时,这些模版也是如何使用这些脚本,结合subversion支持的工具来完成有用任务的例子。
要实际安装一个可用的钩子,你需要在repos/hooks目录下安装一些与钩子同名(如:start-commit或者post-commit)的可执行程序或脚本,注意,去掉模版的扩展名。
重要提示:
由于安全原因,SubVersion版本库在一个空环境中执行钩子脚本,相当于没有任何环境变量,甚至没有$PATH或%PATH%。由于这个原因,许多管理员会感到困惑,他们的钩子脚本手工运行正常,可是在SVN中却不能正常云星。要注意的是,必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径。
0
1.常用钩子脚本介绍
①post-commit:在提交完成创建本之后执行该钩子,提交已经完成,不可更改,因此,本脚本的返回值被忽略。提交完成时触发事务。
②pre-commit:提交完成前触发该脚本(看看你提交的数据合法不合法等等)
③start-commit:在客户端还没有向服务器提交数据之前,即还没有建立SubVersion transaction(缩写为txn)之前,执行该脚本(提交前触发事务)
2.不常用钩子脚本介绍(了解)
①pre-revprop-change:在修改revision属性之前,执行该脚本
②post-revprop-change:在修改revision属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)
③pre-unlock:对文件进行解锁操作之前执行该脚本
④post-unlock:对文件进行解锁操作之后执行该脚本
⑤pre-lock:对文件进行加锁操作之前执行该脚本
⑥post-lock:对文件进行加锁操作之后执行该脚本
①post-commit:在提交完成创建本之后执行该钩子,提交已经完成,不可更改,因此,本脚本的返回值被忽略。提交完成时触发事务。
②pre-commit:提交完成前触发该脚本(看看你提交的数据合法不合法等等)
③start-commit:在客户端还没有向服务器提交数据之前,即还没有建立SubVersion transaction(缩写为txn)之前,执行该脚本(提交前触发事务)
2.不常用钩子脚本介绍(了解)
①pre-revprop-change:在修改revision属性之前,执行该脚本
②post-revprop-change:在修改revision属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)
③pre-unlock:对文件进行解锁操作之前执行该脚本
④post-unlock:对文件进行解锁操作之后执行该脚本
⑤pre-lock:对文件进行加锁操作之前执行该脚本
⑥post-lock:对文件进行加锁操作之后执行该脚本
0
本帖最后由 Miku的大葱 于 2016-7-25 01:48 编辑
1.SVN钩子应用举例
pre-commit:
限制上传文件的扩展名以及大小,控制提交要输入的信息等等(你为什么要提交啊,给说明)。
post-commit
SVN更新之后自动通知,可以邮件通知,短信通知
SVN更新触发checkout程序,然后实时rsync推送到服务器等等
2.rsync与svn钩子结合实现数据实时同步某企业小案例
①建立同步web目录
这里要同步内容的服务器不一定和svn服务器在一起,可能要跨网络也可能在一个局域网
②将SVN中内容checkout到WEB目录一份
那好,现在我使用一个post-commit的钩子
在服务端:TIP:
说一下这里有可能会遇到的一个情况,有的时候我们去远程管理去写一些脚本,然后是从windows的环境去上传的(使用rz -y命令)。为了避免出现问题,我们要用dos2unix处理一下
写钩子脚本的一些注意事项:
1、钩子脚本的权限要允许SVN执行,一般可以设置chmod 755 post-commit
2、写钩子脚本时尽可能的定义环境变量,主要是用过的命令的路径,因为SVN考虑安全问题,不会调用系统变量,所以如果发现手动执行post-commit没有问题,但是SVN自动执行也可能会无法执行的
3、SVN update之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码,如果只是手动一样会更新,但是自动的不行,此处添加的账户为系统账户
1.SVN钩子应用举例
pre-commit:
限制上传文件的扩展名以及大小,控制提交要输入的信息等等(你为什么要提交啊,给说明)。
post-commit
SVN更新之后自动通知,可以邮件通知,短信通知
SVN更新触发checkout程序,然后实时rsync推送到服务器等等
2.rsync与svn钩子结合实现数据实时同步某企业小案例
①建立同步web目录
- [root@lamber /]# mkdir /data/www
②将SVN中内容checkout到WEB目录一份
- [root@lamber /]#svn checkout svn://23.110.85.249/sadoc /data/www/ --username=我的用户名 --password=我的密码
- -----------------------------------------------------------------------
- A /data/www/--username=maxiaoyu/Linux
- A /data/www/--username=maxiaoyu/Linux/4.Linux企业问题集.docx
- A /data/www/--username=maxiaoyu/Linux/~$Linux基础整合.docx
- 取出版本 13。
在服务端:
- [root@lamber hooks]# cp post-commit.tmpl post-commit
- [root@lamber hooks]# cat post-commit
- #!/bin/sh //本质上就是一个shell脚本
- #注释什么的我就删掉了,有兴趣的自己去more一下。
- # [1] REPOS-PATH (the path to this repository)
- # [2] REV (the number of the revision just committed)
- REPOS="$1" //参数的传递,这没用上
- REV="$2" //参数的传递,这没用上
- export LANG=en_US.UTF-8 //避免出现之前出现过字符集的问题
- export LC_ALL=
- LOGPATH="/var/log/svn_log"
- [ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p
- #update content from svn
- SVN=/usr/bin/svn
- $SVN update --username 用户名 --password 密码 /data/www
- if [ $? -eq 0 ]
- then
- /usr/bin/rsync -az --delete /data/www /tmp
- fi
- #mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
说一下这里有可能会遇到的一个情况,有的时候我们去远程管理去写一些脚本,然后是从windows的环境去上传的(使用rz -y命令)。为了避免出现问题,我们要用dos2unix处理一下
- [root@lamber hooks]# dos2unix post-commit
- dos2unix: converting file post-commit to UNIX format ...
1、钩子脚本的权限要允许SVN执行,一般可以设置chmod 755 post-commit
2、写钩子脚本时尽可能的定义环境变量,主要是用过的命令的路径,因为SVN考虑安全问题,不会调用系统变量,所以如果发现手动执行post-commit没有问题,但是SVN自动执行也可能会无法执行的
3、SVN update之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码,如果只是手动一样会更新,但是自动的不行,此处添加的账户为系统账户
0
1.利用pre-commit限制上传文件扩展名及大小
- #!/bin/sh
- #time:
- #author:
- REPOS="$1"
- TXN="$2"
- #此处更改大小限制,这里是5M
- MAX_SIZE=5242880
- #此处增加限制文件后缀名
- FILTER='\.(zip|rar|o|obj|tar|gz)
- #make sure that the log message contains some text
- SVNLOOK=/usr/bin/svnlook
- #LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" wc -c`
- LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`
- if [ "$LOGMSG" -lt 9 ];
- then
- echo -e "nLog message can't be empty!You must input more than 8 chars as comment!" 1>&2
- exit 1
- fi
- files=$($SVNLOOK changed -t $TXN $REPOS | cut -d " " -f 4-)
- #echo "$files">&2
- #echo "$r">&2
- #exit 1
- rc=0
- echo "$files" | while read -f;
- do
- #check file type
- if echo $f| tr A-Z a-z | grep -Eq $FILTER;
- then
- echo "File $f is not allow ($FILTER) file" >&2
- exit 1;
- fi
- #check file size
- filesize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" | wc -c`
- if [ "$filesize" -gt "$MAX_SIZE"];
- then
- echo "File $f is too large(must <=$MAX_SIZE) B" >&2
- exit 1
- fi
- done
- #All checks passed,so allow the commit
- if [ $? -eq 1 ]
- then
- exit 1
- else
- exit 0
- fi
0
1.互联网小型企业代码上限发布架构方案
1.1SVN组织结构说明
trunk:主线,与正式线相对应,当天不上线,文件不允许提交
branch:分支,为测试时使用,几天以上的项目必须开分支,测试需要本分支通过,主线合并到分支通过,才能合并到主线进行测试。
tags:版本记录用
1.2代码上限解决方案
1.2.1 小型公司代码上线方案
小型企业现状:
小型公司一般只有几个开发人员,网站核心程序大多数是PHP语言开发,为了方便,会直接通过FTP直接上传程序代码到线上服务器,随时随地上线更新。
方案特点和存在的问题:
1、发布快,及时,随时随地就可以发布代码
2、开发人员发布的代码不经过测试人员的测试,且用户访问页面刷新后页面即改变,也可能刷新瞬间程序在更新,到时候无法访问,对网站用户的体验比较差,如果开发写错了代码,造成的影响就更大了,这是拿用户做为测试的上线方案。
3、据统计,网站中大概50%以上的故障时和开发程序代码有关的。
4、在中小型公司网站出了问题一般是运维人员的问题,比如网站宕机。在这种情况下,问题大多可能是由开发人员或者代码引起的,这里比较好的策略是开发项目负责制思想。
小型企业上线架构方案建议:
1、开发人员需要在个人电脑搭建LAMP环境测试开发好的网站代码,并且在办公室或IDC机房的测试环境测试通过,最好有专职测试人员。
2、程序代码上线规定时间,例如:三天上线一次,如网站需要经常更新可以每天下午五点上线,这个看网站的业务性质而定,原则就是用户体验影响最小。
3、代码上线之前需要备份,网站程序出了问题方便回退,另外,从上线技巧上讲,上传代码尽可能先传到服务器网站临时目录,传完整后一步mv过去,或者通过ln做软链接(新浪是这么做的)。
线上代码的更新的思路,如果严格更新,把应用服务器从集群节点平滑下线,然后更新。
4、上线尽量由运维人员管理上线,对于代码的功能性,开发人员更在意,而对于代码的性能和服务的稳定,运维更在意。因此,如果网站问题归运维管理,就要让运维上线这样更规范科学。否则,开发随意更新,除了问题运维负责,这样就错了。
1.1SVN组织结构说明
trunk:主线,与正式线相对应,当天不上线,文件不允许提交
branch:分支,为测试时使用,几天以上的项目必须开分支,测试需要本分支通过,主线合并到分支通过,才能合并到主线进行测试。
tags:版本记录用
1.2代码上限解决方案
1.2.1 小型公司代码上线方案
小型企业现状:
小型公司一般只有几个开发人员,网站核心程序大多数是PHP语言开发,为了方便,会直接通过FTP直接上传程序代码到线上服务器,随时随地上线更新。
方案特点和存在的问题:
1、发布快,及时,随时随地就可以发布代码
2、开发人员发布的代码不经过测试人员的测试,且用户访问页面刷新后页面即改变,也可能刷新瞬间程序在更新,到时候无法访问,对网站用户的体验比较差,如果开发写错了代码,造成的影响就更大了,这是拿用户做为测试的上线方案。
3、据统计,网站中大概50%以上的故障时和开发程序代码有关的。
4、在中小型公司网站出了问题一般是运维人员的问题,比如网站宕机。在这种情况下,问题大多可能是由开发人员或者代码引起的,这里比较好的策略是开发项目负责制思想。
小型企业上线架构方案建议:
1、开发人员需要在个人电脑搭建LAMP环境测试开发好的网站代码,并且在办公室或IDC机房的测试环境测试通过,最好有专职测试人员。
2、程序代码上线规定时间,例如:三天上线一次,如网站需要经常更新可以每天下午五点上线,这个看网站的业务性质而定,原则就是用户体验影响最小。
3、代码上线之前需要备份,网站程序出了问题方便回退,另外,从上线技巧上讲,上传代码尽可能先传到服务器网站临时目录,传完整后一步mv过去,或者通过ln做软链接(新浪是这么做的)。
线上代码的更新的思路,如果严格更新,把应用服务器从集群节点平滑下线,然后更新。
4、上线尽量由运维人员管理上线,对于代码的功能性,开发人员更在意,而对于代码的性能和服务的稳定,运维更在意。因此,如果网站问题归运维管理,就要让运维上线这样更规范科学。否则,开发随意更新,除了问题运维负责,这样就错了。
编辑回复