好的,这就是我面临的情景。我正在与两个不同的分支机构合作,并且我正在编辑同一个文件。让我们假设第一个分支名称是WORK-001,第二个分支是WORK-002。在WORK-001分支中,我提供了如下所示的更改:
file:update.php
function test_update_7001() {
dsm('work 001');
}
在分支WORK-002上,我提供了以下所示的更改:
file:update.php
function test_update_7002() {
dsm('work 002');
}
我完成了两个分支的工作,推动了更改并发出了两个单独的拉取请求。问题是如果首先合并来自分支WORK-002的更改,那么将不会触发WORK-001的更改(函数test_update_7001()永远不会被运行)。这些函数以这种方式工作:如果首先触发7002,则此函数的数量将保存到数据库,下一个可用的数字为7003,系统将永远不允许运行7001.当然,我可以提供两个相同的数字,因此它可能是7001在这两种情况下,但是当拉取请求合并时(首先不确定哪一个),则会出现冲突。
有没有办法避免冲突并强迫(以某种方式)负责合并的人将WORK-001合并为第一个,将WORK-002合并为第二个,这样合并的顺序是正确的?也许某种分支?
答案 0 :(得分:2)
控制拉取请求将被合并的顺序的唯一方法是在合并WORK-001之前不创建WORK-002的拉取请求。如果这看起来很笨重,我会回答这是一个功能命名约定的笨重方案的症状,它允许一段代码的有效性取决于是否在之前或之后提交了无关的更改。
其他几点说明:
您的问题中内置的一个前提是,为它们提供相同的函数名称会导致合并冲突。这(可能)不正确。
默认合并工具根据文件(行号)中的位置确定冲突,而不是按功能名称。所以我的期望是,即使您给函数指定了不同的名称(如果新函数在文件的相应版本中处于相同位置),即使它们使用相同的名称,也会发生冲突。 name(如果新函数位于文件各个版本的不同位置)。
分支拓扑可以说是问题所在。
独立于master的两个分支应该彼此独立。如果在变更B之前必须合并变更A,即使在这种情况下它有一些非标准的原因,您可以根据变更A将其解释为变更B.在这种情况下,变更B的分支应该植根于变更A的分支,在分支中足够远,它包含它所依赖的变化。
最后一句话可能会让人感到困惑,如果不了解您使用的系统,需要test_update_7001()
合并test_update_7002()
,我很难澄清;所以"安全"事情是在HEAD of WORK-001的根本WORK-002。
有两个问题:
首先,它不会强制合并WORK-001;它的作用是让WORK-002 PR显示更改包括 WORK-001,除非WORK-001已经合并。如果要对这些更改进行独立审核和接受,则可能会导致问题。
其次,听起来你已经在他们当前的拓扑结构中推动了分支机构,所以重新定位WORK-002(这是你必须要做的)可能会造成破坏。
如果你真的需要按特定顺序合并到master的函数名,那么函数名的赋值应该是合并过程的一部分。
但这也难以可靠地实施,最终让我重新认为你的问题是一个笨重的系统,可以识别哪些功能可以运行。