subprocess.check_call: 命令 '['git', 'clone']' 返回非零退出状态 127

时间:2021-01-18 23:24:54

标签: python git ssh subprocess clone

我正在开发一个微服务,为该用户编写了以下脚本,该用户希望 ssh 进入远程环境并 git clone 一个存储库。我已经为环境指定了 GIT_SSHGIT_PYTHON_GIT_EXECUTABLE,然后运行 ​​git clone

def clone_if_local_repo_absent(local_repo_path, remote_repo_url):
    GIT_SSH = '...'
    GIT_PYTHON_GIT_EXECUTABLE = '/usr/bin/git'
    my_env = os.environ.copy()
    my_env["GIT_SSH"] = GIT_SSH
    my_env["GIT_PYTHON_GIT_EXECUTABLE"] = GIT_PYTHON_GIT_EXECUTABLE
    # Clones to directory specified
    exe_command = shlex.split('git clone {remote_repo_url} {repo_name}'.format(remote_repo_url=remote_repo_url, repo_name=local_repo_path))
    subprocess.check_call(exe_command, env=my_env, shell=True)

运行脚本时出现错误:Command '['git', 'clone', remote_repo_url, 'LOCAL']' returned non-zero exit status 127. 如何修复此错误?

1 个答案:

答案 0 :(得分:1)

Git ProBook中所述:

<块引用>

GIT_SSH,如果指定,则是当 Git 尝试连接到 SSH 主机时调用的程序,而不是 ssh
它的调用方式类似于 $GIT_SSH [username@]host [-p <port>] <command>

请注意,这不是自定义 ssh 调用方式的最简单方法;它不支持额外的命令行参数,因此您必须编写一个包装脚本并将 GIT_SSH 设置为指向它。
为此,使用 ~/.ssh/config 文件可能更容易。

所以这根本不在远程端执行。执行它以连接到远程服务器。

如果远程环境中未安装 Git,则从 ssh 会话执行的任何 git clone 都将不起作用。

相关问题