svn使用

svn学习记录


SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

安装svn服务器

这里下载

  • 选择和合适的版本下载

1574748678978

我的当前系统是win,所以选择VisualSVN,如果是linux,请根据官方提示安装

  • 一路按照默认的即可

其中有一步,选择版本

第一个是用于个人和小型团队,免费可商用

第二个是加强版

1574747775192

我们选择第一个即可

创建版本库

  • 打开 VisualSVN Server Manager

  • Repositories右键-》Create New Repository

    1574748980670

  • 储存库(Repository)类型

    1574749132187

  • 3
    7

    6

    点击定制权限:

    输入用户名:redmine,密码:111111 创建成功:

5

4

请注意此处的访问地址为:http://xyuser-Thinkpad/svn/redmine ,请将【xyuser-Thinkpad】修改为实际的IP地址,然后给普通用户使用。

svn服务器这边就搞定了,然后我们就可以用各种客户端工具来管理我们的项目(通过:http://xyuser-Thinkpad/svn/redmine 这个地址)

eclipse的svn插件安装

安装很方便,有离线和在线安装的方式

这里采用离线的(提前下载好安装包 site-1.8.22)

  1. 解压site-1.8.22(svn包).zip

  2. 将解压出的文件夹当中的features和plugins两件文件夹拷贝到Eclipse的dropins目录下,重启eclipse

然后就ok了

从svn检出项目

工作的时候,要从svn中央服务器上检出代码,此时我们应该怎么操作呢?

  • eclipse里点击 File -》 import

    找到 SVN下的:从SVN检出项目

1574752451863

  • 选择资源库

    勾选:使用现有的资源库位置

    1574753728688

    选中一个资源库,然后点击 next

    注意:如果还没有资源库,那么请 选择: 创建新的资源库位置

  • 选择资源库里要导入的项目

    1574753938372

    点击next

  • 选择导入到的位置

    1574754062211

    项目名称可以和仓库中的不同

    点击FInish ,就OK

我们看到第一个就是我们需要的项目

1574755422439

导入成功

SVN基础操作介绍

提交操作

在我们写完代码后,文件上会标出1574756030825

1574756149358

需要我们提交到服务器上,此时的操作应该是

项目上右键 --》 选择:Team --》点击:提交

1574756260643

出现如下界面

1574756465100

第一个是提交内容,第一行应该概括说明变更情况,然后空一行,再第三行详细描述变更

第二个是要提交哪些文件(这里可以看到本地所有的修改情况,勾选上要提交文件)

ps:可以一次全部提交所有修改,如果修改比较多,可以分多次提交

查看SVN提交历史

项目上右键 --》 选择:Team --》点击:显示资源历史记录

如果是没有汉化的应该是:show History

1574756935666

会出现窗口如下:

1574757055151

选择一个提交历史,在下方可以查看本次提交更改了哪些文件

双击受影响的文件,即可查看具体内容

注意:我们上面的操作是在项目上右键的,所以查看的是整个项目的提交历史,如果我们在某一个文件或文件夹AAA上显示提交历史,那么查看的就是AAA的提交历史

对比代码

关键是要定位要对比哪个文件?这个文件的哪两个版本

从提交历史对比

  • 先进行查看提交历史的操作

  • 文件上右键,选择compare

1574757441078

  • 出现选择窗口

1574757504359

  • 我们选择要对比的代码版本,点击ok

1574757577972

此时,对比的就是 15版本的和14版本的

还原操作

当我们写了一段时间,发现写错了,想改回去可是那么修改我记不住啊,这可怎么办?

没关系,svn会帮你记住所有的提交历史,只需要操作几下就可以完美还原

  • 项目上右键 --》 选择Team --》 点击还原

1574758867274

  • 弹出还原窗口

选择我们要还原的文件,双击文件还可以对比一下我们究竟是改动了哪里哦

1574759037421

这样就OK了

我们看到,成功了之后,svn控制台有一条:revert

1574759128790

SVN回退版本

  • 打开SVN提交历史
  • 选择要回退到的版本,右键点击:获取内容

1574759643194

如果没有获取内容选项,选择 switch to Revision xx 也可以

SVN更新和同步资源库(推荐用同步资源库操作)

这两个放一块说

在每次提交前,先更新或者同步一下子,如果有冲突就要解决冲突

还是老地方Team里边,直接上图

111

对于更新操作若有冲突是下面这样子的

1574786065773

我的是什么,新版本是什么,都会有标记

java代码里塞进来会报错,可能html里不会有报错(即不明显)

对于同步资源库操作则会有专门的界面告诉你哪里不同(明显,推荐这种方式)

1574786264024

eclipse自带的还原

  • 项目上右键 --》 Team --》 点击 show Local History

1574759459062

  • 我们点击下方的几个文件,可以切换版本

1574759364418

SVN中提交、更新、资源库同步都会做些什么?

提交:是用本地文件覆盖服务器的文件,只有提交会导致服务器上发生变化
更新:只是把服务器上最新版本下载到客户端,规则如下:
1、如果你本地的某个文件没有修改过,而服务器上的这个文件别人已经提交过新版本,那么会用服务器上最新的文件覆盖你本地的文件;
2、如果你本地的某个文件你修改过了还没有提交,服务器端的这个文件还没被别人改过,那么对你本地的这个文件没有任何影响;
3、如果你本地的某个文件你修改过了还没有提交,服务器端的这个文件已经被别人改过,那么会提示你发生冲突,会将服务器上最新版文件、你新修改的文件、发生分歧前的那个版本的文件都存放到你的本地
资源库同步:就是看你本地和服务器的版本之间差异的。你直接用更新,有时会出现冲突,会干掉自己的代码。资源库同步的目的就是让你知道那个文件有冲突,然后有选择的操作。

SVN代码提交合并系列问题

svn是团队协作的工具,自然会涉及到与其他人一起合作写代码,需要我们知道如何协作,下面是一些可能的场景

场景1:搭档A新增某文件,搭档B同步下载此文件

假设 :

A 新增了文件 IndexController.java,然后提交成功

其他人 B 想要看到 A 的提交该如何操作呢?

答:执行更新操作

文件会被下载

场景2:搭档A 修改某文件,搭档B同步 更新此文件

假设 :

A 修改了文件 IndexController.java,然后提交成功

其他人 B 想要看到 A 的提交的修改该如何操作呢?

答:执行更新操作

文件会被更新

场景3:搭档A删除某文件,搭档B同步删除此文件

假设 :

A 删除了文件 IndexController.java,然后提交成功

其他人 B 想要看到 A 的提交的删除该如何操作呢?

答:执行更新操作

本地文件会被删除

场景4:搭档A修改某文件,搭档B也修改了此文件,但A与B并未修改同一行代码

假设 :

A 修改了文件 IndexController.java,的第10行,然后提交成功

B 修改了文件 IndexController.java,的第12行,然后提交,因为有冲突,失败

答:

B此时要解决冲突

解决方案是 将 A 的修改纳入B(保留A的代码,同时增加B自己的代码)

冲突解决完后,就可以正常提交


下面是一个具体的实例:

A和B都对同一个文件 RedisConfig进行操作

A 增加一行 int a = 10

1574780971505

A 提交修改

1574781103030

B 增加一行 int b = 10

1574781020652

紧接着提交

1574781230685

发现提交失败,错误如下

1574781270220

尝试同步资源库(项目右键-》Team -》同步资源库)

然后在弹出的对话框中点击切换(这是在问我们,要不要切换到 Synchronize视图下)

Yes

1574781638400

我们可以勾选上Remember来让eclipse为我们自动执行切换

接着会出现下面的

1574781765429

注意看哦,项目上回有红色的小圆点,代表有冲突,需要我们解决

解决冲突的方案就是,把 int a = 10; int b = 20;都保留(因为这可是别人写的,不能乱动哦!)

鼠标放到中间的<那里,发现会提示我们:把右边(别人的)的改变拷贝到左边(我们的)

1574782014270

我们点击,拷贝,发现就欧克了

1574782228726

接着我们标记为合并

文件上右键 --》 标记为合并

1574782315689

然后,我们看到,文件的状态就变了

1574782378587

最后,我们再次尝试提交更改==》提交更改成功

这就是本场景下的冲突解决方案

关键字:保留修改

场景5:搭档A修改了某文件,搭档B也修改了此文件,A与B修改的是同一行代码,产生了冲突

假设 :

A 修改了文件 IndexController.java,的第10行,然后提交成功

B 修改了文件 IndexController.java,的第10行且与A的不同,然后提交,因为有冲突,失败

答:

B此时要解决冲突

解决方案是 B 要去找 A 商量,到底谁对谁错,该提交什么样的 代码(A和B沟通后,B提交正确代码)

冲突解决完后,就可以正常提交


实例:

A和B都对同一个文件 RedisConfig进行操作

A 修改 b = 3000,然后已经提交了

随后,B 在 未更新的情况下,修改 b = 1 ,此时提交有冲突,会失败

1574783152161

然后,B 在失败后 尝试 同步资源库 ,查看冲突

1574783333031

B 去找到 和 他有冲突的人,根据情况,协商确认 最后 b 究竟等于 几

假设最后两人沟通,确认 b 此时应该等于 100 ,那么,B 将他代码里 的值修改为 100 后

标记为合并(这时冲突就解决了,可以正常提交)

提交,本次修改完成

(参考场景5,方式基本一致)

关键字:协商保留正确结果

每次提交,应该是最新版本

不小心删除了一个文件怎么办?

我们模拟一下:新建一个A,提交A, 接着删除A,最后提交删除A的操作

如何找回A?

显示历史记录

1574754746635

看到下面受影响的文件,有记录

双击记录

1574783878057

打开,看到就是我们刚刚删掉的文件内容

服务器上找不回来,(历史记录里)

admin右键,

1574783975866

在文件上,可以看 本地的历史(eclipse自带的版本控制)

1574784067420

1574784140365

show Local History 和 显示资源历史(show History)

一个是eclipse自带的,另一个是svn的历史记录

!!!SVN 操作速查!!!!

文字描述:

  • 项目初始化(svn检出)

  • 新建文件,编写代码等

  • 提交

    • 提交前准备,同步资源库

    • 是否有新文件?有则自动拉取到本地

    • 是否有删除文件的提交?有则自动删除本地的文件

    • 是否有冲突?

        • 冲突类型是场景4(不是同一行代码)

          1. 将 冲突代码保留 拷贝到自己文件中,保存

          2. 标记合并

          3. 正常提交

        • 冲突类型是场景5(修改了同一个地方)

          1. 找到 冲突代码的提交人,商量冲突代码最终提交内容

          2. 按照商量的最终结果,修改本次要提交的代码,保存

          3. 标记合并

          4. 正常提交

      • 提交(如果失败,请再次尝试同步资源库,或者观察控制台的报错信息,根据提示解决问题)

    一次提交完成

写代码的时候,时不时的拉取一下最新版本,否则等全都写完,万一有冲突,就很麻烦了哦!

及早发现问题,有利于减少改正成本

参考链接

http://www.svn.org.cn/

https://blog.csdn.net/wallace1992/article/details/77839672/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值