细说SVN集中式版本控制器
svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具。在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行。
如图:多人开发同一个php程序文件(重叠部分代码),在做commit提交给服务器的时候,要造成文件彼此覆盖的问题。
svn作用之一:解决文件覆盖,协作多人开发同一个项目的同一个文件问题。
一、什么是SVN
那么什么是SVN呢,下面就由我为大家细说,SVN是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。 许多人会把版本控制系統想像成某种 “时光机器”。
成形于2001年8月31日
2010年1月成为apache软件基金会的顶级项目
使用svn的作用
① 协作多人开发同一个项目同一个文件,并且不会出现文件覆盖问题。
② 针对一个文件可以创建许多不同版本,并且可以随时查看不同版本的内容。
③ 公司领导可以通过svn查看每个人的工作情况
二、SVN的安装
1、服务器端安装
SVN服务器端软件下载地址:
https://sliksvn.com/download/
①创建文件目录,用于安装svn服务器端:D:\svn\server
2、客户端安装
tortoiseSVN客户端软件下载:
https://tortoisesvn.net/downloads.html
注意:该客户端安装完成后,重启电脑
该软件直接像其他软件一样,直接安装即可,没有注意事项
①创建多个svn仓库(存储代码)
svn是用于管理代码文件的,创建仓库用于存储php代码文件,因为公司在同期要开发维护多个项目的代码文件,因此要给svn创建多个不同仓库:比如
d:/svn/app/shop
d:/svn/app/book
d:/svn/app/car
svnadmin create d:/svn/app/shop[book/car] //创建实实在在的创库
②执行指令,使得shop目录变为真实的SVN仓库效果
3. 启动仓库服务
svn要设置服务才可以使用,该服务走svn协议,端口为3690
启动服务指令:
> svnserve -d[独立端口运行] -r[具体仓库目录] 仓库地址目录
通过“超级管理员”权限打开dos命令行,挂起状态,不关闭
d:\svn\server\bin\svnserve.exe -d -r d:/svn/app
(注意:仓库地址目录为所有仓库的上级目录app,这样可以任意选取被操作的仓库)
4. 与仓库取得联系
开发者要把代码文件提交到svn仓库里边进行保管,提交之前先让开发者与svn仓库取得联系
①创建tom用户的工作目录:www\tom
工作目录:开发各种php代码文件的地方
tom工作目录与svn仓库取得联系:
执行鼠标右键--->checkout指令
此时在tom的工作目录里边生成一个.svn的隐藏文件,说明联系成功
三.使用svn服务
①在commit文件时出现commit failed(details follow)认证失败
原因是:该shop仓库没有设置账号权限
解决:打开仓库匿名账号权限,然后再进行commit
D:\svn\app\shop\conf\svnserve.conf
anon-access = write //开启匿名账号权限设置
1. 文件颜色标志
① 蓝色加号:本地的.svn对该文件有形成管理(远程仓库 还没有该文件记录)
② 绿色对号:正常文件,本地文件、.svn管理的版本文件、仓库文件 三者内部内容一致
③ 红色叹号:表示 本地文件 与 .svn管理的文件内容不一致(用户自己修改了该文件)
④ 黄色叹号:表示该文件正处于冲突状态
⑤ 蓝色问号:新建的一个文件,本地.svn 和 远程仓库 对该文件都没有记录
2. svn的常见操作
① checkout: 检出动作,执行同时会把仓库全部文件更新到本地
② update: 把仓库最新的程序文件更新到本地
③ commit: 把本地文件提交给svn仓库
3. 目录和文件的提交
一个新目录创建好了,该目录内部还有新的程序文件
那么,只有该新目录提交完毕了,内部的新程序文件才允许提交
规律:一个文件只有上级目录已经被commit操作后,该文件本身才可以被commit操作
四.冲突Conflicted(重点)
1. 什么是冲突
冲突(conflicted)
多人在同一时间对同一个程序文件进行编辑后提交的时候,后提交的文件要覆盖先提交文件的现象称为“冲突”
tom在9:00对register.php文件进行开发
10:00对开发好的文件进行提交
jim在9:20对register.php文件进行开发
9:40对开发的文件进行提交
那么,在10:00以后服务器只给体现tom开发的功能,后上传的文件会把先上传的同名文件给覆盖了
冲突解决方案:
① 令牌方式解决
vss软件就采取这样的思路,给每个程序文件都分配一个令牌,只有拿到令牌的开发者才可以对这个文件进行修改,修改完毕再还令牌。
令牌的原理:同一个文件同一个时间点只能有一个人开发
② 版本解决:
svn的解决方案
只有本地的版本 与 服务器版本号码一致,才允许提交
本地版本 小于 服务器版本 则禁止提交
冲突具体形式与解决
①大家修改的代码不在同一处
冲突解决:执行update指令,使得服务器新版本与本地旧版本做融合操作,之后再继续commit提交即可
开启(超级管理员权限打开dos窗口)服务:
regsiter.php.mine: tom本地文件在update之前的效果
regsiter.php.r14: 是文件14版本的效果
regsiter.php.r15: 是文件15版本的效果
以上3个文件理解后直接删除,否则影响本文件commit提交
五.账号和权限
①关闭匿名账号:anon-access = none
去掉前面的#:password-db = passwd
authz-db = authz
②设置账号
例如:tom = tom123
③给账号设置权限
#给shop仓库设置操作权限:[shop:/]
#给用户设置具体操作权限 r(read)读权限 w(write)写权限
例:tom = rw
#除了tom外,其他用户都没有操作权限
* =
r: 读权限,代表可以从svn仓库update更新文件
w:写权限,代表本地可以给svn仓库commit提交文件
svn与apache不同,配置文件修改了无需重启服务,svn每次运行的时候都会重新加载配置文件
此时,再进行svn操作的时候,提示我们输入用户名和密码
④给一个组别设置权限
有的时候一个项目组里边有多个开发人员(例如20个),这些人的操作权限都一致
为了分配权限比较方便、快捷,就给这些开发人员设置到一个组别里边,直接给组别设置操作svn的权限,组别的权限就等于开发人员的权限
有一个操作权限都一致的团队账号:
php = php1,php2,php3 //把团队成员设置到组里边
@php = rw //直接给组别设置操作权限
六.设置开机启动项服务
超级管理员权限打开dos命令行: 创建服务器
sc create svnd binPath="D:\svn\server\bin\svnserve.exe -r d:/svn/app --service" start= auto
sc delete svnd:删除服务器
七.svn使用细节
1. 查看工作情况
领导可以通过svn查看大家的工作情况
操作:右键-->svn-->show log
2. 清除缓存
登录使用svn的时候,如果系统记住用户名、密码了,就不能更换其他账号
可以通过: 右键-->svn-->settings-->saved data 清除各种(账号)缓存
3. 关闭匿名账号
使用#号方式关闭匿名账号会影响 show log 文件维护日志的查看
4. 零bug开发
svn可以保证大家开发的代码都必须遵守严格的标准,如果哪个人把代码写错了,通过svn可以追查出来,包括一个.点或空格的微小错误
查看文件当前内容 与 之前版本内容的差异:TortoiseSVN->Diff with previous version
八.hooks钩子
通过svn开发的项目代码文件,最终需要上传给web服务器才可以运行,其中hooks钩子技术可以帮组我们把文件从svn仓库自动同步给web服务器
本地工作目录:E:/www/tom
svn仓库:D:/svn/app/shop
web服务器:D:/web/shop
九. svn扩展功能
1. 什么是BAE
百度应用引擎(Baidu App Engine,简称BAE)是国内商业运营时间最久、用户群体最为庞大的平台之一,提供弹性、便捷、一站式的应用部署服务,支持PHP/Java/Node.js/Python等各种应用。您只需上传应用代码,BAE自动为您完成运行环境配置、应用部署、均衡负载、资源监控、日志收集等各项工作,大大简化部署运维工作
除了BAE,还有aliyun(阿里应用引擎)、SAE(sina app engine新浪引用引擎)
在许多应用程序里边,svn已经作为一个不可缺少的组件构成应用的一部分,其中BAE(Baidu App Engine)里边就可以通过svn实现代码的上传和更新。
2. svn应用到bae里边
① 到bae里边创建应用
bae网址:https://cloud.baidu.com
先登录到bae应用里边
通过svn对bae代码进行维护
获取到的svn主机名地址:
https://svn.duapp.com/appidfr7dk8qylo
用户名:baidu账号
密码:baidu账号密码
创建本地svn工作目录
之后工作目录与svn仓库取得联系
在bae操作界面,如果有新文件被commit提交,其会有提示,之后我们还有点击“快捷发布”,以便文件可以同步到web服务器供访问:
细说SVN集中式版本控制器的更多相关文章
- SVN集中式版本控制器的安装、使用与常见问题汇总
SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,集中式版本控制器 官方网站:https://www.visualsvn.com/ 下载右边的服务器端,左边的客 ...
- linux进阶之SVN集中式版本控制系统篇
代码上线--版本控制系统 SVN 集中式版本控制系统 git 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...
- SVN 集中式版本控制软件
简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...
- Git学习系列之集中式版本控制系统vs分布式版本控制系统
不多说,直接上干货! Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央 ...
- git-版本管理工具的介绍+发展史+分布式版本控制系统和集中式版本控制系统的区别
一.版本管理工具的介绍: 1.备份文件: 2.记录历史: 3.多端共享: 4.团队协作: 二.版本管理工具的发展史: 1.cvs: 集中式 1985: 2.svn: 集中式 2000: 3 ...
- 集中式版本控制系统:从svn到tfs
06年进公司的时候,我们没有使用版本控制系统,所有代码都在部门经理的电脑上放着,谁要改什么代码就过去要一份最新的,改好之后再放回去,感觉好原始.据说之前是用过一段时间微软的vss(visual.sou ...
- 关于分布式版本控制系统Git与集中式版本控制系统SVN的区别
我觉得最最主要的区别就是:分布式Git主要是在本地有各个历史版本,在不联网的时候,也可以更新到最新版本和查看过去的版本,而集中式SVN是所有人都将版本上传到中央服务器,当出现断网情况的时候,用户只有一 ...
- 你了解SVN, CVS等版本控制器吗?
版本控制器SVN, CVS是两种版本控制器, 需要配套相关的SVN, CVS服务器, SCM是xcode里面配置版本控制的地方, 版本控制的原理就是A和B同时开发一个项目, A写完当天的代码之后把代码 ...
- 集中式版本管理系统 SVN使用
SVN的使用 SVN的文件状态 黑色:正常的文件 黄色文件(在Android Stduio中颜色):被忽略的文件 红色:文件没有Add的新文件(没有加入版本控制subversion中) 绿色:新文件A ...
随机推荐
- leetcode解题报告 32. Longest Valid Parentheses 动态规划DP解
dp[i]表示以s[i]结尾的完全匹配的最大字符串的长度. dp[] = ; ; 开始递推 s[i] = ')' 的情况 先想到了两种情况: 1.s[i-1] = '(' 相邻匹配 这种情况下,dp ...
- spark遇到的错误1-内存不足
原来的代码: JavaRDD<ArticleReply> javaRdd = rdd.flatMap(new FlatMapFunction<String, ArticleReply ...
- Delphi Locate 详解1 转
TDataSet控件以及它的继承控件,例如TSimpleDataSet/TClientDataSet等都可以使用Locate方法在结果数据集中查寻数据.程序首先必须使用SQL命令从后端数据库中取得数据 ...
- myeclipse提示错误。
Syntax error, parameterized types are only available if source level is 1.5 解决方法:编译器问题.注意myeclipse10 ...
- spark1.6.1 on yarn搭建部署
注:本文是建立在hadoop已经搭建完成的基础上进行的. Apache Spark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写.该框架对资源调度,任务的提交.执行和跟踪,节点间的通 ...
- MyEclipse反向生成Java代码 ,Reverse Engineering-->Java Source Folder-->没有提供任何条目
在web项目名称上,手动执行一遍Add Hibernate Capabilities,然后再去DB Browser中进行反向生成pojo实体类和hbm.xml映射文件!,具体生成反向代码的配置如下图所 ...
- HTML 样式兼容不同设备类型
在项目中遇到在屏幕上显示的效果和打印时显示的效果不同,可以使用media属性来指定用于不同的媒介时使用的样式. media属性值: 值 描述 screen 计算机屏幕显示(默认) tty 电传打字机以 ...
- poj2115-Looooops-(扩展欧几里得定理)
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions:33752 Accepted: 9832 Descri ...
- <assert.h>库学习
assert的初步认识 assert宏指令是用来诊断程序是否有误的,函数原型如下 void assert(int expression) 那为什么我们要使用assert而不用printf呢?因为ass ...
- linux下网络配置
配置相关 http://bbs.acehat.com/thread-813-1-1.html