在GitHub上,可以生成指向文件原始内容的链接,那么在VSTS/DevOps中是否也能够实现呢?
在GitHub上,可以生成指向文件原始内容的链接,那么在VSTS/DevOps中是否也能够实现呢?
https://dev.azure.com/{{organization}}/{{project}}/_apis/sourceProviders/{{providerName}}/filecontents
?repository={{repository}}
&path={{path}}
&commitOrBranch={{commitOrBranch}}
&api-version=7.0
https://dev.azure.com/{{organization}}/{{project}}/_git/{{repository}}?path=%2Fpackage.json
对于最后一个变量,你需要使用providerName
。简而言之,你应该使用TfsGit
。我从源提供程序列表中找到了这个值,并查找了一个具有supportedCapabilities.queryFileContents
为true
的提供程序。
然而,如果你只是请求这个URL,你会收到一个"203非权威信息"的响应,因为你仍然需要进行身份验证。再次参考同样的文档,它表示要使用基本身份验证,用户名可以是任意值,密码则使用个人访问令牌。你可以在https://dev.azure.com/{{organization}}/_usersSettings/tokens
创建一个个人访问令牌;确保它具有构建:读取权限。
所以,如果您的存储库在根目录下有一个名为src
的目录,并且您想要获取src/package.json
文件的内容,您的URL应该类似于:
https://dev.azure.com/{{organization}}/{{project}}/_apis/sourceProviders/TfsGit/filecontents?repository={{repository}}&commitOrBranch=master&api-version={{api-version}}&path=src%2Fpackage.json
别忘了基本身份验证!
api-version=7.0
。URL的其余部分保持不变。 - Anton RusakGET https://feeds.dev.azure.com/{organization}/_apis/packaging/Feeds/{feedId}/packages/{packageId}?includeAllVersions={includeAllVersions}&includeUrls={includeUrls}&isListed={isListed}&isRelease={isRelease}&includeDeleted={includeDeleted}&includeDescription={includeDescription}&api-version=5.0-preview.1
我使用这个URL可以获取文件的原始内容。
GET https://dev.azure.com/{organization}/{project}/_apis/sourceProviders/{providerName}/filecontents?serviceEndpointId={serviceEndpointId}&repository={repository}&commitOrBranch={commitOrBranch}&path={path}&api-version=5.0-preview.1
我从这里得到了这个URL。
https://dev.azure.com/{{organization_name}}/{{project_name}}/_apis/git/repositories/{{repo_name_encoded}}/items?scopePath={{path_to_your_file}}&api-version=6.0
这是 Github 提供的“原始” URL 的确切等效。
如果您想快速获取正在浏览的特定文件的原始URL,还有另外一种方法可能会有所帮助:
(编辑:不幸的是,这仅适用于浏览器知道如何打开的文件类型,否则它仍将提供下载...)
我在编程方面还是个新手,最近在Azure DevOps Repo中访问原始文件时遇到了问题。在Github上很简单。
我想使用Curl在CMD和BASH中下载一个文件。 首先,我在浏览器中浏览文件内容,并记下粗体部分: https://dev.azure.com/**myOrg**/_git/**myProjectName**?path=%2F**MyFileName.ps1**
然后,我构建了与@Zach上面发布的类似的URL。
现在当我将上述URL粘贴到浏览器中时,它以原始形式显示内容,类似于GitHub。 不同之处在于,我必须在我的Azure DevOps帐户中设置PAT(个人访问令牌),然后在DOS/BASH示例中验证URL:
curl -u "<username>:<password>" "https://dev.azure.com/myOrg/myProjectName/_apis/sourceProviders/TfsGit/filecontents?repository=myProjectName&commitOrBranch=master&api-version=5.0-preview.1&path=%2FMyFileName.ps1" -# -L -o MyFileName.ps1
所以这个想法不是克隆整个仓库,而是从仓库中选择一个特定的文件,以下是如何操作的示例。
让我们假设这是您的 Azure DevOps 仓库,可以从浏览器访问。
https://dev.azure.com/<Org>/<Project>/_git/<Repo>?path=<Path>
要在终端访问或获取文件,请使用此统一资源标识符(URI)。
https://dev.azure.com/<Org>/<Project>/_apis/sourceProviders/TfsGit/filecontents?repository=<Repo>&commitOrBranch=master&api-version=6.0&path=<Path>
Windows
Invoke-WebRequest https://dev.azure.com/<Org>/<Project>/_apis/sourceProviders/TfsGit/filecontents?repository=<Repo>&commitOrBranch=master&api-version=6.0&path=<Path> -Credential <PSCredential>
或者
$pair = "<username>:<password>"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$Headers = @{
Authorization = $basicAuthValue
}
$repo = https://dev.azure.com/<Org>/<Project>/_apis/sourceProviders/TfsGit/filecontents?repository=<Repo>&commitOrBranch=master&api-version=6.0&path=<Path>
$downloadPath = "C:\Temp\$fileName"
Invoke-WebRequest -Uri $uri -Headers $Headers
Linux
curl -u "<username:password>" https://dev.azure.com/<Org>/<Project>/_apis/sourceProviders/TfsGit/filecontents?repository=<Repo>&commitOrBranch=master&api-version=6.0&path=<Path>