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以后版本变为4221,但是你有后悔了,想把当前的code变回4420 怎么办呢?此时你就要用到代码回滚了,对于commit 以后的code使用svn revert 是无济于事的,此时你就要用到svn merge url -c -4421 ,然后再svn commit 文件,现在的版本涨到4422 但是和4420 的code的内容是完全一样的。。。。(为啥呢??因为当你做了svn merge url -c -4421 以后就相当于把4221的改动(diff)又退回到4420了,所以你此时的code和4220就是一样的啦,你如果再继续commit现在svn 的code其实就是和4420喽)

猜你喜欢

转载自blog.csdn.net/zlfing/article/details/86497675