工作环境中一个项目上线的大致流程:
1.安装项目运行环境apache/nginx,lvs[运维]
2.部署程序代码(持续更新)[开发+运维+测试]
3.配置变更(持续变更)[运维]
1、什么是SVN?
SVN(subversion)是一款非常优秀的跨平台的开源版本控制系统,它有一个类似于文件服务器或FTP服务器的集中资料档案库(repository),但不同的是,SVN会备份记录每个文件每次修改变更情况,这样我们就可以把随着时间点变更的各种数据恢复到之前备份的任一版本。
SVN也可以管理任何类型的文件,如图片、文本、音视频等,但大家更多的是使用它来管理程序源码,SVN解决了CVS存在的很多问题,从某种意义上讲是用来接替CVS的,常见的版本管理软件有:vss、cvs、svn、git,但最常用的还是svn。
2、Svn与Git的区别
2.1 svn集中式版本控制系统
svn版本控制系统是集中式的数据管理,存在一个中央版本库(repository)所有开发人员在本地使用的代码都来自于这个版本库,对于代码的增删改查也是基于这个中央版本库。
svn大致工作流程如下
1.在中央库上创建或从主干复制一个分支
2.从中央库check out这个分支的代码
3.对代码实现增删改查的工作
4.提交代码(commit),但在提交前最好与相关同事沟通好,如果有人在刚刚的分支上提交 了代码,你会被提示代码过期,当然一般某个确定版本得经过项目经理审查才能提吧。
(小技巧:可以先up你的代码再提交,因为up代码的时候如果有冲突会提示,这样可以避免一些不必要的麻烦!)
缺点:
1.在无法连接到中央版本库的环境下,无法提交代码,实际开发环境大都是局域网,一般问 题不大
2.如果某个模块的代码比较复杂,那么提交时可能需要长时间的等待
3.由于代码库是集中管理,我们需要备份所有代码数据及所有更改的版本记录,没有分布式 的版本控制系统方便
2.2 git分布式的版本控制
git是由Linus倡导开发的,所以git与linux文件系统联系紧密,在windows上我们必须使用cygwin这样的工具才能愉快的工作。
git是分布式的版本控制系统,没有中央版本库的说法,但通常为了开发小组的代码共享,我们也会搭建一个远程的git仓库。但与svn不同的是,开发者本地也包含一个完整的git仓库,从某种程度上来说,本地和远程仓库身份是对等的,没有主从之分。
如何项目是闭源项目,也可以让git像svn那样工作,只是流程可能会增加一些步骤
1.在本地创建一个git库,并将其add到远程git库中
2.在本地增加删除文件,然后commit提交到本地的git库中,其实是提交到git目录下的objects目录中去
3.将本地git库的分支push到远程git库的分支,如果这时远程git库中已经有别人push过,那么push不会被允许,这时你就需要先pull检查冲突,先commit到本地git库后,再push到远程git库。
总结:
svn是集中式版本管理系统,易于统一管理且操作方便。
git是分布式版本管理系统,管理及操作比较复杂,但更灵活。
3.SVN部署方式
3.1 svn服务端运行方式
1.独立服务器访问
2.借助apache等http服务
a.单独安装apache+svn
b.csvn(apache_svn)整合软件,带web界面管理的SVN软件
3.本地直接访问
3.2 svn客户端访问方式
Svn客户端可以通过多种方式访问服务器端,如本地磁盘访问,网络协议访问,但一个版本库地址永远都是一个URL。
访问方式 | 说明 |
file:// | 直接通过本地磁盘或网络磁盘访问本库 |
http:// | 通过WebDAV协议访问支持SVN的Apache服务器 |
https:// | 与http://相似,但有SSL加密访问 |
svn:// | 通过TCP/IP自定义协议访问SVN服务器 |
svn+ssh:// | 通过认证并加密的TCP/IP访问 |
黄色字体标记为常用方式
3.3 SVN档案库数据格式
SVN数据存储版本有两种方式:BDB(事务安全型表类型)和FSFS(不需要数据库的存储系统)。
BDB:伯克利DB(Berkeley DB),版本库可以使用的一种经过充分测试的后台数据库实现,但是不能通过网络共享的文件系统上使用,伯克利DB是Subversion1.2版本以前的缺省版本库格式。
FSFS:一个专用于subversion版本库的文件系统后端,可以在网络文件系统上使用(如NFS和SMBFS)是1.2版本及以后的缺省版本库格式。
因为BDB方式在服务器服务中断时,有可能锁住数据,所有FSFS方式更安全可靠一些。
SVN是基于关系数据库的(BerkeleyDB)或一系列二进制文件(FSFS),一方面解决了很多问题(如并行读写共享文件)以及添加了许多新的功能(如运行时的事务特性),然而另一方面,数据存储由此变得不透明,我们不能像查看FTP、SAMBA、NFS文件系统那样看到实体文件了。
SVN已死,用Git吧
@Jianjin Fan 明天搭一个,你教我编python吧,哈哈
@anzhihe 改天送你本书感觉入门还挺不错的
@Jianjin Fan 搞起,从入门到不能自拔