目录
一、svn是一个代码版本管理工具,他能记住你每次修改,可以查看每次的修改记录,恢复到任何历史版本,恢复已经删除的文件
二、svn与git相比的优势:
- 使用简单,上手快
- 目录级权限控制,企业安全必备
- 子目录checkout,减少不必要的文件检出
三、主要应用:
- 开发人员用来做代码的版本管理
- 用来存储一些重要的文件,比如合同,这样你就能看到合同的历史修改记录
- 公司内部文件共享,并且能够按照目录划分权限
四、首先你要有个svn仓库,即svn服务端,你才能用svn客户端操作svn仓库,svn仓库推荐使用svn桶svnbucket.com
五、安装svn客户端:window安装TortoiseSVN,iOS安装cornstone
六、在svnbucket.com
上面会有svn教程及安装教程(此处不赘述)
七、文件绿勾代表本地文件与服务器端的文件是同步的,红色感叹号表示本地文件做了修改但没有和服务器端同步,需要commit
一、检出checkout
二、新增add
三、提交commit:提交的时候可以双击文件查看改动的地方
四、更新update
五、查看历史记录
可以查看所有的提交记录
可以双击文件查看提交的文件和原文件之间改动的地方,如果没有原文件,那就是查看提交的文件
在每次提交前进行更新,可以避免冲突
一、撤销本地修改:假如你在本地对文件进行了修改,并且修改错了,修改后的文件还没有上传到服务器端,如何撤销修改?
- 方法一:右键修改了的文件选择【svn还原】
- 方法二:在commit时,右击文件选择【svn还原】
二、撤销已提交的内容:假如你对文件进行了修改并上传,后来发现修改错了,如何撤销修改?比如这里我将原来的100%改为1000%,450px改为4500px,注意⚠️1000%和4500px都是错误的修改
然后将此修改commit,如何撤销此修改?
方法:查看历史记录(操作见上一节),右击修改错了的那个版本,选择【复原此版本作出的修改】
根据提示选择【还原】,复原后你修改了的那个文件在本地就会显示一个红色的感叹号,
表示该文件被修改了(从错误的内容还原成了正确的内容),通过查看日志我们发现由1000%和4500px变回了100%和450px
所以我们还需要commit一下
三、恢复到指定版本:查看历史记录(操作见上一节),右击修改错了的那个版本,选择【复原到此版本】
根据提示选择【还原】,复原后你修改了的那个文件在本地就会显示一个红色的感叹号,表示该文件被修改了(从错误的内容还原成了正确的内容),所以我们还需要commit一下
一、假如我想忽略image文件夹中的内容,右击该文件夹,选择【去除版本控制并增加到忽略列表】,选择images,
然后image文件夹上会出现一个红色的叉❌,表示该文件夹已被忽略
我们再提交时,会发现images中的内容都被删除了
update、commit一下,❌消失
二、如果想要忽略一个文件,操作也一样,右击该文件,选择【添加到忽略列表】,选择想忽略的文件,这里是【添加到忽略列表】而不是【去除版本控制并增加到忽略列表】,是因为该文件还没有被svn管理,即还没有commit到服务端
因为我们忽略了这个文件,所以需要commit一下,告诉服务端我忽略了一个文件
三、如果想不再忽略,可以右击选择【加入】
或者选择【从忽略列表删除】
四、如果你想忽略一个已经提交了的文件或文件夹,那么你可以忽略他,再提交,svn会在服务端删除你忽略的内容
个人思考:svn其实每次都是以你最新提交的内容为准,每次提交都好像是一次覆盖?(不知道是不是这样的)
一、什么情况容易发生冲突
- 多个人修改了【同一个文件的同一行】
- 无法进行合并的二进制文件
二、怎么避免冲突
- 经常update同步他人的代码
- 二进制文件不要多个人同时操作
三、如何解决:多个人修改了【同一个文件的同一行】引发的冲突
产生冲突后会自动生成几个文件:App.vue.mine是我修改的文档,App.vue.r7是版本7的文档,App.vue.r9是版本9的文档
- 方法一:右击冲突,选择【使用他们的文本解决冲突】,直接把我的丢弃,使用他们的作为正确的文本;选择【使用我的解决有冲突的文件】表示使用我的作为正确的文本,把他们的丢弃掉。
- 方法二:右击冲突,选择【编辑冲突】,就会来到下面这个文档中,左边是别人的文档,右边是我的文档,下面标红的地方是冲突位置,svn不知道那一行应该是什么文档
我们经过对比后发现左边别人的文档是正确的,所以右击正确的那一行,选择【使用此文本块】
选择了之后,下面的文档就没有红色了,点击标记为已解决,
然后跳回到之前的界面,点击确定,解决冲突
四、如何解决:无法进行合并的二进制文件引发的冲突 - 方法一:右击冲突,选择【使用他们的文本解决冲突】,直接把我的丢弃,使用他们的作为正确的文本;选择【使用我的解决有冲突的文件】表示使用我的作为正确的文本,把他们的丢弃掉。
- 方法二:右击冲突选择【编辑冲突】
来到下面的界面,左边是你本地的(这个本地的是你想要用来覆盖之前的),中间是上一个版本的,右边是远程别人修改的,在这里选择你想要哪一个
然后点击【选择】,点击【确定】解决冲突
一、什么时候需要开分支:
- 隔离线上版本和开发版本
- 大功能开发,不想影响到其他人,自己独立开个分支去开发,等我们开发完了之后再合并过去
二、svn经典目录结构:
- trunk:主要用来存放你开发中的文件,平常我们都在trunk上开发,开发完成之后,到一个版本,我们就开一个分支出去,存储到branches中
- branches:
- tags
三、如何开分支
有一天我们在trunk上的开发已经完成了,可以上线了,我们可以开一个线上版本。首先将整个仓库checkout下来,右击trunk,选择【分支/标记】
会跳转到下面这个窗口,选择要保存的路径地址为branches/存放该版本代码的文件夹名称,其中branches表示分支文件夹,此处onlinev1.0为存放该版本代码的文件夹,选择版本库中的最新版本,点击确定,就创建完分支了,在本地update一下就可以看到branches文件夹中的分支了。
如果我们把分支branches/onlinev1.0、trunk单独checkout出来,以后我在trunk中修改代码并commit,不会影响onlinev1.0中的代码,这样我们可以把分支中的代码作为线上版本,只对其做线上问题的修复,但是修复了onlinev1.0中的代码,怎么同步到trunk呢?右击onlinev1.0,选择【显示日志】
会来到下面这个窗口,选中你要合并的提交记录(支持多选),然后右击,选择【合并版本到】,
会出现下面的界面,选择你要合并的文件夹
三、切换分支,现在我们新开了一个分支onlinev2.0(步骤如前,不再赘述),不用将它checkout出来,可以直接在onlinev1.0上切换分支,右击onlinev1.0选择【切换】
会出现下面的界面,在路径中通过下拉选择或者…选择你要切换到的那个分支
切换成功后,本地onlinev1.0这个文件夹名是不会变的,里面的代码变成了onlinev2.0的
一、暂存的作用:
- 代码改了很多,突然需要紧急修复一个bug,但是代码还没写完,不能提交
- 代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交
以上两种情况,我们可以把代码暂存起来,等工作完成再恢复之前写的代码。
二、如何暂存:App.vue和main.js里面有我们写了一部分的代码,右击文档空白处,选择【shelve】
会出现下面的窗口,在path中勾选要暂存的文件,下面那个框中写暂存的这批文件的名字,此处命名为feature1,log message是日志信息,shelve按钮代表暂存代码后会把本地修改的代码撤销掉,checkpoint按钮代表暂存代码后本地的修改还会保留
点击checkpoint按钮后发现,本地修改的代码并没有被撤销
点击shelve按钮后发现,本地修改的代码被撤销了
恢复暂存的代码:右击空白处选择【unshelve】
会出现下面的窗口,在name下拉框中选择你想要恢复的暂存代码的名字,version下拉框中选择你想要修复哪个版本的暂存代码,
点击apply即可恢复暂存的代码
代码比较简单时,可以使用前面说的合并来合并代码,但是如果我们在trunk开发新功能,改了很多代码,分支是线上版本,修复了很多bug,两个分支的代码时间久了差异很大,无法直接分支合并或者指定提交记录合并代码,此时可以使用beyondcompare。