我正在尝试让Windows的GitHub客户端工作。我在公司代理和防火墙后面的企业Win 7 x64计算机上。通过各种其他帖子并尝试环境变量和配置变量的多种组合,我发现克隆和推送更新工作的唯一方法是使用HTTPS_PROXY环境变量,包括我的完整公司域用户ID和密码。
从安全角度来看,这是不可接受的。还有其他方法可以让它发挥作用吗?
以下工作:
HTTPS_PROXY
的环境变量,其值为http://[domain]\[userid]:[password]@someproxy.mycorp.com:8080
以下不工作:
HTTPS_PROXY
变量HTTP_PROXY
(无S
)http.proxy
变量添加到全局配置文件(.gitconfig
)https.proxy
变量添加到全局配置文件在所有情况下,GitHub 客户端仍然无法识别代理:文件TheLog.txt
始终的内容在启动时显示以下内容:
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Proxy information: (None)
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Couldn't fetch creds for proxy
然后输出几次失败的代理身份验证尝试,所有这些都表示“缺少证书。”
答案 0 :(得分:128)
将这些条目添加到用户目录中的“.gitconfig”文件中(转到%USERPROFILE%):
[http]
proxy = http://<proxy address>:<proxy port>
[https]
proxy = https://<proxy address>:<proxy port>
如果您不想以明文形式存储密码,我会使用像CNTLM这样的本地代理转发器,它允许您引导所有流量并存储密码哈希。
与原始问题不同,如果您不在乎密码是否为明文,请添加以下内容:
[http]
proxy = http://<username>:<password>@<proxy address>:<proxy port>
[https]
proxy = https://<username>:<password>@<proxy address>:<proxy port>
答案 1 :(得分:14)
尝试了上述所有事情 - 但没有成功,只有帮助我的是CNTLM - http://cntlm.sourceforge.net/。
安装它并运行cntlm -H,而不是对corp proxy进行身份验证,使用cntlm的输出编辑cntlm.ini文件,重新启动Windows服务。使用以下命令更新.gitconfig:
[https] proxy = localhost:3128
[http] proxy = localhost:3128
现在cntlm将执行所有身份验证,并且您将能够在corp代理后面使用GitHub(和Dropbox,btw)。至少直到下一次密码更改:)(比再次做cntlm -H的东西)
答案 2 :(得分:8)
我能够让GitHub Shell与我们的公司代理一起工作。我正在启动GitHub Shell并执行以下命令:
export http_proxy=http://<username>:<password>@<corporate proxy>:3128
我真的想让GUI工作。但我不想设置包含公司凭据信息的Windows全局环境变量。
奇怪的是GitHub GUI客户端能够连接到GitHub进行用户身份验证,但唯一的问题是从GitHub克隆,拉动和推送项目。好像是git实现的问题。我能够配置git来运行我们的代理而不将我的凭据放在git全局设置中,并且它在执行pull或push请求时要求我的凭据。但这只适用于Git Shell。
答案 3 :(得分:7)
如果您在企业中使用GitHub for Windows,那么您可能会面临一个糟糕的企业防火墙/代理。 GitHub for Windows在其GUI中还没有用于设置选项的代理参数。
要将GitHub for Windows配置为使用公司代理,请编辑通常位于C:\ Users \ .gitconfig或C:\ Documents&amp;中的.gitconfig文件。设置\的.gitconfig
关闭GitHub for Windows;在.gitconfig中,只需添加
[HTTPS] proxy = proxy.yourcompany.com:port
答案 4 :(得分:4)
我也遇到过这个问题,并试图深入研究它(反汇编客户端)。
生成我们看到的日志消息的代码如下:
private static void LogProxyServerConfiguration()
{
WebProxy defaultProxy = WebProxy.GetDefaultProxy();
string str = defaultProxy.Address != (Uri)null ? defaultProxy.Address.ToString() : "(None)";
StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy information: {0}", str);
try
{
if (defaultProxy.Credentials == null)
{
StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Couldn't fetch creds for proxy", new object[0]);
}
else
{
NetworkCredential credential = defaultProxy.Credentials.GetCredential(GitHubClient.GitHubDotComUri, "Basic");
StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy is authenticated: {0}", credential != null && !string.IsNullOrWhiteSpace(credential.UserName));
}
}
catch (Exception ex)
{
StartupLogger.log.InfoException("Couldn't fetch creds for proxy", ex);
}
}
因此,此块仅记录在IE 中设置的代理信息。日志消息似乎与我们在配置文件或环境变量中设置的内容无关。
答案 5 :(得分:3)
我不知道您的防火墙,但我的校园使用代理
你使用任何git gui吗? 编辑:刚刚注意到您正在使用github客户端进行Windows我正在使用tortoisegit,它很容易设置代理。只需右键单击任意位置,tortoisegit&gt;网络,启用代理服务器并设置服务器地址,用户名和密码。完成
据我所知,tortoisegit也可以与github一起开箱即用。
答案 6 :(得分:2)
以下是在github中设置代理的方法
git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
在我的大学里,我们没有用户名和密码,所以如果我们的大学 ip是172.16.10.10和 港口是8080
git config --global http.proxy http://172.16.10.10:8080
git config --global https.proxy http://172.16.10.10:8080
P.S - &gt;我建议使用这种方法来设置代理,因为你会进一步了解事情 Source
答案 7 :(得分:1)
答案 8 :(得分:1)
对我们来说,解决方案涉及两个不同的事情。首先,如Sogger的回答所述,您需要将条目添加到位于.gitconfig
的{{1}}文件中。
%USERPROFILE%
其次,(这对我们而言是缺失的部分),您需要在代理服务器上配置一个例外,以允许 未经过身份验证的 代理流量到{{ 1}}
问题不在于代理,而在于身份验证。绕过身份验证要求允许所需的通信使用GitHub桌面客户端克隆和使用项目。
另请注意,此方法不需要在[http]
proxy = http://<proxy address>:<proxy port>
[https]
proxy = https://<proxy address>:<proxy port>
文件中存储代理凭据。
答案 9 :(得分:0)
如果您需要强制 Git 或 GitHub 客户端绕过代理(使用直接连接),只需将 .gitconfig
中的代理 URI 设置为空字符串。您可能需要手动编辑文件,我没能说服 git config
命令将配置指令的值设置为空字符串(尝试 git config --global http.proxy ""
)。
因此只需将以下几行添加到 ~/.gitconfig
中:
[http]
proxy = ""
[https]
proxy = ""