【svn使用教程】

目录

  • 简介和安装
  • svn基本操作
  • 撤销和修复
  • 添加忽略
  • 解决冲突
  • 分支
  • 代码暂存
  • 复杂代码合并

简介和安装

一、svn是一个代码版本管理工具,他能记住你每次修改,可以查看每次的修改记录,恢复到任何历史版本,恢复已经删除的文件
二、svn与git相比的优势:

  1. 使用简单,上手快
  2. 目录级权限控制,企业安全必备
  3. 子目录checkout,减少不必要的文件检出

三、主要应用:

  1. 开发人员用来做代码的版本管理
  2. 用来存储一些重要的文件,比如合同,这样你就能看到合同的历史修改记录
  3. 公司内部文件共享,并且能够按照目录划分权限

四、首先你要有个svn仓库,即svn服务端,你才能用svn客户端操作svn仓库,svn仓库推荐使用svn桶svnbucket.com
五、安装svn客户端:window安装TortoiseSVN,iOS安装cornstone
六、在svnbucket.com上面会有svn教程及安装教程(此处不赘述)
七、文件绿勾代表本地文件与服务器端的文件是同步的,红色感叹号表示本地文件做了修改但没有和服务器端同步,需要commit

svn基本操作

一、检出checkout
二、新增add
三、提交commit:提交的时候可以双击文件查看改动的地方
【svn使用教程】_第1张图片
四、更新update
五、查看历史记录
【svn使用教程】_第2张图片
可以查看所有的提交记录
【svn使用教程】_第3张图片
可以双击文件查看提交的文件和原文件之间改动的地方,如果没有原文件,那就是查看提交的文件

在每次提交前进行更新,可以避免冲突

撤销和修复

一、撤销本地修改:假如你在本地对文件进行了修改,并且修改错了,修改后的文件还没有上传到服务器端,如何撤销修改?

  1. 方法一:右键修改了的文件选择【svn还原】
    【svn使用教程】_第4张图片
  2. 方法二:在commit时,右击文件选择【svn还原】
    【svn使用教程】_第5张图片
    二、撤销已提交的内容:假如你对文件进行了修改并上传,后来发现修改错了,如何撤销修改?比如这里我将原来的100%改为1000%,450px改为4500px,注意⚠️1000%和4500px都是错误的修改
    【svn使用教程】_第6张图片
    然后将此修改commit,如何撤销此修改?
    方法:查看历史记录(操作见上一节),右击修改错了的那个版本,选择【复原此版本作出的修改】
    【svn使用教程】_第7张图片
    根据提示选择【还原】,复原后你修改了的那个文件在本地就会显示一个红色的感叹号,
    【svn使用教程】_第8张图片
    表示该文件被修改了(从错误的内容还原成了正确的内容),通过查看日志我们发现由1000%和4500px变回了100%和450px
    【svn使用教程】_第9张图片

所以我们还需要commit一下
三、恢复到指定版本:查看历史记录(操作见上一节),右击修改错了的那个版本,选择【复原到此版本】
【svn使用教程】_第10张图片
根据提示选择【还原】,复原后你修改了的那个文件在本地就会显示一个红色的感叹号,表示该文件被修改了(从错误的内容还原成了正确的内容),所以我们还需要commit一下

添加忽略

一、假如我想忽略image文件夹中的内容,右击该文件夹,选择【去除版本控制并增加到忽略列表】,选择images,
【svn使用教程】_第11张图片
然后image文件夹上会出现一个红色的叉❌,表示该文件夹已被忽略
【svn使用教程】_第12张图片
我们再提交时,会发现images中的内容都被删除了
【svn使用教程】_第13张图片
update、commit一下,❌消失
在这里插入图片描述
二、如果想要忽略一个文件,操作也一样,右击该文件,选择【添加到忽略列表】,选择想忽略的文件,这里是【添加到忽略列表】而不是【去除版本控制并增加到忽略列表】,是因为该文件还没有被svn管理,即还没有commit到服务端
【svn使用教程】_第14张图片
因为我们忽略了这个文件,所以需要commit一下,告诉服务端我忽略了一个文件
三、如果想不再忽略,可以右击选择【加入】
【svn使用教程】_第15张图片
或者选择【从忽略列表删除】
【svn使用教程】_第16张图片
四、如果你想忽略一个已经提交了的文件或文件夹,那么你可以忽略他,再提交,svn会在服务端删除你忽略的内容

个人思考:svn其实每次都是以你最新提交的内容为准,每次提交都好像是一次覆盖?(不知道是不是这样的)

解决冲突

一、什么情况容易发生冲突

  1. 多个人修改了【同一个文件的同一行】
  2. 无法进行合并的二进制文件

二、怎么避免冲突

  1. 经常update同步他人的代码
  2. 二进制文件不要多个人同时操作

