svn merge 回滚

聊一聊 svn merge 命令。

svn 是啥就不用介绍了吧,谁用谁知道。有了 svn,开发者只要把代码提交上去,无论山崩地裂、电脑进水、硬盘格式化,哪怕换了一台电脑,都能随时把代码找回来。不过从自己工作中看到的现象来说,可能还有很多人并不了解 svn 真正的便捷之处。这里我们就聊一聊代码合并、回滚必备的利器——svn merge 命令。

一说到回滚,可能很多人立马先想到了 svn revert。其实非也,svn revert 只能把未提交的本地修改撤销,对于已经提交的代码就无能为力了。要把已经提交上去的代码回滚掉,非 svn merge 莫属。

PS:我们这里以 Linux shell 下的 svn 命令行工具为例进行介绍。Windows 图形界面版本其实原理一样,只是把命令转移到 GUI 里面去了。


 

在 shell 里输入 svn help merge ,可以看到大片的帮助文档,新手看了真是无从下手。不急,且看为首的几行:

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[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

其实只要看明白这 4 行,svn merge 命令就搞定了。

svn merge 能干啥?

我们都知道,svn 上面保存了一份代码的所有历史版本。随着开发过程中不短提交新的代码,版本只会越来越多,而已存在的版本又无法删除。所以,如果某个版本的代码提交错了、不想要了怎么办?

这种情况,其实只要把最后一次提交里,新增的代码删掉、删掉的代码加回来、修改的代码改回去,然后 svn ci 一下就好。虽然这样好像又多了一个版本,但其实代码是回到前面一个版本的状态了。

而要把新增的代码删掉、删掉的代码加回来、修改的代码改回去,手工修改无疑太笨,也太容易出错。这就轮到 svn merge 命令出场了。

merge: Apply the differences between two sources to a working copy path.

help 文档告诉我们,merge 就是把两套代码之间的 diff 生效到本地的一个路径上。

比如上面的例子,我们假设有一套代码维护在 svn 上,一开始的版本号是 r1,后来提交了一次版本就是 r2,然后发现 r2 写错了、想撤销这次修改。这次修改做的变化就是 r1 -> r2 两个版本的 diff;那么想撤销修改,只要把 r2 -> r1 的 diff 再提交上去,虽然生成了新的版本号 r3,但其实 r3 里的代码跟 r1 是完全一样的。

svn merge 怎么用?

说了这么多虚的,那怎么操作呢?我们继续跟着 help 往下看。

1. 在同一个 URL 上做 merge

3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

前面的例子其实是第 3 种用法,我们先看这个。假设 shell 里面当前路径就对应着 svn 上代码最上层目录,要实现上面的例子,可以直接这么写:

svn merge -r r2:r1 .

注意结尾有个“.”,表示将 diff 生效到当前路径。然后提交代码即可。

svn ci -m "rollback r2 -> r1"

2. 在不同的 URL 上做 merge

前面的例子要求远程代码 URL 跟本地代码对应的 URL 必须一致,即都在 trunk 上,或者都在同一个 branch 或者 tag 上。一般情况需要回滚代码、撤销某次修改,上面的命令足矣。而如果涉及到多个 branch 合并到 trunk 之类的问题,还需要继续往下看 :)

 


To be continued ...

(有时间再接着写)

 

转载于:https://www.cnblogs.com/jiangzhaowei/p/5671484.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用视觉信息,为什么能把移动机器人的空间位置信息记录下来

1、首先由相机的世界坐标系,物体的世界坐标-》相机坐标-》到投影面坐标-》到像素坐标; 最终一个世界中物体的三维点被记录在相机的一个转化的坐标系中;当同时拿到很多的物体坐标时候,此时相机中就拥有了该 整个观察到物体的坐标…

大三实验室 经验总结

1.高电压采样时,需要将多个电阻串联起来而不能使用一个等效的大电阻,因为同样封装下,一个电阻阻值太大能承受的电流就会比较小 PI*I*R。 2.单片机,DSP,FPGA的纯输出功能IO口,都应该加上74HC04非门作为硬件防火墙&#…

Spring4 MVC文件下载实例

这篇文章将向您展示如何使用Spring MVC4执行文件下载,我们将看到应用程序从文件系统内部以及外部文件下载文件。本教程的主要亮点: 下载文件是相当简单的,涉及以下步骤。 创建一个InputStream到文件用于下载。查找MIME类型下载文件的内容。–…

学习笔记(54):Python实战编程-Scale

