版本控制之svn

时间:2022-01-17 08:57:54

一、svn(后悔药)

1、介绍

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

 

 

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

 

类似软件:csvvsssvngit(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的使用

1svn的三大指令

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

 

 

5svn常见图标

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

win7解决办法:

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

 版本控制之svn

win8win10解决办法:

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

 

版本控制之svn

 

 版本控制之svn

 

 

 

 

 

2)常见图标说明:

常规图标:

 版本控制之svn

 

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

 

修改图标:

 版本控制之svn

 

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

 

无版本控制图标

 版本控制之svn

 

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

 

忽略图标

 版本控制之svn

 

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

忽略一般有两种:

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

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

 

冲突的图标

 版本控制之svn

 

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

 

 

 

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

说明:

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

 

这里以两个用户分别是dashencainiao用户为例.

 版本控制之svn

 

 

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

 版本控制之svn

 

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

 

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

 版本控制之svn

 

提交会发现有冲突:

 版本控制之svn

版本控制之svn

 

 

 

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

 版本控制之svn

 

 

文件说明:

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

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

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

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

 

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

 

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

 

 

 

 

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

使用到版本回退的场景:

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

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

具体步骤:

右键更新至版本:

 版本控制之svn

 

点击日志来找回:

 版本控制之svn

 

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

 版本控制之svn

版本控制之svn

 

 

 

 

七、update更新注意要点

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

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

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

 

 

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

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

 版本控制之svn

 

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

 

 

 

 

 

 

 

 

 

 

 

 

九、svn中部署多仓库

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

 版本控制之svn

 

 

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

 

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

 版本控制之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

 

 

3cmd命令的批处理

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

 版本控制之svn

 

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

 版本控制之svn

 

 

十三、svn中的钩子

1、介绍

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

 

 

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

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文件夹

十五、Svn复习重点

代码冲突+版本回退+仓库代码同步web(钩子)