TortoiseSVN—Repo-browser,打开你要比较的两个版本所在的地址,选择一个版本做为比较的基础(单击右键—选择mark for comparison),再选择另外一个版本(单击右键—选择show difference as unified diff),然后就会生成一个两个版本的不同之处的文本

今天在客户现场联调,两个开发人员之间的代码想用SVN来管理,所以就临时在本地机器上搭建一个SVN仓库。现将操作步骤记录下来,以便后续查阅。

1、安装SVN服务端Setup-Subversion-1.6.5.msi和客户端TortoiseSVN-1.6.5.16974-win32-svn-1.6.5.msi

2、建立一个仓库空文件夹E:\repos,并在repos文件夹上右键选中TortoiseSVN-->create repository here

3、建立一个存放项目的文件夹E:\working,并在working文件夹内右键选中SVN Checkout,并在url of repository中输入file:///E:/repos,在E:\working中将会生成.svn的文件夹,表名已将working文件夹与repos仓库关联起来了

4、在working中放入源代码sources,在sources右键TortoiseSVN-->Add,将sources加入到working文件夹(被SVN管理的working文件夹),然后TortoiseSVN--Commit提交到repository中

5、最后需要启动SVN服务,在dos中输入D:\Program Files\Subversion\bin>svnserve -d -r E:\repos

6、在E:\repos\conf的文件中配置访问权限、用户名、密码

7、提供同事访问的地址:svn://IP地址/sources

一、  背景    

平时在进行开发时,一般都会有多版本同时进行,包括项目版本、周版本、紧急版本等,当某一个版本具备上线条件后,需要在上一个已发布的版本基础上进行发布,才能够避免出现版本相互覆盖,因此往往需要对版本之间代码进行合并,这里就和大家探讨下如何合并代码,让合并代码质量高以及高效。

二、合并代码的常规方法

常规的方法是用Beyond Compare 工具来进行手工合并代码,该工具的最主要作用是对比出有哪些代码是不相同,然后人为地判断出哪些需要合并,哪些不需要合并。因此如果判断失误,则合并后的质量未必高;在合并的过程中,因为是需要人为识别如何来合并,因此效率自然不会很高.

三、利用SVN合并

Subversion的版本库是一种文件服务器,但不是“一般”的文件服务器。Subversion版本库的特别之处在于,它会记录每一次改变:每个文件的改变,甚至是目录树本身的改变,例如文件和目录的添加、删除和重新组织;可见SVN可自动识别出开发者具体修改什么代码,在合并时,只要知道SVN版本号,它会自动找出修改过的代码,然后合并到最终目标文件中。因此使用SVN来合并代码具有合并质量高以及高效的特点。 SVN的合并有三种类型,如下图:

第一种类型:合并一个版本范围
该类型是根据SVN指定的版本号来合并,也是最灵活的一种合并方式,可以是主干合并到分支,或分支合并到主干;主要应用场景是把分支或主干里面的一部分修改同步到主干或分支中去;甚至支持不同库的两个分支,当然这两个分支要求是相同的目录结构。

第二中类型:复兴分支
把分支合并到主干上,这里会把所有分支的修改,都合并到主干中,如果只想合并一部分,不合适使用该类型;而且这种类型合并受限的条件比较多,如分支和主干必须是在同一个库,本地工作目录不能够包含有被修改过的文件等。

第三种类型:合并两个不同的树
把两个分支的差异合并到本地的工作目录;其实它也可以把分支的代码同步到主干中,只需要把合并的from指定为主干URL,to指定为分支URL, 而本地工作目录是主干。

四、利用SVN合并具体步骤

在上面的三中类型中,最常用最灵活的是第一中类型:“合并一个版本范围”,也是我用得最多的一种合并类型。下面以这个类型为例,来介绍合并的整个过程,假设是从分支合并到主干。对于另外的两种类型合并都差不多;这里就不一一介绍了。

