<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如何使用svn進行merge

    Posted on 2009-06-02 12:36 林光炎 閱讀(22843) 評論(0)  編輯  收藏 所屬分類: SVN
    |  | Comments (0) | TrackBacks (0)
    版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息。
    svn 的 merge其實很好用,當然前提是你明白了svn merge這個命令,還好,我用了大約一年明白了這個命令 -___-!!

    跟大家說一下用法,比如我們要把分支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起來很是費勁

    posts - 104, comments - 33, trackbacks - 0, articles - 0

    Copyright © 林光炎

    主站蜘蛛池模板: 亚洲成人福利在线| 亚洲三级电影网址| 毛片亚洲AV无码精品国产午夜| 成人黄色免费网站| 亚洲成人在线免费观看| 午夜福利不卡片在线播放免费| 亚洲成人免费电影| 成年性羞羞视频免费观看无限| 亚洲1234区乱码| 免费毛片在线播放| 免费国产va视频永久在线观看| 亚洲国产精品丝袜在线观看| caoporn成人免费公开| 亚洲色欲一区二区三区在线观看| av永久免费网站在线观看| 亚洲AV日韩AV天堂久久| 黄在线观看www免费看| 亚洲日韩一区二区三区| 免费少妇a级毛片| 97在线免费视频| 亚洲欧洲国产综合| 免费无码不卡视频在线观看| 高潮内射免费看片| 亚洲国产日韩在线视频| 永久黄色免费网站| 国产精品亚洲一区二区三区| 亚洲午夜未满十八勿入网站2| 免费A级毛片无码视频| 亚洲成a人无码亚洲成www牛牛| 亚洲欧洲精品成人久久奇米网| 成人性做爰aaa片免费看| 亚洲国产成人久久| 亚洲成av人片在线观看天堂无码| 97无码人妻福利免费公开在线视频 | 国产免费伦精品一区二区三区| 亚洲ⅴ国产v天堂a无码二区| 成人无遮挡毛片免费看| 三年片免费观看大全国语| 亚洲制服丝袜精品久久| 亚洲国产精品不卡毛片a在线| 91香蕉在线观看免费高清|