前言:

最近在开发的时候,由于需求太多,开发周期长短不一,从主线上切了多个分支(一般不在主线trunk上开发,万一线上出问题可及时修改代码上线),在部分功能上线后,想把代码同步到新的分支上去,最开始的想法是人工去合并代码,把两个分支down下来把修改的文件比较并进行合并,然后最后提交;但是文件修改的很多很杂,人工去合并肯定出现误差,比如代码合并少了;其实这些都是可以通过svn工具进行处理的,于是回顾了下开发过程中经常用到的svn功能。

svn有客户端和服务端两个,我们一般开发的时候,不会涉及到服务端svn的管理,服务端一般是配管来进行管理的。

我们平时开发接触到的都是svn的客户端tortoise svn,还有开发工具eclipse的svn插件.

最常用的svn功能有:检出工程 ,提交文件,更新文件,合并代码 ,show revision graph,切换(切换到历史版本或者是当前最新版本),显示资源历史记录;

在大多数情况下我们使用开发工具的svn插件,方便,但是插件有时候不是很稳定,经常抽风,这时候小乌龟就该上场了。

小乌龟的基本使用:

1,查看资源库内容,右键-tortoiseSvn-repo browser 输入url就可以查看服务器上的代码

2,检出资源的时候,右键-tortoiseSvn-export/svn check out[export和svn check out 是有区别的,export把源码down到本地,然后,然后,就和服务器端的svn没联系了,所以开发的时候建议用check out]

3,提交新增文件,右键-tortoiseSvn-Add

4,提交修改文件,右键-tortoiseSvn-commit

5. 比较历史文件,右键-tortoiseSvn-diff with previous version

6. 把文件切换到历史一个版本 ,在文件右键-tortoiseSvn-switch

使用中常见问题总结:

1,代码冲突如何解决?

冲突原因: A 、 B 两个用户都在版本号为 1 的时候,更新了1.txt 这个文件, A 用户在修改完成之后提交1.txt 到服务器,这个时候提交成功,这个时候 1.txt 文件的版本号已经变成 2 了。同时 B 用户在版本号为 1 的1.txt 文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的 2 版本上作的修改,所以导致提交失败。

版本冲突现象:冲突发生时, subversion 会在当前工作目录中保存所有的目标文件版本 [ 上次更新版本、当前获取的版本 ( 即别人提交的版本 ) 、自己更新的版本、目标文件 ] 。假设文件名是 1.txt

对应的文件名分别是:1.txt.r101,1.txt.r102,1.txt.mine,1.txt 。同时在目标文件中标记来自不同用户的更改。

 解决冲突有三种选择

A 、放弃自己的更新,使用 svn revert (回滚),然后提交。在这种方式下不需要使用 svn resolved (解决)

B 、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行 resolved filename 并提交 ( 选择文件 — 右键 — 解决 ) 。

C 、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行 resolved filename 来解除冲突,最后提交。(这种方式比较多用)

   使用tortoiseSvn解决冲突图形方法:

在冲突的文件上(选中文件 -- 右键菜单 —TortoiseSVN—Edit conflicts (解决冲突)),Theirs 窗口为服务器上当前最新版本,Mine 窗口为本地修改后的版本,Merged 窗口为合并后的文件内容显示 ;

修改完成后,保存 1.txt 文件内容;

在冲突目录下,选中文件 -- 右键菜单 —TortoiseSVN—Resolved (解决)。会列出冲突的文件列表,如果确认已经解决,点 OK ;

提交解决冲突后的文件。

命令行操作 :

      1、svn update后,1.txt文件出现冲突,选择base版本,即1.txt.rOld作为最后提交的版本

$ svn resolve –accept base

  2.手工修改1.txt文件,然后将当前拷贝即1.txt作为最后提交的版本

    $ svn resolve –accept working 1.txt

  3.使用1.txt.rNew作为最后提交的版本

    $ svn resolve –accept theirs-full 1.txt

  4.使用1.txt.mine作为最后提交的版本 

    $ svn resolve –accept mine-full 1.txt

  5.使用1.txt.mine作为最后提交的版本 

    $ svn resolve –accept theirs-conflict 1.txt  

