svn常用命令相信大家都非常熟悉,但是merge这个命令很多人却并不常用到,这次由于工作关系,特地学习了一下。
由于开发环境是mac,没有像TortoiseSVN这么好用的svn,mac大部分的svn客户端个人觉得都不是特别好用,所以选择用svn命令行。
svn merge的思想其实是diff and apply,而不是合并。
svn merge --help可以看到这个命令的用法
可以看到有4种用法,最后的参数都是[target_wcpath],wcpath=working copy path,也就是apply的应用对象
而前面的参数则是得到diff用的,所以结果是前面得出的diff,apply到wcpath,所以4种用法的区别就在于得到diff的途径不同。
(注:下面所说的SOURCE都是只svn的url,而不是本地目录,只有wcpath才是本地的checkout版本)
1.
This form is called a 'sync' (or 'catch-up') merge:
svn merge SOURCE[@REV] [TARGET_WCPATH]
称为同步merge,相当于把SOURCE分支的从REV版本到lastchange版本的diff同步到wcpath。
2.
This form is called a 'cherry-pick' merge:
svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]
'cherry-pick' merge我们可以称之为“选择合并”
-c,-r两个参数可以同时存在也可以只选其一:
-r,表示两个版本之间的diff,-r N:M,表示从版本N到M得diff
-c,表示单个版本的diff,-c 50 相当于 -r 49:50
通过参数得到的diff,应用到wcpath
3.
This form is called a 'reintegrate merge':
svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]
重建选择,从trunk迁出一个branch,开发完成后,要合并回trunk中。