`

详解SVN文件冲突和树冲突解决方法(转)

    博客分类:
  • SVN
阅读更多
当你从版本库更新、合并文件时,或者切换工作副本至一个不同的URL时你会遇到冲突。有两种冲突:
SVN文件冲突
当两名(或更多)开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。
SVN树冲突
当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。
SVN文件冲突
当两名或更多开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。由于Subversion不知道你的项目的具体情况,它把解决冲突的工作留给了开发人员。一旦出现冲突,你就应该打开有问题的文件,查找以字符串<<<<<<<开头的行。有冲突的区域用如下的方式标记:
<<<<<<<文件名你的修改=======合并自版本库中的代码>>>>>>>版本
对于每个冲突的文件Subversion在你的目录下放置了三个文件:
文件名.ext.mine
这是你的文件,在你更新你的工作副本之前存在于你的的工作副本中——也就是说,没有冲突标志。这个文件除了你的最新修改外没有别的东西。
文件名.ext.r旧版本
这是在你更新你的工作副本之前的基础版本(BASErevision)文件。也就是说,它是在你做最后修改之前所检出的文件。
文件名.ext.r新版本
这个文件是当你更新你的工作副本时,你的Subversion客户端从服务器接收到的。这个文件对应于版本库中的最新版本。
你可以通过TortoiseSVN→编辑冲突运行外部合并工具/冲突编辑器,或者你可以使用任何别的编辑器手动解决冲突。你需要冲定哪些代码是需要的,做一些必要的修改然后保存。
然后,执行命令TortoiseSVN→已解决并提交人的修改到版本库。需要注意的是已解决命令并不是真正的解决了冲突,它只是删除了filename.ext.mine和filename.ext.r*两个文件,允许你提交修改。
如果你有二进制SVN文件冲突,Subversion不会试图合并文件。本地文件保持不变(完全是你最后修改时的样子),但你会看到 filename.ext.r*文件。如果你要撤消你的修改,保留版本库中的版本,请使用还原(Revert)命令。如果你要保持你的版本覆盖版本库中的版本,使用已解决命令,然后提交你的版本。
你可以右击父文件夹,选择TortoiseSVN→已解决...,使用“已解决”命令来解决多个文件。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决。
树冲突
当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。有很多种不同的情形可以导致树冲突,而且不同的情形需要不同的步骤来解决冲突。
当一个文件通过Subversion在本机删除后,文件也从本机文件系统中删除。因此即使它是树冲突的一部分,却既不能显示冲突的叠加图标也不能通过右键单击来解决冲突。使用检查修改对话框来获得编辑冲突选项。
TortoiseSVN能够协助找到合并更改的正确位置,但是需要作一些额外的工作来整理冲突。请牢记:当进行一次更新操作后,工作副本的基础文件将会包括每一个项目在执行更新操作时版本库中的版本。如果你在进行更新后再撤销更改,工作副本将返回到版本库的状态,而不是你开始进行更改前的状态。
本地删除,当更新时有更改进入开发人员A修改Foo.c并将其提交至版本库中
开发人员B同时在他的工作副本中将文件Foo.c改名为Bar.c,或者仅仅是删除了Foo.c或它的父文件夹。
更新开发人员B的工作副本会导致树冲突:
在工作副本中,Foo.c被删除了,但是被标记为树冲突。
如果冲突是由于更改文件名引起的而不是删除文件引起的,那么Bar.c被标记为添加,但是其中却不包括开发人员A修改的内容。
开发人员B现在必须做出选择是否保留开发人员A的更改。在更改文件名的案例中,他可以将Foo.c的更改合并到改名后的文件Bar.c中去。对于删除文件或文件夹的案例中,他可以选择保留包含开发人员A更改内容的项目并放弃删除操作。或什么也不做而直接将冲突标记为已解决,那样他实际上丢弃了开发人员A的更改。
如果TortoiseSVN能够找到被改名为Bar.c的原始文件,冲突编辑对话框将可以合并更改。这取决于在什么地方调用更新操作,它也许不能找到原始文件。
本地更改,当更新时有删除进入开发人员A将文件Foo.c改名为Bar.c并将其提交至版本库中。
开发人员B在他的工作副本中修改文件Foo.c。或者在一个文件夹改名的案例中...
开发人员A将父文件夹FooFolder改名为BarFolder并将其提交至版本库中。
开发人员B在他的工作副本中修改文件Foo.c。
更新开发人员B的工作副本会导致树冲突。对于一个简单的SVN文件冲突:
Bar.c被当作一个正常文件添加到工作副本中。
Foo.c被标记为添加(包括其历史记录)并且产生树冲突。
对于一个文件夹冲突:
BarFolder被当作一个正常文件夹添加到工作副本中。
FooFolder被标记为添加(包括其历史记录)并且产生树冲突。
Foo.c被标记为已修改。
开发人员B现在需要做出决定是否接受开发人员A作出的结构改变并且合并她的更改到新结构下适当的文件中,或者直接放弃开发人员A的更改并保留本地文件。
要合并她的本机更改到新布局中,开发人员B必须先找出冲突的文件Foo.c经过改名/移动后在版本库中的新文件名是什么。可以使用日志对话框来完成这个任务。更改必须要手工合并,因为没有办法自动的或者简单的完成此操作。一旦更改移植完毕,冲突的路径就是多余的并且可以删除。在此案例中,使用冲突编辑对话框中的删除按钮进行清理并将冲突标记为已解决。
如果开发人员B认为A的更改是错误的,那么在冲突编辑对话框中她必须选择保留按钮。这样就会标记冲突的文件/文件夹为已解决,但是需要手工删除开发人员A的更改。又是通过日志对话框帮助追踪哪些文件移动了。
分享到:
评论
1 楼 anybyb 2011-11-15  
正好遇到 学习了谢谢

相关推荐

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

    **版本控制系统SVN详解与树...理解并熟练掌握SVN的树冲突和目录丢失问题的处理机制,对日常开发工作中避免数据丢失和提高协作效率至关重要。确保及时更新工作副本,正确处理冲突,并备份重要数据,以防止不必要的损失。

    SVN版本冲突解决详解

    下面将详细解释 SVN 版本冲突的原因、现象、解决方法和降低冲突解决的复杂度。 版本冲突原因: 在 SVN 中,当多个用户同时修改同一个文件时,可能会出现冲突问题。假设 A、B 两个用户都在版本号为 100 的时候,...

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

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

    Tortoise SVN 版本冲突处理

    ### Tortoise SVN 版本冲突处理详解 在软件开发项目中,版本控制是不可或缺的一环,它帮助团队成员管理代码的变更,确保项目的稳定性和可追溯性。Tortoise SVN作为一款优秀的图形化Subversion(SVN)客户端,广泛...

    svn ( 解决冲突 )confict

    ### SVN解决冲突详解 #### 一、冲突发生的原因 在版本控制系统中,Subversion(简称SVN)是一种广泛使用的集中式版本控制系统。当多个开发者同时对同一个文件进行修改时,可能会遇到冲突的情况。例如,假设团队中...

    SVN 的使用方法详解

    总的来说,SVN是一种强大的工具,它解决了软件开发过程中文件备份、版本管理和团队协作的诸多问题。TortoiseSVN作为其用户友好的界面,使得日常操作更为简便。通过熟练掌握SVN的使用,可以显著提升开发效率和团队...

    SVN使用SVN使用SVN使用

    `svn switch`命令允许你在不同分支或修订版本间切换,而`svn diff`则可以显示文件之间的差异,帮助定位和理解代码变更。 协同工作时,冲突是难以避免的。当两个或更多用户同时修改同一份文件时,SVN会检测到冲突并...

    SVN版本控制工具使用详解

    * 解决方法:client2 先将进行 update,生成一堆,然后右击 client2 中的冲突文件-&gt; TortoiseSVN-&gt;Edit Conflicts-&lt;右击修改,最后右击 client2 中的冲突文件-&gt; TortoiseSVN-&gt;Resolved-&gt;commit。 SVN 服务器端的...

    SVN创建、合并与切换分支操作详解

    Subversion(SVN)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件。它允许开发者协同工作,跟踪代码的更改历史,并通过分支和标签功能支持灵活的开发流程。以下是对SVN创建、合并和切换分支操作...

    SVN版本管理详解-08210246.pdf

    这些高级主题提供了更复杂的版本控制机制,比如外部定义、管理本地化版本库以及处理冲突和属性。 开发者信息一章主要涉及到使用SVN的API进行更深入的编程工作,如进入工作副本的管理区、使用WebDAV以及编程时使用...

    MyEclipse SVN配置文件

    【MyEclipse SVN配置文件详解】 在软件开发过程中,版本控制系统是不可或缺的工具,Subversion(SVN)作为其中的一员,被广泛应用于协同开发和代码管理。MyEclipse,一个强大的Java集成开发环境,集成了SVN插件,...

    毕业设计:基于Python,Openpy和SVN的Excel冲突解决系统(Excel和VBA输出Json的配置系统).zip

    本毕业设计项目是基于Python编程语言,结合Openpyxl库以及Subversion(SVN)版本控制系统,构建的一个专门针对Excel文件冲突解决的系统。Openpyxl是Python中用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的库,而SVN...

    SVN客户端的使用方法

    **SVN客户端的使用方法详解** SVN(Subversion)是一种版本控制系统,用于管理多个用户对同一份文件或项目代码的协作编辑。使用SVN客户端可以帮助团队成员有效地协同工作,跟踪文件的历史版本,防止冲突,并实现...

    SVN文件解锁

    ### SVN文件解锁详解 在软件开发过程中,使用版本控制系统(如Subversion,简称SVN)进行代码管理是非常常见的。然而,在使用过程中可能会遇到文件被锁定的情况,这将阻止其他开发者对该文件进行修改或提交。本文将...

    svn 命令详解

    当遇到文件冲突时,需要手动解决冲突后才能继续提交。 #### 六、查看文件或者目录状态 - **命令格式**: - `svn status &lt;path&gt;`(查看目录下的文件和子目录的状态,正常状态不显示) - `svn status -v &lt;path&gt;`...

    SVN检出文件方法说明

    ### SVN检出文件方法详解 #### 一、SVN简介 Subversion(简称SVN)是一种集中式的版本控制系统,广泛应用于软件开发过程中对代码进行管理。它能够追踪每一项改动,包括文件和目录的修改,并且可以恢复到任何历史...

    SVN 分支与合并详解

    解决冲突后,使用`svn resolved`标记文件已解决冲突,最后提交更新。 6. 使用标签(Tag): 除了分支,SVN还支持标签(Tag),用于标记特定版本的代码,如发布版本。标签是只读的,通常不进行修改。创建标签的方式...

    svn修改

    这种方法需要SVN服务端管理员的配合。 **1. 定位服务端配置文件** - 找到SVN服务器的安装路径下的`config`文件夹。 - 打开并编辑`passwd`文件。 **2. 修改账号信息** - 在`passwd`文件中找到需要更改的账户...

Global site tag (gtag.js) - Google Analytics