首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在vNext的拉取请求构建过程中,如何推断合并目标分支?

在vNext的拉取请求构建过程中,如何推断合并目标分支?
EN

Stack Overflow用户
提问于 2018-07-06 23:15:32
回答 2查看 142关注 0票数 0

我们正在将代码从TFS版本控制迁移到Git (由TFS托管)。迁移的一部分是设置Pull Request构建。

我们使用TFS vNext CI框架。

我们让它正常工作,当创建一个拉取请求时,构建就开始了,正如预期的那样。

例如,这是PR构建服务器上的Git存储库历史记录在构建开始后的样子:

代码语言:javascript
复制
PS D:\_wf\02\1\s> git lg -5
*   92d0a7efc |  (HEAD, pull/505/merge) Merge pull request 505 from canws211_master1 into master (2 hours ago) [Lopyreva, Valeria]
|\
| * 37103b362 |  (origin/canws211_master1) test (16 hours ago) [Lopyreva, Valeria]
| * ca6601027 |  test (17 hours ago) [Lopyreva, Valeria]
* |   50045719d |  (origin/master) Merged PR 504: Fix the path references. (2 hours ago) [Kharitonov, Mark]
|\ \
| * | bf3814458 |  (origin/shelve_test) Fix the path references. (18 hours ago) [Kharitonov, Mark]
PS D:\_wf\02\1\s>

PR构建的一个非常重要的逻辑是找出哪些文件被拉入请求所触及。根据上面的示例,可以这样确定:

代码语言:javascript
复制
PS D:\_wf\02\1\s> git diff-tree --name-status origin/master..
M       Build

现在,问题来了。如何从构建本身推断合并目标?

我可以定义一个专用的构建参数,并将合并目标传递到那里。但我觉得这是不对的。合并目标应该以某种方式可用。

有什么想法吗?

编辑1个

想要弄清楚。构建脚本需要知道在拉取请求中修改了哪些文件。这样做的方法是:

代码语言:javascript
复制
git diff-tree --name-status -r <MERGE_TARGET>..

其中<MERGE_TARGET>应替换为合并目标。所以,如果PR是master,那么它就是origin/master。但是如果它是用于名为YabaDabaDoo的分支,那么它将是origin/YabaDabaDoo。我的问题是,我想从vNext Git构建中自动推导出合并目标。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-25 23:40:34

我们最终放置了以下内联powershell脚本:

代码语言:javascript
复制
$TargetBranch = $env:SYSTEM_PULLREQUEST_TARGETBRANCH
if ($TargetBranch)
{
    $TargetBranch = $TargetBranch.Split('/')[-1]
}
else
{
    $TargetBranch = $env:BUILD_SOURCEBRANCHNAME
}
Write-Host "##vso[task.setvariable variable=branch]$(git remote show -n)/$TargetBranch"

这将生成一个branch变量,因此$(branch)恰好等于我们所需要的。

票数 0
EN

Stack Overflow用户

发布于 2018-07-07 03:35:06

您可以使用REST API获取PR信息,包括源分支和目标分支。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51213391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档