若要让一次 HTTPS 克隆走代理,又不改动 Python 进程的环境或写入全局 Git 设置,请把变量传给 Repo.clone_from:

from git import Repo

repo = Repo.clone_from(
    'https://git.example/team/project.git',
    '/path/to/new-checkout',
    env={
        'http_proxy': 'http://proxy.example:8080',
        'https_proxy': 'http://proxy.example:8080',
    },
)

直接在 Python 字符串中使用代理 URL。对于公开仓库以及允许使用公开代理的线路,HTTP 代理列表提供了候选端点。Shell 的分组引号不属于该 URL。SSH 仓库 URL 走的是 SSH 传输,因此本示例需要 HTTPS 仓库 URL。

如果 Git 仍然走了别的路径

env 映射更新的是 Git 子进程继承的环境,并不会用空环境替换它。检查继承来的 no_proxy 值是否造成绕过,并检查 Git 自身的 http.proxy 配置,它可能覆盖对应的环境设置。

你还可能见到把 config 传给克隆的示例。那会调用 Git clone 的 --config 选项,并把配置写入新仓库。只有当该设置需要比这次克隆过程活得更久时才这样选;克隆时配置与仅在调用时配置的区别有专门说明。

相关文章