对比工具可以使用 winmerge 和 beyond compare ,winmerge免费小巧,beyond compare功能更强大。这两款工具都比TortoiseSVN自带的对比工具要好一些。

在TortoiseSVN中的配置方法:

winmerge安装时勾选集成到TortoiseSVN

beyond compare要复杂一些,右键,TortoiseSVN - 设置,

差异查看器( Diff Viewer ),设置用来比较不同版本文件的程序( comparing different revisions of files ),设置用来比较不同版本属性的程序( comparing different revisions of properties ),勾选外部,输入

" D:\Program Files\Beyond Compare 3 \BComp.exe " %base %mine /title1=%bname /title2=%yname /leftreadonly

差异查看器/合并工具( Merge Tool),勾选外部,输入

" D:\Program Files\Beyond Compare 3\BComp.exe " %mine %theirs %base %merged /title1=%yname /title2=%tname /title3=%bname /title4=%mname

红色部分为beyong compare的路径,要带双引号。

创建本地版本库

要测试TortoiseSVN的功能,总不能在公司的正式服务器上乱搞把,所有先要创建一个测试的版本库。

新建一个文件夹,名字不要用中文,进入文件夹,点击右键TortoiseSVN - 在此创建版本库。

TortoiseSVN会在这个文件夹创建版本库,并且会弹出一个提示框

点击“创建目录结果”,然后启动版本库浏览器,就可以看到版本库的目录结构

通过点击“创建目录结果”,TortoiseSVN自动创建了3个文件夹, branches,tags,trunk, 很多人都会使用TortoiseSVN,但是对这三个目录去取不了解。

trunk目录

主干目录,一般情况下是在此目录下进行代码的开发,这个目录应该存放最新的代码。

tags目录

代码的版本标记,这个目录的代码不允许更改,比如,软件发了1.0版本,就需要将1.0版本的代码在tags中放一份拷贝,发了2.0,就要在tag中标记一个2.0。如果1.0软件出现了bug,开发人员要验证bug,直接从tag中取1.0版本的代码就可以了,不会把个个版本混淆。

branches目录

分支 目录,用于开发新功能或解决老版本的bug。比如,1.0版本上线,开发人员全力投入2.0版本的开发,但是,1.0版本突然出现了一个bug必须要修复,而且很紧急,不能等到2.0版本上线,这时候该怎么办呢。正确的做法是,从tag中取1.0版本的代码,建立一个新的分支,开发人员在这个分支上解决1.0发现的bug,解决完成并测试通过之后,在tag中添加一个新的版本标记,比如1.1,然后关闭这个分支。如果1.1再出现bug,那么从1.1建立分支,以此类推,直到2.0出现。

加入和检出工程

由于版本库是本地,我们可以通过文件路径来访问,右键TortoiseSVN - 版本库浏览器,输入

file:///F:/svn_test/

F:/svn_test/就是刚才创建版本库的文件夹

打开版本库浏览器,在trunk目录点击右键,加入文件夹,加入一个新的Android工程TestSVN。

然后将这个工程检出

.settings bin gen这三个目录和代码无关,要先忽略掉,选中这三个目录,右键 TortoiseSVN - 去除版本控制并增加的忽略列表。

提交代码后,这3个文件夹有改变的话不会有提示。

修改代码

删除文件 ,正确的做法是在要删除的文件上点击右键 - TortoiseSVN - 删除。

还原修改 ,右键 - TortoiseSVN - 还原。

重命名 ,同样,右键 - TortoiseSVN - 改名。

增加文件 ,右键 - TortoiseSVN - 增加,文件会变成小加号

移动文件 ,直接打开版本库浏览器拖动,或者剪切,提交

解决冲突 ,冲突形成的原因是两个人同时修改了一个文件的同一个地方,

例如:原始文件为,版本为1

package com.example.test;

public class Test {

    String test = null;

    public Test(String test){
this.test = test
}
}

A和B都checkout这个文件,A修改了文件并进行提交,文件版本变为2

package com.example.test;

public class Test {

    String test = null;

    public Test(String test){
this.test = "test"
}
}

B修改了文件

package com.example.test;

public class Test {

    String test = null;

    public Test(String test){
this.test = "aaa"
}
}

这时候,如果B更新文件,就会提示冲突

冲突原因是两人同时在版本1上进行了修改。

这时要求B对比对比A做的修改和自己的修改,同A沟通后确定最终的代码,然后进行合并。

这里用B的代码为最终代码,修改方法为:

在冲突文件点右键 - TortoiseSVN - 编辑冲突,在最下面的编辑框冲突的地方,也就是是红色叹号的位置点击右键

选择使用“我的”文本块,合并后的代码为:

package com.example.test;

public class Test {

    String test = null;

    public Test(String test){
this.test = "aaa"
}
}

去掉了this.test = test,增加了this.test = "aaa",保存,弹出窗口

选择标记为解决,冲突的叹号就没有了,文件就可以正常的提交了。

如果使用beyond compare的3路合并工具的话,代码更加的直观

