我们正在使用 Azure DevOps 的项目中采用 gitflow 流程。我有以下场景:
- 当功能分支合并到开发中时,我想在完成拉取请求时强制执行壁球合并策略
- 当发布分支定期同步回开发时,我想强制执行 no-ff 合并,以保留发布分支签入历史记录
有两个问题:
鉴于我上面的两个要求,这是否以某种方式表明我可能在分支和合并方面做错了什么
AzDo 中是否有工具可以根据源分支(自动)提供不同的合并策略?
谢谢,
我们正在使用 Azure DevOps 的项目中采用 gitflow 流程。我有以下场景:
有两个问题:
鉴于我上面的两个要求,这是否以某种方式表明我可能在分支和合并方面做错了什么
AzDo 中是否有工具可以根据源分支(自动)提供不同的合并策略?
谢谢,
我看不出 gitflow 进程的上述分支和合并有什么问题。请查看此文档以获取有关gitflow 进程的更多信息。
没有直接的方法可以根据源分支自动选择不同的合并策略。解决方法是您可以使用pull request update rest api 将 pr 设置为 autoComplete 并根据源分支设置合并策略。下面是一个示例供参考。
1、首先创建一个构建管道并添加一个powershell任务来运行下面的脚本。您可以在此处查看创建经典 ui 管道的步骤。对于 yaml 管道,您可以查看此文档。
下面的脚本将根据 pr 设置合并策略
System.PullRequest.SourceBranch
并启用此 pr 的自动完成功能。这样pr在满足所有要求时会自动完成。(您需要根据需要更改if(){}
部分)。
$uri = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.ID)/pullrequests/$(System.PullRequest.PullRequestId)?api-version=5.1"
$response = Invoke-RestMethod -Uri $uri -Headers @{authorization = "Bearer $(System.AccessToken)"} -Method get
$userid = $response.createdBy.id
$merge = "rebaseMerge"
if("$(System.PullRequest.SourceBranch)" -eq "refs/heads/release"){$merge = "noFastForward"}
$body =@{
autoCompleteSetBy = @{
id= "$($userid)"
}
status = "complete"
completionOptions= @{mergeStrategy = $merge}
}
$bjson = $body | ConvertTo-Json
Invoke-RestMethod -Uri $uri -Headers @{authorization = "Bearer $(System.AccessToken)"} -Method patch -ContentType application/json -Body $bjson
2、然后配置Develop分支的分支策略。并选择上面创建的管道来设置构建验证。通过设置构建验证,pr 将触发运行在上述步骤中创建的构建管道。以上管道将根据源分支更改合并策略。
您还可以将此设施的功能请求(单击建议功能并选择 azure devops)提交给 Microsoft 开发。
我认为目前在 ADO 中是不可能的。我找到了一张功能请求票,并留下了我的评论和建议 -功能请求。
这是我的评论的副本:
I think this feature would be awesome. Currently, is a stack overflow related to this problem:
https://stackoverflow.com/questions/60106638/different-merge-strategies-automatically-based-on-the-source-branch
Also, I’ve checked both UI and REST API looking for a way or a workaround to achieve this but to no avail.
My generalized suggestion would be to be able to create and attach ad-hoc policy to a PR to override a branch policy. This would allow a third party tool (and/or in UI) to override policy properties like “Limit merge types” based on PR properties like ‘source branch’. For instance, if a source branch is set to “feature/somefeature”, “Limit merge types” should be Squash only. Another example, if a source branch is “integration”, don’t allow Squash Merge.
作为替代方案,您可以使用ADO 服务挂钩在 PR 创建/修改时触发自定义应用程序(例如 Azure Functions),留下评论以提醒开发人员不要使用 Squash 合并类型。仅当 PR 的源分支是特定分支时,应用程序才能具有添加注释的逻辑。如果您的分支策略已Check for comment resolution
设置,开发人员将无法在不解决评论的情况下完成 PR。这不是您想要实现的(没有什么可以阻止开发人员使用无效的合并类型),但希望会减少此类情况的数量。这是 Azure Functions 中自定义分支策略的示例。