SVN MERGE 和冲突

SVN分支合并实战:如何用Merge a range of revisions解决基线冲突(附命令行操作) 本文深入解析了在SVN分支合并中,如何运用Merge a range of revisions功能精准解决基线冲突。通过详细的命令行操作步骤,指导开发者将基线改动安全合并到功能分支,并最终将分支成果合并回主干,有效应对基线频繁迭代带来的合并难题,提升版本管理效率。 阅读详情

摘要:最佳做法是避免冲突。冲突时,不要把branch merge到trunk. 先由最新版本的trunk得到branch,然后再修改文件,直接merge过去就行。这样不会有冲突。先用svn merge --dry-run来模拟假装merge一下看是否有冲突


1 svn merge

# svn merge --help
merge: Apply the differences between two sources to a working copy path.
usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
       2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
       3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]

我们以第一个为例
merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
这个help里面提示,merge需要三个参数
sourceURL1,sourceURL2的含义并不是两个分支,或者一个分支一个主干,而是同一个分支的两个状态,或者说是两个版本。对这两个版本做一个diff,然后把diff的结果,应用到最后的参数WCPATH上,WCPATH代表是一个本地已经checkout的工作区

svn merge的思想是diff and apply

比如,我开发一个项目叫做proj
目录结构是
proj/trunk
proj/branches
proj/tags

(省略了http:// 之后的,只是相对路径,但是真正使用时候不能省略)

当版本达到100的时候,我决定做一个branch进行一些其他开发

 [Reversion:100]
 $svn cp proj/trunk proj/branches/proj_branch_1
 OK Reversion:101

然后,trunk和proj_branch_1都在开发,到了某一个版本,比如150,branch开发完成,需要merge回到trunk
此时的目录结构是
[Reversion:150]
proj/trunk
proj/branches/proj_branch_1
proj/tags

按照svn的实现,我需要知道proj_branch_1所做的所有的变化,也就是当前的状态对刚刚生成时候状态的变化。根据这个变化生成一个diff文件,在apply一个本地的工作区上。(建议是一个干净的本地trunk工作区)

那么执行
$cd proj/trunk
$svn merge proj/branches/proj_branch_1@101 proj/branches/proj_branch_1 .

其实,第一个URL(我们称之为左边),为起始状态,通过最后的@101,表示取版本101,这个101就是cp成功之后的那个版本。第二个URL(我们称之为右边),为最终状态,取最新的,
 左边和右边做了一个diff,应用到当前工作区目录,也就是trunk。
 此时
 $svn st就可以看到变化了

这里的一个问题是如何获取这个cp之后的版本,也就是例子中的101
可以使用svn log里面的--stop-on-copy命令
$svn log --stop-on-copy proj/branches/proj_branch_1
会到cp的时候停下来,那里边标注的版本就是需要的版本

 比如,这是一个真正项目的一个例子,
 ------------------------------------------------------------------------
 r995 | yinweiming | 2007-10-24 09:07:08 +0800 (三, 24 10月 2007) | 1 line

 Create a branch for proj client using
 ------------------------------------------------------------------------
 其中的r995,995就是我需要的版本
 (说明一下,commit时候写commet的好处,比如这里我就很明确的肯定这是branch的起始点)

对于svn merge的另外的用法也是类似,只要是明白了
他是根据左边,右边生成diff,然后应用到本地的一个工作区就容易理解了。

还有可以使用svn merge --dry-run来模拟假装merge一下,看一下merge会发生什么,而不是真正的做这个动作。


而对于merge的help里面的 3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]
这个也很容易理解,就是取 SOURCE 这个东西,版本N,M之间的区别,作用在WCPATH这个本地工作区上

注意!
做branch千万别根据本地修改过的工作区做,一定基于某一个URL的版本做
我就吃过这个亏
diff的时候,diff不出来,因为基于本地工作区的,所以现在merge起来很是费劲


转自:http://www.blogjava.net/lingy/archive/2009/06/02/279544.html


2 svn resolve 解决冲突

