使用服务主体认证执行Git提交推送至Azure DevOps报错排查
这个错误的核心原因是: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
相关产品推荐
相关产品推荐

