关于版本控制:让git与代理服务器一起使用

Getting git to work with a proxy server

如何让Git使用代理服务器?

我需要从Git服务器签出代码,它每次都显示"请求超时"。我该怎么解决这个问题?

或者,如何设置代理服务器?


使用命令:

1
git config --global http.proxy http://proxyuser:[email protected]:8080
  • proxyuser更改为代理用户
  • proxypwd更改为代理密码
  • proxy.server.com更改为代理服务器的URL
  • 8080更改为在代理服务器上配置的代理端口

如果您在任何时候决定重置此代理并且在没有代理的情况下工作:

使用命令:

1
git config --global --unset http.proxy

最后,要检查当前设置的代理:

1
git config --global --get http.proxy


在公司防火墙后面的WindowsXP中,这对我很有用。

除了http://code.google.com/p/msysgit/downloads/list上的git v1.771,我不需要安装任何本地代理或其他软件?CAN=3

1
2
3
4
$ git config --global http.proxy http://proxyuser:[email protected]:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:[email protected]/repoUser/repoName.git
$ git push origin master

proxy user=我由IT部门分配的代理用户,在我的例子中,它是我用来登录到我的PC的同一个Windows用户,即Active Directory用户

proxypwd=我的代理用户的密码

proxy.server.com:8080=代理名称和端口,我从"控制面板"、"Internet选项"、"连接"、"LAN设置"按钮、"代理服务器"部分中的"高级"按钮中获取,使用第一行(http)上的服务器名和端口。

mygithubuser=我用来登录github.com的用户

mygithubpwd=我的github.com用户的密码

repo user=回购的用户所有者

回购名称=回购的名称


设置一个名为http_proxy的系统变量,其值为ProxyServer:Port。这是最简单的解决方案。分别使用https_proxy,正如大富在评论中指出的那样。

设置gitproxy(如sleske提到的)是另一个选项,但这需要一个"命令",这不像上面的解决方案那么简单。

参考文献:http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


如果配置代理服务器的命令行方式不起作用,您可能只需编辑.gitconfig(在配置文件的根目录中,它可能隐藏在C:documents和settings中以及某些网络驱动器上),然后添加:

1
2
[http]
    proxy = http://username:[email protected]:8080

但是,这只包括命令行配置的第一步。您可能还需要编辑系统Git配置,我不知道它们将其隐藏在哪里。


作为使用git config --global http.proxy address:port的替代方法,您可以在命令行上设置代理:

1
git -c"http.proxy=address:port" clone https://...

其优点是代理服务器没有持续设置。在bash下,您可以设置别名:

1
alias git-proxy='git -c"http.proxy=address:port"'

如果您使用的是Ubuntu,请执行以下操作…

步骤1:安装螺旋锥

1
$ sudo apt-get install corkscrew

步骤2:编写一个名为git-proxy.sh的脚本,并添加以下内容

1
2
3
4
5
6
#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

步骤3:使脚本可执行

1
$ chmod +x git-proxy.sh

步骤4:通过设置环境变量为git设置proxy命令

1
$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

现在使用git命令,例如

1
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


由于Windows中存在多个.gitconfig文件,因此面临相同的问题,请按照以下步骤修复相同的问题:

第一步:打开Git bash

步骤2:查找.gitconfig,执行以下命令:

1
git config --list --global --show-origin

第三步:在.gitconfig中复制以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
[http]
    proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url"http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = [email protected]

尝试将以下内容放入~/.gitconfig文件:

1
2
3
4
5
6
[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url"https://"]
    insteadOf = git://


