在 Azure DevOps 管道中使用 GitPython 会导致“git:'credential-manager-core' 不是 git 命令
Using GitPython in Azure DevOps pipelines causes 'git: 'credential-manager-core' is not a git command
当我们在 Azure DevOps 中使用 GitPython 并尝试推送到存储库时,出现以下消息(与管道克隆的存储库相同):
stderr: 'git: 'credential-manager-core' is not a git command. See 'git --help'.
基础设施:GitHub、Windows 构建机器(最新)
因为我们的工作目录是当前克隆的存储库,所以我们像这样初始化存储库:
import git
repo = git.Repo('.')
# Do some stuff
repo.git.execute('git add --all -- ":!build-infrastructure"')
repo.git.execute(f'git commit -m "{generic_commit_message}"')
repo.git.execute('git push')
因此,推送更改应该使用与用于拉取的 Azure DevOps 相同的凭据。我错过了什么吗?
解决方案
解决方案是覆盖管道中的 checkout
步骤:https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#checkout
steps:
- checkout: self
submodules: true
persistCredentials: true
检查遥控器使用的 url 已注册:repo.git.remote('-v')
可能 url 是拉取时不需要凭据的那个。
一方面,我不知道 Azure DevOps 启动的容器(或进程或其他)是如何创建的;很可能是使用一个帐户完成设置,然后使用另一个帐户执行命令(或在容器内,或...)
检查配置的设置方式:repo.git.config('-l')
,如果目标可执行文件可从 $PATH
...
您可能需要在管道的设置部分添加一些步骤(例如:安装所述凭据管理器)。
解决方案
解决方案是覆盖管道中的结帐步骤:https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#checkout
steps:
- checkout: self
submodules: true
persistCredentials: true
当我们在 Azure DevOps 中使用 GitPython 并尝试推送到存储库时,出现以下消息(与管道克隆的存储库相同):
stderr: 'git: 'credential-manager-core' is not a git command. See 'git --help'.
基础设施:GitHub、Windows 构建机器(最新)
因为我们的工作目录是当前克隆的存储库,所以我们像这样初始化存储库:
import git
repo = git.Repo('.')
# Do some stuff
repo.git.execute('git add --all -- ":!build-infrastructure"')
repo.git.execute(f'git commit -m "{generic_commit_message}"')
repo.git.execute('git push')
因此,推送更改应该使用与用于拉取的 Azure DevOps 相同的凭据。我错过了什么吗?
解决方案
解决方案是覆盖管道中的 checkout
步骤:https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#checkout
steps:
- checkout: self
submodules: true
persistCredentials: true
检查遥控器使用的 url 已注册:repo.git.remote('-v')
可能 url 是拉取时不需要凭据的那个。
一方面,我不知道 Azure DevOps 启动的容器(或进程或其他)是如何创建的;很可能是使用一个帐户完成设置,然后使用另一个帐户执行命令(或在容器内,或...)
检查配置的设置方式:repo.git.config('-l')
,如果目标可执行文件可从 $PATH
...
您可能需要在管道的设置部分添加一些步骤(例如:安装所述凭据管理器)。
解决方案
解决方案是覆盖管道中的结帐步骤:https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#checkout
steps:
- checkout: self
submodules: true
persistCredentials: true