svn版本控制

Easter79
• 阅读 676

一、svn(后悔药)

1、介绍

SVN全名Subversion,即版本控制系统。它将数据放置在一个中央仓库(repository)中。这个仓库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把数据恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括了程序源码。

svn=代码版本控制系统+备份服务器

类似软件:csv、vss、svn、git(github)

csv:最早期的版本控制系统,是svn的前身,现已被svn替代

vss:微软的产品,主要对.net代码进行版本控制

svn:现在企业使用最多的版本控制系统

git:开始主要是用于管理linux内核的,由李纳斯发明

外国的代码托管网站-github: https://github.com 

中国代码托管网站-码云: https://git.oschina.net/   

码市:https://coding.net/ 

 svn版本控制

二、svn软件的安装

服务端下载地址:  https://www.visualsvn.com/visualsvn/download/  

客户端下载地址: https://tortoisesvn.net/downloads.html   

1、安装服务端

 svn版本控制

 svn版本控制

svn版本控制

svn版本控制

测试有没有安装成功,直接win+R,输入svn即可,如果有以下提示说明安装成功:

 svn版本控制

解决办法:找到环境变量path选项,鼠标点进去移出来点击确定即可,不需要做任何的更改。在重新打开命令行进行输入svn进行测试

 svn版本控制

2、安装客户端

安装客户端的时候,注意自己电脑的系统位数是32还是64,安装客户端之后在安装系统对应位数的汉化包(可选)

 svn版本控制

svn版本控制

svn版本控制

检出有没有安装成功,鼠标右键多出以下两个选项即可:

 svn版本控制

有需要的同学可以安装对应位数的汉化包:

 svn版本控制

设置中文:

 svn版本控制

三.svn的使用

1、svn的三大指令

l checkout(检出) :用于与svn服务器建立连接,输入用户名和密码,获取代码到本地目录(第一次连接使用)

l commit:提交本地代码到svn服务器

l update:把svn服务器上面的代码更新下来

2、svn使用图解

 svn版本控制

提示:以后去公司很少部署svn服务端,我们只需要在自己的电脑中安装客户端即可,接着技术主管或者经理给我们分配一个账号和svn服务器的地址告诉我们,然后开始开发。

四、部署单仓库(技术总监)

注意:在我们的svn中项目不叫项目文件夹,我们把项目称之为”仓库”

1、部署单仓库的步骤

第一步:在任意的盘符位置,建立一个项目文件夹(D:/app/blog)

 svn版本控制

第二步:把上面的项目文件夹变为仓库

svnadmin  create  D:\app\blog

 svn版本控制

第三步:监管上面的仓库

svnserve -d -r D:\app\blog

-d :后台监管

-r:监管的目录(仓库的目录)

 svn版本控制

2、连接svn服务器

第一步:任意的建立一个检出目录,右键检出checkout或者版本库浏览器

区别:checkout 会把仓库中的所有代码都检出到指定的目录

   版本库浏览器:可以浏览仓库中的所有的文件,有选择性检出指定的某个文件

 svn版本控制

输入svn服务器的地址:svn://127.0.0.1

 svn版本控制

第二步:检出代码

 svn版本控制

 svn版本控制

svn版本控制

如果版本号为0,可以说明这是一个新仓库。检出之后会在当前的检出目录多一个隐藏文件夹.svn,就说明已经与svn服务器建立关联了。

 svn版本控制

3、上传代码到svn服务器

第一步:任意的在检出目录添加一些文件,进行鼠标右键提交

 svn版本控制

 第二步:填写提交时的备注信息

 svn版本控制

提交后出现无权限:

 svn版本控制

注意:只要是新建立的仓库,第一次提交都是没有权限,我们可以写改这个仓库的配置文件进行权限控制。

4、单仓库的权限(用户名和密码)

细分两种:

1、匿名用户提交(不需要用户名和密码也可以提交,但是不安全,一般个人使用)

2、允许授权用户提交(需要用户名和密码,安全一点)

4-1、匿名用户提交

第一步:打开仓库的conf目录,如下:

 svn版本控制

匿名用户只需要修改svnserve配置文件即可:

 svn版本控制

不需要重新监管,保存会立刻生效。

再次进行提交成功:

 svn版本控制

每次成功提交都会产生一个新的版本号。

4-2、授权用户的权限配置

第一步:修改仓库cong目录下面的svnserve文件:

 svn版本控制

第二步:修改passwd文件,给当前仓库添加一些用户和用户对应的密码

格式:用户名 = 密码

 svn版本控制