resolve: 解决工作副本中目录或文件的冲突。
用法: resolve --accept=ARG [PATH...] 注意: 当前需要选项 --accept 。 有效选项:
--targets ARG : 传递文件 ARG 内容为附件参数
-R [--recursive] : 向下递归,与 --depth=infinity 相同
--depth ARG : 受深度参数 ARG(“empty”,“files”,“immediates”,或“infinity”) 约束的操作
-q [--quiet] : 不打印信息,或只打印概要信息
--accept ARG : 指定自动解决冲突动作的源
('base', 'working', 'mine-conflict',
'theirs-conflict', 'mine-full', 'theirs-full') 全局选项:
--username ARG : 指定用户名称 ARG
--password ARG : 指定密码 ARG
--no-auth-cache : 不要缓存用户认证令牌
--non-interactive : 不要交互提示
--trust-server-cert : 不提示的接受未知的 SSL 服务器证书(只用于选项 “--non-interactive”)
--config-dir ARG : 从目录 ARG 读取用户配置文件
--config-option ARG : 以下属格式设置用户配置选项:
FILE:SECTION:OPTION=[VALUE]
例如:
servers:global:http-library=serf

2TortoiseSVN branch/tag switch Relocate

  Switch是转换当前工作副本对应的工作目录,一般是从trunk工作目录转向tag工作目录,或者从tag转回来,switch的类似update,将switch的目标工作目录的文件更新到本地,一般会产生很多冲突。【像在前言提到的需要合并或切换的分支的时候,就可以用此功能】

  Relocate是当代码仓库的访问路径(服务器的计算机名称修改,或IP地址变更,URL变更),而此时已检出修改的工作副本(working copy)没有变更,若此时直接提交(commit),肯定不能成功,因为此提交地址对应的svn服务器不存在了。TortoiseSVN为我们提供了重定位工作副本的功能(TortoiseSVN → Relocate),此指令扫描.svn文件夹中的所有条目,改变条目的url(服务器地址)为新输入的地址。

  重定位操作可能的原因:

  a) 服务器的IP地址已更改

  b) 协议已更改(比如从http://改为 https://)

  c) 版本库在服务器的路径已更改

3.svn switch的使用(看完merge的功能后,对switch的理解就是切换分支的作用)

     a) 分支内的switch命令使用,右键A文件swith B文件,实际是将 B 的内容更新到了 A。

   b)分支A和B,A本地文件有修改未提交,然后swtih B分支时,若A本地修改文件不会丢失;

分支A和B,A分支有文件修改并已提交,然后switch B分支,此时A分支代码被覆盖,这个时候就相当于update B 文件到A分支,所以慎用!!

分支A和B,A本地文件有修改,B分支同一文件也有修改并已提交,然后swtih B分支时,此时会文件冲突;

分支A和B,B分支有文件修改并已提交,然后swtih B分支时,B分支文件被更新到A;

4.svn创建分支

svn copy -m "1.7.2 - theme" svn://localhost/www/trunk svn://localhost/www/branches/branch
svn co svn://localhost/www/branches/branch

 5.合并代码

     a)从trunk中merge到分支。(如果使用小乌龟选择第一项)

#前面的1是开分支之前trunk的版本号,后面的2是merge时trunk的版本号
svn merge -r 1:2svn://localhost/www/trunk

b)从分支merge到trunk。(如果使用小乌龟选择第二项)

#先从trunk checkout一份新鲜的代码,然后cd到该版本目录下
svn co svn://localhost/www/trunk
cd trunk
#12973是分支开始的版本号,13006是分支结束的版本号
svn merge -r 12973:13006 svn://localhost/www/branches/branch

c)分支合并(小乌龟第三项)

合并的时候,一定配上起始版本号

终上所述:前言部分所遇到的问题,应该已经有比较好的解决方法,有效的使用svn工具会为我们的开发效率带来很大的提升。

备注:很好的一份svn使用手册http://www.bsdmap.com/manuals/subversion/index.html

