`

SVN:冲突解决 合并别人的修改

 
阅读更多

在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突。svn已经很聪明了,如果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最开始增加了一行,而你同事在文件的结尾出增加了一行),svn会自动将你们的修改进行合并,然而意外总是会发生,而且超出了svn的处理范围,只好采用人工智能(手工)来进行合并了。
要解决冲突,我们首先得制造个冲突,保证你现在已经有两个工作拷贝了,我们现在修改其中的一个,例如这里我们修改sally_calc中的main.c文件。

root@letuknowit:/home/kris/sally_calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"

int main()
{
        printf("5 + 10 = %d.\n",add(5,10));
        printf("15 - 10 = %d.\n",sub(15,10));
        //sally's test
        printf("sally: 60 - 33 = %d.\n",sub(60,33));
        return 0;
}

在这里sally增加了一个属于她自己的测试语句,改好后,提交到svn

root@letuknowit:/home/kris/sally_calc/trunk# svn ci -m "sally add some test code"
Sending        trunk/main.c
Transmitting file data .
Committed revision 7.

下面回到kris的工作副本,做类似的修改,具体如下

root@letuknowit:/home/kris/calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"

int main()
{
        printf("5 + 10 = %d.\n",add(5,10));
        printf("15 - 10 = %d.\n",sub(15,10));
        //kris's test
        printf("kris: 12 + 28 = %d.\n",add(12,28));
        return 0;
}

好了,下面的工作自然是提交了。

root@letuknowit:/home/kris/calc/trunk# svn ci -m "kris add some test code"
Sending        trunk/main.c
svn: Commit failed (details follow):
svn: File '/trunk/main.c' is out of date

很抱歉,提交失败了,原因是本地文件过期了(因为之前sally提交了对于main.c的修改)。原来如此,赶紧把sally的修改update过来。不过在这之前提供一个检测本地文件是否已经过期的办法,还记得经常用到的svn st命令吧

root@letuknowit:/home/kris/calc/trunk# svn st
M       main.c
root@letuknowit:/home/kris/calc/trunk# svn st -u
M       *        6   main.c
Status against revision:      7

看到那个*了吧,出现这个标记就说明本地副本的文件已经过期了,需要执行svn update了。

root@letuknowit:/home/kris/calc/trunk# svn up
Conflict discovered in 'main.c'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

额滴个小心脏啊,又出错了,还要做选择题,纠结啊,纠结前还是看看各个选项都是做啥的吧

(p) postpone          暂时推后处理,我可能要和那个和我冲突的家伙商量一番
(df) diff-full        把所有的修改列出来,比比看
(e) edit              直接编辑冲突的文件
(mc) mine-conflict    如果你很有自信可以只用你的修改,把别人的修改干掉
(tc) theirs-conflict  底气不足,还是用别人修改的吧
(s) show all options  显示其他可用的命令

这里我们先选择p稍候处理,系统会给出如下输出,main.c前面的C标识说明这是一个冲突中的文件,需要手工处理以解决冲突。

        (s) show all options:p
C    main.c
Updated to revision 7.
Summary of conflicts:
  Text conflicts: 1

如果这个时候你查看一下工作拷贝,你会发现多了几个文件,对于每一个冲突的文件,svn会放置三个额外的未版本化文件到你的工作拷贝。

root@letuknowit:/home/kris/calc/trunk# ls -al m*
-rw-r--r-- 1 root root 312 2012-09-20 16:35 main.c
-rw-r--r-- 1 root root 216 2012-09-20 16:35 main.c.mine
-rw-r--r-- 1 root root 156 2012-09-20 16:35 main.c.r6
-rw-r--r-- 1 root root 218 2012-09-20 16:35 main.c.r7

其中main.c.mine是融合了你的修改的版本,里面是你更新的内容,main.c.r6是你做更新操作以前的版本,你是在这个版本的基础上做的修改,main.c.r7是版本库中的最新版本,这里有别人的修改,而就是这个修改和你的修改冲突了。这几个文件可以自己去查看下,应该很好理解。
对了,还有主角没有登场,这个时候如果你看下mian.c的内容,估计你又要郁闷了,和你原先的修改完全不一样了。

root@letuknowit:/home/kris/calc/trunk# cat main.c
#include <stdio.h>
#include "add.h"
#include "sub.h"

int main()
{
        printf("5 + 10 = %d.\n",add(5,10));
        printf("15 - 10 = %d.\n",sub(15,10));
<<<<<<< .mine
        //kris's test
        printf("kris: 12 + 28 = %d.\n",add(12,28));
=======
        //sally's test
        printf("sally: 60 - 33 = %d.\n",sub(60,33));
>>>>>>> .r7
        return 0;
}

你会看到由小于号、等于号和大于号串组成的三个部分,其中小于号和等号之间的内容是你的修改,而等号和大于号之间的修改是其他人的修改,在明确了冲突的原因之后

分享到:
评论

相关推荐

    SVN解决冲突(合并别人的修改)

    本文将详细介绍SVN中解决冲突、合并他人修改的过程,特别是对初学者来说,这些内容非常重要。 首先,让我们了解SVN中如何预测和标识潜在的冲突。使用命令svn status -u可以检查工作副本与版本库之间的差异,并且...

    RapidSVN:轻量级、可视化SVN客户端RapidSVN-0.13.0.8249-PortableSoft

    该客户端支持常见的SVN操作,如检出(Checkout)、提交(Commit)、更新(Update)、合并(Merge)、比较(Compare)以及解决冲突(Resolve)。这些功能使得开发者可以轻松地查看文件的历史版本,追踪代码更改,并与...

    svn版本之间的合并问题

    然而,当合并过程遇到无法自动解决的冲突时,即所谓的“树冲突”,SVN会暂停合并操作并要求用户手动干预。 #### 二、树冲突的成因分析 如案例所示,假设在版本A中新增了一个名为“a”的文件,随后这个文件被合并到...

    SVN分支合并到主干 冲突处理

    3. **放弃合并**:如果发现冲突无法解决,可以使用`svn revert`命令取消合并,然后再尝试其他策略。 ### 冲突预防策略 1. **频繁合并**:避免长时间不合并,尽量保持分支和主干的同步,可以减少合并时的冲突。 2. ...

    svn 合并、冲突及常用功能详解

    **svn冲突** 1. **冲突产生**: 当两个或更多用户修改了同一份文件的同一部分时,svn无法确定应保留哪个更改,就会产生冲突。 2. **冲突标记**: 有冲突的文件会被svn添加特殊的冲突标记,例如`, `=======`, `&gt;&gt;&gt;&gt;&gt;&gt;...

    SVN版本冲突解决详解

    如果别人和自己更改的是同一个文件,那么 update 时会自动进行合并,如果修改的是同一行,那么合并时会产生冲突,这种情况就需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证...

    svn版本冲突解决

    2. 在冲突的文件上(选中文件--右键菜单—TortoiseSVN—Edit conflicts(解决冲突)),出现如下窗口:Theirs 窗口为服务器上当前最新版本,Mine 窗口为本地修改后的版本,Merged 窗口为合并后的文件内容显示。...

    svn ( 解决冲突 )confict

    3. **合并(Merge)**:如果检测到冲突,SVN会提示Harry下载其他用户的更改,并允许他手动合并这些更改,生成最终版本的文件A*。完成合并后,Harry将文件A*提交至仓库。 这种方法更适合处理文本类型的文件,因为...

    EclipseSVN冲突详细解决方案.docx

    EclipseSVN冲突解决方案 EclipseSVN冲突解决方案是指在使用Eclipse和SVN进行版本控制时,如何处理文件冲突的问题。文件冲突是指多个开发者同时修改同一个文件,导致文件内容不同步的情况。 在EclipseSVN中,文件...

    开源版本控制SVN 树冲突、目录丢失问题及解决机制探讨

    4. 解决冲突后,使用`svn resolved`标记冲突已解决。 5. 最后,提交解决后的更改到版本库。 在处理目录丢失问题时,可以通过以下步骤恢复: 1. 执行`svn checkout`重新检出丢失的目录。 2. 如果目录下的子文件也...

    SVN冲突解决方案.docx

    SVN冲突解决方案 SVN(Subversion)是一种版本控制系统,用于管理软件开发过程中的源代码和文档。在多人协作开发项目时,SVN可以帮助团队成员之间进行协作和版本控制。但是,在使用SVN时,也会遇到冲突问题,本文将...

    SVN_commit错误分析经验共享

    解决冲突通常需要手动合并代码,可以使用`svn resolve`命令标记已解决的冲突,并重新提交。 2. 未更新的工作副本:在提交之前,确保你的工作副本是最新的。如果直接提交,可能会丢失其他人的修改。使用`svn update`...

    Tortoise SVN 版本冲突处理

    当你试图提交一个已经被他人修改过的文件时,Tortoise SVN会弹出警告对话框,指出你的版本已经过期,并建议你先更新文件。更新后,如果存在冲突,你会看到文件夹目录窗口中的文件被标注了黄色感叹号,旁边还伴随着三...

    svn版本冲突是怎么解决(最重要).txt

    4. **清理辅助文件**:解决冲突后,需要删除那些由SVN自动生成的冲突文件,如`HelloWorld.java.mine`、`HelloWorld.java.r3`和`HelloWorld.javar.r4`。 5. **提交修改**:最后,再次进行提交操作,这次SVN应该能够...

    svn分主干合并,让你分主干合并立马搞定

    总结来说,SVN 分支合并是一个涉及创建分支、获取本地副本、查找合并起点、合并改动、解决冲突以及提交更改的过程。这个过程对保持项目代码的同步和一致性至关重要。在实际操作中,应遵循良好的版本控制实践,例如...

    Eclipse svn创建分支、合并、切换讲解

    通过本文的讲解,已经详细介绍了 Eclipse SVN 中创建分支、合并、切换的操作步骤,以及冲突解决的方法。这些操作步骤将有助于提高项目的开发效率和质量。本文的内容已经足够详细和丰富,希望能够满足读者的需求。

    SVN解决文件冲突conflict的方法_类文件冲突

    在使用版本控制系统如SVN...总之,SVN冲突的解决是一个需要谨慎处理的过程,它需要理解SVN的工作原理以及如何合并和管理代码更改。通过及时更新、手动合并和确认提交,团队成员可以有效地协作并避免不必要的冲突。

    SVN冲突解决办法.

    ### SVN冲突解决办法 在软件开发过程中,版本控制系统如Subversion (SVN) 是不可或缺的工具之一,它帮助团队管理代码版本、追踪更改历史并协同工作。然而,在多人协作环境中,冲突是不可避免的问题之一,尤其是在...

    SVN使用的分支与合并

    SVN 分支与合并详解 SVN(Subversion)是一款开源的版本控制系统,广泛应用于软件开发、文档管理和其他需要版本控制的领域。在软件开发过程中,SVN 的分支与合并功能是非常重要的,下面我们将详细介绍 SVN 中的分支...

Global site tag (gtag.js) - Google Analytics