使用 Rest API 从 BitBucket 获取最新的 10 个分支或所有分支

Get Latest 10 branches or all branches using Rest API from BitBucket

我正在使用 BitBucket 休息 API 来获取 branches。现在正在发生的事情是,它正在返回 10 个分支,但它们不是最新的,它们是混合的。我正在使用 gentle/bitbucket-api 包来发出请求。这是我的代码的样子:

$branchesObject = new Branches();
$branchesObject->getClient()->setApiVersion('2.0')->addListener(new OAuthListener($this->oauthParams));

$contentJson = $branchesObject->all('<account>', '<repo>')->getContent();
$contentArray = json_decode($contentJson, true);
$branches = array_column($contentArray['values'], 'name');

如果我 dd($branches) 这就是输出的样子:

array:10 [
  0 => "branch1"
  1 => "branch2"
  2 => "branch3"
  3 => "branch4"
  4 => "branch5"
  5 => "branch6"
  6 => "branch7"
  7 => "branch8"
  8 => "branch9"
  9 => "branch10"
]

这些不是最新的 10 个分支。 Api 版本为 2.0。无论如何我可以获得最新的 10 个分支或所有活跃的分支?

简而言之,看起来没有任何直接的方法来获取特定数据(最新 b运行ches)。

自己做

首先要考虑的是是否可以提取这种类型的数据。

git中,b运行ch 只是一个指向存储库中提交的标签。在 git 行话中,它是 reftag 也是。 branch 在某些方面与 tag 不同,一个是 b运行ch 总是更新为指向最新的提交,只要说 b运行 ch 已签出(您在 b运行ch 上)。

B运行ches 本身只是提交哈希,没有任何其他属性,例如创建日期或上次更新时间。要查看此内容,请尝试从存储库中查看 .git 文件系统目录中的文件;他们在 ./git/refs/heads/.

话虽如此,有一些方法可以猜测 b运行ch 何时首次创建,如 How to determine when a Git branch was created? 中所述,但这超出了 Bitbucket public 的范围API.

通过 API

我建议您使用 curl 或 Postman 进行一些直接的 API 查询,以便了解哪些数据可用。查看实际的 API,而不是您使用的包装器,您使用的端点似乎是 /{workspace}/{repo_slug}/refs/branches/。这似乎 return 你们所有活跃的 b运行 人,每页 10 个结果,按照 git 本身 return 的顺序排列,没有任何明显的方式请求排序集。要分解它,有

  • active b运行ches - 似乎与您想要的数据匹配;
  • 每页 10 个 - 这意味着您将不得不发出更多请求,直到获得所有请求;在响应体中应该有一个next 属性`,保存下一组结果的URL;
  • API 没有明显的方法来对它们进行排序 - 这意味着您需要在您的端进行一些处理。获得数据后,您可以更深入地挖掘并找到日期,然后根据需要对它们进行排序。

另一种方式

以前的方法会在程序每次运行时进行查询。如果你需要更接近实时的东西,你可以设置一个 webhook 在每次提交时触发。 Webhook 只是一个在请求 URL 时运行的程序;您将其挂钩到其他一些系统触发事件。推送提交后,将使用提交信息调用 webhook,例如日期,b运行ch。然后你可以存储它们,比如 { "branch1": "1590406741", "branch2": "1590406441"}.

Bitbucket webhooks


总而言之,有一些方法可以实现,但您需要进行一些额外的编码。