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

Azure Pipeline Bash任务执行git命令返回127错误如何解决

问题根因

报错和git安装、PATH配置、仓库权限均无关,核心原因是Bash脚本内git命令与后续子命令、参数之间混入了不可见的不间断空格(NBSP,Unicode U+00A0),而非普通半角ASCII空格:

  • 错误日志可直接佐证:第一行报错是git程序本身输出的,提示'add /Users/runner/work/1/s/MyFilePath/my.file' is not a git command,说明git已经被正常启动,只是shell没有识别到git和add之间的特殊字符为命令分隔符,把add+文件路径整体当成了传给git的子命令名;后续commit、push行的报错是bash直接抛出的命令不存在,同样是因为git和子命令之间的特殊字符没被当成分隔符,整串git commit -m xxx被识别为一个独立的可执行文件名,自然查找不到返回127退出码。
  • 此前配置的git checkout步骤能正常运行,是因为该段脚本内的空格均为正常半角空格,没有混入特殊不可见字符。这类特殊空格通常是从富文本文档、网页、聊天窗口复制配置内容时自动带入的,肉眼无法直接识别。
修复步骤
  1. 清空现有Bash@3任务内script字段的所有内容,不要保留原有复制来的命令行,手动逐字符敲入所有git命令,确保所有命令、参数之间的空格都是键盘直接输入的普通半角空格。
  2. 修正后的任务配置参考如下:
- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      echo $PATH
      git add $(System.DefaultWorkingDirectory)/MyFilePath/my.file
      git commit -m "update file [skip ci]"
      git push origin HEAD:$(Build.SourceBranchName)
    workingDirectory: '$(Build.SourcesDirectory)'
  displayName: 'Git commit'
  continueOnError: true
  condition: and(succeeded(), eq(variables.ChangeFile, 'true'))
  1. 额外适配:git push后显式指定推送目标为HEAD:$(Build.SourceBranchName),可以避免流水线检出处于detached HEAD状态时推送无目标分支的问题。
验证方法

如果需要确认特殊字符是否清理干净,可以在脚本开头加一行cat -A $0,执行后会打印当前运行的临时脚本内容:普通半角空格会显示为空白,不间断空格会显示为M-BM-标记,确认无特殊字符后即可正常执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:01:02