1.把主干check out 到本地,并确保文件更新到最新状态

2.按照下图示打开合并对话框:

3.选择合并类型:

根据合并类型进行选择,这里的例子中是选择第一个类型,然后再点“Next”按钮。

4.填写SVN URL和版本号信息:

“URL to merge from”下拉框选择需要合并分支或主干,在例子中,选择的是分支v1.0;在“revision range to merge”文本框选择具体需要合并的SVN版本号,可通过“show log”按钮查看有哪些版本号。可选择具体的版本号,也可以选择一个区间的版本号,如4-7,表示从SVN版本号4-7的全部合并。如选择区间版本号,需按住shift键。输入各项信息后,再点“next”。

5.合并选项的选择

在这个步骤中,主要是针对检索深度、行的结束符、空格选项的合并做设置,这里选择默认选项即可。

6.测试合并

在上面步骤中,直接点“test merge”按钮来测试合并结果。如果有冲突,则会有提示有冲突:

7.开始合并

在步骤6中,直接点击“merge”按钮将会开始合并, 如没有冲突时,合并后的对话框将是下面的截图:

8.处理冲突

合并后有冲突时,弹出的对话框如下图,注意此时“resolved”按钮是灰色:

点“edit conflict”按钮,将打开SVN的合并对话框,让开发者进行手工合并:
 

通过手工合并后,合并后的代码将在下面窗口中显示,确认合并完毕,点工具栏上的第二个保存图标进行保存,并关闭当前合并的对话框;回到处理冲突的对话框中,会发现之前“resolved”按钮是灰色,现在变成可点按钮:

点“resolved”按钮,至此,当前的冲突已解决;SVN会继续合并后面的版本。

9.提交代码

合并完代码后,最后别忘记提交代码,同时要输入注释,方便日后追溯。注释参考格式如下:从[分支或主干]合并代码到[主干或分支],版本号是从[开始的版本号]到[结束的版本号];

五、注意事项或建议 

1.在使用SVN进行合并时,如何知道哪些版本号是合并过呢?在查看日志对话框中,已合并过版本号会变成灰色。

2.在修改代码时,建议遵循最小化修改原则,就是在修改代时,不要随意增加空格、空行和格式化、甚至包括文件的编码,有助于方便合并代码。

3.图片无法进行自动合并,但可利用SVN自带的图片对比工具来对比。

4.建议合并时,使用“test merge”来查看有多少冲突,如果冲突较多,可分多次合并,减少合并的复杂性。

