在Windows上使用Git,在HTTP代理后面,而不在磁盘上存储代理密码

时间:2014-04-02 01:18:59

标签: git http proxy git-config

我在Windows上使用Git,在公司网络上,我使用基本身份验证的HTTP代理。出站SSH不起作用,因此我必须通过代理使用HTTPS。

我知道如何使用git config http.proxy将设置配置为http://[username]:[password]@[proxy]:[port]

但是,特别是因为这是一台共享计算机,我宁愿不将密码存储在我的.gitconfig中。另外,使用.gitconfig命令更改我的git config会在我的bash历史记录中保留我的密码,所以即使我记得在会话结束时清除.gitconfig,我也几乎可以肯定忘了清除我的历史。

我尝试在没有密码的情况下设置http.proxy,徒劳地希望我在尝试推/拉时提示我输入密码,但我只需要获得407代理身份验证。我在网上找到的所有信息似乎都忽略了在.gitconfig中以明文保存密码或处理NTLM代理的问题。

我很乐意每次需要连接时都输入我的代理详细信息 - 目前我能看到的最佳解决方案是编写一个包装脚本,它会提示输入我的密码并在调用时将其设置为环境变量{ {1}}正确。这是一个不错的解决方案,并且在脚本中为单个调用设置环境变量是否有任何安全隐患?最好是否有可用于此的内置设置或现有工具?

4 个答案:

答案 0 :(得分:26)

自git 2.8.0

git config --global http.proxy http://[user]@proxyhost:port
git config --global credential.helper wincred

答案 1 :(得分:25)

您可以使用环境变量(您只能为会话设置),而不是使用git设置,如this answer中所述:

set http_proxy=http://username:password@proxydomain:port
set https_proxy=http://username:password@proxydomain:port
set no_proxy=localhost,.my.company 

因此,您的包装器脚本可以,而不是修改.gitconfig(并以纯文本形式保留密码),而不是按需设置环境变量,仅适用于您当前的会话。

答案 2 :(得分:3)

VonC的答案并不总能解决问题。我不知道为什么,但它可能取决于代理服务器 - 或者它可能是一些其他问题?

使用git://替换存储库的http://协议可能会有所帮助。

注意:与VonC的答案一样,您必须先设置http(s)_proxy个环境变量:

set http_proxy=http://username:password@proxydomain:port
set https_proxy=http://username:password@proxydomain:port

例如,克隆大理石的稳定git通常会像这样克隆(来自marble documentation):

  

git clone -b Applications / 15.12 git://anongit.kde.org/marble~​​/ marble / sources

在Windows cmd中(假设已设置http_proxy),您可能必须改为使用http[s]://

git clone -b Applications/15.12 http://anongit.kde.org/marble ~/marble/sources

答案 3 :(得分:-3)

如果您在代理服务器后面,请按照此操作。

确保防火墙规则中不包括端口9418.Ask网络管理员

  

如果已设置,请取消设置代理:

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

设置正确的代理:

  

常见错误:

  • 502:您的网络无法访问网址/ IP地址。
  • 407:代理身份验证被拒绝。
  • 80:代理服务器设置不正确。