svn resolve --accept  ARG  file 

 --accept ARG             : specify automatic conflict resolution source
                            ('base', 'working', 'mine-conflict',
                             'theirs-conflict', 'mine-full', 'theirs-full')


Resolve “conflicted” state on working copy files or directories. This routine does not semantically resolve conflict markers, however, it replaces PATH with the version specified by the --accept argument and then removes conflict-related artifact files. This allows PATH to be committed again—that is, it tells Subversion that the conflicts have been “resolved.”. You can pass the following arguments to the --accept command depending on your desired resolution:

base

Choose the file that was the BASE revision before you updated your working copy. That is, the file that you checked out before you made your latest edits.

working

Assuming that you've manually handled the conflict resolution, choose the version of the file as it currently stands in your working copy.

mine-full

Resolve all conflicted files with copies of the files as they stood immediately before you ran svn update.

theirs-full

Resolve all conflicted files with copies of the files that were fetched from the server when you ran svn update.



例子:

工程师A修改了a.txt的第一行,提交了。

工程师B也修改了a.txt的第一行,然后执行svn up,这时SVN提示了:(以下,你开始扮演工程师B的角色了)
$ svn up
在 “a.txt” 中发现冲突。
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
(mc) 我的版本, (tc) 他人的版本,
(s) 显示全部选项:

我一般选择p(推迟),即引入冲突到本地,不过不会影响到SVN服务器端,可以放心。

OK,开始解决冲突了。

这时,会生成几个文件:

a.txt 

 a.txt.mine  a.txt.r6328  a.txt.r6336

其中a.txt中包含了工程师A、B的所有修改,以<<<<<<<、=======、>>>>>>>分隔。

a.txt.mine是工程师B的修改,也就是未update前的a.txt。

a.txt.r6328 是工程师A提交前的版本,即未导致冲突的版本。

a.txt.r6336是工程师A提交后的版本,即导致冲突的版本。

一般,查看a.txt就可以看到冲突的详情了:

[yicheng@chengyi svntest]$ cat a.txt

<<<<<<< .mine

i also modify ,agndagnagasdg;

=======

i modify this line;

>>>>>>> .r6336

以上,<<<<<<< .mine和=======之间是工程师B(当前的“你”)修改的内容,=======与>>>>>>> .r6336之间是工程师A修改的内容。这时,最好的办法是,叫上工程师A,你们一起确定这些修改是否都需要,是否相互兼容,然后留下需要的部分,删 除<<<<<<< .mine、=======和>>>>>>> .r6336。

然后,测试,测试!确定没问题之后,就可以告诉SVN,你解决冲突了:

svn resolve –accept working a.txt (该命令会删除a.txt.mine  a.txt.r6328  a.txt.r6336)

svn ci -m ’some comment’ a.txt

基于上下文的 Listwise 重排模型(一):miRNN 2018年阿里团队提出的miRNN(Mutual Influence aware RNN)模型,首次将电商搜索重排建模为全局优化问题,通过RNN捕捉商品序列的相互影响,结合Beam Search生成最优排序,在淘宝搜索中实现GMV(商品交易总额)提升5%的突破。本文将结合论文细节与通俗案例,拆解这一工业级重排框架的核心逻辑。 阅读详情

相关推荐

Boost电路双闭环控制MATLAB仿真

通过电流内环控制,我们可以改变目标平均电流基准值的大小来闭环改变占空比,再改变输出电压与电路电流,直到电路电流达到基准电流才达到稳态。但是我们的基准电流依旧是外部提供的,下边的电压外环控制就是电路自己计算基准电流。

Fourglsl的博客 5846

TortoiseSVN使用merge出现代码冲突后正确的解决方式

