我在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}}正确。这是一个不错的解决方案,并且在脚本中为单个调用设置环境变量是否有任何安全隐患?最好是否有可用于此的内置设置或现有工具?
答案 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网络管理员
如果已设置,请取消设置代理:
设置正确的代理:
常见错误: