#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.