码迷,mamicode.com
首页 > 其他好文 > 详细

svn://127.0.0.1/shop

时间:2017-08-23 00:55:10      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:简化   分布式   index   内容   应用程序   问号   book   界面   一个   

一.SVN

svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具

 

 

 

在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行。

 

 

上图,多人开发同一个php程序文件(重叠部分代码),在做commit提交给服务器的时候,要造成文件彼此覆盖的问题

svn作用之一:解决文件覆盖,协作多人开发同一个项目的同一个文件问题.

 

1. 什么是SVN

svn:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本或是浏览文件的变动历史。 许多人会把版本控制系統想像成某种 “时光机器”。

2. 使用svn的作用

① 协作多人开发同一个项目同一个文件,并且不会出现文件覆盖问题。

② 针对一个文件可以创建许多不同版本,并且可以随时查看不同版本的内容。

③ 公司领导可以通过svn查看每个人的工作情况

3. svn出现的年代

成形于2001831

20101月成为apache软件基金会的顶级项目

 

4. 相关产品

vss:visual source safe,微软公司开发的

cvs:Concurrent Versions system(目前正在被svn取代)

github: 分布式代码控制管理软件,林纳斯(linux系统内核开发作者)开发的

 

目前主流源码控制管理软件:githubsvn

 

二.SVN的安装

1. 服务器端安装

SVN服务器端软件下载地址:

https://sliksvn.com/download/

 

根据操作系统位数,选择安装:

 

 

 

创建文件目录,用于安装svn服务器端:

 

 

 

 

 

 

 

 

svn服务器端安装完毕,在运行目录生成的对应文件:

 

 

 

 

2. 客户端安装

tortoiseSVN客户端软件下载:

https://tortoisesvn.net/downloads.html

 

注意:该客户端安装完成后,重启电脑   

 

根据操作系统位数选择一个安装:

 

 

该软件直接像其他软件一样,直接安装即可,没有注意事项

 

 

 

 

3. 
创建多个svn仓库(存储代码)

svn是用于管理代码文件的

创建仓库用于存储php代码文件,因为公司在同期要开发维护多个项目的代码文件,因此要给svn创建多个不同仓库

 

 

 

 

 

 

 

 

通过上图可知,要创建三个仓库

d:/svn/app/shop

d:/svn/app/book

d:/svn/app/car

 

 

 

 

 


创建仓库指令:

> svnadmin  create  d:/svn/app/shop[book/car]   //创建实实在在的创库

 

 

通过“超级管理员”权限打开dos命令行:

 

 

 

同理,继续把bookcar仓库创建出来:

 

 

 

 

4. 启动仓库服务

svn要设置服务才可以使用,该服务走svn协议,端口为3690

 

启动服务指令:

> svnserve  -d[独立端口运行]  -r[具体仓库目录]   仓库地址目录

 

 

通过“超级管理员”权限打开dos命令行:

 

(注意:仓库地址目录为所有仓库的上级目录app,这样可以任意选取被操作的仓库)

 

 

5. 与仓库取得联系

开发者要把代码文件提交到svn仓库里边进行保管,提交之前先让开发者与svn仓库取得联系

 

创建tom用户的工作目录:

 

 

工作目录:开发各种php代码文件的地方

 

tom工作目录与svn仓库取得联系:

执行鼠标右键--->checkout指令

 

 

 

上图:svn主机名地址为 svn://localhost/shop,也可以与svn://localhost/bookcar联系

