一、什么是SVN

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。

二、SVN的下载安装

下载地址:https://tortoisesvn.net/downloads.zh.html

安装完不要忘记重启电脑

安装完成后,按下鼠标右键,会看到如下界面:

说明SVN已经安装成功了。

三、SVN的常用操作

1、迁出配置库内容(SVN Checkout)

1)新建或进入目录下(比如E盘),右键 →SVN Checkout

2)URL of repository 填写仓库路径即可

 3)Revision处,“HEAD revision”是指最新版,也可以指定Revision为任意一个版本。

4)点击“OK”按钮后,在弹出的对话框中输入用户名和密码,验证成功后,项目文件开始从远程服务器下载到本地工作目录中:

5)点击“确定”按钮后,即可获取完成,出现如下下载界面:

6)下载完成后,服务器上所有内容会出现在本地文件夹下

2、更新文件(SVN Update)

1)当从配置库迁出相应目录后,他人对服务器上此目录内容进行了修改,则需要再次获取改动内容到本地目录的过程称为更新。更新可以针对一个文件、几个选中的文件或者整个文件目录。

选中要被更新的文件,右键选择“SVN Update”项,如下:

  2)点击“SVN Update”后会弹出窗口显示更新的进度,如下:

    若上述框中的有文件出现亮红,说明来自配置库的内容与你本地修改内容合并时出现了冲突

3、提交更新(SVN Commit)

1)本地文件修改后,若是需要更新到服务器上,则需要提交(Commit)最新的更新。

  Commit的作用是将本地最新修改的文件同步到SVN服务端,供其他人来参考或者使用,当然使用之前,要先Update一下,来确保是最新的,在修改文件上击右键,出现菜单,选择“SVN Commit…”,如下:

2)然后填写关于本次更新的日志(log message),这是必填项,否则commit会失败,如下:

3)当出现下图所示提示框,则表明刚刚的修改已成功提交,并且当前的SVN版本号加1。

4、增加文件(Add)

1)将需要增加的新文件放入到本地迁出的文件夹TestManger目录的相应位置中,鼠标选中新文件右键选择“Tortoise SVN”的“Add”项,如下图所示:

2)鼠标选中TestManger文件夹右键选择“SVN Commit…”,将新文件上传配置库对应文件夹中(若只上传单个文件,只需点中单个文件上传即可)。

5、检查更新(Check for modifications)

1)此功能可以显示本地对文件所做的修改有哪些还没有提交。不光能看到对文件的修改变化,还包括增加文件或目录,删除文件或目录,移动文件或目录等。当他人提交了哪些文件的改动,也可通过此项来进行查询。

6、删除文件(Delete)

1)选中要被删除的文件,右键选择“Tortoise SVN”的“Delete”项,如下:

2)删除文件后,鼠标选中TestManger文件夹右键选择“SVN Commit…”项进行提交,提交方式同增加文件的提交方式,提交后则将新文件从配置库中删除。

7、撤销更改(Revert)

在修改了某些文件后(文件未上传到配置库),需要返回到修改前的状态,则选中文件夹右键选择“Tortoise SVN”的“Revert...”项进行撤销,本地硬盘上的文件将恢复到修改前的内容,修改的内容将被删除。

8、锁定和解锁(Get lock and Release lock)

当项目需要时可以在本地硬盘中将迁出的内容进行锁定,选中要被锁定的文件右键选择“Tortoise SVN”的“Get lock...”项进行锁定(锁定后他人将无法修改此文件),系统弹出锁定信息框。   当文本文件锁定后,需要通过解锁他人才能继续对文件进行修改。

选中被锁定的文件右键选择“Tortoise SVN”的“Release lock…”项进行解锁。

9、重命名文件(Rename

修改文件名,选中需要重命名的文件或文件夹,然后右键“Tortoise SVN”的“Rename”,在弹出的对话框中输入新名称,点击“OK”按钮,并将修改文件名后的文件或文件夹“SVN Commit…”提交到SVN服务器上。

10、获取历史文件(Show log)

Show log顾名思义是显示日志的作用,主要是显示该文件或者该目录被执行的操作,是被谁修改了,以及修改的时间和日期。鼠标选中文件夹右键选择“Tortoise SVN”的“Show log”项,系统弹出此路径下的所有文件版本信息,如下:

四、SVN的分支合并及冲突的解决方法

1)svn多分支合并主干方法

