一、简介
1、SVN是什么?
- 代码版本管理工具
- 记录每次修改
- 查看所有的修改记录
- 恢复到任何历史版本
- 恢复已经删除的文件
2、SVN相比于Git有什么优势?
- 使用简单,上手快
- 目录级权限控制,企业安全必备
- 子目录Checkout,减少不必要的文件检出
3、SVN主要用在哪里?
- 开发人员用来做代码的版本管理
- 用来存储一些重要的文件,比如合同
- 公司内部文件共享,并且能按照目录划分权限
4、SVN仓库
推荐:https://svnbucket.com,也叫做SVN桶,这是现在最好用的SVN服务
二、安装
1、下载SVN相关安装文件
Windows:
TortoiseSVN
首先访问官网下载地址:
https://tortoisesvn.net/downloads.html,选择合适版本进行下载,如下:
由于该软件是英文,所以需要下载汉化包,在上述页面中往下滑动,滑动到Language packs
,下载合适位数的汉化包,如下:
由于下载网速比较慢,我在这里给大家提供一个版本的安装包,如下:
TortoiseSVN-1.14.1 提取码:t5ao
对应版本汉化包 提取码:f7hw
MacOS:
Cornstone
,我没用苹果系统,所以大家想用的可以搜索一下相关文档,该软件的官网是:https://cornerstone.assembla.com/
2、在Windows操作系统中安装TortoiseSVN和汉化包
1、双击TortoiseSVN安装包
2、点击两次Next
,然后可以改变TortoiseSVN的安装地址
3、点击Next
,再点击Install
,估计屏幕上会弹出一个框,点击确认就可以了,出现安装成功界面,点击Finish
4、双击汉化包(例如:LanguagePack_1.14.1
),然后点击下一步,点击确认,在点击下一步,之后在安装完成页面配置TortoiseSVN使用中文
,再点击完成就可以了,如下:
5、检查是否安装成功,在桌面空白处单击鼠标右键,可以看到如下内容就说明安装成功了
三、使用
1、基本操作
准备工作
在测试之前,可以现在svnbucket上注册账号,然后创建一个新项目,创建时需要输入项目名称和项目简介等,暂时不用勾选“自动创建trunk、branches、tags目录结构”
,毕竟我们以后也可以自己添加,操作如下:
然后复制SVN版本库地址
,如下:
现在我们在本机上创建一个文件夹来测试,假设叫做workspace
(名称不限)
1)、检出 checkout
在上述文件夹workspace
中的空白处点击右键,点击SVN检出
,如下:
然后添加版本库URL和目录,如下:
之后需要输入用户名和密码,其中用户名和密码都是注册时候使用的用户名和密码,如下:
然后你就可以发现文件夹workspace中出现了svntest文件夹,如下:
如果你的svntest文件夹
上面没有绿色对号
,可以尝试重启电脑,然后就会出现绿色对号了
2)、新增 add
往svntest文件夹
中随便添加文件
3)、提交 commit
在空白处单击鼠标右键,选择SVN 提交
,然后选择需要提交的文件/文件夹,填写提交信息,点击确定提交,当提交完成的时候点击确定就可以了,如下:
然后你就可以看到所有的文件/文件夹上面都有绿色对勾了,如下:
之后我们也可以在svnbucket
中的对应项目中看到上传的内容了
4)、更新 update
现在我们来更改计算机中的某文件,然后继续在空白处点击点击右键,然后选择SVN 提交
,如果双击要提交的文件,可以看该文件修改了哪些位置,如下:
然后点击确认就可以把内容更新到远程仓库中了
5)、查看历史记录
在svntest文件夹
的空白处单击鼠标右键,选择TortoiseSVN
,然后点击显示日志
,之后可以选择对应版本的历史记录,查看该版本文件和之前一个版本的文件之间的区别,如下:
6)、SVN 更新
建议在每次提交之前进行SVN更新
,即在svntest文件夹
中空白处单击右键选择SVN更新
,这样可以避免版本冲突,防止覆盖掉其他人的修改,操作如下:
2、撤销和恢复
1)、撤销本地修改(未提交到远程仓库)
如果在计算机本地修改了文件,但是不想提交该文件,那就需要用到本操作
方法1:
假设我修改了该文件,但是我发现修改的内容不对,我想把该文件恢复到原来的版本,那就需要在该文件上单击鼠标右键,选择TortoiseSVN,在选择SVN还原,如下:
我们可以双击被还原文件,查看里面的修改信息,如下:
如果真的需要还原
,那就点击上一个图片中的确认
就可以了
方法2:
在页面空白处单击鼠标右键
,选择SVN提交
,然后在文件上点击鼠标右键,选择SVN还原,之后在弹出的窗口中点击确认就可以了,如下:
2)、恢复到上个版本(已经提交到远程仓库)
如果本地修改的内容已经提交到了远程仓库,但是我认为我代码写错了,可以使用这种方式恢复计算机本地代码到上一版本
在当前最新版本上单击鼠标右键,然后选择复原此版本作出的修改
,如下:
这种修改只是更改计算机本地代码到上一个版本,不过远程仓库中还是我们上次提交的错误版本,不过我们更改之后就可以再次提交到远程仓库
3)、恢复到指定版本
如果我们已经执行SVN 提交
多次,但是发现我们这几次提交都是有问题的,所以我们想恢复到之前的版本,我们可以在svntest文件夹
中空白处点击鼠标右键,选择TortoiseSVN
,选择显示日志,然后在合适的版本上单击鼠标右键,选择复原到此版本
,在弹出窗口中点击还原
,操作如下:
3、添加忽略
比如有一个文件/文件夹,我不想对它进行版本控制,那就可以添加忽略,那么下次上传的时候就可以删除远程仓库中的该文件/文件夹
例如我不想对img文件夹进行版本控制,那么我可以在img文件夹上面单击鼠标右键,然后执行如下操作:
然后点击确认,如下:
如果现在你来执行SVN 提交操作,那么提交框如下:
之后我们就可以发现远程仓库上就没有img文件夹了,如下:
如果我们想继续对img文件夹
进行版本控制,可以将img文件夹
从忽略列表中删除,首先在img文件夹
上单击鼠标右键,具体操作如下:
然后可以再次执行SVN 提交
,就可以将img文件夹中的内容提交到远程仓库
了
4、解决冲突
1)、什么情况容易发生冲突
- 多个人修改了同个文件的同一行
- 无法进行合并的二进制文件
2)、怎么避免冲突?
- 经常update同步远程仓库的代码
- 二进制文件不要多个人同时操作
3)、解决文本文件的冲突
比如其他同事更改了某文件中的代码(可以使用同一个电脑模拟,再次检出到其他目录就可以了),然后他将该代码提交到了远程仓库,现在我也更改了该项目中该文件的同行代码,然后我先在空白处点击鼠标右键,选择SVN 更新
,之后出现如下结果:
然后在冲突提示信息上单击鼠标右键,如下:
现在文件夹中冲突文件的位置会生成多个文件,比如:
如果我们确信我们的才是最正确的,那就点击使用"我的"解决有冲突的文件
;如果我们确信远程仓库中的才是正确的,那就点击使用"他们的"解决有冲突的文件
;如果我们无法确定谁的才是正确的,我们可以点击编辑冲突,现在我们来演示点击编辑冲突的做法,如下:
其中绿色=号
右边的代码是前一个版本中的代码,作用是告诉我们前一个版本是怎么写的,不属于问题代码。如果经过判断发现我的才是正确的,那就可以在本地文件
中的红色冲突代码
上单击鼠标右键,选择使用此文本块
,如下:
然后已合并的文件
中就可以看到里面的代码变成了我写的代码,如下:
之后就可以点击标记为已解决
按钮,如下:
然后编辑页面就可以关闭了,现在你再去看文件夹中的文件,那就无法找到那几个其他版本的文件了,如下:
然后我们就可以进行SVN 提交
了
4)、解决二进制文件的冲突(例如:图片)
如果同事更换了某个已经存在的图片,然后他把更改操作提交到远程仓库中了,之后我在本地也更换了这个已经存在的同名图片,然后我在svntest文件夹
空白处单击鼠标右键,选择SVN 更新
,之后就会出现冲突问题,如下:
之后我们来看文件夹中冲突信息,如下:
依然是在冲突上单击鼠标右键,如下:
假设依然选择编辑冲突,然后寻找我们认为正确的图片,其中的选择没什么作用,我们记下我们到底认为是本地的正确还是远程的正确,然后在点击使用"我的"解决有冲突的文件
或者使用"他们的"解决有冲突的文件
,如下:
假设选择使用"他们的"解决有冲突的文件
,然后在弹窗中点击确认就可以了,如下,
这就解决了冲突
5、分支
1)、什么时候需要开分支?
- 隔离线上版本和开发版本
- 大功能开发,不想影响到其他人,自己独立开个分支去开发
2)、SVN经典目录结构
- trunk:主干;用来存放开发中的文件,平时都在主干上进行开发,如果到一个版本,那就可以开一个分支branches
- branches:分支;一般对应线上版本
- tags:标签;
创建分支前的准备工作:
还记得我们在SVNBucket上创建项目吗,在创建的时候就可以勾选自动创建……目录结构
,现在假设我们忘掉上面的那些项目,假设我们新创建了一个项目也叫做svntest
,如下:
现在我们来复制trunk的地址,如下:
之后在计算机中的workspace文件夹空白处单击鼠标右键,选择SVN检出
,如下:
自己给主版本起个名字,这个名字可以不是固定的,但是里面的内容确实是远程仓库主版本trunk文件夹
中的内容,如下:
生成内容如下:
然后可以将需要的内容加入到svntest-trunk文件夹中,然后SVN 提交到远程仓库中,这个操作就不在演示了
3)、在远程仓库中创建分支
在svntest-trunk文件夹上点击鼠标右键,然后依次选择,如下:
现在来在远程仓库中正式创建分支,如下:
4)、将远程仓库中的分支检出到本地
首先进入SVNBucket,然后复制分支地址,如下:
之后在本地workspace文件夹
中空白处单击鼠标右键,选择SVN 检出
,一般会自动填充复制的svn地址,然后我们需要添加分支在本地的名称,如下:
5)、切换分支
按照上述创建分支的方式先创建一个新分支(比如名称是online2.0),然后选中svntest-online文件夹,然后在该文件夹右键,按照下图进行切换:
然后开始切换分支,如下:
6)、查看当前分支
首先选中该本地分支文件夹,然后在本地分支文件夹上单击鼠标右键,选择属性,然后选择Subversion,之后就可以看到当前分支是谁了,如下:
7)、合并分支到其他分支
假设我在分支上添加了一个文件并提交到了远程仓库,然后我想把这个文件合并到主干(也可以是其他分支)上,可以首先选中该分支文件夹,然后在该分支文件夹上单击鼠标右键,依次选择至显示日志,如下:
按照要求进行合并版本到
,如下:
选择本地的合适分支,可以是主干或者其他分支都是可以的(一般都是主干),如下:
之后合并的效果如下:
但是这个文件只是在本地,还没有到远程仓库中的trunk目录
中,然后我们就可以执行SVN 提交
操作了
8)、删除分支
在任何一个本地分支内部空白处单击右键,依次选择至版本库浏览器,如下:
删除特定分支,该删除操作将会删除远程仓库中的分支,操作如下:
6、代码暂存
1)、有什么作用?
- 代码改变了很多,突然需要紧急修复一个bug,但是代码还没写完,不能提交。
- 代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交。
2)、贮藏 / 检查点
假设我正在做一个功能,但还没有做完,现在线上出现一个紧急bug,那我们需要把当前所做的代码暂存起来
,等会再来操作,具体做法是在空白处单击鼠标右键,依次找到贮藏
,如下:
如果点击贮藏
按钮,上面已经解释的很清楚了;如果点击检查点
按钮,那么将保存当前的工作状态,但是不会将计算机当前文件中的内容更新为远程仓库中的内容
当我们点击贮藏
按钮之后,我们那会更改的内容就消失了,现在计算机中当前主干/分支中的内容和远程仓库中的内容一致,如下:
现在我们来处理bug
,然后进行SVN 提交
,如下:
3)、取消贮藏
在计算机本地主干/分支文件夹中空白处单击鼠标右键,依次选择取消贮藏
,如下:
当操作完成之后,你会发现本地文件又变成了我们没有贮藏之前的样子,并且我们处理bug的操作不会消失,如下:
现在我们来继续之前没有完成的工作,当工作完成先执行SVN 更新
,在执行SVN 提交
7、复杂代码合并
1)、使用情况
- 主干开发新功能,改变了很多内容
- 分支是线上版本,修复了很多bug
- 两个分支时间久了差异很大,无法直接进行分支合并或者指定提交记录合并代码
2)、Beyond Compare下载
官方下载地址:https://www.beyondcomparepro.com/download,注意:官网下载很慢
Beyond Compare 4百度网盘链接(从官网下载):https://pan.baidu.com/s/1yXbHlINjuZSuP82YKg5_aA 提取码:zwkq
3)、具体使用
打开首页面如下:
执行操作开始比较内容,如下:
之后我们可以选择差别比较方式,然后两个文件夹中间的红色≠
代表里面的内容不等,紫色文件
代表该文件是该文件夹下面独有的,如下:
如果想把该文件夹中独有的文件复制到另外一个文件夹中,可以在该文件上面单击鼠标右键,选择复制到左边
,如下:
对于那些中间是红色≠的文件,说明两个文件夹中的该同名文件里面的内容不同,那么我们需要双击某个同名文件,然后仔细看看到底哪个地方不同,如下:
如果修改完毕了,那就可以使用Ctrl+S保存,然后Ctrl+W退出就可以了
如果全部修改完毕,那就可以使用SVN 提交
更新远程仓库了