左边为B修改后的文件,中间为原始文件,右边为A修改后的文件,最下边为合并后的文件。点击蓝色小箭头使用左边文件,点击黄色小箭头使用中间文件,点击紫色小箭头使用右边文件。

修为完成保存后,要手动标记为解决,右键 - TortoiseSVN - 解决。

创建分支和标记

说白了就是在其他的文件放一份拷贝,打开版本库浏览器,在要创建分支或标记的工程目录上点击右键

选择复制到,输入目标路径,分支是branches,标记是tags

最好输入日志信息,这样就实现了分支或标记

可以通过分支图查看,每增加一个分支,版本号加一。

创建和应用补丁

如果有多个分支,比如XXX纪念版,XXX专版,XXX增值版,修改一个地方要同步到多个分支,是个很麻烦的事情,这时候可以用补丁来解决。

还是使用上面的工程,有一个主干和两个分支,主干中有一个 Test.java 文件

public class Test {

    private String test;

    public Test(String test) {
this.test = test;
}
}

将 “this.test = test;” 修改为 “this.test = "aaa";”

在文件夹的空白处点右键 - TortoiseSVN - 创建补丁,选择修改的文件,点确定,创建一个Test.java.patch的补丁

在检出的分支中点击右键 - TortoiseSVN - 应用补丁,补丁效果如下

合并

在要合并的副本点击空白处点击右键 - TortoiseSVN - 合并,

选择第三个选项,

关于起始和结束的url,查看版本分支图

结束的必须大于起始的的版本号,我想把b1分支的版本5合并到主干,就按下图填写

提交代码后再次查看版本分支图

主干的版本号升级为6,合并完成。

TortoiseSVN 同步分支的更多相关文章

  1. TortoiseSVN中分支和合并实践

    使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并 ...

  2. TortoiseSVN中分支和合并实践【转】

    使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并 ...

  3. TortoiseSVN 的分支合并操作

    今天对svn的分支合并有了兴趣,所以对新建了一个项目练练手. 在网上找了一篇文章做指导: http://www.open-open.com/lib/view/open1346982569725.htm ...

  4. git 本地同步分支数,删除远程已经删除掉的多余分支

    git remote show orgin  (展示当前本地分支和远程上的分支差异,多余分支后会被标注 use 'git remote prune' to remove.) git remote pr ...

  5. 关于AndroidStudio 经常弹出TortoiseSVN 同步的解决办法

    我的AndroidStudio在使用时是从TortoiseSVN的文件夹下直接打开的 但是由于svn自己的特点每改一个文件就要跳出来一个svn的对话框 体验极其难受!砍人的心都有了 网上的解决办法都是 ...

  6. git 全量同步分支

    当前分支是maser分支,我想将stable分支上的代码完全覆盖brush分支,首先切换到brush分支. git reset --hard origin/stable 执行上面的命令后brush分支 ...

  7. git设置远程同步分支

    git push --set-upstream origin yourBranchName

  8. SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支

    硬广:<SVN与TortoiseSVN实战>系列已经写了两篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,关于分支和标签的知识介绍可翻阅第二篇<SVN与T ...

  9. SVN与TortoiseSVN实战:标签与分支

    最近在写<IOS性能调优系列>,今天偷个懒,写写SVN与TortoiseSVN实战的第二篇,标签与分支. 第一篇详见<SVN与TortoiseSVN实战:从入门到精通> SVN ...

随机推荐

  1. pstack使用和原理

    前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于 ...

  2. matplotlib example

    # This file generates an old version of the matplotlib logofrom __future__ import print_function# Ab ...

  3. 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  4. openjudge 大师兄,师傅被妖怪抓走啦

    描述 孙悟空听到沙僧大喊一句:“大师兄,师傅被妖怪抓走啦!”于是孙悟空直追白骨精而去.孙悟空在一条长度为L的森林小路上飞奔,上面有L+1个整点,依次为0,1,2……L.白骨精会使用一种大范围的攻击法术 ...

  5. HDU5934 Bomb(2016杭州CCPC第二题)(强连通缩点)

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. P141 实战练习——字符串(修改后)

    1.在项目中创建Number类,判断字符串“mingrikejijavabu”中字符‘i’出现了几次,并将结果输出. 方法一: // String str="mingrikejijavabu ...

  7. 不带www的域名跳转至www域名

    由于我网站是架设在Linux的VPS上的,所以我用例如下方法 .htaccess文件 首先要开启Apache服务器的.htaccess功能,我在Apache安全配置中有分享过:开启之后新建一个.hta ...

  8. knockoutJs基础1 - 简单的knockoutjs实现

    简单的knockoutjs实现 1.knockoutJs是在MVVM的机制下实现的,所以要有view(HTML页面中的DOM标签)和viewModel(JavaScript中的js代码). 2.在vi ...

  9. Linux-lsof命令

    lsof,List Open Files 列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(lsof强大原因).所以 ...

  10. MySQL删除重复记录只保留一条

    删除表中重复记录,只保留一条: delete from 表名 where 字段ID in (select * from (select max(字段ID) from 表名 group by 重复的字段 ...