注意: 用户名 = 密码;

提示:在linux中如果有类似此文件,需要给其设置严格的读取权限。

第三步:修改authz文件,配置用户的权限

 svn版本控制

因为cainiao用户对core目录只有r权限,没有w权限,也就是说只能更新,但是不能提交,会把以下的错误:

 svn版本控制

5、svn常见图标

(1)****图标异常(没有出现)的解决办法:

win7解决办法:

底部启动任务管理器,找到进程选项,找到进程名explorer.exe结束掉,然后再找到文件选项新建刚才结束的进程explorer.exe,如下图所示:

 svn版本控制

win8,win10解决办法:

需要修改注册表中的某些选项,参考下面的图片:

svn版本控制

svn版本控制

(2)常见图标说明:

常规图标:

 svn版本控制

出现此图标,说明此文件中的内容与svn服务器文件中的内容一样。

修改图标:

 svn版本控制

当我们对本地的某个文件进行修改,导致与svn服务器上面的对应的文件的内容不一致就会出现此图标。

无版本控制图标

 svn版本控制

说明此文件没有与svn服务器建立关联

忽略图标

 svn版本控制

当我们有些文件不想提交到svn服务器或者没有必要提交,我们可以把这些文件设置为忽略即可,那么提交的时候这些文件就不会出现在提交的文件变更列表中。

忽略一般有两种:

忽略一个具体的文件:1.jpg

忽略某一类的文件:*.jpg

冲突的图标

 svn版本控制

尤其是团队开发的时候,多个开发人员对同一个文件的相同行代码都进行了修改,那么后者提交的会覆盖前者提交的,但是svn不会覆盖,会提示我们解决冲突。

五、【重点】svn代码冲突的解决

说明:

尤其是团队开发的时候,多个开发人员对同一个文件的相同行代码都进行了修改,那么后者提交的会覆盖前者提交的,但是svn不会覆盖,会提示此文件冲突,需要我们手动去解决冲突。

这里以两个用户分别是dashen和cainiao用户为例.

 svn版本控制

dashen用户先对1.php文件进行修改然后提交:

 svn版本控制

dashen用户修改第5行和第6代码之后,进行提交,也就是现在svn服务器中的1.php的文件内容应该dashen提交的。

cainiao用户提交之前,对1.php文件的第5和第6行代码也进行了修改,修改如下:

 svn版本控制

提交会发现有冲突:

 svn版本控制

svn版本控制

解决办法:点击上面的升级。或者是更新都可以,出现如下文件:

 svn版本控制

文件说明:

文件名.mine :当前用户准备要提交的文件

文件名.r8(8代表版本号):两者未提交之前,服务器上面最新的文件

文件名.r9(9代表版本号):代表前一个用户提交的服务器上面最新的文件

黄色感叹号的文件:把两者有冲突的代码部分整合在一起。

解决办法:把除开黄色感叹号的以外的三个文件给删除掉,在整合黄色的文件,再次进行提交即可。

整合冲突代码的时候,程序员(工程师)之前应该彼此商量一下,使用谁的代码。不要轻易覆盖人家的代码。

**六、svn中的版本回退(后悔药)**[重点]

使用到版本回退的场景:

①不小心删除了一个文件,并且提交了,这时候可以通过提交的日志来找回。

②找回之前所写过代码,这时候也可以通过提交的日志来找回。

具体步骤:

右键更新至版本:

 svn版本控制

点击日志来找回:

 svn版本控制

第二步:找到之前提交代码的日志信息,进行找回

 svn版本控制

svn版本控制

七、update更新注意要点

l 当本地文件没有变动,服务器文件改动的时候,更新会从服务器取文件覆盖当前文件。

l 当本地文件有改动,服务器文件没有改动的话,svn端的不会覆盖本地的。

l 当本地文件有改动,服务器文件有改动的话,如果改动的部分不冲突,就会合并文件到本地,如果有冲突的话,需要自己手动解决冲突,然后再提交。

八、svn的存储机制(了解即可)

svn存储机制是采用差异存储法

 svn版本控制

svn每次提交的时候,都会和之前的版本做个对比,把不同的地方,单独使用一个小区块来存储,节省磁盘空间。

九、svn中部署多仓库

第一步:任意的目录(D:/app)建立多个项目文件夹

 svn版本控制

第二步:把上面三个项目文件夹变为仓库

因为上面的blog已经是仓库了,只需要把ios和android项目文件夹变为仓库即可:

 svn版本控制

第三步:监管三个仓库的父目录(D:/app)

 svn版本控制