(同桌彼此也可以互相联系, 主机名:svn://同桌ip地址/shop)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三.使用svn服务

1. svn仓库提交第一个程序文件

 

 

 

 

 

 

 

 

提交新程序文件的步骤:

① 右键--->svn--->add      //作用:.svn对该新文件形成管理

② 右键--->commit //作用:把文件提交给svn仓库

 

创建新程序文件index.php,并设置伪代码:

 

 

 

如下图,选中被提交的文件执行 右键-->svn-->add  指令:

 

 

 

此时,文件变图标为“蓝色加号”,表示.svn对该文件形成管理:

 

 

 

之后选中文件执行  右键--->commit 指令(代表要提交文件到svn仓库)

 

 

上图设置完毕日志信息,点击ok提交的时候,提示下图内容:

原因是:shop仓库没有设置账号权限

解决:打开匿名账号权限

 

 

上图解决:给svn仓库开启匿名账号权限

1.1 开启仓库匿名账号权限

使得该仓库shop可以接受全部开发者提交过来的程序文件

 

 

 

之后,再次提交文件:

 

 

 

 

 

 

1.2 文件颜色标志

① 蓝色加号:本地的.svn对该文件有形成管理(远程仓库 还没有该文件记录)

 

② 绿色对号:正常文件,本地文件、.svn管理的版本文件、仓库文件 三者内部内容一致

 

③ 红色叹号:表示 本地文件    .svn管理的文件内容不一致(用户自己修改了该文件)

 

④ 黄色叹号:表示该文件正处于冲突状态

 

⑤ 蓝色问号:新建的一个文件,本地.svn 和 远程仓库 对该文件都没有记录

 

1.3 在仓库内部查看已经提交的文件

 

 

 

 

 

2. svn的常见操作

 

 

 

 

 

 

 

 

① checkout: 检出动作,执行同时会把仓库全部文件更新到本地

② update: 把仓库最新的程序文件更新到本地

③ commit:  把本地文件提交给svn仓库

以上update、commit要被频繁执行

 

多人对同一个仓库进行操作的时候,通过update指令可以把彼此commit给仓库的文件更新到自己工作目录

 

 

 

3. 目录和文件的提交

一个新目录创建好了,该目录内部还有新的程序文件  

那么,只有该新目录提交完毕了,内部的新程序文件才允许提交

规律:一个文件只有上级目录已经被commit操作后,该文件本身才可以被commit操作

 

4. 一键commit同时提交多个文件

新文件被提交给svn仓库的时候,需要给文件本身点击:右键---->add/commit

如果一段时间之内 修改、新增 的文件很多,并且这些文件还不在同一级目录下

则每个文件都 右键--->add/commit 等操作就很麻烦

 

其是可以简化操作:

可以在目录的空白处,直接执行右键--->commit动作,svn会把当前目录及内部深层目录 所有需要提交的文件都罗列出来,供我们选择提交。

(新文件的addcommit操作此时会合并执行)

 

 

 

 

 

 

 

一键commit提交,会把新文件的add和commit指令集成起来

 

 

5. 更换svn主机名地址

在实际生产中,仓库的主机名发生变化(一般都是ip地址发生变化),则客户端工作目录的主机名也需要跟着变化

 

例如:

 

① 删除.svn(svn仓库断开联系),重新与指定主机名地址checkout联系

svn://localhost/shop  更改为 svn://127.0.0.1/shop

 

 

 

 

② 通过客户端软件实现

 svn://127.0.0.1/shop  更改为svn://localhost/shop

在工作目录空白处点击 右键-->svn-->relocate

 

 

 

 

 

6. 同一个文件的不同版本切换

通过svn可以给一个文件在不同的时间标记当时对应的内容状态信息,

这样随时可以查看文件不同的状态内容

可以清楚地看到文件内容的演变过程

(注意:文件切换到低版本查看完毕就再切换到最高版本,低版本是不能再对文件进行commit提交动作的)


通过 右键-->svn-->show log  查看一个文件的全部版本:

 

 

 

右键-->svn-->update to revision,切换查看文件其他版本内容

 

 

 

 

 

 

 

 

 

 

 

四.冲突Conflicted(重点)

1. 什么是冲突

冲突(conflicted)

多人在同一时间对同一个程序文件进行编辑后提交的时候,后提交的文件要覆盖先提交文件的现象称为“冲突”

 

 

 

 

 

 

 

 

 

 

 

 

上图:

tom9:00register.php文件进行开发

      10:00对开发好的文件进行提交

jim9:20register.php文件进行开发

      9:40对开发的文件进行提交

 

   那么,在1000以后服务器只给体现tom开发的功能,后上传的文件会把先上传的同名文件给覆盖了

 

上边文件覆盖出现的原因是项目时间周期短造成的。

如果大家不在同一个时间段对同一个文件开发,就没有覆盖情况了

例如:tom:9:00-----10:00开发     jim 10:10-----11:10开发

但是这样又造成开发速度慢、项目周期时间长的问题

 

 

冲突解决方案:

① 令牌方式解决

vss软件就采取这样的思路,给每个程序文件都分配一个令牌,只有拿到令牌的开发者才可以对这个文件进行修改,修改完毕再还令牌。

令牌的原理:同一个文件同一个时间点只能有一个人开发

② 版本解决:

svn的解决方案

只有本地的版本    服务器版本号码一致,才允许提交

    本地版本 小于 服务器版本 则禁止提交

 

2. 冲突具体形式与解决

1.1大家修改的代码不在同一处

冲突解决:执行update指令,使得服务器新版本与本地旧版本做融合操作,之后再继续commit提交即可

 

开启(超级管理员权限打开dos窗口)服务:

 

 

 

tomjim维护一个register.php程序文件:

 

 

 

 


tomjim对同一个文件进行编辑:

 

 

 

 

 

jim对修改文件先进行提交,版本号码由12上升为13

tom对文件进行提交时,失败了,具体如下:

 

 

tom执行update指令,更新升级本地文件版本号的时候,会使得服务器最新版本文件内容与本地文件做“融合”操作,非覆盖

如下图,执行update的效果:

 


新旧版本融合效果如下:

 

 

 

之后继续提交文件即可:

 

 

1.2 大家修改的代码同一处()

冲突解决:执行update指令,使得服务器新版本与本地旧版本做融合操作,之后做适当修改,再继续commit提交即可

大家修改的代码同一处冲突才是最本质的冲突

 

 

tomjim对同一行(9)代码进行开发:

 

 

 

 

 

之后jim对文件进行commit提交:

 

 

tom对文件commit操作失败:

 

 

 

 

之后发现tom的本地文件多了几个:

 

regsiter.php.mine: tom本地文件在update之前的效果

regsiter.php.r14: 是文件14版本的效果

regsiter.php.r15: 是文件15版本的效果

以上3个文件理解后直接删除,否则影响本文件commit提交

 

 

update操作后,新版本与本地文件做合并效果:

 

给合并内容做整合:

 

 

之后对regsiter.php文件继续提交即可:

 

 

五.账号和权限

1. 先关闭“匿名”账号

 

 

 

上图,给shop仓库关闭匿名账号

注意要设置anon-access=none,不要在前边设置#,否则我们查看具体文件的show log日志信息就会出问题,这个svn本身的一个bug

 

 

接着,在后边把两个辅助配置文件进行引入:

 

 

2. 设置账号

给当前仓库创建两个账号:

 

 

3. 给账号设置权限

3.1 给具体用户设置权限

 

上图的权限:

r: 读权限,代表可以从svn仓库update更新文件

w:写权限,代表本地可以给svn仓库commit提交文件

 

svnapache不同,配置文件修改了无需重启服务,svn每次运行的时候都会重新加载配置文件

 

此时,再进行svn操作的时候,提示我们输入用户名密码

 

 

 

jim用户只拥有r读的权限,其试图修改文件并commit提交,结果如下提示:

 

 

 

3.2 给一个组别设置权限

有的时候一个项目组里边有多个开发人员(例如20),这些人的操作权限都一致

为了分配权限比较方便、快捷,就给这些开发人员设置到一个组别里边,直接给组别设置操作svn的权限,组别的权限就等于开发人员的权限

 

有一个操作权限都一致的团队账号:

 

 

 

 

 

3.3 开放限制目录权限

为了安全考虑,给某些人员分配权限的时候,就只给其开放某个文件目录的操作权限,称为开放限制目录权限。

 

开发项目时间短、任务多,就要请外包团队进行开发,给外包团队分配的操作权限要有所限制,例如:只让他们开发某个目录里边的文件,其他目录/文件禁止查看、禁止操作。

 

创建三个外包人员账号:

 

使得上图的外包人员只能操作根目录里边的Video文件目录

 

 

操作步骤:

① 创建限制目录Video并提交给svn仓库

 

② 给外部团队 设置 操作权限

 

 

③ 外包团队在本地工作目录 与 仓库的限制目录进行联系

 

 

上图:具体是与shop仓库的Video目录进行联系

 

④ 外包团队 给限制目录进行文件开发并commit提交

 

wai3用户开发了3个文件:

 

 

 

tom用户如果需要查看外包团队的工作情况,需要开放对应权限(# *=)

 

 

 

 

六.设置开机启动项服务

 

 

超级管理员权限打开dos命令行:

 

 

服务创建成功:

 

 

也可以删除服务:

 

 

 

七.svn使用细节

1. 查看工作情况

领导可以通过svn查看大家的工作情况

 

操作:右键-->svn-->show log

 

 

2. 清除缓存

登陆使用svn的时候,如果系统记住用户名、密码了,就不能更换其他账号

可以通过: 右键-->svn-->settings-->saved data  清除各种(账号)缓存

 

 

 

 

3. 关闭匿名账号

 

使用#号方式关闭匿名账号会影响 show log 文件维护日志的查看,具体如下:

 

 

 

 

4. bug开发

svn可以保证大家开发的代码都必须遵守严格的标准,如果哪个人把代码写错了,通过svn可以追查出来,包括一个.点或空格的微小错误

 

查看文件当前内容 之前版本内容的差异:

 

 

下图,可以轻而易举地看到文件的变化差异效果:

 

 

通过 show log可以看到是哪个用户把文件给改坏了:

 

 

 

八.hooks钩子

通过svn开发的项目代码文件,最终需要上传给web服务器才可以运行,其中hooks钩子技术可以帮组我们把文件从svn仓库自动同步web服务器

 

 

 

本地工作目录:E:/www/tom

svn仓库:D:/svn/app/shop

web服务器:D:/web/shop

 

① 创建apache虚拟主机

 

 

 

之后重启apache

 

hosts文件做域名解析:

 

 

② 给web服务区更新svn仓库文件

通过一个任意账号(只读账号即可)对文件进行更新

 

③ 设置hooks钩子

 

hooks目录制作一个bat批处理文件(每次有文件commit提交给svn仓库后,该文件要自动执行)

 

 

 

post-commit.bat文件里边设置如下内容:

意思是svn仓库每次有文件被commit提交,那么再web服务器里边都要把该文件给update更新出来

 

 

④ 测试查看效果

 

 

 

 

 

 

 

 

 

 

 

. 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应用里边:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 通过svnbae代码进行维护

 

获取到的svn主机名地址:

https://svn.duapp.com/appidfr7dk8qylo

用户名:baidu账号

密码:baidu账号密码

 

创建本地svn工作目录:

 

 

之后工作目录与svn仓库取得联系:

 

 

 

 

 

 

 

svn仓库上传文件:

 

 

 

bae操作界面,如果有新文件被commit提交,其会有提示,之后我们还有点击“快捷发布”,以便文件可以同步到web服务器供访问:

 

 

文件发布完毕页面又恢复为正常状态:

 

 

 

此时在浏览器里边就可以把刚刚commit的文件给访问出来:

 

svn://127.0.0.1/shop

标签:简化   分布式   index   内容   应用程序   问号   book   界面   一个   

原文地址:http://www.cnblogs.com/lyhing/p/7414198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!