您的位置:首页 > 软件设计 > 其它 > 正文

svn冲突怎么解决

更多 时间:2014-9-19 类别:软件设计 浏览量:3078

svn冲突怎么解决

svn冲突怎么解决

一、svn冲突类型

 

1、文件冲突

当两名(或更多)开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。

 

2、树冲突

当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。

 

二、SVN冲突的原因

你在本地的修改和版本库中的版本修改的地方重叠了,也就是说,你修改了某一行,你的同事也修改了同一行。这个就需要你自己手工去解决了。当冲突发生时,要注意如果你修改的文件的内容很多,你需要先备份一下你的本地文件。

 

三、tortiseSVN冲突的标志

在冲突的文件上会有一个三角标志,里面有一个感叹号。

 

四、SVN防止冲突的方法

1、尽量将分成多个类,每个人负责一些类的开发

2、每天都要更新

 

五、文件冲突的解决方法

当两名或更多开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。由于 Subversion 不知道你的项目的具体情况,它把解决冲突的工作留给了开发人员。一旦出现冲突,你就应该打开有问题的文件,查找以字符串<<<<<<<开头的行。

 

1、有冲突的区域用如下的方式标记:

<<<<<<< 文件名
  你的修改
=======
  合并自版本库中的代码
>>>>>>> 版本

 

2、对于每个冲突的文件 Subversion 在你的目录下放置了三个文件:

(1)、文件名.mine

这是你的文件,在你更新你的工作副本之前存在于你的的工作副本中——也就是说,没有冲突标志。这个文件除了你的最新修改外没有别的东西。

2)、文件名.r 版本

这是在你更新你的工作副本之前的基础版本(BASE revision)文件。也就是说,它是在你做最后修改之前所检出的文件。

3)、文件名.r 新版本

这个文件是当你更新你的工作副本时,你的 Subversion 客户端从服务器接收到的。这个文件对应于版本库中的最新版本

 

3、tortiseSVN冲突的解决:

(1)、首先找到冲突文件,右击会出现tortoiseSVN的选择列表。选择“编辑冲突”,你会看到你的本地的版本跟远程版本库的版本的区别,下面还有一个合并的版本显示,红色标记就显示了冲突的位置。


(2)、其次,找到冲突位置以后你需要选择是用你自己的版本,还是版本库里的版本来解决冲突。


(3)、再次,手动修改了冲突的地方以后,你需要右击出现tortoiseSVN的选择列表。然后选择“解决冲突”,

 

六、树冲突

当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。有很多种不同的情形可以导致树冲突,而且不同的情形需要不同的步骤来解决冲突。

当一个文件通过 Subversion 在本机删除后,文件也从本机文件系统中删除。因此即使它是树冲突的一部分,却既不能显示冲突的叠加图标也不能通过右键单击来解决冲突。使用检查修改对话框来获得编辑冲突选项。

TortoiseSVN 能够协助找到合并更改的正确位置,但是需要作一些额外的工作来整理冲突。请牢记: 当进行一次更新操作后,工作副本的基础文件将会包括每一个项目在执行更新操作时版本库中的版本。如果你在进行更新后再撤销更改,工作副本将返回到版本库的状态,而不是你开始进行更改前的状态。

 

树冲突有以下几种情况

1、本地删除,当更新时有更改进入

(1)、开发人员 A 修改 Foo.c 并将其提交至版本库中

(2)、开发人员 B 同时在他的工作副本中将文件 Foo.c 改名为Bar.c,或者仅仅是删除了Foo.c 或它的父文件夹。

 

更新开发人员 B 的工作副本会导致树冲突:

(3)、在工作副本中,Foo.c 被删除了,但是被标记为树冲突。

(4)、如果冲突是由于更改文件名引起的而不是删除文件引起的,那么 Bar.c 被标记为添加,但是其中却不包括开发人员 A 修改的内容。

 

解决方法

开发人员 B 现在必须做出选择是否保留开发人员 A 的更改。在更改文件名的案例中,他可以将 Foo.c 的更改合并到改名后的文件Bar.c 中去。对于删除文件或文件夹的案例中,他可以选择保留包含开发人员 A 更改内容的项目并放弃删除操作。或什么也不做而直接将冲突标记为已解决,那样他实际上丢弃了开发人员 A 的更改。

如果 TortoiseSVN 能够找到被改名为 Bar.c 的原始文件,冲突编辑对话框将可以合并更改。这取决于在什么地方调用更新操作,它也许不能找到原始文件。

 

 2、本地更改,当更新时有删除进入

(1)、开发人员 A 将文件 Foo.c 改名为Bar.c 并将其提交至版本库中。

(2)、开发人员 B 在他的工作副本中修改文件 Foo.c

 

或者对一个文件夹改名

(1)、开发人员 A 将父文件夹 FooFolder 改名为BarFolder 并将其提交至版本库中。

(2)、开发人员 B 在他的工作副本中修改文件 Foo.c

 

更新开发人员 B 的工作副本会导致树冲突

 

解决方法

(1)、开发人员 B 现在需要做出决定是否接受开发人员 A 作出的结构改变并且合并她的更改到新结构下适当的文件中,或者直接放弃开发人员 A 的更改并保留本地文件。

