svn工具的使用问题总结
前言:
最近在开发的时候,由于需求太多,开发周期长短不一,从主线上切了多个分支(一般不在主线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
2,TortoiseSVN 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工具的使用问题总结的更多相关文章
- SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)
前言 重点解说SVN工具的还原版本号. 1.提交svn之前.要先更新文件.假设更新之后有版本号冲突的话.就线下解决掉冲突,在把该文件标记为已经解决冲突. 正文 使用SVN还原历史版本号 water ...
- svn上check下来的项目,用idea打开,菜单栏没有svn工具解决办法
1.用idea打开你的项目(idea已经配置过小乌龟了) 2.菜单栏点击VCS,Enable Version Control Integration... 3.选择Subversion 4.这时候,菜 ...
- Mac 10.12安装SVN工具SmartSVM 7.6
说明:SVN工具没有最好的,只有用的最顺手的. 下载: (链接: https://pan.baidu.com/s/1dFGqEsT 密码: uyjx)
- Mac端SVN工具CornerStone详解
俗话说:"工欲善其事必先利其器": 对于我们程序员来说,不管你是大神,还是小鱼小虾,进入公司之后,都用过源码管理工具,不然你就不是一个合格的程序员,现在各个公司用于源码管理工具通常 ...
- iOS开发之--svn工具Cornerstone上传忽略.a文件的处理方法
工程文件上传到svn中,.a文件会自动屏蔽(应该叫屏蔽,反正就是上传不上去) 用Cornerstone工具,解决这个问题 1.打开Cornerstone左上角,点Cornerstone->Pre ...
- Eclipse下使用Subversion(SVN工具)
本文目的 让未使用过版本控制器软件或者未使用过subversion软件的人员尽快上手. subversion的使用技巧很多,这里只总结了最小使用集,即主要的基本功能,能够用来应付日常工作. 因此不涉及 ...
- ※版本管理※=>☆SVN工具=>※解决地域麻烦※№→搭建自己的网络SVN (SourceForge 免费) [转]
源文 http://blog.csdn.net/xiaoting451292510/article/details/8562570 分类: 版本管理 2013-02-01 14:44 26057人阅读 ...
- SVN工具常用功能总结
使用SVN作为版本管理工具,可以使用VisualSVN Server+TortoiseSVN搭建SVN版本控制系统,组长安装VisualSVN Server,组员安装TortoiseSVN. Tort ...
- svn工具安装下载Tomcat源码以及导入eclipse
安装 1.svn下载地址 https://tortoisesvn.net/downloads.html 2.语言包下载 3.先安装svn,在直接安装语言包 4.桌面右键可以看到相关svn信息 下载To ...
随机推荐
- Table Tennis Game 2(找规律)
Description Misha and Vanya have played several table tennis sets. Each set consists of several serv ...
- 互评Alpha版本——基于spec评论作品
组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙赛佳 田良 于洋 刘欣 段晓睿 一.二次元梦之队----I DO 在测评该项目时,我们组索要了该组的apk程序,安装之后我就开 ...
- Scrum立会报告+燃尽图(十月十三日总第四次):前期宣传相关工作
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2194 Scrum立会master:刘欣 一.小组介绍 组长:付佳 组员: ...
- Java Web文件上传原理分析(不借助开源fileupload上传jar包)
Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web 最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...
- 404 Note Found -选题报告
目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...
- UITableViewCell contentView layoutSubviews 死循环
发现一个问题,当在UITableViewCell 的 layoutSubviews 中修改 contentView 的frame时会产生死循环.该问题只会出现在iOS8中,iOS7与iOS9均没有问题 ...
- (一)java数据类型图
┏数值型━┳━整数型:byte short int long ┏基本数据类型━━┫ ┗━浮点型:float double ...
- vsftpd:非常安全的ftp服务端程序
主程序:/usr/sbin/vsftpd 主配置文件:/etc/vsftpd/vsftpd.conf CentOS 6 /etc/rc.d/init.d/vsftpd chkconfig vsftp ...
- 用友 SAP 金蝶 季报
用友 2018Q3季报 营收:.42亿 营收收入同比增长:42.36% 净利润:.35万 净利润同比增长率:113.83% 销售毛利率:66.88% 销售净利率:19.29% 用友2017财年年报 营 ...
- 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 ...