在 python 脚本中使用代理后面的 git

Using git behind a proxy in python scripts

我使用的代理不喜欢 git。在大多数情况下,我可以使用 export http_proxygit config --global url."http://".insteadOf git://

但是当我使用 Yocto 的 python 脚本时,此解决方法不再有效。我系统地停在 Getting branches from remote repo git://git.yoctoproject.org/linux-yocto-3.14.git...。我怀疑这些行是负责任的:

gitcmd = "git ls-remote %s *heads* 2>&1" % (giturl)
tmp = subprocess.Popen(gitcmd, shell=True, stdout=subprocess.PIPE).stdout.read()

我认为在这些行之后,其他人会尝试连接到 git url。我用的脚本(yocto-bsp)调用别人的脚本,它调用脚本,不好说。 我之前试过添加 os.system(git config --global url."http://".insteadOf git://),但它确实是花生。

当然,我可以尝试手动修改所有 url(或使用解析脚本)以手动将 git:// 替换为 http://,但此解决方案是...可怕。我希望修改尽可能小并且易于重现。但最重要的是,我想要一个有效的脚本。

编辑:根据 this page,git url 是 git://git.yoctoproject.org/linux-yocto-3.14 但相应的 http url 是 http://git.yoctoproject.org/git/linux-yocto-3.14,所以我不能仅仅通过解析将 git:// 替换为 http://。绝对不酷。

嗯,重写 git url 确实有效,在使用 YP 时也是如此。

但是,您重写的方案效果不佳...您只是将 git:// 部分或 url 替换为 http://,但是如果你看例如linux-yocto-3.14,你会看到这个 repo 可以通过以下两个 URL 获得:

git://git.yoctoproject.org/linux-yocto-3.14
http://git.yoctoproject.org/git/linux-yocto-3.14

那就是你需要将git://git.yoctoproject.org重写为http://git.yoctoproject.org/git。因此,您需要改为这样做:

git config --global url."http://git.yoctoproject.org/git".insteadOf git://git.yoctoproject.org

这意味着您必须对通过 git 协议访问的所有存储库重复此练习。