Git 当在同一位置添加不同的方法(等)时,如何避免合并冲突?
前言:这不是一个关于合并冲突的一般性问题,而是一个一直困扰我的非常具体的案例。这是相当琐碎的,但它确实是一个(轻微的)麻烦,往往足以脱颖而出。我不关心一般的合并,这只是为了节省几秒钟时间来解决机械的冲突,首先要避免上述冲突。我也绝对知道这不是一个“git问题”或类似的问题 也就是说,假设我们有一个类的源文件:Git 当在同一位置添加不同的方法(等)时,如何避免合并冲突?,git,merge,conflict,git-merge-conflict,Git,Merge,Conflict,Git Merge Conflict,前言:这不是一个关于合并冲突的一般性问题,而是一个一直困扰我的非常具体的案例。这是相当琐碎的,但它确实是一个(轻微的)麻烦,往往足以脱颖而出。我不关心一般的合并,这只是为了节省几秒钟时间来解决机械的冲突,首先要避免上述冲突。我也绝对知道这不是一个“git问题”或类似的问题 也就是说,假设我们有一个类的源文件: class Xyz ... ... def last_method ... end end 这在master和几个功能分支中都是相同的。现在,在实
class Xyz
...
...
def last_method
...
end
end
这在master
和几个功能分支中都是相同的。现在,在实现我们的功能时,我们将向此类添加更多方法:
分支机构1:
class Xyz
...
...
def last_method
...
end
def new_method1
...
end
end
分支机构2:
class Xyz
...
...
def last_method
...
end
def new_method2
...
end
end
当两个分支合并回master
时,新方法没有关联,它们将愉快地共存
显然,这将导致合并冲突。原因很清楚——我们在完全相同的位置更改了源文件,显然git不能(也不应该)神奇地为我们判定这不是“真正的”冲突;git必须选择哪些方法应该放在第一位,等等
避免冲突的一种方法是在文件中的不同位置插入新方法(假设顺序无关紧要),但我们真的不想花太多精力(或者根本不想花太多精力)在思想上跟踪在哪里插入内容或在其他特性中发生了什么
那么,问题是:是否有另一种方法,可能是某种编码约定,可以定期应用,以某种方式避免这种合并冲突 这是个好问题。然而,在某些情况下,有一些方法可以缓解这个问题 在理想情况下,在设计一个类时,您可以决定它将由什么组成(变量、方法等),并且已经可以为它们选择合适的名称。在这种情况下,您应该在引入类的提交中编写这些方法的存根 然后,这些存根将充当基于行的版本控制系统(如Git:
class-MyClass
def初始化
#待办事项
结束
def获取\u ID
#待办事项
结束
def set_ID
#待办事项
结束
结束
在这个“第一次”提交之后,不同的贡献者可以自由地更改不同方法的主体:在我的示例中,Alice可以实现
get\u ID
,Bob可以实现set\u ID
,而不必担心在将来遇到合并冲突,因为每个方法的def
和end
行已经存在于原始提交中。感谢您的回答,我感谢您提到“在某些条件下”。不幸的是,这些都不适用——在我的例子中,这是敏捷/BDD驱动的开发,而我们所做的恰恰相反;i、 例如,我们没有未使用的占位符代码,甚至没有空方法的“todo”实现(至少在master
中没有)。作为一个人,很容易看出,由不同贡献者添加的不同方法不应该导致合并冲突,但从diff3算法来看,它不够复杂,无法检测到这一点;就其而言,在同一位置添加的不同行=>冲突。