• svn merge详解


    svn merge详解 【OK】 http://blog.163.com/lgh_2002/blog/static/4401752620106202710487/

      Subversion的分支通常用于在主干程序之外,对程序进行修改。这样 可以在不扰乱主干程序进行的开发、测试、发布流程之外,尝试一下新功能的研究、修改。如果觉得新功能没问题,可以将分支合并到主干程序中。
      合并前,需要将分支提交(Commit),由此看来,合并操作好象是在服务端和本地客户端同时进行的操作。
      合并时,要从主干的working copy的右键菜单开始,"From" Url是合并的目的地,需选择主干的url,"To"是合并的来源,需选择分支的url。

    svn 的 merge其实很好用,当然前提是你明白了svn merge这个命令,还好,我用了大约一年明白了这个命令 -___-!!

    跟大家说一下用法,比如我们要把分支merge到主干上

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

    我们以第一个为例:
    svn 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所做的所有的变化,也就是分支当前的状态相对刚刚生成的时候(svn cp时)状态的变化,根据这个变化生成一个diff文件,再apply一个本地的工作区上。(建议是一个干净的本地trunk工作区)

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

    其实,第一个URL(我们称之为左边),为起始状态,通过最后的@101, 表示取版本101,
    这个101就是svn 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 | lgh | 2010-07-19 09:25:10 +0800 (一, 19 07月 2010) | 1 line

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

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

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

    而对于 merge的help里面的

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

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

  • 相关阅读:
    章节1:SQL语言简易入门
    章节0:MySQl学前知识储备
    iOS 设置导航栏全透明
    IOS修改Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色
    iOS import导入时没有提示的解决办法
    iOSAPP开发项目搭建
    如何搭建iOS项目基本框架
    UIWebView中JS与OC交互 WebViewJavascriptBridge的使用
    iOS概念之KVO(Key-Value Observing)
    oc调javascript方法(evaluateJavaScript:)&&js给oc发通知
  • 原文地址:https://www.cnblogs.com/oskb/p/3848559.html
Copyright © 2020-2023  润新知