如何在VSTS Rest API中获取提交的分支名称?

时间:2017-08-21 11:35:39

标签: git azure-devops azure-pipelines

我试图根据提交的分支来构建构建定义。但是,我找不到与提交信息API中的分支信息或参考信息相关的任何地方。

我的请求看起来像这样

https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/commits/be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4?api-version=1.0

响应与参考完全相同:

{
"parents": [],
  "treeId": "7fa1a3523ffef51c525ea476bffff7d648b8cb3d",
  "push": {
    "pushedBy": {
      "id": "8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
      "displayName": "Chuck Reinhart",
      "uniqueName": "fabrikamfiber3@hotmail.com",
      "url": "https://fabrikam-fiber-inc.vssps.visualstudio.com/_apis/Identities/8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d",
      "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=8c8c7d32-6b1b-47f4-b2e9-30b477b5ab3d"
    },
    "pushId": 1,
    "date": "2014-01-29T23:33:15.2434002Z"
  },
  "commitId": "be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4",
  "author": {
    "name": "Chuck Reinhart",
    "email": "fabrikamfiber3@hotmail.com",
    "date": "2014-01-29T23:32:09Z"
  },
  "committer": {
    "name": "Chuck Reinhart",
    "email": "fabrikamfiber3@hotmail.com",
    "date": "2014-01-29T23:32:09Z"
  },
  "comment": "First cut\n",
  "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/commits/be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4",
  "remoteUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git/commit/be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4",
  "_links": {
    "self": {
      "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/commits/be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4"
    },
    "repository": {
      "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249"
    },
    "changes": {
      "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/commits/be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4/changes"
    },
    "web": {
      "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git/commit/be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4"
    },
    "tree": {
      "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/trees/7fa1a3523ffef51c525ea476bffff7d648b8cb3d"
    }
  }
}

如何获取提交的分支名称?

参考

https://www.visualstudio.com/en-us/docs/integrate/api/git/commits#just-the-commit 

3 个答案:

答案 0 :(得分:0)

我不知道VSTS api,但我认为api没有提供开箱即用的功能。 由于提交不属于分支但包含在一个或多个分支中的充分理由。

分支只是git历史树(名为DAG)的引用。

您必须自己计算数据。 通过列出分支和每个分支,从提交到他们的父母,直到您到达根提交。 这非常昂贵!

如果您想验证提交是否在分支中,也许稍微容易一点,仅对单个分支执行此操作。

在这里,我看到你接受了root commit(没有父节点),所以它应该包含在所有分支中(除非你有一个存储库有多个root提交,这是非常罕见的)

答案 1 :(得分:0)

不,没有这样的REST API来通过提交来获取分支名称。并且它也无法访问,因为提交可以属于多个分支。让我们通过下面的图表来说明:

A---B---E---F master
     \     /
      C---D   dev

这是一个masterdev分支的分支结构。并且dev分支合并到master并提交F。如果要根据提交D获取分支名称,您将获得两个分支名称。提交D属于两个分支:dev(第一个父级)和master(第二个父级)。

如果你想让分支名称包含给定的提交,你可以使用git命令:

git branch --contains <commit>

答案 2 :(得分:0)

这是您尝试以编程方式持续进行的操作,还是只是尝试构建特定版本的代码?

如果您尝试连续执行此操作,前两个答案说明其不是真正有效的用例的原因。但是,如果您只需要为特定提交启动构建,则VSTS已具备该功能。

单击“队列构建”时,在“提交”文本框中输入提交ID be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4,然后单击“队列”。这将在提交时执行GIT仓库的结账。

enter image description here