立即学习:https://edu.csdn.net/course/play/19711/343117?utm_sourceblogtoedu 1.滑块组件Scale: 用于定义一定范围的区间,如音量大小的调整就是滑块组件,这里是以滑动滑块来改变标签文字的大小为例进行说明的 2.知识点: 1)滑…

不可不知的:iOS开发的22个诡异技巧

结合自身的实践开发经验总结出了22个iOS开发的小技巧,以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题,光读着便已忍俊不禁。 1. TableView不显示没内容的Cell怎么办? 类似于图1,我不想让下面的那些空显示。很简单&#…

linux删除之前的文件日志

linux下每天都在产生LOG日志文件,如果不定期删除,迟早挤爆硬盘,如果手动删除,几次可以,不是长久之计。这些事交给Linux系统就可以解决。 试验环境: 系统:CentOS 6.5 x64 测试路径、测试文件名、…

线程操作范例

实例要求: 设计一个线程操作类,要求可以产生三个线程对象,并可以分别设置三个线程的休眠时间。如下所示: 问怎么设计? 分析 从之前学习知道,线程的实现有两种方式,一种是继承Thread类&#xff0…

学习笔记(55):Python实战编程-Scrollbar

立即学习:https://edu.csdn.net/course/play/19711/343118?utm_sourceblogtoedu 1.滚动条ScrollBar: 当列表内容项的内容过多时,就需要使用到这个滚动条来进行拖动显示更多的其他选项;一般滚动条是和listbox配对使用的 2.注意事项&#xff…

【转】Unity3D研究院之使用Xamarin Studio调试Unity程序

如果你是在windows上开发,就无视这篇文章吧。 为什么要用Xamarin Studio 你可以看看我之前的文章 http://www.xuanyusong.com/archives/2683 unity4.x 和 unity5.x都可以用Xamarin Studio 来调试,亲测! 先下载插件:http://files.u…

配置SMB共享 、 配置NFS共享

虚拟机,均要检测1. Yum是否可用2. 防火墙默认区域修改为trusted3. IP地址是否配置########################################################################################################### samba 文件共享(共享文件夹) Samba 软件…

stdout标准输出、stderr标准错误输出 标准输入、标准输出、标准错误输出分别被定义为0、1、2。

$ make > compile.log 2>&1 首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 compile.log 这个文件中。这样我们就可以将所有的输出都存储到文件中了。

centos7 和centos 6的一些区别

平时的我们基本都用CentOS 6 。但是偶尔遇到的就记录下来了,与大家分享。防火墙[CentOS 6] iptables[CentOS 7] firewalld在7中开启80端口 firewall-cmd --zonepublic --add-port80/tcp --permanent #出现success表明添加成功复制代码命令含义&#xff1a…

systemverilog 起步

转一篇Systemverilog的一个牛人总结: http://blog.sina.com.cn/s/blog_5e9b181a010188re.html 1、合并数组和非合并数组 1)合并数组: 存储方式是连续的,中间没有闲置空间。 例如,32bit的寄存器,可以看成是4…

学习笔记(56):Python实战编程-Menu

立即学习:https://edu.csdn.net/course/play/19711/343119?utm_sourceblogtoedu 1.菜单menu: 1)弹出式菜单,类似与电脑桌面右击弹出的菜单成为弹出菜单; 2)窗体式菜单:类似于word上面的菜单栏 2.窗体菜单创建的步骤…

SystemCenter2012SP1实践(19)集成WSUS更新服务器2012

今天我们的任务是配置一台WSUS(Windows更新服务器),以方便后期通过"基线"与其组合,完成虚拟机的系统补丁升级。WSUS是Windows系统运维自动化的一个重要组成部分,通过它,能够节省我们很多的运维时…

像元尺寸计算

像元尺寸 X 总像素大小 感光芯片尺寸(图像区域大小)

win7右键点击文件夹进入命令窗口方法

方法一:按住shift键,鼠标右击,会出现"在此处打开命令窗口";方法二:修改注册表,为鼠标右键添加打开命令行功能;(1)将下列内容赋值到记事本中,并保存为.reg文件。Windows Re…

教你学会Linux/Unix下的vi文本编辑器

vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器。看了不少关于vi的资料,终于得到这个总结。首先,记住vi编辑器的两个模式:1、命令模式2、编辑模式。在一个UNIX/Linux的shell命令或者一个以斜杠(/)、问号&#xf…

C++函数返回引用的含义

引用的意思就是说返回变量的地址而非变量本身。这样子函double数结束之后存储返回值的内存单元不会被销毁,保留了它的地址。 例如下面这个例子: int a1,b; ba; b; 这个例子里执行完之后a为1,而b为2。 但这个例子: int a1; int *b;…