Bitbucket Server API:获取与拉取请求关联的原始文件

时间:2018-12-21 17:59:06

标签: git bitbucket bitbucket-server bitbucket-api

情况:对于托管在Bitbucket服务器上的存储库,我有一个Webhook设置,可以在打开请求请求时将请求发送到外部服务器。然后,服务器使用Bitbucket Server API来获取与pr相关的所有文件的差异。之所以能正常工作,是因为服务器帐户可以通过webhook设置对存储库进行读取访问。接下来,我要获取与拉取请求关联的原始文件。

问题:在另一个用户派生此存储库,进行更改并提交pr的情况下,我的服务器没有对该存储库的此用户派生文件的读取访问权限,因此对文件没有读取权限处于修改状态。

我已经阅读了Bitbucket Server文档,但是除了从用户存储库中读取之外,找不到其他方法来获取原始文件。当pr从主存储库中的某个分支到同一存储库中的主服务器时,这可以很好地工作,因为读许可权问题不会起作用。

我认为一种可能的解决方案是使用diff以及当前主仓库中的文件来重新创建文件的修改状态,但是我想避免这种情况。

有什么方法可以做到,而不必让每个用户都提交pr来授予对服务器帐户的读取权限?

谢谢

1 个答案:

答案 0 :(得分:2)

这在任何地方都没有完全记录,但在打开“拉取请求”后,BitBucket会立即创建多个与拉取请求相关的引用。您可能对以下两个感兴趣。

  1. refs / pull-requests / [PR_ID] / from -用户的源分支
  2. refs / pull-requests / [PR_ID] / merge -用户源分支与目标分支合并

因此,您可以使用 refspec 检出这两个文件(取决于所需的文件),这将为您获取所有文件(已修改的文件和其他文件)。

+refs/pull-requests/[PR_ID]/*:refs/remotes/origin/pull-requests/[PR_ID]/*

然后,您可以使用PR Changes REST API获取修改后的文件的路径,并使用这些路径从磁盘(无论您检出到何处)中检索文件。

但是,值得注意的是,BitBucket team warns这些实现仅供内部使用,并且可以随时更改而不会发出任何警告。但是实施已经超过6年了。

参考