三、如何解决:多个人修改了【同一个文件的同一行】引发的冲突
产生冲突后会自动生成几个文件:App.vue.mine是我修改的文档,App.vue.r7是版本7的文档,App.vue.r9是版本9的文档

  1. 方法一:右击冲突,选择【使用他们的文本解决冲突】,直接把我的丢弃,使用他们的作为正确的文本;选择【使用我的解决有冲突的文件】表示使用我的作为正确的文本,把他们的丢弃掉。
    【svn使用教程】_第17张图片
  2. 方法二:右击冲突,选择【编辑冲突】,就会来到下面这个文档中,左边是别人的文档,右边是我的文档,下面标红的地方是冲突位置,svn不知道那一行应该是什么文档
    【svn使用教程】_第18张图片
    我们经过对比后发现左边别人的文档是正确的,所以右击正确的那一行,选择【使用此文本块】
    【svn使用教程】_第19张图片
    选择了之后,下面的文档就没有红色了,点击标记为已解决,
    【svn使用教程】_第20张图片
    然后跳回到之前的界面,点击确定,解决冲突
    【svn使用教程】_第21张图片
    四、如何解决:无法进行合并的二进制文件引发的冲突
  3. 方法一:右击冲突,选择【使用他们的文本解决冲突】,直接把我的丢弃,使用他们的作为正确的文本;选择【使用我的解决有冲突的文件】表示使用我的作为正确的文本,把他们的丢弃掉。
    【svn使用教程】_第22张图片
  4. 方法二:右击冲突选择【编辑冲突】
    【svn使用教程】_第23张图片
    来到下面的界面,左边是你本地的(这个本地的是你想要用来覆盖之前的),中间是上一个版本的,右边是远程别人修改的,在这里选择你想要哪一个
    【svn使用教程】_第24张图片
    然后点击【选择】,点击【确定】解决冲突

分支

一、什么时候需要开分支:

  1. 隔离线上版本和开发版本
  2. 大功能开发,不想影响到其他人,自己独立开个分支去开发,等我们开发完了之后再合并过去

二、svn经典目录结构:

  1. trunk:主要用来存放你开发中的文件,平常我们都在trunk上开发,开发完成之后,到一个版本,我们就开一个分支出去,存储到branches中
  2. branches:
  3. tags

三、如何开分支
有一天我们在trunk上的开发已经完成了,可以上线了,我们可以开一个线上版本。首先将整个仓库checkout下来,右击trunk,选择【分支/标记】
【svn使用教程】_第25张图片
会跳转到下面这个窗口,选择要保存的路径地址为branches/存放该版本代码的文件夹名称,其中branches表示分支文件夹,此处onlinev1.0为存放该版本代码的文件夹,选择版本库中的最新版本,点击确定,就创建完分支了,在本地update一下就可以看到branches文件夹中的分支了。
【svn使用教程】_第26张图片
如果我们把分支branches/onlinev1.0、trunk单独checkout出来,以后我在trunk中修改代码并commit,不会影响onlinev1.0中的代码,这样我们可以把分支中的代码作为线上版本,只对其做线上问题的修复,但是修复了onlinev1.0中的代码,怎么同步到trunk呢?右击onlinev1.0,选择【显示日志】
【svn使用教程】_第27张图片
会来到下面这个窗口,选中你要合并的提交记录(支持多选),然后右击,选择【合并版本到】,
【svn使用教程】_第28张图片
会出现下面的界面,选择你要合并的文件夹
【svn使用教程】_第29张图片
三、切换分支,现在我们新开了一个分支onlinev2.0(步骤如前,不再赘述),不用将它checkout出来,可以直接在onlinev1.0上切换分支,右击onlinev1.0选择【切换】
【svn使用教程】_第30张图片
会出现下面的界面,在路径中通过下拉选择或者…选择你要切换到的那个分支
【svn使用教程】_第31张图片
切换成功后,本地onlinev1.0这个文件夹名是不会变的,里面的代码变成了onlinev2.0的

代码暂存

一、暂存的作用:

  1. 代码改了很多,突然需要紧急修复一个bug,但是代码还没写完,不能提交
  2. 代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交

以上两种情况,我们可以把代码暂存起来,等工作完成再恢复之前写的代码。
二、如何暂存:App.vue和main.js里面有我们写了一部分的代码,右击文档空白处,选择【shelve】
【svn使用教程】_第32张图片
会出现下面的窗口,在path中勾选要暂存的文件,下面那个框中写暂存的这批文件的名字,此处命名为feature1,log message是日志信息,shelve按钮代表暂存代码后会把本地修改的代码撤销掉,checkpoint按钮代表暂存代码后本地的修改还会保留
【svn使用教程】_第33张图片
点击checkpoint按钮后发现,本地修改的代码并没有被撤销
【svn使用教程】_第34张图片
点击shelve按钮后发现,本地修改的代码被撤销了
【svn使用教程】_第35张图片
恢复暂存的代码:右击空白处选择【unshelve】
【svn使用教程】_第36张图片
会出现下面的窗口,在name下拉框中选择你想要恢复的暂存代码的名字,version下拉框中选择你想要修复哪个版本的暂存代码,
【svn使用教程】_第37张图片
点击apply即可恢复暂存的代码【svn使用教程】_第38张图片

复杂代码合并

代码比较简单时,可以使用前面说的合并来合并代码,但是如果我们在trunk开发新功能,改了很多代码,分支是线上版本,修复了很多bug,两个分支的代码时间久了差异很大,无法直接分支合并或者指定提交记录合并代码,此时可以使用beyondcompare。

你可能感兴趣的:(工具类,svn,服务器,运维)