svn工具的使用问题总结的更多相关文章

  1. SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)

    前言 重点解说SVN工具的还原版本号.   1.提交svn之前.要先更新文件.假设更新之后有版本号冲突的话.就线下解决掉冲突,在把该文件标记为已经解决冲突. 正文 使用SVN还原历史版本号 water ...

  2. svn上check下来的项目,用idea打开,菜单栏没有svn工具解决办法

    1.用idea打开你的项目(idea已经配置过小乌龟了) 2.菜单栏点击VCS,Enable Version Control Integration... 3.选择Subversion 4.这时候,菜 ...

  3. Mac 10.12安装SVN工具SmartSVM 7.6

    说明:SVN工具没有最好的,只有用的最顺手的. 下载: (链接: https://pan.baidu.com/s/1dFGqEsT 密码: uyjx)

  4. Mac端SVN工具CornerStone详解

    俗话说:"工欲善其事必先利其器": 对于我们程序员来说,不管你是大神,还是小鱼小虾,进入公司之后,都用过源码管理工具,不然你就不是一个合格的程序员,现在各个公司用于源码管理工具通常 ...

  5. iOS开发之--svn工具Cornerstone上传忽略.a文件的处理方法

    工程文件上传到svn中,.a文件会自动屏蔽(应该叫屏蔽,反正就是上传不上去) 用Cornerstone工具,解决这个问题 1.打开Cornerstone左上角,点Cornerstone->Pre ...

  6. Eclipse下使用Subversion(SVN工具)

    本文目的 让未使用过版本控制器软件或者未使用过subversion软件的人员尽快上手. subversion的使用技巧很多,这里只总结了最小使用集,即主要的基本功能,能够用来应付日常工作. 因此不涉及 ...

  7. ※版本管理※=>☆SVN工具=>※解决地域麻烦※№→搭建自己的网络SVN (SourceForge 免费) [转]

    源文 http://blog.csdn.net/xiaoting451292510/article/details/8562570 分类: 版本管理 2013-02-01 14:44 26057人阅读 ...

  8. SVN工具常用功能总结

    使用SVN作为版本管理工具,可以使用VisualSVN Server+TortoiseSVN搭建SVN版本控制系统,组长安装VisualSVN Server,组员安装TortoiseSVN. Tort ...

  9. svn工具安装下载Tomcat源码以及导入eclipse

    安装 1.svn下载地址 https://tortoisesvn.net/downloads.html 2.语言包下载 3.先安装svn,在直接安装语言包 4.桌面右键可以看到相关svn信息 下载To ...

随机推荐

  1. Table Tennis Game 2(找规律)

    Description Misha and Vanya have played several table tennis sets. Each set consists of several serv ...

  2. 互评Alpha版本——基于spec评论作品

    组名:可以低头,但没必要 组长:付佳 组员:张俊余  李文涛  孙赛佳  田良  于洋  刘欣  段晓睿 一.二次元梦之队----I DO 在测评该项目时,我们组索要了该组的apk程序,安装之后我就开 ...

  3. Scrum立会报告+燃尽图(十月十三日总第四次):前期宣传相关工作

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2194 Scrum立会master:刘欣 一.小组介绍 组长:付佳 组员: ...

  4. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  5. 404 Note Found -选题报告

    目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...

  6. UITableViewCell contentView layoutSubviews 死循环

    发现一个问题,当在UITableViewCell 的 layoutSubviews 中修改 contentView 的frame时会产生死循环.该问题只会出现在iOS8中,iOS7与iOS9均没有问题 ...

  7. (一)java数据类型图

    ┏数值型━┳━整数型:byte short int long               ┏基本数据类型━━┫              ┗━浮点型:float double              ...

  8. vsftpd:非常安全的ftp服务端程序

    主程序:/usr/sbin/vsftpd 主配置文件:/etc/vsftpd/vsftpd.conf CentOS 6  /etc/rc.d/init.d/vsftpd chkconfig vsftp ...

  9. 用友 SAP 金蝶 季报

    用友 2018Q3季报 营收:.42亿 营收收入同比增长:42.36% 净利润:.35万 净利润同比增长率:113.83% 销售毛利率:66.88% 销售净利率:19.29% 用友2017财年年报 营 ...

  10. Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

    我在update数据库的时候出现的死锁 数据库表死锁 Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackExcept ...