zoukankan      html  css  js  c++  java
  • 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 ...

    (有时间再接着写)

  • 相关阅读:
    POJ 3259 Wormholes【BellmanFord】
    POJ 2960 SNim【SG函数的应用】
    ZOJ 3578 Matrixdp水题
    HDU 2897 邂逅明下【bash博弈】
    BellmanFord 算法及其优化【转】
    【转】几个Java的网络爬虫
    thinkphp 反字符 去标签 自动加点 去换行 截取字符串 冰糖
    php 二维数组转 json文本 (jquery datagrid 数据格式) 冰糖
    PHP 汉字转拼音(首拼音,所有拼音) 冰糖
    设为首页与加入收藏 兼容firefox 冰糖
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/5671484.html
Copyright © 2011-2022 走看看