Azure DevOps GIT(gitflow)如何在开发分支上强制执行拉取请求以保持源最新?

Posted

技术标签:

【中文标题】Azure DevOps GIT(gitflow)如何在开发分支上强制执行拉取请求以保持源最新?【英文标题】:Azure DevOps GIT (gitflow) how to enforce pull request on develop branch an keep origin up-to-date? 【发布时间】:2019-03-29 01:05:20 【问题描述】:

我正在尝试在 Azure DevOps 托管的 git 存储库中实现类似 gitflow 的工作流。我已经为我的 QA 服务器启用了 CI/CD,该服务器从完成针对开发分支的拉取请求触发。 此外,在 ado 中,我在开发中启用了拉取请求分支策略,因此如果没有 PR 和代码审查,就无法直接合并功能分支。 这一切都有效,除非拉取请求完成后,他们将原始/开发留在本地开发之后。

所以现在如果我: git checkout develop 我看到这条消息: Your branch is ahead of 'origin/develop' by 11 commits.

所以,在正常情况下,我认为解决方法是: git pushgit push origin -- 来自开发分支。

但是由于有一个需要拉取请求的有效分支策略,我无法推送。当我尝试推动开发时,我收到以下消息: ! [remote rejected] develop -> develop (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.) 好吧,我已经向这个分支做了 11 个拉取请求。 知道如何解决这个问题吗?

以开发为目标的拉取请求应使源与本地保持同步。

编辑:如 cmets 中所述,我已禁用强制拉取请求的分支策略。然后我做了一个 git push 来清理这个情况。但这里是来自develop的日志,要求如下:

>git log
commit 545319a657801f3c279f727c53aa7d5b9d9f9d6e (HEAD -> develop, origin/develop, origin/master, origin/HEAD, master)
Merge: fe89f0a dad0fa3
Author: Ken Hadden <khadden@mycompany.com>
Date:   Thu Mar 28 18:09:32 2019 -0700

    Merge branch 'master' into develop

commit fe89f0af4a9fe3848880854dbd88e3980e81bdb4
Merge: 9b37a92 c7fe732
Author: Ken Hadden <khadden@mycompany.com>
Date:   Thu Mar 28 12:15:48 2019 -0700

    Merge branch 'develop' of https://mycompany.visualstudio.com/mycompany/_git/mycompany into develop

commit c7fe7329df9d40d0ed6db0ddf9f46ab5173aab85 (tag: 201)
Merge: 2386bbe c3b8468
Author: Ken Hadden <khadden@mycompany.com>
Date:   Mon Mar 25 20:50:07 2019 +0000

    Merged PR 7: Build from PR test 3

commit 9b37a9238f369d0fd939b15446e2598a4b984cda
Merge: d3e27c1 c3b8468
Author: Ken Hadden <khadden@mycompany.com>
Date:   Mon Mar 25 13:41:12 2019 -0700

    test 5

commit c3b8468f49d6426469699dcc19c01fc183823355
Author: Ken Hadden <khadden@mycompany.com>
Date:   Mon Mar 25 13:39:45 2019 -0700

    test 4

commit d3e27c1b6abba1e0978a0c2673ebf5969ced37a0
Merge: 0415cf7 2386bbe
Author: Ken Hadden <khadden@mycompany.com>
Date:   Mon Mar 25 13:37:37 2019 -0700

    Merge branch 'develop' of https://mycompany.visualstudio.com/mycompany/_git/mycompany into develop

commit 0415cf7f790770b9bc9e672a5998e85b0815ed46
Merge: 2ef8b41 6dc753e
Author: Ken Hadden <khadden@mycompany.com>
Date:   Mon Mar 25 13:34:27 2019 -0700

    test 4

commit 6dc753eda1697b84a679d6105d2ef18a7f1d3043
:

【问题讨论】:

能分享一下本地develop分支和远程分支的git log吗? @ShaykiAbramczyk 日志附加到操作。 我看到你禁用了分支策略并且你推动了开发,但你不应该提交本地开发,如果你有这个分支的分支策略,你应该只在本地提交到其他分支和使用拉取请求。 在 Azure DevOps 中,拉取请求似乎只适用于远程分支。 IE。如果我有一个功能分支,我需要将功能分支提交到远程(源),以便让 Azure DevOps 看到该分支并使其在“创建拉取请求”屏幕中可用。我在这个工作流程中遗漏了一些东西。它不应该这么难用。 【参考方案1】:

我的经历与@shayki Abramczyk 和@Ken Hadden 的经历相似。对我们有用的是:

develop>
develop> git checkout -b feature/my-cool-new-feature
feature/my..> "Hello" > newfile.txt
feature/my..> git add -A
feature/my..> git commit -m "Add newfile.txt"
feature/my..> git push -u origin HEAD

然后我去 Azure Devops 中拉取请求,我可以选择从那里显示的新分支中创建 PR。创建时,如果我将其设置为自动完成,那么当它被批准、构建和测试后,它会自动合并到目标分支(在您的情况下为开发)。

“A-DOPS”完成后,回到我的机器上:

feature/my..> git checkout develop
develop> git pull

而且我的本地开发与远程同步。

【讨论】:

好的,是的,这是有道理的。我需要重新启用分支策略并以这种方式再次尝试。如果 ADO 可以选择在 PR 完成后清理远程功能分支,那就太好了。 @KenHadden 我不确定,但我认为当 PR 完成时它们会在服务器上被清理。我遇到的问题是它们没有在本地存储库中清理。我不得不设计一些粗略的脚本来做到这一点。 :\

以上是关于Azure DevOps GIT(gitflow)如何在开发分支上强制执行拉取请求以保持源最新?的主要内容,如果未能解决你的问题,请参考以下文章

Gitflow branch与Docker image tag命名冲突怎么办?

从Azure DevOps的Git库中下载指定文件

Azure Visual Studio 2019 无法推送到 Azure DevOps Git

Azure DevOps Server:Git权限设置

在 Azure DevOps Git 存储库中使用来自 Azure Pipelines 的 Python 包版本标记 Git 存储库

Azure Devops Pipeline YAML 中的 Git 标记名称