如何通过AzureDevOps Services REST API上传二进制文件至Git LFS?
Azure DevOps REST API 上传Git LFS文件并更新引用的实现方法
Azure DevOps Services REST API支持通过Git LFS上传大文件的操作,需要结合Git LFS标准流程和Azure DevOps特定API端点完成,具体步骤如下:
步骤1:获取LFS对象的上传地址
调用Git LFS的批量上传端点,请求Azure DevOps返回文件的存储地址:
- 请求URL:
https://dev.azure.com/{组织名}/{项目名}/_git/{仓库名}/info/lfs/objects/batch - 请求方法:POST
- 请求Header:
Authorization: Basic {base64编码的个人访问令牌(PAT)}Content-Type: application/vnd.git-lfs+json
- 请求体示例:
{ "operation": "upload", "objects": [ { "oid": "文件的SHA-256哈希值", "size": 文件字节大小 } ] }
响应会返回目标文件的上传URL(href字段)和对应的请求Header,需保存这些信息用于后续上传。
步骤2:上传二进制文件到LFS存储
使用步骤1获取的上传URL,发送PUT请求上传文件内容:
- 请求方法:PUT
- 请求Header:使用步骤1响应中返回的headers(通常包含授权信息)
- 请求体:二进制文件的原始内容
步骤3:创建Git仓库中的LFS引用文件
通过Azure DevOps的Git推送API创建或更新仓库中的LFS指针文件(这是一个文本文件,用于指向LFS存储中的真实文件):
- 请求URL:
https://dev.azure.com/{组织名}/{项目名}/_apis/git/repositories/{仓库ID}/pushes?api-version=7.1-preview.2 - 请求方法:POST
- 请求Header:
Authorization: Basic {base64编码的PAT} - LFS指针格式(需替换为对应文件的哈希和大小):
version https://git-lfs.github.com/spec/v1 oid sha256:{文件的SHA-256哈希值} size {文件字节大小}
- 请求体示例:
{ "refUpdates": [ { "name": "refs/heads/main", "oldObjectId": "当前分支的最新commit ID" } ], "commits": [ { "comment": "添加LFS大文件", "changes": [ { "changeType": "add", "item": { "path": "/目标路径/你的大文件.bin" }, "newContent": { "content": "version https://git-lfs.github.com/spec/v1\noid sha256:abcdef123456...\nsize 123456789", "contentType": "rawtext" } } ] } ] }
注意事项
- 确保项目已启用Git LFS功能,仓库已完成LFS初始化
- 务必准确计算文件的SHA-256哈希值和字节大小,否则会导致LFS关联失败
- 使用的PAT需要具备仓库的Contribute权限
- 调用LFS批量端点时,Content-Type必须设置为
application/vnd.git-lfs+json
内容的提问来源于stack exchange,提问作者JhonRM
相关产品推荐
相关产品推荐

