簡體   English   中英

如何在VSTS Rest API中獲取提交的分支名稱?

[英]How to get a branch name of the commit in VSTS Rest API?

我正在嘗試根據提交分支提出構建定義。 但是,在提交信息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 

我不知道VSTS API,但我認為該API並非開箱即用。 出於充分的理由,提交不屬於分支,而是包含在一個或多個分支中。

分支只是git歷史樹(名為DAG)上的引用。

您將必須自己計算數據。 通過列出分支,對於每個分支,從提交到其父級,直到到達根提交為止。 這是非常昂貴的!

也許會容易一些,如果要驗證提交是否在分支中,則僅對單個分支執行此操作。

在這里,我看到您采用了根提交(沒有父母),因此它應該包含在所有分支中(除非您的存儲庫具有多個根提交,這是非常不常見的)

不,沒有這樣的REST API可以通過提交來獲取分支名稱。 而且它也是不可到達的,因為一個提交可以屬於多個分支 讓我們通過下圖進行說明:

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

這是一個具有masterdev分支的分支結構。 並且dev分支通過commit F合並為master 如果要基於提交D獲取分支名稱,則將獲得兩個分支名稱。 提交D屬於兩個分支: dev (第一父級)和master (第二父級)。

如果要獲取包含給定提交的分支名稱,則可以使用git命令:

git branch --contains <commit>

您是要嘗試以編程方式連續地執行此操作,還是只是嘗試構建特定版本的代碼?

如果您嘗試連續進行此操作,則前兩個答案說明了它不是真正有效的用例的原因。 但是,如果您只需要為特定提交啟動構建,則VSTS已經具備了該功能。

當您單擊“隊列生成”時,在“提交”文本框中輸入提交ID be67f8871a4d2c75f13a51c1d3c30ac0d74d4ef4,然后單擊隊列。 這將在提交時執行GIT存儲庫的簽出。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM