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

标签 git rest bitbucket branch

我正在使用 BitBucket Rest API 获取分支。现在正在发生的事情是,它正在返回 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 个分支或所有活跃的分支?

最佳答案

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

自己做

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

git 中,分支只是一个指向存储库中提交的标签。在 git 术语中,它是一个 reftag 也是。 branch 在某些方面与 tag 不同,一个是分支总是更新为指向最新的提交,只要所述分支被 checkout (你在那个分支上)。

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

话虽如此,还是有一些方法可以猜测分支的首次创建时间,如 How to determine when a Git branch was created? 中所述。 ,但这超出了 Bitbucket 的公共(public) API 的范围。

通过 API 实现

我建议您使用 curl 或 Postman 进行一些直接的 API 查询,以了解哪些数据可用。查看实际的 API,而不是您使用的包装器,您使用的端点似乎是 /{workspace}/{repo_slug}/refs/branches/ .这似乎会返回所有事件分支,每页 10 个结果,按照 git 本身返回它们的顺序,并且没有任何明显的请求排序集的方法。要分解它,有

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

另一种方式

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

Bitbucket webhooks


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

关于git - 使用 BitBucket 中的 Rest API 获取最新的 10 个分支或所有分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61629031/

相关文章:

git - 如何同步从 Machine1 推送到 Git 存储库的 Machine2 上相同的现有项目?

OS X 上的 GitHub 客户端提交失败(“无法添加文件 ...)

git 多凭证助手

git - 如何比较 Bitbucket 中的两个修订版?

git - 命令 git ls-remote 在 Bitbucket 上超时,git clone 工作

macos - 捆绑到 Cocoa 应用程序中的 Git 无法在 bundle 中找到帮助程序

http - 哪个 HTTP 状态代码表示 "Not Ready Yet, Try Again Later"?

rest - HTTP 响应 412 - 你能包含内容吗?

c# - 休息关系?

android - 管道 : Minimum supported Gradle version is 4. 10.1。当前版本是 4.4