svn学习记录
文章目录
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
安装svn服务器
- 选择和合适的版本下载
我的当前系统是win,所以选择VisualSVN,如果是linux,请根据官方提示安装
- 一路按照默认的即可
其中有一步,选择版本
第一个是用于个人和小型团队,免费可商用
第二个是加强版
我们选择第一个即可
创建版本库
-
打开 VisualSVN Server Manager
-
Repositories右键-》Create New Repository
-
储存库(Repository)类型
-
点击定制权限:
输入用户名:redmine,密码:111111 创建成功:
请注意此处的访问地址为:http://xyuser-Thinkpad/svn/redmine ,请将【xyuser-Thinkpad】修改为实际的IP地址,然后给普通用户使用。
svn服务器这边就搞定了,然后我们就可以用各种客户端工具来管理我们的项目(通过:http://xyuser-Thinkpad/svn/redmine 这个地址)
eclipse的svn插件安装
安装很方便,有离线和在线安装的方式
这里采用离线的(提前下载好安装包 site-1.8.22)
-
解压site-1.8.22(svn包).zip
-
将解压出的文件夹当中的features和plugins两件文件夹拷贝到Eclipse的dropins目录下,重启eclipse
然后就ok了
从svn检出项目
工作的时候,要从svn中央服务器上检出代码,此时我们应该怎么操作呢?
-
eclipse里点击 File -》 import
找到 SVN下的:从SVN检出项目
-
选择资源库
勾选:使用现有的资源库位置
选中一个资源库,然后点击 next
注意:如果还没有资源库,那么请 选择: 创建新的资源库位置
-
选择资源库里要导入的项目
点击next
-
选择导入到的位置
项目名称可以和仓库中的不同
点击FInish ,就OK
我们看到第一个就是我们需要的项目
导入成功
SVN基础操作介绍
提交操作
在我们写完代码后,文件上会标出
需要我们提交到服务器上,此时的操作应该是
项目上右键 --》 选择:Team --》点击:提交
出现如下界面
第一个是提交内容,第一行应该概括说明变更情况,然后空一行,再第三行详细描述变更
第二个是要提交哪些文件(这里可以看到本地所有的修改情况,勾选上要提交文件)
ps:可以一次全部提交所有修改,如果修改比较多,可以分多次提交
查看SVN提交历史
项目上右键 --》 选择:Team --》点击:显示资源历史记录
如果是没有汉化的应该是:show History
会出现窗口如下:
选择一个提交历史,在下方可以查看本次提交更改了哪些文件
双击受影响的文件,即可查看具体内容
注意:我们上面的操作是在项目上右键的,所以查看的是整个项目的提交历史,如果我们在某一个文件或文件夹AAA上显示提交历史,那么查看的就是AAA的提交历史
对比代码
关键是要定位要对比哪个文件?这个文件的哪两个版本
从提交历史对比
-
先进行查看提交历史的操作
-
文件上右键,选择compare
- 出现选择窗口
- 我们选择要对比的代码版本,点击ok
此时,对比的就是 15版本的和14版本的
还原操作
当我们写了一段时间,发现写错了,想改回去可是那么修改我记不住啊,这可怎么办?
没关系,svn会帮你记住所有的提交历史,只需要操作几下就可以完美还原
- 项目上右键 --》 选择Team --》 点击还原
- 弹出还原窗口
选择我们要还原的文件,双击文件还可以对比一下我们究竟是改动了哪里哦
这样就OK了
我们看到,成功了之后,svn控制台有一条:revert
SVN回退版本
- 打开SVN提交历史
- 选择要回退到的版本,右键点击:获取内容
如果没有获取内容选项,选择 switch to Revision xx 也可以
SVN更新和同步资源库(推荐用同步资源库操作)
这两个放一块说
在每次提交前,先更新或者同步一下子,如果有冲突就要解决冲突
还是老地方Team里边,直接上图
对于更新操作若有冲突是下面这样子的
我的是什么,新版本是什么,都会有标记
java代码里塞进来会报错,可能html里不会有报错(即不明显)
对于同步资源库操作则会有专门的界面告诉你哪里不同(明显,推荐这种方式)
eclipse自带的还原
- 项目上右键 --》 Team --》 点击 show Local History
- 我们点击下方的几个文件,可以切换版本
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
A 提交修改
B 增加一行 int b = 10
紧接着提交
发现提交失败,错误如下
尝试同步资源库(项目右键-》Team -》同步资源库)
然后在弹出的对话框中点击切换(这是在问我们,要不要切换到 Synchronize视图下)
Yes
我们可以勾选上Remember来让eclipse为我们自动执行切换
接着会出现下面的
注意看哦,项目上回有红色的小圆点,代表有冲突,需要我们解决
解决冲突的方案就是,把 int a = 10; int b = 20;
都保留(因为这可是别人写的,不能乱动哦!)
鼠标放到中间的<
那里,发现会提示我们:把右边(别人的)的改变拷贝到左边(我们的)
我们点击,拷贝,发现就欧克了
接着我们标记为合并
文件上右键 --》 标记为合并
然后,我们看到,文件的状态就变了
最后,我们再次尝试提交更改==》提交更改成功
这就是本场景下的冲突解决方案
关键字:保留修改
场景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 ,此时提交有冲突,会失败
然后,B 在失败后 尝试 同步资源库 ,查看冲突
B 去找到 和 他有冲突的人,根据情况,协商确认 最后 b 究竟等于 几
假设最后两人沟通,确认 b 此时应该等于 100 ,那么,B 将他代码里 的值修改为 100 后
标记为合并(这时冲突就解决了,可以正常提交)
提交,本次修改完成
(参考场景5,方式基本一致)
关键字:协商保留正确结果
每次提交,应该是最新版本
不小心删除了一个文件怎么办?
我们模拟一下:新建一个A,提交A, 接着删除A,最后提交删除A的操作
如何找回A?
显示历史记录
看到下面受影响的文件,有记录
双击记录
打开,看到就是我们刚刚删掉的文件内容
服务器上找不回来,(历史记录里)
admin右键,
在文件上,可以看 本地的历史(eclipse自带的版本控制)
show Local History 和 显示资源历史(show History)
一个是eclipse自带的,另一个是svn的历史记录
!!!SVN 操作速查!!!!
文字描述:
-
项目初始化(svn检出)
-
新建文件,编写代码等
-
提交
-
提交前准备,同步资源库
-
是否有新文件?有则自动拉取到本地
-
是否有删除文件的提交?有则自动删除本地的文件
-
是否有冲突?
-
有
-
冲突类型是场景4(不是同一行代码)
-
将 冲突代码保留 拷贝到自己文件中,保存
-
标记合并
-
正常提交
-
-
冲突类型是场景5(修改了同一个地方)
-
找到 冲突代码的提交人,商量冲突代码最终提交内容
-
按照商量的最终结果,修改本次要提交的代码,保存
-
标记合并
-
正常提交
-
-
-
无
提交(如果失败,请再次尝试同步资源库,或者观察控制台的报错信息,根据提示解决问题)
-
一次提交完成
-
写代码的时候,时不时的拉取一下最新版本,否则等全都写完,万一有冲突,就很麻烦了哦!
及早发现问题,有利于减少改正成本
参考链接
http://www.svn.org.cn/
https://blog.youkuaiyun.com/wallace1992/article/details/77839672/