svn merge 命令的使用
merge是干啥的呢?
使用过SVN都知道SVN其实就是一个代码管理的软件,使用它可以很好的解决代码冲突。他可以针对一个文件产生不同的版本,每一个版本都对应自身的改动。因为它记录了每一个文件的修改变化(可以理解为文件之间的不同点diff),这对于我们的开发,理解有很好的作用。
简而言之就是你想把某一版改动合到另一个branch上的时候,记住你合过来的改动只是每版之间的diff!!!!!!!
(1) svn merge url -c xxxx ./ (把svn 版本号为xxxx的改动合到你的本地)
(2) svn merge url -r xxxx:yyyy ./ (将url指定的code的xxxx版本到yyyy版本,merge到本地(注意:该方式不包括xxxx版本!!))
两个很好用的说明:
(1) 如果你当前要merge的code与你本地操作的code属于一个branch可以不必指定url啦!!!!
(2) 为了防治merge出错我们可以在上面命令基础上添加 --dry-run 来模拟merge的操作也就是写成:
svn merge url -c xxxx ./ --dry-run
svn merge url -r xxxx:yyyy ./ --dry-run
添加--dry-run 只是模拟实现merge 的行为而不是真正的进行这个动作!!!
merge 动作进行以后会看见各个你merge到本地的文件前面有 U(表示被更新) A(表示添加) D(表示删除) G(表示存在冲突但已经被解决)
解决产生冲突方法
为何会产生冲突呢??svn 通过diff 来进行存储,如果你本地的修改和svn 上你merge的修改都在同一行了就会存在冲突,因为他不知道该选择哪一个啦(svn 懵le )。。。
对于有冲突的文件我们按照自己的需有三种解决方式:
(1)自行处理解决:
首先选择:e
然后通过vim打开存在冲突的文件,输入 /^===可以找到冲突的位置然后解决冲突,保存退出,选择 r 表示该冲突已经被你解决。
(2)选择svn 上的文件:
选择:tc
(3)选择本地文件:
选择:mc
代码回滚
何为代码回滚呢?假设你当前版本是4420 svn commit以后版本变为4421,但是你有后悔了,想把当前的code变回4420 怎么办呢?此时你就要用到代码回滚了,对于commit 以后的code使用svn revert 是无济于事的,此时你就要用到svn merge url -c -4421 ,然后再svn commit 文件,现在的版本涨到4422 但是和4420 的code的内容是完全一样的。。。。(为啥呢??因为当你做了svn merge url -c -4421 以后就相当于把4421的改动(diff)又退回到4420了,所以你此时的code和4420就是一样的啦,你如果再继续commit现在svn 的code其实就是和4420喽)