我正在使用 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
术语中,它是一个 ref
,tag
也是。 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"}
。
总而言之,有一些方法可以实现这一点,但您需要进行一些额外的编码。
关于git - 使用 BitBucket 中的 Rest API 获取最新的 10 个分支或所有分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61629031/