分支a合并到本地主干后,本地主干提交代码到svn主干,这时主干版本改变,分支b再提交代码到主干会报冲突,版本不统一,这时的解决办法是:
方法1.将主干代码合并到分支b,提交分支b代码到主干即可。
方法2.将分支b代码合并到分支a,提交分支a代码到主干即可。
总之,要避免主干提交后,主干和另一分支的版本冲突问题即可。

2)svn多分支合并主干冲突:svn Working copy and merge source not ready for reintegration

猜测原因:分支主干版本不一致,导致同一文件被认为是不同文件,所以无法合并(A,B两文件合并时也报此错)

解决方法:

分支合并主干产生冲突问题: svn Working copy and merge source not ready for reintegration

原文地址:http://heisetoufa.iteye.com/blog/1736189

错误信息

Working copy and merge source not ready for reintegration 
svn: 'svn://xxx/TestImpl.java@4530' must be ancestrally related to 'svn://xxx/TestImpl.java@4394'
    Merge completed abnormally.
在使用svn的merge过程中,遇到了N多的麻烦
这次遇到的麻烦的具体表现为: 
在主干合并分支中的代码,报错
解决办法为: 
假如需要合并的文件名为:TestImpl.java 
1.在主干的文件上,右键->Team->Copy->选择分支的路径->OK. 
2.到分支的文件夹中找到新copy进来的文件,就是Copy Of TestImpl.java 
3.把分支的TestImpl.java改名为TestImpl2.java 
4.把Copy Of TestImpl.java改名为TestImpl.java 
5.把TestImpl2.java的内容全部覆盖掉TestImpl.java中的内容 
6.把TestImpl.java文件名中的TestImpl2全部改为TestImpl 
7.删除Copy Of TestImpl.java 
8.提交分支的TestImpl.java 
9.在主干的TestImpl.java上进行合并.这个时候svn就不报错了,可以正常的合并代码了

这个错误造成的原因,应该是主干与分支的文件,没有关联关系.通过以上步骤,相当于是给主干和分支建立了关联关系,他们有了主次关系,才能进行合并. 
可是有一点不明白的是,我分支的TestImpl.java是新建的,并且已经通过merge给了主干,但是改了分支后,再在主干merge的时候,却报出了以上的错误

  1. 3)分支合并主干示例 (附例)
  2. 1.主干工程右键选择 merge 合并下一步
  3.  
  4. 2.选中 merge two different trees 下一步
  5.  
  6. 3.from 主干版本路径,版本号选择分支分出去的版本号
  7.  
  8. to 合并的分支目录,版本号一般最新版本
  9.  
  10. 下一步
  11.  
  12. 4.选择属性,一般直接下一步即可
  13.  
  14. 5.下一步完成。若无冲突直接主干提交代码即可。
  15.  
  16. 若存在冲突解决办法,个人建议使用最后一种解决冲突
  17.  
  18. Mark as conflicted. I will deal wiht it later. --标记冲突,合并到主干解决冲突
  19.  
  20. Resolve the conflict by using my version of the file. --直接用主干的文件覆盖,分支修改无效
  21.  
  22. Resolve the conflict by using the incoming of the file. --直接用分支修改覆盖主干,以分支为准
  23.  
  24. Let me edit the file with conflict markers inserted. --直接编辑冲突,编辑完保存,选择yes保存。
  25.  
  26. Launch a graphical conflict resolution editor.--直接比对文件,修改冲突,点击保存。选择yes解决冲突

本文转载于:https://www.cnblogs.com/zhoumiao/p/5459552.html 和  http://blog.csdn.net/aya19880214/article/details/45894863

