svn文件冲突,树冲突详解
偶尔,当你从版本库更新、合并文件时,或者切换工作副本至一个不同的 URL 时你会遇到冲突
。有两种冲突:
文件冲突
当两名(或更多)开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。
树冲突
当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。
当两名或更多开发人员修改了同一个文件中相邻或相同的行时就会发生文件冲突。由于 Subversion
不知道你的项目的具体情况,它把解决冲突的工作留给了开发人员。一旦出现冲突,你就应该打开有问题的文件,查找以字符串<<<<<<<
开头的行。有冲突的区域用如下的方式标记:
<<<<<<< 文件名
你的修改
=======
合并自版本库中的代码
>>>>>>> 版本
对于每个冲突的文件 Subversion 在你的目录下放置了三个文件:
文件名.ext.mine
这是你的文件,在你更新你的工作副本之前存在于你的的工作副本中——也就是说,没有冲突标志。这个文件除了你的最新修改外没有别的东西。
文件名.ext.r旧版本
这是在你更新你的工作副本之前的基础版本(BASE revision)文件。也就是说,它是在你做最后修改之前所检出的文件。
文件名.ext.r新版本
这个文件是当你更新你的工作副本时,你的 Subversion
客户端从服务器接收到的。这个文件对应于版本库中的最新版本。
你可以通过
→
运行外部合并工具/冲突编辑器,或者你可以使用任何别的编辑器手动解决冲突。你需要冲定哪些代码是需要的,做一些必要的修改然后保存。
然后,执行命令
→
并提交人的修改到版本库。需要注意的是已解决命令并不是真正的解决了冲突,它只是删除了filename.ext.mine
和filename.ext.r*
两个文件,允许你提交修改。
如果你的二进制文件有冲突,Subversion不会试图合并文件。本地文件保持不变(完全是你最后修改时的样子),但你会看到filename.ext.r*
文件。如果你要撤消你的修改,保留版本库中的版本,请使用还原(Revert)命令。如果你要保持你的版本覆盖版本库中的版本,使用已解决命令,然后提交你的版本。
你可以右击父文件夹,选择
→
,使用“已解决”命令来解决多个文件。这个操作会出现一个对话框,列出文件夹下所有有冲突的文件,你可以选择将哪些标记成已解决。
当一名开发人员移动、重命名、删除一个文件或文件夹,而另一名开发人员也对它们进行了移动、重命名、删除或者仅仅是修改时就会发生树冲突。有很多种不同的情形可以导致树冲突,而且不同的情形需要不同的步骤来解决冲突。
当一个文件通过 Subversion
在本机删除后,文件也从本机文件系统中删除。因此即使它是树冲突的一部分,却既不能显示冲突的叠加图标也不能通过右键单击来解决冲突。使用检查修改
对话框来获得编辑冲突
选项。
TortoiseSVN 能够协助找到合并更改的正确位置,但是需要作一些额外的工作来整理冲突。请牢记:
当进行一次更新操作后,工作副本的基础文件将会包括每一个项目在执行更新操作时版本库中的版本。如果你在进行更新后再撤销更改,工作副本将返回到版本库的状态,而不是你开始进行更改前的状态。
-
开发人员 A 修改 Foo.c
并将其提交至版本库中
-
开发人员 B 同时在他的工作副本中将文件 Foo.c
改名为 Bar.c
,或者仅仅是删除了 Foo.c
或它的父文件夹。
更新开发人员 B 的工作副本会导致树冲突:
开发人员 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 的工作副本会导致树冲突。对于一个简单的文件冲突:
对于一个文件夹冲突:
开发人员 B 现在需要做出决定是否接受开发人员 A 作出的结构改变并且合并她的更改到新结构下适当的文件中,或者直接放弃开发人员 A
的更改并保留本地文件。
要合并她的本机更改到新布局中,开发人员 B 必须先找出冲突的文件 Foo.c
经过改名/移动后在版本库中的新文件名是什么。可以使用日志对话框来完成这个任务。更改必须要手工合并,因为没有办法自动的或者简单的完成此操作。一旦更改移植完毕,冲突的路径就是多余的并且可以删除。在此案例中,使用冲突编辑对话框中的删除
按钮进行清理并将冲突标记为已解决。
如果开发人员 B 认为 A 的更改是错误的,那么在冲突编辑对话框中她必须选择保留
按钮。这样就会标记冲突的文件/文件夹为已解决,但是需要手工删除开发人员 A
的更改。又是通过日志对话框帮助追踪哪些文件移动了。
-
开发人员 A 将文件 Foo.c
改名为
Bar.c
并将其提交至版本库中。
-
开发人员 B 将文件 Foo.c
改名为
Bix.c
更新开发人员 B 的工作副本会导致树冲突:
要解决这个冲突,开发人员 B 必须找出冲突的文件 Foo.c
经过改名/移动后在版本库中的新文件名是什么。可以使用日志对话框来完成这个任务。
然后,开发人员 B 需要决定 Foo.c
的新文件名中的哪一个需要保留 - 开发人员 A 改的那个还是他自己改的那个。
在开发人员 B 手工解决冲突后,使用冲突编辑对话框中的按钮将树冲突标记为已解决。
-
开发人员 A 在主干上工作,修改 Foo.c
并将其提交至版本库中
-
开发人员 B 在分支上工作,将 Foo.c
改名为 Bar.c
并将其提交至版本库中
合并开发人员 A 的主干更改到开发人员 B 的分支工作副本会导致树冲突:
要解决这个冲突,开发人员 B 要在冲突编辑对话框中标记文件为已解决,这样就会将其从冲突列表中删除。她接下来需要决定是否将缺少的文件 Foo.c
从版本库中复制到工作副本中,是否将开发人员 A 的对
Foo.c
的更改和合并到改名后的 Bar.c
或者是否通过标记冲突为已解决来忽略更改什么事也不做。
注意,如果你将缺少的文件从版本库中复制到工作副本中然后再标记为已解决,你复制下来的文件将被再次删除。你必须先解决冲突。
-
开发人员 A 在主干上工作,将 Foo.c
改名为 Bar.c
并将其提交至版本库中
-
开发人员 B 在分支上工作,修改 Foo.c
并将其提交至版本库中
当文件夹改名时有类似的案例,但是在 Subversion 1.6 中还未被识别...
-
开发人员 A 在主干上工作,将父文件夹 FooFolder
改名为 BarFolder
并将其提交至版本库中。
-
开发人员 B 在分支上工作,在她的工作副本中修改 Foo.c
。
合并开发人员 A 的主干更改到开发人员 B 的分支工作副本会导致树冲突:
-
Bar.c
被标记为添加。
-
Foo.c
被标记为修改并产生树冲突。
开发人员 B 现在需要做出决定是否接受开发人员 A 作出的结构改变并且合并她的更改到新结构下适当的文件中,或者直接放弃开发人员 A
的更改并保留本地文件。
要合并她的本机更改到新布局中,开发人员 B 必须先找出冲突的文件 Foo.c
经过改名/移动后在版本库中的新文件名是什么。可以通过适用于合并源码的日志对话框来完成这个任务。冲突编辑器仅显示工作副本的日志因为它不知道将哪个路径的更改合并进来,所以你需要自己找到它。更改必须要手工合并,因为没有办法自动的或者简单的完成此操作。一旦更改移植完毕,冲突的路径就是多余的并且可以删除。在此案例中,使用冲突编辑对话框中的删除
按钮进行清理并将冲突标记为已解决。
如果开发人员 B 认为 A 的更改是错误的,那么在冲突编辑对话框中她必须选择保留
按钮。这样就会标记冲突的文件/文件夹为已解决,但是需要手工删除开发人员 A
的更改。又是通过日志对话框帮助追踪哪些文件移动了。
-
开发人员 A 在主干上工作,将 Foo.c
改名为 Bar.c
并将其提交至版本库中
-
开发人员 B 工作在分之上,将 Foo.c
改名为 Bix.c
并将其提交至版本库中
合并开发人员 A 的主干更改到开发人员 B 的分支工作副本会导致树冲突:
-
Bix.c
被标记为正常(未修改)状态。
-
Bar.c
被标记为添加(包括其历史记录)。
-
Foo.c
被标记为缺少并且产生树冲突。
要解决这个冲突,开发人员 B 必须先找出冲突的文件 Foo.c
经过改名/移动后在版本库中的新文件名是什么。可以通过适用于合并源码的日志对话框来完成这个任务。冲突编辑器仅显示工作副本的日志因为它不知道将哪个路径的更改合并进来,所以你需要自己找到它。
然后,开发人员 B 需要决定 Foo.c
的新文件名中的哪一个需要保留 - 开发人员 A 改的那个还是他自己改的那个。
在开发人员 B 手工解决冲突后,使用冲突编辑对话框中的按钮将树冲突标记为已解决。
关于我的解决方法
本人遇到这个问题,不管怎么样都无法删除。最后只得删除本地的所有文件,重新更新库。然后再删除想要删除的文件,最后提交。不在出现这个问题了。
分享到:
相关推荐
标题中的“WIN7 XP环境功能最强大,最好用的系统工具箱”暗示这是一款专为Windows 7和Windows XP设计的高效系统维护和优化工具集合。这类工具箱通常包含多种实用程序,旨在帮助用户轻松管理和优化他们的操作系统。...
matlab通信系统工具箱,取自matlab R2012b,对于通信专业十分有用。安装方法可以参考https://blog.csdn.net/qq_44589534/article/details/123884469 解决了randsrc function不存在的问题。
小猫系统工具箱介绍: 友好简单的UI 全面的系统工具 值得收藏的系统管理软件 小猫系统工具箱 v2.1.1更新内容: 修复了在window2000下的一个bug 完善了一个页面缺口 修复了几个小问题
android 系统工具类
在Windows CE(简称WinCE)操作系统的世界里,这个“WinCE系统工具、软件及游戏合集(自用)”的压缩包显然包含了丰富的资源,旨在帮助用户更好地管理和享受这个嵌入式系统的功能。Windows CE是一种面向小型设备的...
**XP系统工具箱详解** XP系统工具箱是一款专为Windows XP操作系统设计的实用工具集合,旨在帮助用户更方便地管理和优化他们的系统。这个工具箱包含了多个功能强大的小工具,涵盖了网络配置、系统性能优化和注册表...
"超级一键网克"是一款专为IT管理员设计的网络批量安装系统工具,它极大地简化了在多台计算机上同时安装或重装操作系统的流程。这款工具的独特之处在于其"一键"特性,使得即便是没有深入技术背景的用户也能轻松操作。...
系统分区工具 装系统工具 分区工具,系统分区工具 装系统工具 分区工具
系统工具快速执行系统工具快速执行系统工具快速执行系统工具快速执行系统工具快速执行系统工具快速执行系统工具快速执行系统工具快速执行
"matlab非线性系统工具箱"是一款专为MATLAB平台设计的扩展工具,由国外知名大学开发,致力于解决非线性控制系统的设计与分析问题。这个工具箱包含了一系列预编写的函数和示例,帮助用户方便地进行非线性系统的建模、...
Matlab 控制系统工具箱的高级应用教程 Matlab 控制系统工具箱是 Matlab 中的一个重要工具包,提供了许多函数和工具来进行控制系统的设计、分析和模拟。本教程将介绍 Matlab 控制系统工具箱的高级应用,以帮助读者...
最小最好用的系统工具箱,深山红叶系统工具箱,最小最好用的系统工具箱,深山红叶系统工具箱,
方便快捷的系统工具类。平时开发经常会用到哦
开机自动还原系统工具 开机自动还原系统工具 开机自动还原系统工具
"XT系统工具"是一款专为用户设计的系统资源监控软件,其版本号为0.39,被赞誉为“传说中的神马”。这款工具的主要功能是帮助用户实时查看和了解计算机系统的运行状态,包括CPU使用率、内存占用、硬盘读写速度以及...
重装系统工具
关于【压缩包子文件的文件名称列表】中的"深山红叶袖珍PE系统工具箱_PChome下载介绍.txt",这可能是一个包含该工具箱在PChome网站上的详细下载介绍和使用指南的文本文件,提供了更多关于如何下载、安装和使用深山...
WSCC是一个免费的,便携式程序,允许您安装,更新,执行和组织各种系统工具套件的工具。 WSCC只是一个接口,你需要下载和安装单独的工具。另外,WSCC可以使用http协议下载和运行程序。 所包含的更新管理器可以检查已...
电脑系统工具箱 共有12各功能 提意见可发邮件 1428857752@qq.com
杏雨梨云U盘系统工具,方便好用。并且有使用教程供下载。