让git与代理服务器一起工作

时间:2009-04-23 22:32:54

标签: git version-control proxy

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

我需要从git服务器检出代码,每次都显示“请求超时”。我该如何解决这个问题?

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

20 个答案:

答案 0 :(得分:1524)

使用命令:

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
  • proxyuser更改为您的代理用户
  • proxypwd更改为您的代理密码
  • proxy.server.com更改为代理服务器的网址
  • 8080更改为代理服务器上配置的代理端口

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

使用命令:

git config --global --unset http.proxy

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

git config --global --get http.proxy

答案 1 :(得分:125)

这对我来说很有用,在公司防火墙后面的Windows XP中。

除了来自http://code.google.com/p/msysgit/downloads/list?can=3

的git v1.771,我没有必要安装任何本地代理或任何其他软件
$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master

proxyuser =我的IT部门分配的代理用户,在我的情况下,它是我用来登录我的PC的同一个Windows用户,即Active Directory用户

proxypwd =我的代理用户的密码

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

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

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

repoUser =回购的用户所有者

repoName =回购的名称

答案 2 :(得分:48)

设置名为http_proxy的系统变量,其值为ProxyServer:Port。 这是最简单的解决方案。分别使用https_proxy作为daefu在评论中指出。

设置gitproxy(作为sleske提及)是另一种选择,但这需要一个“命令”,这不像上面的解决方案那么简单。

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

答案 3 :(得分:36)

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

[http]
    proxy = http://username:password@proxy.at.your.org:8080
但是,

YMMV,这仅涵盖了命令行配置的第一步。您可能还必须编辑系统git配置,我不知道它们隐藏在哪里。

答案 4 :(得分:29)

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

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

优点是代理不是持久设置的。在Bash下,您可以设置别名:

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

答案 5 :(得分:19)

如果您使用的是ubuntu,请执行以下操作...

第1步:安装开瓶器

$ sudo apt-get install corkscrew

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

#!/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步:使脚本可执行

$ chmod +x git-proxy.sh

步骤4:通过设置环境变量

为GIT设置代理命令
$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

现在使用git命令,例如

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

答案 6 :(得分:11)

由于Windows中有多个.gitconfig文件,因此遇到同样的问题,按照以下步骤进行修复:

第1步:打开Git BASH

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

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

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

[http]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

答案 7 :(得分:10)

尝试将以下内容放到〜/ .gitconfig文件中:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

答案 8 :(得分:7)

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

#!/bin/sh

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

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

答案 9 :(得分:5)

我注意到了一些东西,想在这里分享:

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

上述方法不适用于ssh网址:(即git@github.com:<user name>/<project name>.git

git clone git@github.com:<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)。

(不是母语人士,请在必要时细化我的语言)

答案 10 :(得分:5)

除了这些答案,我发现有助于考虑以下两点:

可能需要强制执行身份验证方案:

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

此外,通常使用NTLM身份验证架构,可能需要明确地提供AD域。

在git bash中:

echo %userdomain%

并相应地更新http.proxy:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

无论如何,通过添加CURL日志可以帮助调查:

export GIT_CURL_VERBOSE=1

答案 11 :(得分:4)

我在Windows XP上工作(state / gov),所以我做了我的研究并找到了这个here,它对我有用。希望这会有所帮助:)

http_proxy环境变量

如果使用代理服务器或防火墙,则可能需要设置http_proxy环境变量才能从命令行访问某些URL。 示例:为perl安装ppm或在linux中应用rpm,更新ubuntu

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

如果代理服务器需要用户名和密码,请按以下格式包含它们: http_proxy = http:// [username:password@proxy.example.org]

如果代理服务器使用80以外的端口,请包含端口号: http_proxy = http:// [username:password@proxy.example.org:8080]

Windows XP

  
      
  1. 打开“控制面板”,然后单击“系统”图标。
  2.   
  3. 在“高级”选项卡上,单击“环境变量”。
  4.   
  5. 单击“系统变量”面板中的“新建”。
  6.   
  7. 使用适当的代理信息添加http_proxy(请参阅上面的示例)。
  8.   

Linux,Solaris或HP-UX

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

  
      
  1. http_proxy = http:// [username:password @ hostname:port];
  2.   
  3. export $ http_proxy
  4.   

答案 12 :(得分:3)

如果您已安装并配置了tsocksproxychains,则可以

$ tsocks git clone <you_repository>

$ proxychains git clone <you_repository>

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

p git clone <you_repository>

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

p <cmd-need-be-proxied>

顺便提一下,代理链很长时间没有更新,你可能想试试proxychians-ng

答案 13 :(得分:2)

在终端上设置git代理

如果

  • 您不希望手动逐个为每个git项目设置代理
  • 始终希望为所有项目使用相同的代理

全局设置

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

如果你只想为一个git项目设置代理 (在某些情况下,您可能根本不想使用相同的代理或任何代理进行某些git连接)

//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

如果要显示当前代理设置

git config --list 

如果您想全局删除代理

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

如果您只想删除一个git root的代理

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

答案 14 :(得分:1)

这是代理设置

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

答案 15 :(得分:1)

我遵循了此处建议的大部分答案。首先,我遇到以下错误:

  

致命:无法访问   'https://github.com/folder/sample.git/':频道:下一个   InitializeSecurityContext失败:未知错误(0x80092012)-   吊销功能无法检查吊销   证书。

然后我尝试了@Salim Hamidi的以下命令

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080

但是我遇到了以下错误:

  

致命:无法访问   'https://github.com/folder/sample.git/':收到的HTTP代码   CONNECT后从代理返回407

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

1。首先请确保删除所有以前的代理设置:

git config --global --unset http.proxy

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

git config --list --show-origin

3。最后更新gitconfig文件的内容,如下所示:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

答案 16 :(得分:1)

对于Windows用户:如果git configset http_proxy=不起作用,this answer可能会有所帮助:

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

答案 17 :(得分:1)

使用代理的另一种方法是使用 SSH 在 git configs 中,在 ssh 地址上配置 origin remote。然后使用 ssh-keygen 命令,它为您提供一个公钥,您可以在您的 GitLab 或 Gitab 帐户设置中设置并相应地登录完成...

1-通过在您的 Git 客户端中运行 git remote -v 来验证正在使用哪些遥控器。

2-如果这是 http(s) url,将其更改为 ssh 地址,运行:git remote set-url <remote name, e.g. origin> <new SSH URL> 例如

git remote set-url git@gitlab.com:example/myproject.git

3-生成用于登录的 ssh 密钥,运行:ssh-keygen -o,此命令生成公钥(id_rsa.pub 文件)和私钥。

4-copy 公钥 内容。 (来自 id_rsa.pub 文件)

5-转到 gitlab/githup/.... 配置文件部分 > setting/ssh-key 。创建新的 ssh 密钥并粘贴公钥内容

答案 18 :(得分:0)

不懈地尝试了本页上的所有解决方案之后,我的解决方法是改为使用SSH密钥!

  1. 打开Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. 打开您的Git提供程序(Github,Bitbucket等)
  4. 将id_rsa.pub文件内容复制到Git提供程序的输入页面(检查您的个人资料)

答案 19 :(得分:0)

我尝试了以上所有答案,但对我来说没有用,因为存在代理密码编码问题。

此命令有效:

git config --global http-proxy http://username@proxy.example.com:PortNumber 

请勿在命令中输入密码。当您尝试连接到任何git repo时,它将动态询问。