SVN分支的创建与合并

原创
2016/07/05 11:24
阅读数 500

#SVN分支的创建与合并
标准的分支目录如下:
  myproject/
      trunk/ (主分支)
      branches/ (分支)
      tags/         (标记)
现在的项目目录如下
➜  zhangzhongbao tree -L 2
.
└── cm
    ├── doc
    ├── download
    ├── out
    ├── pom.xml
    ├── src
    └── target

6 directories, 1 file
Tips 由于我的项目在创建的时候,并没有trunk,现在由于项目需要重新创建分支来进行版本控制.

 1.创建分支
 cd /Users/huanggaoming/Desktop/tmp/zhangzhongbao
 svn mkdir branches          (由于的不存在branches目录重新创建)
 svn mkdir branches/cm 
 svn commit -m "创建分支目录"  
 svn copy https://10.211.55.3/svn/zhangzhongbao/cm  https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716 -m "7月16日的版本"                                          (创建分支,原则上尽量和cm平级,但是为了区分,我这里没有平级,版本+1了)
 svn update .
 ➜  zhangzhongbao tree -L 2
.
├── branches
│   └── cm
└── cm
    ├── doc
    ├── download
    ├── out
    ├── pom.xml
    ├── src
    └── target

8 directories, 1 file  

➜  zhangzhongbao tree -L 3 branches
branches
└── cm
    └── v-20160716
        ├── doc
        ├── download
        ├── out
        ├── pom.xml
        ├── src
        └── target

7 directories, 1 file

Tips:需要注意的是Branch和Trunk使用同一套版本号,也就是说无论在Branch还是Trunk的提交都会引起主版本号的增加。这是因为svn copy只支持同一个repository内的文件copy,并不支持跨repository的copy,所以新创建的Branch和Trunk都属于同一个repository。

2.合并分支
在分支进行一系列的操作
(1) 查看状态
svn status (没有任何的本地修改)
(2) 合并分支到主干
cd /Users/huanggaoming/Desktop/tmp/zhangzhongbao/cm
svn merge https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716  
(svn merge https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716  -r35:HEAD) 将Branch的从版本35到当前版本的所有改动都合并到Trunk中
(3) 提交保存
svn commit -m "合并v-20160716分支" 
(4) 合并版本并将合并后的结果应用到现有的分支上 
svn -r 148:149 merge https://10.211.55.3/svn/zhangzhongbao/cm

-查找到分支版本
cd /Users/huanggaoming/Desktop/tmp/zhangzhongbao/branches/cm/v-20160716
svn log --stop-on-copy  (最后rid就是创建分支时的reversion)

cd /Users/huanggaoming/Desktop/tmp/zhangzhongbao/cm 
svn log -q --stop-on-copy  https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716

-解决冲突
svn st | grep ^C      # 查找合并时的冲突文件,手工解决冲突
svn resolved filename # 告知svn冲突已解决
svn commit -m ""      # 提交合并后的版本
svn: Aborting commit: '/path/resources/noc' remains in conflict
$ svn revert resources/noc
Reverted 'resources/noc'


3.查看分支
svn mergeinfo  https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716
➜  cm svn mergeinfo  https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716
    youngest common ancestor
    |         last full merge
    |         |        tip of branch
    |         |        |         repository path

    34        39       40
    |         |        |
       --| |------------         branches/cm/v-20160716
      /        \
     /          \
  -------| |------------         cm
                       |
                       WC

查看Branch中那些改动还未合并:
svn mergeinfo  https://10.211.55.3/svn/zhangzhongbao/branches/cm/v-20160716  --show-revs eligible

4.发布-tag管理(创建分支一样)
 cd /Users/huanggaoming/Desktop/tmp/zhangzhongbao
 svn mkdir tags      (由于的不存在tags目录重新创建)
 svn mkdir tags/cm 
 svn commit -m "创建tags目录"  
 svn copy https://10.211.55.3/svn/zhangzhongbao/cm  https://10.211.55.3/svn/zhangzhongbao/tags/cm/v-20160716 -m "7月16日的版本"                                          (创建tag,不允许开发在上面进行任何的修改)
 svn update .

➜  zhangzhongbao tree -L 2
.
├── branches
│   └── cm
├── cm
│   ├── doc
│   ├── download
│   ├── out
│   ├── pom.xml
│   ├── src
│   └── target
└── tags
    └── cm

10 directories, 1 file

➜  zhangzhongbao tree -L 2 tags/cm
tags/cm
└── v-20160716
    ├── doc
    ├── download
    ├── out
    ├── pom.xml
    ├── src
    └── target

6 directories, 1 file
5.

展开阅读全文
加载中

作者的其它热门文章

打赏
0
3 收藏
分享
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部