git Azure DevOps构建验证到期选项混淆

2cmtqfgy  于 2023-04-28  发布在  Git
关注(0)|答案(2)|浏览(92)

在主分支策略中,我已经配置了构建验证策略,以便每当针对主分支提出PR时运行构建管道。
在配置时,我观察到构建到期有多个选项

  • 立即
  • n小时后
  • 从来没有

“立即”很容易理解。但我对“n小时后”选项感到困惑。
例如:如果我将构建到期设置为“After n hours”,并引发一个在文件BaseClass中有更改的PR。当我的PR相关的构建管道运行时,我的一个团队成员在BaseClass中发生了变化。cs被并入了主分支。他的更改可能导致了Baseclass中的合并问题。cs.
在与我的PR相关的构建管道完成后,由于构建策略将在n小时后到期,因此可以肯定,我将被允许完成此PR。
所以我的问题是ADO Git是否会因为合并问题而无法合并此PR,或者我的更改会覆盖我的团队成员更改?如果没有合并问题,它会完成吗?
我在微软网站上找不到清晰的文档,因此在这里寻求帮助。

bwitn5fc

bwitn5fc1#

当您提出PR时,系统会构建一个假设的合并提交,将您的工作提交到目标分支。当此构建完成时,系统在PR上设置其状态。这个构建状态就是文档中提到过期时的实际含义。
如果在PR构建完成后,其他PR将另一个更改合并到目标分支,可能会有不同的结果:

  • 由于合并冲突,您的PR无法合并
  • 您的PR可以合并(无冲突),但结果不会生成
  • 您的PR可以合并(没有冲突),合并的结果构建得很好

案例#1是最简单也是最明显的-如果没有冲突解决方案,您根本无法合并PR。案例#3也是安全的-结果仍然是绿色的。最棘手的一个是情况#2 -结果,你可以得到一个红色的目标分支。
使构建状态过期的选项是上述情况#2的额外保护措施:

  • 如果将其设置为Immediate,则当更新目标分支时,构建状态立即过期,并且系统尝试创建新的合并提交并运行构建。这是最安全的选择--当合并提交上的构建被验证并且是最新的时候,你总是处于这种情况。但是,对于活动存储库来说,它可能太重了。
  • 如果您将其设置为Never,则意味着在合并PR之前,您完全有责任验证PR是否仍然构建。在合并之前总是将你的分支重定基到目标分支可能是一个好习惯--这样你也会有一个最新的构建。然而,这是团队中编码实践的问题。
  • 关于“N小时后”过期选项,文档说:“此选项是在受保护分支更新时始终需要构建或从不需要构建之间的折衷。“就像任何妥协一样,都有利弊。如果你倾向于安全,考虑Immediate到期。如果您希望减少构建系统的负载,并且团队中的开发人员足够成熟,可以负责,则可以考虑Never过期。

所以我的问题是ADO Git是否会因为合并问题而无法合并此PR。..
是的,如果存在合并冲突,系统将始终使合并失败。您的更改不会覆盖目标分支中已存在的队友的更改。
如果没有合并问题,它会完成吗?
是的,但正如我上面提到的,目标分支中的合并提交可能不是绿色的(案例2)。
希望这能帮上忙。

41zrol4v

41zrol4v2#

如果有冲突,合并将停止并要求您解决冲突。如果没有冲突,自动完成将起作用,不会在代码中引起任何问题。

相关问题