当多个开发人员正在将更改合并到主线

时间:2017-07-20 18:51:01

标签: git jenkins continuous-integration bitbucket

我有以下情况:
bitbucket有一个主线分支。每个开发人员都会在此主线之外创建一个分支并对其进行处理。一旦开发人员在dev分支中完成代码开发,他就会从主线同步代码并运行CI过程来测试是否一切正常。一旦构建通过(包括完整性测试),那么来自dev分支的代码将合并到主线。

问题陈述:

  1. Developer X从主线(ML)创建一个名为X_DEV的开发分支。
  2. 一旦Developer X完成开发,他就会从主线ML获取最新代码并将其同步到他的X_DEV分支。
  3. Developer X在他的X_DEV分支上运行构建和健全性测试。然后,在所有测试通过后,他将代码合并到主线ML。
  4. 但是,当开发人员X在第3步中对其代码运行测试时,另一名开发人员命名为' Y'从主线创建了一个名为Y_DEV的新开发分支。
  5. 在创建新的开发分支Y_DEV之后,开发人员编写代码并对其进行测试。在他的开发分支中进行测试后,他然后从主线复制最新代码(此时开发人员X的更改尚未出现在ML主线中)。
  6. 在开发人员Y从主线复制最新代码之后,他再次运行构建和健全测试,之后他将他的代码合并到主线。但是他的代码无法合并到主线,因为开发人员X将新代码复制到ML,并且该代码尚未出现在分支Y_DEV中。由于这个问题,开发人员Y浪费了他的时间,并且必须再次从主线同步代码并再次运行构建和健全性测试。
  7. 我们如何在这里拥有自动智能解决方案?

    如何在不添加等待/睡眠或等待X_Dev代码同步到ML或让每个功能都拥有自己的SDLC的情况下处理这些问题?

1 个答案:

答案 0 :(得分:0)

我认为不可能有“自动”解决方案来解决合并冲突/问题。 Git可以帮助您管理代码,但是您无法真正教它来解决合并冲突。大多数情况下,您必须自己手动检查并仔细解决每个冲突。

我认为您最好的解决方案是对您的开发过程进行一些更改。

首先,当您说“从主线同步代码”或“从主线复制代码”时,我希望您的意思是在dev分支上执行git rebase mastergit merge master。如果没有,那么我建议你研究git rebase

第二,您如何创建开发分支? 理想情况下,每个分支应该足够独立,以便在1个分支(例如X)上完成的工作不会冲突或依赖于在其他分支(Y,Z等)上完成的工作。合并冲突通常发生在分支触及代码/模块/功能的相同部分时。如果您可以以某种方式将代码更改隔离到单独的分支中,那么这将减少合并冲突的可能性。

在您的示例场景中,似乎Y和X的工作密切相关。也许他们应该只在一个分支机构YX上工作?因此,运行测试只会进行一次,但会同时测试它们的两个功能。或者你可以先创建一个中间分支(Z),你可以在其中对Y和X进行常见更改,然后从Z分支Y和X.在X和Y完成编码和测试之后,他们将代码合并回Z.你在Z上做另一组测试,然后将Z合并回主线。由于X和Y都有常见更改的副本,因此在将代码合并到Z时可以减少冲突的可能性。

第三,您可以进行两种测试:分支/功能测试集成测试

分支测试是您已经在做的事情,在每个功能分支合并回主线之前对其进行构建和完整性测试。这很好,因为从分支的角度来看,它检查修改后的代码是否没有破坏任何其他功能。

集成测试(IT)是将分支合并回主线时执行的操作。这是你在每个分支上已经做过的相同的构建和健全性测试,但这一次,它是在主线而不是在分支上完成的并且当所有功能都合并到主线。这允许合并每个分支,而不要求它首先与所有其他分支同步。根据您的示例场景,您已经在使用IT,但是您在EACH分支上执行此操作,因为您需要每个分支首先从其他分支获取更改。当然,这样做仍然是一个好主意,但对于IT,您并不总是需要。 (此外,IT更容易实现自动化,因为您始终可以在主线上运行它。)。

希望有所帮助。