本文还在继续完善中,稍安勿躁(滑稽)…… 前言 公司代码项目使用SVN管理,分为dev(开发)、test(测试)、prod(生产)这三个版本; 平时用dev开发,开发完毕后要将代码合并到test并提测,测试完成后要把代码合并到prod准备打包上生产。 期间,各自开发并提交代码时,经常会产生代码冲突,不过这个还比较好解决,可以使用IDEA(或Eclipse)自带的工具解决,或者先记录下自己的修改内容、删掉冲突文件重新update,然后再修改文件提交自己修改的内容即可。(其实主要是冲突文件较..

BHSZZY的博客 1万+

基于ZYNQ PL的AD7606数据采集与FFT实时频谱分析:从硬件到创新实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKnmpgJm-1750295287594)(https://example.com/fft_plot.png)]本文涉及代码已在Xilinx ZCU102开发板与AD7606评估板上验证通过,采样率支持200KSPS@8通道,FFT计算延迟<1ms。传统MCU+DSP方案难以兼顾速度与功耗,而ZYNQ的PL+PS架构为这一问题提供了完美解决方案。本文实现的ZYNQ PL方案突破了传统处理器的性能瓶颈,通过。

QQ_778132974的博客 339

SVN回滚代码时,提示冲突怎么办

  首先要保证本地已经没有需要提交的代码,避免覆盖。这个是老生常谈,还是要强调。 文本冲突 删除

柳鲲鹏 1417

Unreal 从入门到精通之VR常用操作

本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。

TxNet 951

通过WorkVisual连接KUKA机器人的具体方法

通过WorkVisual连接KUKA机器人的具体方法

Robot_PLC_HMI_Automation 6843

SVN 不同的环境merge项目merge产生冲突以及解决冲突

一 产生冲突 现在有一个项目,有一个trunk目录,给trunk目录创建了一个分支dev目录,目录里都有1.txt  2.txt文件,如下: dev修改了1.txt,并提交,内容如下: dev 1a trunk也修改了1.txt,并提交,内容如下: trunk 1a 此时,把dev合并到trunk,会产生冲突 二 解决冲

男儿当自强 1万+

【RKNN】RKNN(Rockchip Neural Network)​​ 的详解

RKNN 为 Rockchip 硬件提供了高效的 AI 推理解决方案,适合需要低功耗、实时响应的边缘场景

浩瀚之水的专栏 1684

svn中合并(merge)问题和如何解决版本冲突

1.首先先解释一下合并中的两种方法      合并到

a5421901的专栏 3万+

Windows原生与WSL2环境下OpenClaw性能与兼容性的对比分析研究

本文对比分析了Windows原生环境与WSL2环境下运行OpenClaw的性能与兼容性。Windows原生环境提供深度系统集成、图形界面支持和硬件加速优势,适合需要Windows生态集成的用户;WSL2则提供接近原生Linux的性能体验,兼容Linux工具链,适合开发者和跨平台需求。文章详细介绍了两种环境下的推荐硬件配置、系统版本选择及必备工具,并提供了具体的部署步骤指南。研究表明,两种环境各有适用场景,用户可根据需求选择最适合的部署方式。

一键难忘的博客 1218

sec_uid

webcast_uid转sec_uid,webcast_uid转uid,webcast_uid转dy号

m0_56967679的博客 4421

【SVN】merge 合并trunk branch代码,解决冲突

3.选择e进行手动编辑冲突文件,根据上面冲突提示,进行编辑即可,保存更改,又出现刚才的选项。添加--dry-run参数仅仅是对merge的内容进行测试,不进行实际merge操作,检查是否由冲突,冲突发生在哪个文件;对merge的svn -r 19906进行测试,不进行实际merge操作,是否与本地文件存在冲突;由上图可知因为merge的trunk的代码与本地代码存在冲突,选择df,显示冲突;5.自此,整个merge和解决冲突结束,下面查看修改状态,提交代码;2.edit,对冲突内容进行编辑,解决冲突;

smartvxworks的博客 1327

Pulseaudio之同步/异步(十一)

PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。 PulseAudio的主要特点包括: 可对每一个应用程序进行音量控制Per-application volume controls 可扩展的插件与支持可装载模块架构 兼容性许多流行的音频应用程序 支持多重音源和多重输出 低延时操作和支持延迟测量 一个对处理器资源效率零拷贝内存架构 能够发现本地网络上使用PulseAu

Android系统攻城狮 999

svn的merge,解决冲突

冲突的解决 一 一般在产生冲突的时候会有如下提示: 1.root@letuknowit:/home/kris/calc/trunk# svn up 2.Conflict discovered in 'main.c'. 3.Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: 解释如下: (p) postpone 暂时推后处理,我

m0_37564426的博客 4046

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

svn merge命令的使用及冲突解决

通过svn命令建立分支后,可以使用merge命令来合并主干和分支间的代码 首先要建立一个分支: svn cp url_to_trunk url_to_branches/branches_name (一)合并某一版本号范围之间的代码:(下例要合并205471版本的代码, 从一个2_6_3分支合并到300分支) svn merge ^/mobile_ios/trunk/Stor

xuanwenchao的专栏 5983

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

svn 的tag,分支管理,merge合并冲突

svn目录test/(branck/project/tag/trunk)2、选择存放tag的目录,然后点ok就可以了(此时在tag下面就能更新到了)tag每次项目release时,必须打一次tag,方便出问题时恢复。tag每次release时的标签。project当前项目。branch分支。............

为天空着色 903

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

喵星人 3万+

SVN小乌龟 merge分支到主干时,代码冲突的解决思路

SVN

Brave_heart4pzj的博客 1518

svn 合并冲突 Postpone ,mark as resolved , Merge the files, Replace and merge 区别

Replace and merge(替换并合并):将本地文件替换为服务器上的文件,然后将其标记为已解决状态。Merge the files(合并文件):将两个冲突的文件进行手动合并,然后将其标记为已解决状态。Postpone(推迟):暂时不处理冲突,先将其标记为未解决状态,以便日后再次进行处理。Mark as resolved(标记为已解决):手动解决冲突后,将其标记为已解决状态。

还在活水泥的未来包工头 4598

Zend Studio中SVN的使用

一、 SVN新建分支 第一步:切换到tags/caboose-最新版本的目录   右击->Team-> Switch to another 第二步:新建分支到Branch  右击->Team-> Branch/Tag   二、SVN 做 rebase 过程 第一步:branches先提交,后更新。提交是把自己的代码合并到线上的branches,更新是把线上branch

pgyphp的博客 1897

[linux] svn merge 命令(命令使用,解决产生冲突,代码回滚)

svn merge 命令的使用 merge是干啥的呢? 使用过SVN都知道SVN其实就是一个代码管理的软件,使用它可以很好的解决代码冲突。他可以针对一个文件产生不同的版本,每一个版本都对应自身的改动。因为它记录了每一个文件的修改变化(可以理解为文件之间的不同点diff),这对于我们的开发,理解有很好的作用。 简而言之就是你想把某一版改动合到另一个branch上的时候,记住你合过来的改动只是每...

hello_new_life的博客 1万+

svn冲突

在项目中提交svn的时候遇到一个问题:文件上有

好记性不如烂笔头 2030

svn merge以及Unknown action received: skipped conflicted path冲突解决

在使用svn管理项目时,使用svn的merge用法: 这样就可以让svn进行自动merge。 在merge后出现冲突,提示:Unknown action received: skipped conflicted path的解决办法: 转载于:https://blog.51...

weixin_33849215的博客 1581

SVN 解决冲突

假设 A、B 两个用户都在版本号为 100 的时候,更新了 kingtuns.txt 这个文件,A 用户在修改完成之后提交 kingtuns.txt 到服务器, 这个时候提交成功,这个时候 kingtuns.txt 文件的版本号已经变成 101 了。同时B用户在版本号为 100 的 kingtuns.txt 文件上作修改, 修改完成之后提交到服务器时,由于不是在当前最新的 101 版本上作的修改,所以导致提交失败。我们已在本地检出 runoob01 库,下面我们将实现版本冲突的解决方法。

xiaoaque的博客 962

local add, incoming add upon merge

在svn命令行merge之后文件经常会出现local add, incoming add upon merge问题,导致无法提交,可以通过以下命令解决冲突 Summarizing to resolve the tree conflict committing your working dir with svn client 1.6.x you can use: [code="java"] ...

mrjeye's blog 291
上一篇: shell命令前后端切换和暂停
下一篇: zookeeper常用sehll命令
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值