Sim*_*ens 23
一个冲突的变化是当两个人同时对同一个文件进行更改时,两个更改无法自动解决.
1)让我们从一个非冲突合并的例子开始.
原始文件
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
人A将其更改为:
line1CHANGED
line2
line3
Run Code Online (Sandbox Code Playgroud)
B人将其更改为:
line1
line2CHANGED
line3
Run Code Online (Sandbox Code Playgroud)
当这些都被签入并合并时,没有冲突,因为它可以轻松解析以生成这个最终文件:
line1CHANGED
line2CHANGED
line3
Run Code Online (Sandbox Code Playgroud)
Subversion将作为合并自动处理.
2)现在是一个冲突变化的例子.
原始文件
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
人A将其更改为:
line1CHANGED_BY_A
line2
line3
Run Code Online (Sandbox Code Playgroud)
B人将其更改为:
line1CHANGED_BY_B
line2
line3
Run Code Online (Sandbox Code Playgroud)
这不能自动合并,因此是冲突.您需要通过接受A人的变更或B人的变更来解决.在这种情况下,subversion会警告您冲突,并要求您决定如何解决冲突.
3)最后,您可以在同一修订版中同时进行冲突和非冲突更改.
原始文件
line1
line2
line3
Run Code Online (Sandbox Code Playgroud)
人A将其更改为:
line1CHANGED_BY_A
line2ALSO_CHANGED_BY_A
line3
Run Code Online (Sandbox Code Playgroud)
B人将其更改为:
line1CHANGED_BY_B
line2
line3ALSO_CHANGED_BY_B
Run Code Online (Sandbox Code Playgroud)
现在,通过此示例,两个人都更改了文件,并且第1行上存在必须解决的冲突更改,但第2行和第3行是无冲突的更改,可以自动解决.
您可以选择以多种方式解决此问题.
首先,您可以完全接受A或B的文件并丢弃另一个.这将导致其他人失去不相互冲突的变化.比如,您选择使用A完全解析,您的最终文件将是:
line1CHANGED_BY_A
line2ALSO_CHANGED_BY_A
line3
Run Code Online (Sandbox Code Playgroud)
(正好是A的文件,B的所有更改都被丢弃)
其次,您只能解决冲突的更改,并仍保留所有非冲突的更改.这就是你要为第一行选择A或B的变化,并且仍然可以从两个人那里得到其他行的变化.所以,比如说你选择使用A来解决冲突,你的最终文件将是:
line1CHANGED_BY_A
line2ALSO_CHANGED_BY_A
line3ALSO_CHANGED_BY_B
Run Code Online (Sandbox Code Playgroud)
另外,您可以使用像KDiff这样的工具来支持单独检查每个冲突(当然,您可以在同一个文件中进行多重冲突,包括冲突和非冲突),这样您就可以为每个冲突选择不同的分辨率方法.
如果您无法理解与命令行工具的合并,我强烈建议您查看KDiff(或其他一些GUI合并/差异工具),因为它们会一起显示文件(以及原始文件),并允许您进行视觉每个决议行动会做什么.
考虑这样的函数(称之为修订版1)
void foo(){
int bar;
}
Run Code Online (Sandbox Code Playgroud)
现在让我们假设有两个人对这个函数进行了更改,从版本1开始.
爱丽丝:
void foo(){
char bar;
}
Run Code Online (Sandbox Code Playgroud)
鲍勃:
double foo(){
double bar;
bar = 0;
return bar;
}
Run Code Online (Sandbox Code Playgroud)
为了这个例子,我们假设Alice提交了她的更改.
现在Bob去提交更改,svn会告诉Bob他已经过时了,需要更新和合并更改.所以Bob运行更新,然后进行合并.
基本上,(有点)很容易看出发生的事情是一个分析,它决定了Bob从修订版1改变了什么以及Alice从修订版1改变了什么.一个简单的合并会产生像
double foo(){
[conflict] bar;
bar = 0;
return bar;
}
Run Code Online (Sandbox Code Playgroud)
请注意,Alice和Bob都改变了barfrom 的类型int,除了Alice制作它char和Bob制作它double.合并无法决定哪一个是正确的(它没有进行代码分析),因此人类鲍勃需要帮助解决冲突.
这个例子,当然,有些做作,并与标注冲突外,其他所有的变化都没有冲突.
如果Bob没有更改类型bar,则文件将合并而不会发生冲突.
| 归档时间: |
|
| 查看次数: |
5101 次 |
| 最近记录: |