- Svn(subversion)是近年来崛起的很是优秀的版本管理工具,与CVS管理工具同样,SVN是一个跨平台的开源的版本控制系统。Svn版本管理工具管理着随时间改变的各类数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,可是,与其余服务器不一样的是,SVN会备份并记录每一个文件每一次的修改更新变更。这样咱们就能够把任意一个时间点的档案恢复到想要的某一个旧的版本,固然也能够直接浏览指定文件的更新历史记录。
- 为何会有svn这样一个项目?
- 官方解释:为了接管CVS的用户基础,确切的说,咱们写了一个新的版本控制系统,它和CVS很类似,可是它修正了之前CVS所没有解决的许多问题。问题见SVN官方首页。
- SVN是一个很是通用的软件系统,它常被用来管理程序源码,可是它也能够管理任何类型的文件,如文本,视频,图片等等。
SVN相关站点:html
Subversion官网:
http://subversion.tigris.org/
http://subversion.apache.org/
svn客户端:http://toroisesvn.net/
svn中文网站:http://www.iusesvn.com/
中文常见问题解答FAQ:http://subversion.apache.org/faq.zh.html
官方手册:http://svnbook.red-bean.com/ 中英都有linuxsvn与git的区别
svn集中式版本控制系统
svn版本控制系统是集中式的数据管理,存在一个中央版本库,全部开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也都必须提交到这个中央版本库。git
svn版本控制系统工做流程以下:程序员
- 在中央库上建立或从主干复制一个分支
- 从中央库check out 下这个分支的代码
- 增长本身的代码文件,修改现存的代码或删除代码文件
- commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过时,你得先up你的代码后再提交。up代码的时候若是出现冲突,须要解决好冲突后再进行提交。
缺点:web
当没法链接到中央版本库的环境下,你没法提交代码,将代码加入版本控制;
你没法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码咱们都默认经过自测可运行的,若是某个模块的代码比较复杂,不能短期内实现为可测试的功能,那么你须要等很长的时间才能提交本身的代码,因为代码库集中管理,所以,须要对中央版本库的存储作备份。这点分布式的版本控制系统要好一些。Svn的备份要备份全部代码数据以及全部更改的版本记录。数据库git分布式的版本控制
- git是由Linus开发的,因此很天然的git和Linux文件系统结合的比较紧密,以致于在windows上你必须使用cygwin才能使其完美的工做。
- 那git凭啥叫作分布式的版本控制系统呢?仍是从其工做模式讲起把。
- git中没有了中央版本库的说法了,可是为了开发小组的代码共享,咱们一般仍是会搭建一个远程的git仓库。
- 可是和svn不一样的是,开发者本地也包含了一个完整的git仓库,从某种程度上说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。
- 若是你的项目是闭源项目,或者你习惯于以往的集中式的管理模式的话,那么在git下你也能够像svn那样的工做,只是流程中可能会增长一些步骤。
- 你本地建立一个git库,并将其add到远程git库中。
- 你在本地添加或者删除文件,而后commit,固然commit操做都是提交到本地的git库中了。(嗯,实际上是提交到git目录下的objects目录中去了)
- 将本地git库的分支push到远程git库的分支,若是这个时候远程git库中已经有别人push过,那么远程git库将不容许你push,这时候你须要先pull,而后若是有冲突,处理好冲突,commit到本地git库后,再push到远程git库。
从上面的描述咱们能够看到,咱们每一个开发人员的本地都会有一个git库,咱们能够随时进行commit而不须要联网,能够随时查看历史版本,当某一个功能点开发完了以后咱们能够将commit后的内容push到远程git库了,若是远程git库的版本在你上次clone或者pull以后变化了,那么你须要进行pull并处理冲突,提交以后,再push到远程git库。apache
运维人员掌握版本管理
对于版本管理系统,运维人员须要掌握的技术点:windows
- 安装,部署,维护,排障。
- 简单使用,不少公司都是由开发来管理,包括创建新仓库和添加删除帐号
- 对于版本控制系统,运维人员至关于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。
1.5 SVN服务运行模式与访问方式
1.5.1 SVN服务端运行方式
svn服务常见的运行访问方式有3种:后端
(1)独立服务器访问安全
访问地址如:svn://svn.yunjisuan.org/sadoc;
(2)借助apache等http服务
访问地址如:http://svn.yunjisuan.com/sadoc;
a,单独安装apache+svn(不要用)
b,CSVN(apache+svn)是一个单独的整合的软件,带web界面管理的SVN软件(3)本地直接访问(例如:file://application/svndata/sadoc)
在这里,主要给同窗们介绍第一种方式以及第二种方式中的CSVN web管理方式
1.5.2 SVN客户端访问方式
SVN客户端能够经过多种方式访问服务器端,例如:本地磁盘访问,或各类各样不一样的网络协议访问,但一个版本库地址永远都是一个URL,URL反映了访问方法。
访问方式 说明 file:// 直接经过本地磁盘或者网络磁盘访问版本库 http:// 经过WebDAV协议访问支持Subversion的Apache服务器 https:// 与http://类似,可是用SSL加密访问 svn:// 经过TCP/IP自定义协议访问svnserve服务器 svn+ssh:// 经过认证并加密的TCP/IP自定义协议访问svnserve服务器 1.6 SVN档案库数据格式
svn存储版本数据有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不须要数据库的存储系统)。由于BDB方式在服务器中断时,有可能锁住数据,因此仍是FSFS方式更安全一点。
- BDB:
伯克利DB(Berkeley DB),版本库可使用的一种通过充分测试的后台数据库实现,不能在经过网络共享的文件系统上使用,伯克利DB是Subversion 1.2版本之前的缺省版本库格式
- FSFS:
一个专用于Subversion版本库的文件系统后端,可使用网络文件系统(例如 NFS 或 SMBFS)。是1.2版本及其后的缺省版本库格式。
1.7.1 SVN 集中式版本管理系统
Svn是一种集中式文件版本管理系统。集中式管理的工做流程以下图:
集中式代码管理的核心是SVN服务器,全部开发者在开始新一天的工做以前必须从服务器获取代码,而后进行开发,最后解决冲突,提交。全部的版本信息都放在SVN服务器上。所以若是脱离了服务器,开发者就没法进行提交代码工做。
1.7.2 开发者利用SVN版本管理系统工做过程
下面举例说明:
开始新一天的工做:
- 首先从SVN服务器下载项目组最新代码。
- 进入本身的分支,进行开发工做,每隔一小时向服务器上本身的分支提交一次代码(不少程序员都有这个习惯。由于有时候本身对代码改来改去,最后又想还原到新一个小时的版本,或者看看前一个小时本身修改了哪些代码,就须要这样作了)。
- 下班时间快到了,把本身的分支合并到服务器主分支上,一天的工做完成,并反映给服务器。
优势:
- 管理方便,逻辑清晰明确,符合通常人思惟习惯。
- 易于管理,集中式svn服务器更能保证数据安全性。
- 代码一致性很是高。
- 适合开发人数很少的项目开发。
- 普及度高,大部分软件配置管理的大学教材都是使用svn和vss。
搭建SVN服务端
创建svn版本库数据存储根目录(svndata)及用户,密码权限目录(svnpasswd)
第一个目录是
数据存储根目录
第二个目录是
用户,密码权限目录
创建项目版本库
建立一个新的Subversion项目yunjisuan,其实,相似yunjisuan这样的项目能够建立多个,每一个项目对应不一样的代码,这里只是以建立一个项目为例演示:
编辑svn配置文件
修改如上,
特别提示:
此配置文件里的每条配置代码必须顶格写,不能有空格。
12行表示:
禁止匿名访问 13:
验证访问可写 20:
密码文件位置 27:
验证文件位置
将authz文件和passwd文件拷贝到/application/svnpasswd下
启动svn服务
svn启动命令帮助
passwd文件及密码设置
authz的受权
注意:
1,权限配置文件中出现的用户名必须已在用户配置文件中定义
2,对权限配置文件的修改当即生效,没必要重启svn![]()
重启动svnserve
搭建SVN客户端
使用svn客户端(windows版)
软件版本选择
推荐:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7
注意:32位系统要用32位软件版本
svn客户端软件的使用
(1)先在本地建立一个目录,起名任意,好比data
鼠标右键点击data目录
选择右键菜单里的SVN Checkout,出现下图:
ip是本身虚拟机ip,yunjisuan为项目目录
特别提示:
若是链接不通,请检查Linux虚拟机的iptables是否关闭。点击OK后,出现下图:
密码为123123
再次点击OK之后,结束。此时目录里多了一个隐藏的目录,表示此目录已经和svn服务器连通
若是没有隐藏目录,多是windows设置的不显示隐藏目录
命令说明:
(1)SVN Checkout:至关于下载,第一次链接svn服务器的时候须要和服务器的对应存储目录进行数据同步,若是服务器的对应目录里有数据文件,那么就会下载到你的本地对应目录里。
(2)SVN Update:更新数据,检查服务器端svn存储目录里是否和本地svn存储目录数据不一致,若是不一致,那么下载改变或新增的部分到本地svn目录里。(不会删除本地目录内容)
(3)SVN Commit:提交数据到svn服务器端存储目录。本地svn存储目录会和服务器端存储目录进行比对校验。会把本地改变的部分和新增的部分同步上传至服务器端。svn客户端使用测试
(1)向windows的svn存储目录data里放一个空文件
(2)右键点击data目录,选择SVN Commit
选择文件,点击OK
再点击OK
(3)打开本地data目录里的文件,随便写点内容后,再次进行SVN commit
颜色变了,说明有更新
(4)直接从本地查看服务器端的数据内容
右键点击本地svn存储目录data,选择TortoiseSVN ===>Repo-browser后出现下图:
双击文件能够直接远程打开文件,能够看到里面刚刚被修改后的内容已经更新至服务器端。
(5)删除本地svn存储目录data里的文件,后选择SVN Update
同窗们会发现,刚刚删除的文件又从新下载回来了。
(6)继续删除本地svn存储目录data里的文件,后选择SVN Commit
(7)再次查看服务器端存储目录里,发现文件已经被删除了
SVN的管理命令(Linux)
[root@localhost ~]# svn --help
usage: svn <subcommand> [options] [args]
Subversion command-line client, version 1.6.11.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
or 'svn --version --quiet' to see just the version number.
Most subcommands take file and/or directory arguments, recursing
on the directories. If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.
Available subcommands:
add
blame (praise, annotate, ann)
cat
changelist (cl)
checkout (co) #下载数据
cleanup
commit (ci) #提交数据
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls) #显示服务器端内容
lock
log
merge
mergeinfo
mkdir
move (mv, rename, ren)
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
resolve
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up) #更新数据
Subversion is a tool for version control.
For additional information, see http://subversion.tigris.org/
从SVN库提取数据
将文件checkout到本地目录
svn checkout(co) remotepath localpath![]()
下载服务器端数据到Linux本地目录
查看SVN版库中的数据
svn list file:///application/svndata/yunjisuan
提交数据到SVN版本库
(1)一次失败的提交
(2)换帐户从新Checkout