You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用服务主体认证执行Git提交推送至Azure DevOps报错排查

解决服务主体认证下Azure DevOps Git提交的“Author identity unknown”问题

这个错误的核心原因是:Git强制要求所有提交必须关联明确的作者身份(姓名+邮箱),而服务主体作为机器认证身份,并没有默认配置Git的用户信息,所以提交时会触发这个报错。

解决方法很简单,只要在提交前给当前Git仓库配置合法的作者姓名和邮箱即可,具体修改如下:

修改后的PowerShell脚本

$resource="499b84ac-1321-427f-aa17-267ca6975798"
$TenantId=" "
$ClientId=" "
$ClientSecret=" "
$TokenUri = "https://login.microsoftonline.com/$TenantID/oauth2/token/" 

$Body = "client_id=$ClientId&client_secret=$ClientSecret&resource=$Resource&grant_type=client_credentials"
$TokenResult = Invoke-RestMethod -Uri $TokenUri -Body $Body -Method "POST"
$AccesToken = $TokenResult.access_token

$URI= "https://$AccesToken@dev.azure.com/Org/Project/_git/Repo"

# 克隆仓库
git clone $URI "C:\Users\DBT\Desktop\git" 
# 进入仓库目录
Set-Location "C:\Users\DBT\Desktop\git"

# 配置Git作者身份(关键步骤)
git config user.name "Service Principal Bot"
git config user.email "sp-bot@your-org.com"

# 执行Git操作
$gitCmd = "git -c http.extraheader='AUTHORIZATION: bearer $AccesToken'" 
Invoke-Expression "$gitCmd add ." 
Invoke-Expression "$gitCmd commit -m 'Commit message'" 
Invoke-Expression "$gitCmd push"

补充说明

  • 作者姓名和邮箱可以自定义,不需要和服务主体的Azure AD信息完全匹配,只要格式合法即可(邮箱不需要真实存在,符合xxx@xxx格式就行)。
  • 如果希望所有用这个服务主体操作的仓库都用同一身份,可以添加--global参数改成全局配置:git config --global user.name "Service Principal Bot",但更推荐针对单个仓库配置,避免干扰其他项目。
  • 服务主体的认证权限是通过Bearer Token处理的,Git作者信息只是提交的元数据,不影响权限验证。

内容的提问来源于stack exchange,提问作者Ahwan Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:44:54