我需要使用 powershell 从 bitbucket (git) 中抓取单个文件。事情变得复杂了,我需要通过 http/https 来执行此操作,因为我运行 powershell 的系统没有直接的互联网访问权限(因此 ssh 不是一个选项)。我该怎么做?
我认为也许我可以使用 Invoke-WebRequest 并访问原始 URL 来获取它。例如:https://bitbucket.org/company/project/raw/HEAD/some/special/file.txt
但似乎需要验证身份才能访问。我尝试设置身份验证,但无法正常工作。
我认为接下来我可以使用 git archive 从 git 中提取它:git archive --remote=git://bitbucket.org/Company/project.git HEAD:some/path/file.txt 但这似乎也不起作用。
那么我如何才能获取单个文件呢?我不想只执行 git clone,因为这样我就必须下载(并存储)500MB 我不关心的其他文件,这有两个原因
1) I have to have space to store all that data (at least temporarily)
2) Unless I want to tie up that storage permanently I have to re-download it each time I need the file.
我需要的文件是 10KB,因此为 10kb 的文件占用 500MB 的空间似乎很荒谬。
答案是什么?一定有一种方法可以让 Invoke-WebRequest 正确进行身份验证或仅下载单个文件?任何 git 专家(特别是具有 powershell/windows 背景的人)可以提供帮助吗?
谢谢!Brad
答案1
BitBucket 似乎有一个相当标准的 REST API,你可以使用Invoke-WebRequest
或者Invoke-RestMethod
。
以下是一些其文档的链接:验证和获取原始内容。这些文档页面的要点是它们支持基本身份验证和原始文件内容的 GET 请求。因此,从您的示例来看,您需要执行如下操作:
# create a credential variable for your account
$cred = Get-Credential
# modify the base URL to hit the API endpoint instead of the standard web endpoint, pass the credentials with the request, and send the output to a file
Invoke-RestMethod -Credential $cred -Uri https://api.bitbucket.org/1.0/repositories/company/project/raw/HEAD/some/special/file.txt -OutFile .\file.txt