对于git协议(git://…),安装socat并编写脚本,如:

1
2
3
#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

使其可执行,放在您的路径中,并在您的~/.gitconfig中将core.gitproxy设置为该脚本的名称。


除了这些答案之外,我发现考虑这两点很有帮助:

可能需要强制实施身份验证方案:

1
2
3
[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

另外,通常使用NTLM身份验证模式,可能需要明确地提供AD域。

在Git BASH中:

1
echo %userdomain%

并相应地更新http.proxy:

1
git config --global http.proxy http://DOMAIN\\proxyuser:[email protected]:8080

无论如何,添加curl日志有助于调查:

1
export GIT_CURL_VERBOSE=1


我注意到了一些事情,想在这里分享:

1
git config --global http.proxy http://<proxy address>:<port number>

上述方法不适用于ssh URL:(即[email protected]:/.git)

1
git clone [email protected]:<user name>/<project name>.git // this will not use the above proxy!

如果我们通过https端口(https://help.github.com/en/articles/using-ssh-over-the-https-port)设置ssh,事情就不会改变,因为它只改变ssh连接所连接的端口(默认为22)。

(不是本地人,如有必要请修改我的话)


我在工作中使用windows xp(state/gov),所以我做了研究,在这里找到了这个,它对我很有用。希望这有帮助:)

http_proxy环境变量

如果使用代理服务器或防火墙,则可能需要设置http_proxy环境变量,以便从命令行访问某些URL。示例:为Perl安装PPM或在Linux中应用RPM,更新Ubuntu

使用代理服务器的主机名或IP地址设置http_proxy变量:http_proxy=http://[代理.example.org]

如果代理服务器需要用户名和密码,请将其包含在以下表单中:http_proxy=http://[用户名:[email protected]]

如果代理服务器使用的端口不是80,请包括端口号:http_proxy=http://[用户名:[email protected]:8080]

视窗XP

  • Open the Control Panel and click the System icon.
  • On the Advanced tab, click on Environment Variables.
  • Click New in the System variables panel.
  • Add http_proxy with the appropriate proxy information (see examples above).
  • Linux、Solaris或HP-UX

    使用特定于shell的命令(例如set或export)设置http_proxy环境变量。要使此更改持久化,请将命令添加到外壳的相应配置文件中。例如,在bash中,在.bash_概要文件或.bashrc文件中添加如下行:

  • http_proxy=http:// [username:password@hostname:port];
  • export $http_proxy

  • 如果安装并配置了tsocks或proxychains,则可以

    1
    $ tsocks git clone <you_repository>

    1
    $ proxychains git clone <you_repository>

    为了缩短时间,我为proxychains创建了一个符号链接/usr/bin/p,这样我就可以这样使用它了

    1
    p git clone <you_repository>

    我可以用它来代理任何命令,

    1
    p <cmd-need-be-proxied>

    顺便说一下,proxychains已经很久没有更新了,您可能想试试proxychains ng


    在终端上设置Git代理

    如果

    • 您不希望手动为每个Git项目逐个设置代理
    • 总是希望对所有项目使用相同的代理

    全局设置一次

    1
    2
    git config --global http.proxy username:password@proxy_url:proxy_port
    git config --global https.proxy username:password@proxy_url:proxy_port

    如果只想为一个Git项目设置代理(在某些情况下,您可能不希望对某些Git连接使用相同的代理或任何代理)

    1
    2
    3
    4
    5
    //go to project root
    cd /bla_bla/project_root
    //set proxy for both http and https
    git config http.proxy username:password@proxy_url:proxy_port
    git config https.proxy username:password@proxy_url:proxy_port

    如果要显示当前代理设置

    1
    git config --list

    如果要全局删除代理

    1
    2
    git config --global --unset http.proxy
    git config --global --unset https.proxy

    如果只想删除一个git根目录的代理

    1
    2
    3
    4
    //go to project root
    cd /bla-bla/project_root
    git config --unset http.proxy
    git config --unset https.proxy

    对于Windows用户:如果git configset http_proxy=不起作用,此答案可能有帮助:

    http://替换git存储库的git://协议。注意,无论如何,您必须首先设置http_proxy


    这是代理设置

    1
    2
    git config --global http.proxy http://<username>:<pass>@<ip>:<port>
    git config --global https.proxy http://<username>:<pass>@<ip>:<port>


    我遵循了这里推荐的大部分答案。首先,我得到了以下错误:

    fatal: unable to access
    'https://github.com/folder/sample.git/': schannel: next
    InitializeSecurityContext failed: Unknown error (0x80092012) - The
    revocation function was unable to check revocation for the
    certificate.

    然后我尝试了@salim hamidi的以下命令

    1
    git config --global http.proxy http://proxyuser:[email protected]:8080

    但我有以下错误:

    fatal: unable to access
    'https://github.com/folder/sample.git/': Received HTTP code
    407 from proxy after CONNECT

    如果代理服务器无法验证SSL证书,则可能发生这种情况。因此,我们要确保关闭了SSL验证(不建议用于不受信任的站点),因此我已经完成了@arpit建议的以下步骤,但做了一些细微的更改:

    1.首先确保删除任何以前的代理设置:

    1
    git config --global --unset http.proxy

    2.然后列出并获取gitconfig内容

    1
    git config --list --show-origin

    3.上次更新gitconfig文件内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    [http]
    sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
    sslBackend = schannel
    proxy = http://proxyuser:[email protected]:8080
    sslverify = false
    [https]
    proxy = http://proxyuser:[email protected]:8080
    sslverify = false

    在不知疲倦地尝试了这个页面上的每一个解决方案之后,我的工作就是使用和ssh密钥!

  • 开放式鞭打
  • $ssh-keygen.exe-t rsa-c
  • 打开Git提供程序(GitHub、BitBucket等)
  • 添加复制id_rsa.pub文件内容到Git提供程序的输入页(检查您的配置文件)

  • 我已经尝试了以上所有的答案,但没有任何效果,因为存在代理密码编码问题。

    此命令有效:

    1
    git config --global http-proxy http://[email protected]:PortNumber

    不要在命令中输入密码。当您尝试连接到任何Git回购时,它将动态地询问。