SVN的使用、分支合并及解决冲突详解的更多相关文章

  1. git使用,多分支合并代码解决冲突,git删除远程分支,删除远程master默认分支方法

    git使用,多分支合并代码解决冲突,git删除远程分支,删除远程master默认分支方法提交代码流程:1.先提交代码到自己分支上2.切换到devlop拉取代码合并到当前分支3.合并后有变动的推送到自己 ...

  2. Mac svn使用学习-4-客户端cli命令详解

    客户端cli的使用 WC:Working Copy 你的工作区 将文件或目录版本化,这样下一次提交到存储库的时候,他们就都会被提交上去.能实现版本化的命令有: add 1.import 是否访问存储库 ...

  3. 基于ORA-12170 TNS 连接超时解决办法详解

    转自原文 基于ORA-12170 TNS 连接超时解决办法详解 1.开始----程序-----Oracle------配置和移植工具-----Net Manager----本地----服务命名---o ...

  4. Git for Windows之分支管理、分支合并、解决分支冲突

    分支是在稳定版本出现bug的情况下,通过分支技术,在保证稳定版本稳定的情况,修改稳定版本的(差异下载的,速度极快,不同于SVN等技术,会将所有的代码下载到本地)副本,通过合并,解决冲突,最后回归到稳定 ...

  5. 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题

    1新建一个存储git的文件夹,命令是: toto@toto-K45VD:~$ mkdir gitfolder 2初始化一个git仓库,命令是: toto@toto-K45VD:~$cd gitfold ...

  6. git常用命令速查:创建,修改提交,撤销,切换分支,合并分支,变基解决冲突

    创建 $ git init  #在当前目录下创建一个空的本地仓库 $ rm -rf  .git  #删除本地仓库 $ git add .  #把当前目录下的所有文件添加到暂存区 $ git commi ...

  7. 版本控制之三:SVN合并及解决冲突(转)

    转自 http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html 接下来,试试用TortoiseSVN修改文件,添加文件,删除 ...

  8. [SVN]两个分支合并

    Date:2014-1-1 Summary: 记录一下自己使用SVN时候的操作步骤,先吃鱼,再学钓鱼 Contents: 环境:从同事的branch迁出一份代码,作为自己的分支进行开发,同时同事也在自 ...

  9. 四、git学习之——分支管理、解决冲突

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

随机推荐

  1. # HNOI2012 ~ HNOI2018 题解

    HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...

  2. Native Wifi API

    原文链接地址:https://www.cnblogs.com/jackcin/p/3285357.html 在windows平台下,可以使用native wifi api来控制无线网卡,包括获取无线网 ...

  3. 廖大大python学习笔记1

    列表classmates = ['Michael', 'Bob', 'Tracy']classmates.append('tom')print classmates# classmates.inser ...

  4. 《Linux内核设计与实现》第5章读书笔记

    第五章 系统调用 一.系统调用概述 系统调用在Linux中称为syscall,返回的值是long型变量:如果出错,C库会将错误代码写入errno全局变量(通过调用perror()函数可以把该变量翻译成 ...

  5. 【DP】【P5007】 DDOSvoid 的疑惑

    Description 给定一棵以 1 为根的有根树,定义树的一个毒瘤集为一个集合,并且集合中任意两个元素之间不存在祖先与后代关系. 定义一个毒瘤集的毒瘤指数为集合内所有元素的价值之和 要求给定树的所 ...

  6. jsonP 后台写法 及 层级树型数据递归查询

    Controller层: package com.taotao.rest.controller; import org.springframework.beans.factory.annotation ...

  7. SpringMVC <mvc:view-controller path=""/>标签

    <mvc:view-controller path=""/>标签的作用 对应WEB-INF目录下面的JSP页面,我们知道是不能直接使用URL访问到.需要通过转发的方式, ...

  8. c/c++中的预编译指令总结

    预处理指令提供按条件跳过源文件中的节.报告错误和警告条件,以及描绘源代码的不同区域的能力.使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致.在 C# 中没有单独的预处理步骤:预处理指 ...

  9. 转--snmp如何被tr069替代

    Form:本期话题:技术点详解---新型网管理念TR-069 一. 带内网管与带外网管 网络设备是一种资产,资产往往都需要进行管理,网络设备也不例外,网络设备的作用是网络互联,网络应用是一种实时交互性 ...

  10. Nginx--try_files

    Nginx的配置语法灵活,可控制度非常高.在0.7以后的版本中加入了一个try_files指令,配合命名location,可以部分替代原本常用的rewrite配置方式,提高解析效率.   作用域:se ...