(2)、要合并她的本机更改到新布局中,开发人员 B 必须先找出冲突的文件 Foo.c 经过改名/移动后在版本库中的新文件名是什么。可以使用日志对话框来完成这个任务。更改必须要手工合并,因为没有办法自动的或者简单的完成此操作。一旦更改移植完毕,冲突的路径就是多余的并且可以删除。在此案例中,使用冲突编辑对话框中的删除按钮进行清理并将冲突标记为已解决。

(3)、如果开发人员 B 认为 A 的更改是错误的,那么在冲突编辑对话框中她必须选择保留按钮。这样就会标记冲突的文件/文件夹为已解决,但是需要手工删除开发人员 A 的更改。又是通过日志对话框帮助追踪哪些文件移动了。

 

3、本地删除,当更新时有删除进入

(1)、开发人员 A 将文件 Foo.c 改名为Bar.c 并将其提交至版本库中。

(1)、开发人员 B 将文件 Foo.c 改名为Bix.c

 

  • 更新开发人员 B 的工作副本会导致树冲突

     

    解决方法

    (1)、开发人员 B 必须找出冲突的文件 Foo.c 经过改名/移动后在版本库中的新文件名是什么。可以使用日志对话框来完成这个任务。

    (2)、然后,开发人员 B 需要决定 Foo.c 的新文件名中的哪一个需要保留 - 开发人员 A 改的那个还是他自己改的那个。

    (3)、在开发人员 B 手工解决冲突后,使用冲突编辑对话框中的按钮将树冲突标记为已解决。

     

    4、本地缺少,当合并时有更改进入

    (1)、开发人员 A 在主干上工作,修改 Foo.c 并将其提交至版本库中

    (1)、开发人员 B 在分支上工作,将 Foo.c 改名为Bar.c 并将其提交至版本库中

     

  • 合并开发人员 A 的主干更改到开发人员 B 的分支工作副本会导致树冲突

     

    解决方法

    开发人员 B 要在冲突编辑对话框中标记文件为已解决,这样就会将其从冲突列表中删除。她接下来需要决定是否将缺少的文件 Foo.c 从版本库中复制到工作副本中,是否将开发人员 A 的对 Foo.c 的更改和合并到改名后的 Bar.c 或者是否通过标记冲突为已解决来忽略更改什么事也不做。

    注意,如果你将缺少的文件从版本库中复制到工作副本中然后再标记为已解决,你复制下来的文件将被再次删除。你必须先解决冲突。

     

    5、本地更改,当合并时有删除进入

    (1)、开发人员 A 在主干上工作,将 Foo.c 改名为Bar.c 并将其提交至版本库中

    (2)、开发人员 B 在分支上工作,修改 Foo.c 并将其提交至版本库中

     

  • 合并开发人员 A 的主干更改到开发人员 B 的分支工作副本会导致树冲突

     

    解决方法

    (1)、开发人员 B 现在需要做出决定是否接受开发人员 A 作出的结构改变并且合并她的更改到新结构下适当的文件中,或者直接放弃开发人员 A 的更改并保留本地文件。

    (2)、要合并她的本机更改到新布局中,开发人员 B 必须先找出冲突的文件 Foo.c 经过改名/移动后在版本库中的新文件名是什么。可以通过适用于合并源码的日志对话框来完成这个任务。冲突编辑器仅显示工作副本的日志因为它不知道将哪个路径的更改合并进来,所以你需要自己找到它。更改必须要手工合并,因为没有办法自动的或者简单的完成此操作。一旦更改移植完毕,冲突的路径就是多余的并且可以删除。在此案例中,使用冲突编辑对话框中的删除按钮进行清理并将冲突标记为已解决。

    (3)、如果开发人员 B 认为 A 的更改是错误的,那么在冲突编辑对话框中她必须选择保留按钮。这样就会标记冲突的文件/文件夹为已解决,但是需要手工删除开发人员 A 的更改。又是通过日志对话框帮助追踪哪些文件移动了。

     

    6、本地删除,当合并时有删除进入

    (1)、开发人员 A 在主干上工作,将 Foo.c 改名为Bar.c 并将其提交至版本库中

    (2)、开发人员 B 工作在分之上,将 Foo.c 改名为Bix.c 并将其提交至版本库中

     

  • 合并开发人员 A 的主干更改到开发人员 B 的分支工作副本会导致树冲突

     

    解决方法

    (1)、开发人员 B 必须先找出冲突的文件 Foo.c 经过改名/移动后在版本库中的新文件名是什么。可以通过适用于合并源码的日志对话框来完成这个任务。冲突编辑器仅显示工作副本的日志因为它不知道将哪个路径的更改合并进来,所以你需要自己找到它。

    (2)、然后,开发人员 B 需要决定 Foo.c 的新文件名中的哪一个需要保留 - 开发人员 A 改的那个还是他自己改的那个。

    (3)、在开发人员 B 手工解决冲突后,使用冲突编辑对话框中的按钮将树冲突标记为已解决。

     

  •  

    标签:svn