TortoiseSVN—Repo-browser,打开你要比较的两个版本所在的地址,选择一个版本做为比较的基础(单击右键—选择mark for comparison),再选择另外一个版本(单击右键—选相关推荐

  1. JDK各版本官方下载地址

    对Java程序猿来说,无论是在开发,还是在学习的过程中,我们经常都需要用到JDK,但有的小伙伴会感到比较困惑,不知道在哪儿才能下载到JDK 官方的资源.为了方便大家,同时也是方便自己,现在此做个记录. ...

  2. babel 7.0.0-0_我们即将接近7.0 Babel版本。 这是我们一直在做的所有很酷的事情。...

    babel 7.0.0-0 by Henry Zhu 朱Henry 我们即将接近7.0 Babel版本. 这是我们一直在做的所有很酷的事情. (We're nearing the 7.0 Babel ...

  3. windows系统中,在当前目录下打开cmd命令行的两种方法

    windows系统中,在当前目录下打开cmd命令行的两种方法 1.在当前路径地址栏中直接输入'cmd',然后回车. 2.在当前路径下,按住'shift'键同时点击鼠标右键,点击"在此处打开P ...

  4. 添加右键菜单_笔记本没有灭屏键?巧在右键菜单添加“关闭显示器”选项

    MS酋长的笔记本没有单独的关闭显示器按钮,虽然可以通过运行命令关闭显示器,但毕竟操作比较麻烦.其实我们只需编辑注册表,把关闭显示器命令添加到其中,能够在Win10桌面右键菜单中添加一个"关闭 ...

  5. 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )

    文章目录 一.添加暂存文件 git add 二.提交文件至版本库 git commit 三.查看版本库状态 git status 四.查询文件修改 git diff 一.添加暂存文件 git add ...

  6. 判断一组多选框至少有一个被选中_想不想拥有自己的篆刻印章?那就PS一个吧...

    篆刻本身是书法和国画中必用的元素之一,但是在摄影后期中如果你想将作品做成仿国画效果那就离不开篆刻.不是每个人都有自己的篆刻,如果你不涉及到国画或者书法,我猜你是没有篆刻的. 那今天亮亮老师就带你学习一 ...

  7. Oracle jdk 历史版本官方下载地址及下载方法

    平时要新装一个系统环境,或者下载最新的jdk,就需要到oracle官网去下载一个jdk,而目前生产环境都是1.7的环境下开发完成的,需要下载1.7版本的jdk,oracle官方网站的默认下载页面是1. ...

  8. java固件包_iOS13 各版本固件下载地址以及更新方法

    2019-06-04 7907 iOS13本次更新: iOS13 developer beta①Face id 解锁速度增加30%②App打开速度快三倍③黑暗模式(dark mode)④Applemu ...

  9. base.apk软件下载免费_PS软件各版本免费下载地址

    你好,我是谢振! 直接电脑里访问以下网址: 这里我汇聚了PSCS6.PSCC.PSCC2015.PSCC2018.PSCC2019.PSCC2020版本,以及你PS安装过程中可能导致失败的所有问题. ...

  10. SDL Trados 2019 和 SDL Trados 2021 最新版本的下载地址 (2021年七月更新)

    SDL Trados 2019 和 SDL Trados 2021 最新版本的下载地址 SDL Trados 2019 CU 8 fix GS and Language Cloud 相关网络问题,正常 ...

最新文章

  1. 哪个版本python适用于windows-何种版本的Python适合您
  2. java用什么编译器_用大白话告诉你,Java到底是什么
  3. Python基础教程: import与from import使用
  4. python实现文件上传和下载_[Python] socket实现TFTP上传和下载
  5. this.$router.push如何刷新页面_【前端技术】如何优雅的释放F5(基于whistle的livereload)...
  6. mysql编译卡主_mysql 编译安装以及主从设定
  7. 迁移学习 简而言之_简而言之Java.io:22个案例研究
  8. php 怎么解析文本,PHP解析自定义纯文本数据库
  9. 六年级计算机应用计划,六年级信息工作计划
  10. GitHub 超 3W Star,最受欢迎的 VS Code IDE 是如何炼成的?
  11. js-对象深度克隆方法
  12. 位图切割器位图裁剪器
  13. 蓝桥杯省赛2016年Java组B组
  14. java mvc jquery weui_weui开发笔记
  15. 如果一份工作让你时常感到焦虑,你会不会立马辞职?
  16. win10在此计算机上找不到系统映像,解决Win10系统Windows找不到文件确定是否正确...
  17. 如何正确的对安卓手机进行数据恢复?
  18. 福利贴:最全实时音视频开发要用到的开源工程汇总
  19. OLO会打开数金链更多的市场
  20. 权限系统表 | 全方位认识 mysql 系统库(一)

热门文章

  1. 8.2 一些代数知识(群、循环群和子群)
  2. TypeScript基础之类型推断
  3. Unity Rect.OverLaps(Rect other) 改进
  4. Java进阶之CollectionsSet接口Map接口
  5. 【linux内核分析与应用-陈莉君】物理内存分配与回收机制下
  6. 什么是 MAC 地址?
  7. Flutter与RN
  8. marshmallow——Nested 类型
  9. Python基础知识——字符串:format() 字符串的格式化
  10. Chrome屏蔽广告