在使用 TFS 时,如何微调 Visual Studio 认为合并冲突的内容?
How can I fine tune what Visual Studio considers a merge conflict when using TFS?
我正在尝试将少量代码更改从分支文件合并到经过大量修改的主干文件(主要是通过向开关添加案例)。当我尝试合并代码时,我正在从旧文件合并到新文件(从更少的案例到更多的案例)。当我告诉 visual studio 从分支合并到主干时,它会删除所有更新的(新)案例并将最后一个(新)案例替换为分支中添加的案例。例如:
中继线:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(125)
thing = "sdf"
BREAK
CASE(126)
thing = "asd"
BREAK
CASE(127)
thing = "qwe"
BREAK
}
分支机构:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(325)
thing = "poi"
BREAK
}
合并结果:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(325)
thing = "poi"
BREAK
}
期望的结果:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(125)
thing = "sdf"
BREAK
CASE(126)
thing = "asd"
BREAK
CASE(127)
thing = "qwe"
BREAK
CASE(325)
thing = "poi"
BREAK
}
我想要发生的是它隔离新案例并将其移动到交换机中。我希望有一种方法可以手动决定如何合并文件,或者有一种方法可以 "teach" 合并工具如何处理大的更改。
在这个例子中,每个案例的唯一不同是案例中的值 (CASE(value)
) 和分配给 thing
的值。此外,从未检测到任何合并冲突。
如果没有办法微调比较工具,有没有其他擅长自动合并的工具?
更新:只有在进行无基础合并时才会出现此问题。如果你不做无基础的合并,它工作正常
不短,如果只有一侧更新,则无法显示合并冲突。
对于你的情况,过程好像是:create/modify先生成主干文件,然后在主干文件的基础上修改分支文件。
合并分支文件到主干文件时,TFVC会比较主干文件和分支文件的变化。由于该文件只更新了一侧(通过与主干文件比较更新分支文件),因此它将通过递归合并策略与最新版本(来自分支文件的版本)合并。并且没有办法显示这种情况的合并冲突。
但是由于合并文件在合并后不会自动签入,所以您可以根据需要编辑合并文件,然后将合并文件签入源代码管理。
或者您可以使用以下解决方法合并冲突:
从主干文件创建另一个分支(假设分支2)->签入分支2的更改->将分支文件合并到分支2文件中->将显示合并冲突->然后与您想要的版本合并。
注:对于git,也会采用递归合并策略进行合并,不会有合并冲突。
我正在尝试将少量代码更改从分支文件合并到经过大量修改的主干文件(主要是通过向开关添加案例)。当我尝试合并代码时,我正在从旧文件合并到新文件(从更少的案例到更多的案例)。当我告诉 visual studio 从分支合并到主干时,它会删除所有更新的(新)案例并将最后一个(新)案例替换为分支中添加的案例。例如:
中继线:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(125)
thing = "sdf"
BREAK
CASE(126)
thing = "asd"
BREAK
CASE(127)
thing = "qwe"
BREAK
}
分支机构:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(325)
thing = "poi"
BREAK
}
合并结果:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(325)
thing = "poi"
BREAK
}
期望的结果:
SWITCH(var){
CASE(123)
thing = "bnm"
BREAK
CASE(124)
thing = "gjh"
BREAK
CASE(125)
thing = "sdf"
BREAK
CASE(126)
thing = "asd"
BREAK
CASE(127)
thing = "qwe"
BREAK
CASE(325)
thing = "poi"
BREAK
}
我想要发生的是它隔离新案例并将其移动到交换机中。我希望有一种方法可以手动决定如何合并文件,或者有一种方法可以 "teach" 合并工具如何处理大的更改。
在这个例子中,每个案例的唯一不同是案例中的值 (CASE(value)
) 和分配给 thing
的值。此外,从未检测到任何合并冲突。
如果没有办法微调比较工具,有没有其他擅长自动合并的工具?
更新:只有在进行无基础合并时才会出现此问题。如果你不做无基础的合并,它工作正常
不短,如果只有一侧更新,则无法显示合并冲突。
对于你的情况,过程好像是:create/modify先生成主干文件,然后在主干文件的基础上修改分支文件。
合并分支文件到主干文件时,TFVC会比较主干文件和分支文件的变化。由于该文件只更新了一侧(通过与主干文件比较更新分支文件),因此它将通过递归合并策略与最新版本(来自分支文件的版本)合并。并且没有办法显示这种情况的合并冲突。
但是由于合并文件在合并后不会自动签入,所以您可以根据需要编辑合并文件,然后将合并文件签入源代码管理。
或者您可以使用以下解决方法合并冲突:
从主干文件创建另一个分支(假设分支2)->签入分支2的更改->将分支文件合并到分支2文件中->将显示合并冲突->然后与您想要的版本合并。
注:对于git,也会采用递归合并策略进行合并,不会有合并冲突。