获取多仓库中各个仓库中的项目代码:

svn://ip/仓库名

如获取blog项目代码: svn://127.0.0.1/blog

如获取android项目代码: svn://127.0.0.1/android

如获取ios项目代码: svn://127.0.0.1/ios

 svn版本控制

特别注意:svn://127.0.0.1 这种地址形式是针对于单仓库

十、多仓库的权限设置

这里有三个仓库,以其中一个blog仓库为例,做权限控制:

 svn版本控制

第一步:打开blog仓库的conf目录,修改svnserve文件:

 svn版本控制

第二步:加用户名和密码,修改passwd文件

 svn版本控制

第三步:修改authz文件,配置权限

 svn版本控制

十一、SVN其他功能

1、清除用户用户名和密码

 svn版本控制

2、export指令****(相当于拷贝项目,没有隐藏文件.svn,不受版本控制)

 svn版本控制

导出后如下所示:不再有.svn的隐藏文件夹,说明没有与svn服务器建立关联。

 svn版本控制

3、更改svn服务器地址

 svn版本控制

svn版本控制

十二、svn注册成window系统服务

1、创建服务指令如下:

快捷键win+r:以管理员的方式执行以下命令:

sc create SVNService binpath= "D:\svn\server\bin\svnserve.exe --service -r D:\app" start= auto

特别注意:

binpath=后面有个空格 start=后面有个空格(只能有一个空格)

其中SVNService 是服务的名称,此服务名可以自己自定义

 svn版本控制

svn版本控制

特别注意:如果以系统服务服务的方式去监管仓库,就不可以使用之前黑窗口的方式去监管。(一山不容二虎)

2、服务的控制指令

关闭、开启、重启服务:

net   stop|start|restart  服务名 (如开启svn服务:net start SVNService)

删除服务:

sc  delete  服务名 (如删除svn服务:sc  delete  SVNService)

 svn版本控制

3、cmd命令的批处理

把一些原本在黑窗口执行的命令,我们可以把这些命令写在文件名后缀bat的文件中。

 svn版本控制

注意:以上bat文件需要以管理员的方式去执行。

 svn版本控制

十三、svn中的钩子

1、介绍

所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改。每个钩子都会被告知足够多的信息,包括那是什么事件,所操作的对象,和触发事件的用户名。通过钩子的输出或返回状态,钩子程序能让工作继续、停止或是以某种方式挂起。

说的简单点,我们可以利用钩子在提交前或者是提交后做一些操作。如:

l 利用提交前的钩子让用户在提交代码前强制用户必须填写备注信息。

l 利用提交后的钩子把svn仓库代码实时同步到网站web目录(重点掌握)

2、钩子的种类

 svn版本控制

l 利用提交前的钩子让用户在提交代码前强制用户必须填写备注信息。

l 利用提交后的钩子把svn仓库代码实时同步到网站web目录(重点掌握)

3、钩子实战[重点]

l 利用提交后的钩子把svn仓库代码实时同步到网站web目录

 svn版本控制

明确几点:

web站点:D:\server\apache\htdocs\blog

检出目录:C:\Users\oj\Desktop\blog

第一步:想让代码实时同步到web站点,必须让web站点与svn服务器的对应的仓库建立关联,只需要有一个.svn隐藏文件夹即可。

 svn版本控制

第二步:去仓库的hook钩子目录,把post-commit.tmpl复制一份到当前目录并改名为post-commit.bat。之前的内容全部去掉

在post-commit.bat的文件内容如下:

 svn版本控制

@echo off  

SET REPOS=%1

SET REV=%2

SET DIR=%REPOS%/hooks

SET PATH=%PATH%

SET WEB_DIR=D:\server\apache\htdocs\blog

svn update %WEB_DIR%    --username dashen --password dashen111

l 利用提交前的钩子让用户在提交代码前强制用户必须填写备注信息。

第二步:去仓库的hook钩子目录,把pre-commit.tmpl复制一份到当前目录并改名为pre-commit.bat。

pre-commit.bat的文件内容如下:

 svn版本控制

svn版本控制

十四、局域网访问别人电脑

前提:对方的电脑安装了svn服务器,并且创建了仓库;对方电脑关闭了防火墙;知道对方仓库的账号与密码

1.电脑任意位置创建一个文件夹

 svn版本控制

2.鼠标右击--->版本库浏览器

 svn版本控制

3.输入url

 svn版本控制

4.弹出输入密码框

5.输入成功更新数据到shop文件夹

..

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k