古人学问无遗力,少壮工夫老始成。这篇文章主要讲述一步一步搭建Svn服务之TortoiseSVN日常操作相关的知识,希望能为你提供帮助。
SVN作为源代码文件版本管理的工具,在日常项目中,经常使用到。上一篇文章主要介绍了客户端TortoiseSVN基本操作,可以让新入坑的小伙伴,快速的上手SVN。但是基本操作并不能覆盖全,日常开发的工作场景。本篇文章紧接上一篇,是上一篇的进阶内容。所以小伙伴们,一定要先跟着上一篇内容完成的操作,打好基础了。本篇文章依然是图文教程,加入了个人的看法和注释,需要的朋友们下面随着我来一起学习吧。
四、版本冲突至此为止,lipengfei和wangqiang两个人,他们本地目录中的version全是9,lipengfei和wangqiang两人本地的工作目录的内容,和SVN代码库中的内容,一模一样的。
1、lipengfei在本地修改hello.txt
文章图片
2、lipengfei做SVN Commit
文章图片
文章图片
文章图片
3、wangqiang在本地修改hello.txt
文章图片
4、wangqiang做SVN Commit
文章图片
文章图片
文章图片
文章图片
文章图片
查看wangqiang本地目录
文章图片
为什么会产生冲突代码呢?原因很简单就是因为不同的人,同时修改了同一个文件的同一个地方,这时候,他提交了,我没有提交,我就提交不了,这个时候我们要进行先更新,然后在进行提交即可,那如果产生冲突,会生成如上的一些文件。
hello.txt.mine文件:是冲突前自己的文件
hello.txt.r9文件:是冲突前本地的版本文件
hello.txt.r10文件:是别人赶在你之前提交的版本
查看hello.txt
文章图片
上面内容说明:
< < < < < < < < .mine
这一块是你自己的代码 r.9
=======
别人与你冲突的代码部分
> > > > > > > r.10
上面的内容,不可能直接提交上去,这是SVN给你的提示,这不单纯是你编写的代码。当前这种情况,有2种解决办法:
4.1、解决冲突方法1
文章图片
文章图片
文章图片
此处代码的处理,就需要人为参与了,看看代码是保留哪些代码为准。假设我取两面的内容,全保留下来。
文章图片
文章图片
文章图片
查看SVN中代码库
文章图片
文章图片
查看lipengfei用户本地工作目录文件
文章图片
发现lipengfei本地目录中的文件,内容还是旧的,没有和SVN同步。在lipengfei本地目录中,做SVN Update操作。
文章图片
文章图片
现在lipengfei本地目录中的version也是11了,查看本地目录中文件
文章图片
可以看出来,当前这种解决冲突方法,就是人为的参与,和冲突的同事商量,保留哪些代码。
4.2、解决冲突方法2使用revert(回滚)操作
文章图片
该操作表示用户放弃自己的更新代码,然后直接提交,这个时候你的代码就会是服务器上最新的代码,即以同事提交的新代码为准,你的代码不会被提交,直接放弃你的修改了。
文章图片
文章图片
文章图片
点击ok按钮后 可以看到其他三个文件都自动删掉了
5、解决冲突的选择
(1)、放弃自己的更新,使用svn revert回滚,然后提交。在这种方式下不需要使用svn resolved解决。
(2)、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件---> 右键---> 解决)
(3)、手动解决:冲突发生时,通过和其它用户沟通后,手动更新目标文件。然后resolved filename并来解决冲突,最后提交。
6、降低冲突解决的复杂度
(1)、当文档编辑完成后,尽快提交,频繁的提交/更新,可以降低在冲突生的概率,以及发生时解决冲突的复杂度。
(2)、在提交时,写上明确的注释,方便以后查找用户更新的原因,毕竟随着时间的推移,对当初的更新原因,可能会有遗忘。
(3)、养成良好的使用习惯,使用SVN时每次都是先提交,后更新。每天早上打开后,首先要从版本库获取最新版本。每天下班前,必须将已经编辑过的文档,都提交到版本库中。
7、大白话版本冲突总结
在上面演示的冲突案例,它是我们工作中最常见的,多个同事修改了同时修改同一个文件。为了防止冲突,可以增加Commit代码的频率。不要你写了一整天代码,都不Commit一次。
假如你一天没提交,马上下班了,你一提交,发现有几十个冲突,一下子死的心都有了。假设你有30个文件冲突,你提交了30次,冲突了30次。但是你每一次,只有一个文件冲突,你每一次解决一个文件冲突,你要解决30次。这可和你一次解决30个冲突文件,不一样的。
而且冲突的情况,一般都是后Commit的人产生冲突。所以日后编程,可以增加Commit的频率,但也不要是你每写一行代码,就Commit一次。通过是每1-2小时提供一次,或者写完一个小功能,提交一次。
不要一天只提交一次,除非这个项目就是你一个人在开发,你可以这样玩。因为就是你一个人在开发,没有别人会和你冲突。其实也会有冲突的情况,就是后面的版本和前面的版本,也会产生冲突。
五、版本回滚最近一次代码提交使版本更新到10,测试组发来消息10版本有问题。就在此时,你的老板要求现在要对外发布一个产品版本,问这种情况该怎么办?
打脸解决不了问题,正确的操作是回滚生产分支到9版本。
1、使用版本log功能回滚
1.1、CheckOut最新版本到本地
文章图片
可以看了当前SVN的最新version是9
1.2、Show log操作 执行TortoiseSVN的Show log操作,在新签出的文件夹上右键,TortoiseSVN -> Show log, 如下图:
文章图片
文章图片
1.3、回滚SVN有2种类型的回滚:Revert to this revision和Revert chages from these revision。
我现在lenovo这个项目在SVN上,有九个版本,版本号是1,2,3,4,5,6,7,8,9。
1.3.1、Revert to this revision直接回滚到某个旧的版本,这个版本之后的变更都会被删除。比如:如果是在版本7这里点击"Revert to this revision",表示8~9的修改全部作废,回退到了版本7那个结果。
查看本地当前当前工作目录
文章图片
查看SQLQuery1.sql
文章图片
通过浏览器,查看历史记录的详细
文章图片
文章图片
文章图片
Revert to this revision操作
文章图片
文章图片
文章图片
文章图片
文章图片
查看本地工作目录
文章图片
查看SQLQuery1.sql文件内容
文章图片
1.3.2、Revert chages from these revision删除中间的几个版本 (假如提交错误了,也可以使用这个方法删掉)。比如:如果是在版本7这里点击"Revert changes from this revision",表示版本7这个历史事件被消除了,只剩下除版本7外的8个历史操作了。
Revert changes from this revision 单个版本操作
文章图片
文章图片
Revert changes from these revisions多个版本操作
文章图片
文章图片
如果同时选择6,7,8 Revert changes from these revisions那么6、7、8这3个版本的所做的修改都会被消除。
1.4、确认提交这是最后一步,也是最重要的一步。前面的操作,都只是在本地电脑上进行的操作,必须要做SVN Commit后才能真正提交到SVN服务器。
2、使用merge功能
2.0、查看本地工作目录中文件内容
文章图片
2.1、右击需要回滚的文件或文件夹,选择 TortoiseSVN → Merge
文章图片
2.2、在Merge Type 对话框中选择Merge a range of revisions
文章图片
2.3、在From字段输入仓库的url路径,一般默认就行
文章图片
2.4、在Revision range to merge 字段输入回滚的版本列表(或者使用log对话框选择)
文章图片
2.5、确认Reverse merge选项被勾选上
文章图片
2.6、在Merge option对话框上接受默认配置
文章图片
文章图片
2.7、单击Merge完成合并。
文章图片
2.8、查看本地工作目录中文件内容
文章图片
3、总结
(1)、上面的回滚操作,主要叙述了修改已经提交,需要roll back版本的情况。如果修改没有commit,请直接revert即可。
(2)、如果你回滚操作后,发现本地操作的过程中有失误。把本地的代码删除,再从SVN中下载一份,重新修改即可。
(3)、回滚的操作,都只是在本地电脑上进行的操作,必须要commit后才能真正提交到SVN服务器。
(4)、TortoiseSVN绝不会丢弃数据,所以那些被回滚的版本仍然以中间版本的形式被保留在版本库里。只是最新版本已经回到了以前的状态。
六、主干分支操作项目中为何要创建分支及合并?
假如我现在项目所有的文件放在主干上(trunk)中,由于需求的变更,需要增加新的需求,但是我们主干上还要继续往下开发,在此我们可以新建一个分支,来做增加新的需求那一块,主干上继续开发,等分支上代码没有问题的时候,再合并到主干上来。创建分支的最大的目的就是跟主线进行并行开发时候不影响主线的开发。
1、前期准备工作
1.1、在服务器上创建好目录
文章图片
此处我的项目名叫DataX,提示此项目文件夹中包含3个子目录:
trunk:主干,一般把项目提交到此文件夹里面,在trunk中开发。
branches:分支,一般把那些需要打分支,但是有可能会修改的项目代码,打分支到此目录。
tags:分支,一般把那些阶段性(如迭代各期)的项目代码,打分支到此目录。
文章图片
文章图片
1.2、把本地项目代码导入到trunk来到你本地的workspace,找到你的项目
文章图片
文章图片
文章图片
查看SVN上的目录情况
文章图片
2、提取主干代码到本地
在本地工作目录中,创建2个目录:trunk和branch目录
文章图片
进入到本地的trunk目录,右键SVN Checkout操作
文章图片
文章图片
文章图片
查看本地目录
文章图片
文章图片
3、在SVN服务上生成分支代码
利用本地主干上的代码,给SVN服务端创建分支,操作如下:
文章图片
文章图片
查看SVN服务端代码,分支目录代码
文章图片
4、提取分支代码到本地
进入到本地的branch目录,右键SVN Checkout操作
文章图片
文章图片
文章图片
查看本地目录
文章图片
文章图片
分支建立在svn的服务端,如果有其他同事对SVN上的分支代码更新了,本地branch文件夹中 右键--> SVN Update即可,就可以更新到分支代码。
文章图片
文章图片
5、合并分支到主干上
我现在对branch分支上新增lipengfei.txt文件,然后提交到SVN上去。
文章图片
文章图片
文章图片
文章图片
查看SVN端分支目录情况
文章图片
查看SVN端主干目录情况
文章图片
现在想把分支上新创建的lipengfei.txt,合并到主干上。
回到本地工作目录中的,鼠标右键trunk文件夹 --> Tortoise SVN --> Merge 如下步骤:
文章图片
文章图片
文章图片
文章图片
文章图片
查看SVN端主干代码目录,并没有在分支中新创建的lipengfei.txt
文章图片
查看本地工作目录
文章图片
文章图片
就可以看到本地trunk文件夹中多了一个lipengfei.txt,就是从分支上合并过来的,它的图标是蓝色+号:说明lipengfei.txt已经被计划加入到版本控制中。
在本地trunk文件夹中,把lipengfei.txt提交到SVN的主干代码目录中。
文章图片
文章图片
文章图片
查看SVN端主干代码目录,在分支中新创建的lipengfei.txt已经有了
文章图片
6、合并主干到分支
如果主干上有一些更新,那么这些要更新到分支上去。在主干上新建一个lipengfei_new.txt文件,然后提交到SVN上去。
文章图片
文章图片
文章图片
文章图片
查看SVN端主干目录情况
文章图片
查看SVN端分支目录情况
文章图片
现在是想把主干上新创建的lipengfei_new.txt,合并到分支上。
回到本地工作目录中的,鼠标右键branch文件夹 --> Tortoise SVN --> Merge 如下步骤:
文章图片
文章图片
文章图片
文章图片
文章图片
查看SVN端分支代码目录,并没有在主干中新创建的lipengfei_new.txt
文章图片
查看本地工作目录
文章图片
【一步一步搭建Svn服务之TortoiseSVN日常操作】
文章图片
就可以看到本地branch文件夹中多了一个lipengfei_new.txt,就是从主干上合并过来的,它的图标是蓝色+号:说明lipengfei_new.txt已经被计划加入到版本控制中。
在本地branch文件夹中,把lipengfei_new.txt提交到SVN的分支代码目录中。
文章图片
文章图片
文章图片
查看SVN端分支代码目录,在主干中新创建的lipengfei_new.txt已经有了
文章图片
至此,客户端TortoiseSVN的日常操作,就操作演示完毕了,作为潜力股的你,一定可以在日常的工作中上手SVN了。但是由于时间紧,此处主干和分支操作讲得不太详细,后面我还会分享一篇关于主干和分支的详细讲解,欢迎继续关注我!!!
推荐阅读
- 掌握6大模块7个核心概念!帮你搞定Mycat中间件#导入MD文档图片#
- #导入MD文档图片#JMeter-多线程组间通信
- 千亿级模型在离线一致性保障方案详解
- 分布式技术专题分布式消息队列-RocketMQ延迟消息实现原理和源码分析
- WEB安全新玩法 [4] 防护邮箱密码重置漏洞
- 你想学的黑客(攻击)技术全在这了,一篇打包带走!
- SpringCloud技术专题「Feign」从源码层面让你认识Feign工作流程和运作机制
- 靶机DC-1
- WEB安全新玩法 [11] 防范批量注册