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

3

我正在使用 BitBucket 的 REST 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个分支或所有活动分支?


1
你如何定义最新的分支?按日期?按提交次数? - leoOrion
1个回答

3
简而言之,似乎没有任何直接的方法来获取特定数据(最新分支)。
自己动手做
首先要考虑的是是否可以提取这种类型的数据。
在 git 中,分支只是指向存储库中提交的标签。在 git 术语中,它是一个引用,就像标签一样。分支在某些方面与标签不同,其中之一是只要该分支被检出(您在该分支上),它就会始终更新以指向最新的提交。
分支本身只是提交哈希值,并且没有任何其他属性,例如创建日期或上次更新时间。要查看此内容,请尝试浏览存储库中的 .git 文件系统目录中的文件;它们位于 ./git/refs/heads/ 中。
说到这里,有一些方法可以猜测分支何时被创建,就像在如何确定Git分支的创建时间?中所解释的那样,但这超出了Bitbucket公共API的范围。
通过API来完成
我建议您使用curl或Postman进行一些直接的API查询,以便了解可用的数据。查看实际的API而不是您正在使用的包装器,似乎您正在使用的端点是/{workspace}/{repo_slug}/refs/branches/。这似乎会返回您所有活动的分支,每页10个结果,按git本身返回它们的顺序排列,并没有明显的请求排序集的方法。简单来说,有:
  • 活跃分支 - 看起来这符合您想要的数据;
  • 每页10个 - 这意味着你需要发送更多请求,直到获取所有结果;在响应正文中应该有一个“next”属性,其中包含下一组结果的URL;
  • API没有明显的排序方式 - 这意味着您需要在自己的端上进行一些处理。一旦您获得了数据,您可以深入挖掘并找到日期,然后按您需要的方式对它们进行排序。

另一种方法

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

Bitbucket webhooks


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接