是否可以在Azure DevOps中链接到文件的原始内容

w51jfk4q  于 2023-02-13  发布在  其他
关注(0)|答案(8)|浏览(114)

可以在GitHub中生成指向文件原始内容的链接,是否可以使用VSTS/DevOps来实现?

p1iqtdky

p1iqtdky1#

即使在阅读了现有的答案后,我仍然对此有点挣扎,所以我想留下更彻底的回应。
正如其他人所说,pattern是(为了便于阅读,将查询拆分为单独的行):

https://dev.azure.com/{{organization}}/{{project}}/_apis/sourceProviders/{{providerName}}/filecontents
  ?repository={{repository}}
  &path={{path}}
  &commitOrBranch={{commitOrBranch}}
  &api-version=5.0-preview.1

但是,如何找到这些变量的值呢?如果您进入Azure DevOps,从左侧导航栏选择Repos〉Files,然后选择特定文件,您的当前URL应该如下所示:

https://dev.azure.com/{{organization}}/{{project}}/_git/{{repository}}?path=%2Fpackage.json

对于组织、项目和存储库,应该使用这些值。对于path,您将看到unix文件路径的HTTP编码版本。%2F/的HTTP编码,因此path实际上就是/package.jsonPostman之类的工具会为您完成该编码)。
提交或分支是非常不言自明的;你要么知道你想要这个值,要么你应该使用master。我已经在上面的url中“硬编码”了API版本,因为这是documentation当前指向的。
对于最后一个变量,您需要providerName。简而言之,您可能应该使用TfsGit。我通过查看list of source providers并为supportedCapabilities.queryFileContents查找一个值为true的变量来获得此值。

但是,如果你只是请求这个URL,你会得到一个“203非权威信息”的响应,因为你仍然需要验证你自己。再次参考同一个documentation,它说使用Basic auth,用户名为任意值,密码为个人访问令牌。你可以在https://dev.azure.com/{{organization}}/_usersSettings/tokens创建一个个人访问令牌;确保它具有令牌管理-读取和管理权限。

如果您不熟悉这类事情,那么在您进入代码之前,Postman对于让这些请求工作非常有帮助。
因此,如果你有一个根目录为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

不要忘记基本的授权!

ukxgm1gy

ukxgm1gy2#

当然,这是需要的休息电话:

GET 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

https://learn.microsoft.com/en-us/rest/api/azure/devops/artifacts/artifact%20%20details/get%20package?view=azure-devops-rest-5.0#package

kupeojn6

kupeojn63#

我能够得到一个文件的原始内容使用这个网址。
获取https://dev.azure.com/ {组织}/{项目}/_apis/源提供程序/{提供程序名称}/文件内容?服务端点ID ={服务端点ID}&存储库={存储库}&提交或分支={提交或分支}&路径={路径}& api版本=5.0-预览。1
这里交给我吧。
https://learn.microsoft.com/en-us/rest/api/azure/devops/build/source%20providers/get%20file%20contents?view=azure-devops-rest-5.0

iibxawm4

iibxawm44#

您可以使用chrome获取原始URL。
打开开发人员工具并查看“网络”选项卡。
导航以查看DevOps门户(内容面板)中的所需文件。内容视图可见后,再次检查网络选项卡并找到以“项目?路径”开头的URL,这是包含所需“url:“元素的json响应。

ttcibm8c

ttcibm8c5#

将文件名从附件窗口拖放到任何其他MS应用程序中,以获得原始URL或链接的文件名。

gojuced7

gojuced76#

大多数答案都很好地解决了这个问题,但在匿名访问的公共回购协议中,API是不同的,下面是在这种情况下工作的api:
https://dev.azure.com/{{your_user_name}}/{{project_name}}/_apis/git/repositories/{{repo_name_encoded}}/items?scopePath={{path_to_your_file}}&api-version=6.0
这与Github提供的“原始”url完全相同。

ds97pgxw

ds97pgxw7#

如果您想快速获取正在浏览的特定文件的原始URL,另一种可能有用的方法是:

  • 安装名为“Undisposition”的浏览器扩展
  • 从圆点菜单(右上角)选择“下载”:该文件将在新的浏览器选项卡中打开,您可以从中复制URL

(edit:不幸的是,这只适用于浏览器知道如何打开的文件类型,否则它仍然会提供下载...)

4szc88ey

4szc88ey8#

我是个新手,在访问Azure DevOps Repo中的原始文件时遇到了问题,在Github中很简单。
我想下载一个文件在CMD和BASH使用 curl 。首先我浏览到文件内容在浏览器中做一个笔记的粗体部分:https://dev.azure.com/myOrg/_git/myProjectName?path=%2F**MyFileName.ps1* *
然后我构建了一个类似于@Zach上面发布的URL。
https://dev.azure.com/myOrg/myProjectName/_apis/sourceProviders/TfsGit/filecontents?repository=myProjectName&commitOrBranch=master&api-version=5.0-preview.1&path=%2F**MyFileName.ps1* *
现在,当我将上面的URL粘贴到浏览器中时,它会以RAW格式显示内容,类似于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

相关问题