1.什么是SVN
SVN: subversion 子级版本 (子级源代码版本控制管理软件)
多人同时开发同一个项目,一个文件不可避免要由多人同时开发:
同一个项目有三个程序员共同开发,不可避免的情况是同一个程序文件有可能三个人都开发,这样他们在不同时间段之内给服务器上传自己开发好的文件的时候就会出现“文件覆盖”的情况,后上传的文件会覆盖先上传的文件。
SVN作用之一就是避免上述情况发生。
svn:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。 许多人会把版本控制系統想像成某种 “时光机器”。
使用svn可以很好地协调一个团队共同开发同一个项目,而不会出现代码冲突、覆盖的情况。
2. 使用svn的作用
① 多人开发同一个项目不会出现代码覆盖情况。
② 针对一个文件可以创建许多不同版本,并且可以随时查看不同版本的内容。
③ 公司领导可以通过svn查看每个人的工作情况
三. SVN的安装
1. 服务器端安装
双击setup-subversion-1.6.5.msi:
2. 客户端安装
双击安装客户端软件(安装完毕重启电脑):
(根据自己操作系统位数64/32做选择安装)
客户端安装完毕,鼠标右键有对应的标志:
3. 创建多个svn仓库(存储代码)
给svn服务器端创建多个代码仓库,用户存储开发的不同项目的程序源代码。
创建三个代码仓库:
> svnadmin create h:/svnServer/app/shop
为不同的程序项目创建对应的仓库,分别存储不同项目的程序代码文件。
4. 启动仓库服务
svnserve -d(独立端口运行) -r(仓库地址) 仓库地址
> svnserve -d -r h:/svnServer/app/shop //启动shop仓库服务
该svn服务走svn协议,端口号码是3690
5. 使得本地客户端(码农)与仓库取得联系
> 右键------> checkout(检出)
右键->checkout后设置主机名和本地工作目录:
四.使用svn服务
1. 给svn仓库提交第一个程序文件
步骤:
① 右键------> SVN---->Add
(本地的.svn对该文件形成管理),每个文件只需要一次add操作接口
② 右键------> Commit(提交)
(本地的文件提交给svn仓库)
1.1 开启仓库匿名账号权限
1.2 文件颜色标志
① 蓝色加号:本地的.svn对该文件有形成管理
② 绿色对号:本地文件、.svn管理的版本文件、仓库文件 三者内部一致
③ 红色叹号:本地文件 与 .svn和仓库文件 不一致(用户自己修改了该文件)
④ 黄色叹号:表示该文件正处于冲突状态
⑤ 蓝色问号:新建的一个文件,本地.svn 和 远程仓库 对该文件都没有记录
1.3 在仓库内部查看已经提交的文件
(仓库内部的文件禁止修改)
2.
多个程序员给仓库提交文件
首次使用svn执行 checkout,同时会把仓库最新程序文件更新到本地。
给仓库提交程序文件,执行 commit指令
把仓库最新的程序文件更新到本地,执行 update指令
后期 commit 和 update 指令要频繁使用。
3. 一键commit同时提交多个文件
为了加快文件的提交速度,可以在项目文件目录点击“右键------>commit”,svn会把当前目录及内部所有子级递归目录需要提交的文件给选取上供commit操作。
(新文件会通过commit指令把 add和commit 合并起来执行)
3.1 新目录文件的提交
新目录内部的文件不能直接提交,必须是目录本身已经提交给仓库了,该目录的文件才可以单独进行(add/)commit提交动作。
4. 同时运行多个svn仓库服务
把所有仓库的上级目录当成服务给启动起来。
>svnserve -d -r h:/svnServer/app/
svn仓库的主机名可以设置如下:
>svn://localhost/仓库名称
4.1 用户更换svn主机名地址
删除.svn文件,断开与仓库的联系
重新checkout并根据svn新主机名建立与仓库的新联系
总结:
- 安装服务器、客户端软件
创建多个仓库
svnadmin create 仓库地址(shop/crm/finance)
- 启动svn仓库服务器
svnserve -d -r 仓库地址
- 使用svn
checkout ----> (add)commit update更新
- 开启多个仓库服务
把仓库的上级目录当做服务地址给启动起来
主机名:svn://localhost/仓库名称
5. 同一个文件的不同版本切换
一个程序文件可以在svn仓库里边形成许多不同版本,并可以随时查看、对比。
把文件切换到之前的某个版本:
五. 冲突解决(重点)
两个程序员在短时间内对同一个文件进行修改,并进行提交,后提交的文件会尝试覆盖先提交者的文件,但是不会成功,因为有“冲突”机制避免此情况发生。
上图两个程序员在短时间之内开发同一个程序文件(register.php),在最后(10:00以后)服务器体现的功能只有tom用户的功能,linken开发的功能被覆盖了。
SVN的冲突:
广义角度的冲突:提交程序文件 本地版本号码 小于 仓库服务器版本号码.
狭义角度的冲突:多个程序员对同一个文件、同一处代码进行修改,在他们提交文件的时候会产生冲突。
冲突解决:
① 令牌方式解决,给每个文件设置令牌,谁获得令牌谁有权利开发该文件。
vss(visual source safe)源代码控制管理软件使用该方式
② 通过版本号码进行控制,用户commit文件,本地文件版本 与 仓库版本号码必须一致才可以提交,否则禁止提交。
(本地与服务器版本号码不一致,一定是本地的号码小于仓库的)
SVN就是通过版本号码解决冲突
1. 冲突具体形式:
1.1大家修改的代码不在同一处
解决:
执行update操作,把仓库最新的文件更新到本地,并和本地文件做Merge融合(不是覆盖)操作。
之后继续提交文件即可。
1.2 大家修改的代码在同一处
直接update操作把最新的版本更新到本地,与本地文件做Merge融合操作,
对冲突文件稍作修改后继续提交即可。
六. 账号和权限
1. 设置账号
2. 给账号设置权限
2.1 给具体用户设置权限
2.2 给一个组别设置权限
如果有许多程序员,他们是属于同一个小组的,为了权限分配比较方便、后期维护也非常便捷,就给他们设置到一个组别里边去,给组别设置权限,就等于给每个用户设置权限了,权限操作非常方便。
2.3 开启只操作某个目录权限
步骤:
① 管理员先把该目录video给创建出来并提交给svn仓库
② 给外部团队 设置账号 和 设置工作目录、和其分支目录权限
③ 外包团队 建立与仓库分支目录 的联系(checkout)
④ 外包团队给该 目录提交文件
⑤ 管理员执行update更新操作,把该分支目录从仓库更新下来即可查看外包团队的工作情况。
把被操作的文件目录video创建好并提交给svn仓库:
创建对应外部团队账号:
设置用户操作权限:
使得wai2组员对video目录进行开发并提交文件
使得wai2账号与仓库的video目录取得联系:
七. 设置开机启动项服务
服务项目的创建和删除:
有的电脑由于权限限制禁止在dos窗口执行底层指令(例如sc create 或 sc delete)
解决:可以把创建 和 删除 服务的指令保存为”批处理”(linux系统的shell脚本文件)程序文件。
八.svn查看工作情况和bug追踪
通过svn追中bug,做开发调试,可以达到”0bug”开发效果:
九.
模拟真实环境使用svn
总结:
- 同一个文件的不同版本切换
- 冲突解决
两种冲突:
① 大家修改代码不在同一处
② 大家修改代码在同一处
解决:首先执行update操作,其次如果是②冲突需要对文件做适当修改,最后再提交文件即可
- 账号和权限设置
权限设置:
① 给具体用户设置权限
② 给组别设置权限
③ 给用户设置只操作某个文件目录的权限
- 给svn设置开机启动项服务
sc create .....
sc delete ...
- 使用svn实现“0bug”开发,文件不同版本对比查看等
- 模拟真实环境使用svn