我正在尝试让 Windows 的 GitHub 客户端正常工作。我在公司代理和防火墙后面的公司 Win 7 x64 计算机上。按照其他各种帖子并尝试环境变量和配置变量的多种组合,我发现获得克隆和推送更新工作的唯一方法是使用 HTTPS_PROXY 环境变量,包括我的完整公司域用户 ID 和密码。
从安全的角度来看,这是不可接受的。有没有其他方法可以让它工作?
补充说明:
以下工作:
添加一个名为 HTTPS_PROXY 的环境变量,其值为 http://[domain]\[userid]:[password]@someproxy.mycorp.com:8080
以下没有工作:
从 HTTPS_PROXY 变量中省略用户 ID 和密码
使用名为 HTTP_PROXY(无 S)的环境变量
将 http.proxy 变量添加到全局配置文件 (.gitconfig)
将 https.proxy 变量添加到全局配置文件
在所有情况下,GitHub client 仍然无法识别代理:文件 TheLog.txt
always 的内容在启动时显示以下内容:
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Proxy information: (None)
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Couldn't fetch creds for proxy
随后是几次失败的代理身份验证尝试的输出,所有这些都表明“凭据丢失”。
将这些条目添加到用户目录中的“.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>
尝试了上述所有方法 - 并没有成功,唯一对我有帮助的是 CNTLM - http://cntlm.sourceforge.net/。
安装它并运行cntlm -H,然后对corp代理进行身份验证,使用cntlm的输出编辑cntlm.ini文件,重新启动Windows服务。使用以下命令更新 .gitconfig:
[https] proxy = localhost:3128
[http] proxy = localhost:3128
现在 cntlm 将执行所有身份验证,您将能够在 corp 代理后面使用 GitHub(和 Dropbox,顺便说一句)。至少在下一次更改密码之前:) (比做 cntlm -H 的东西)
我能够让 GitHub Shell 与我们的公司代理一起工作。我正在启动 GitHub Shell 并执行以下命令:
export http_proxy=http://<username>:<password>@<corporate proxy>:3128
我真的很想让 GUI 也能工作。但我不想设置包含我的公司凭证信息的 Windows 全局环境变量。
奇怪的是 GitHub GUI Client 能够连接到 GitHub 进行用户身份验证,但唯一的问题是从 GitHub 克隆、拉取和推送项目。似乎问题出在git实现上。我能够将 git 配置为通过我们的代理运行,而无需将我的凭据放入 git 全局设置中,并且它在执行拉取或推送请求时要求我提供凭据。但这仅在 Git Shell 中有效。
如果您在企业中使用 GitHub for Windows,那么您很有可能在一个严重的企业防火墙/代理背后。 GitHub for Windows 在其 GUI 中还没有用于设置选项的代理参数。
要将 GitHub for Windows 配置为使用您的公司代理,请编辑通常位于 C:\Users\.gitconfig 或 C:\Documents & Settings\.gitconfig 的 .gitconfig 文件
关闭 GitHub for Windows;在 .gitconfig 中,只需添加
[https] 代理 = proxy.yourcompany.com:port
我也遇到了这个问题,并试图深入研究它(反汇编客户端)。
我们看到的生成日志消息的代码如下:
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 中设置的代理信息。日志消息似乎与我们在配置文件或环境变量中设置的内容无关。
我不知道你的防火墙,但我的校园使用代理
你使用任何 git gui 吗?编辑:刚刚注意到您正在使用 github 客户端 for windows
我正在使用 tortoisegit,它很容易设置代理。只需右键单击任意位置,tortoisegit>network,启用代理服务器并设置服务器地址、用户名和密码。完毕
据我记得,tortoisegit 也可以在 github 上开箱即用。
这是在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
PS->我建议使用这种方法来设置代理,因为随着您的进一步了解,一切都会落实到位
Source
对我们来说,解决方案涉及两件不同的事情。首先,如 Sogger 的回答中所述,您需要将条目添加到位于 %USERPROFILE%
中的 .gitconfig
文件中。
[http]
proxy = http://<proxy address>:<proxy port>
[https]
proxy = https://<proxy address>:<proxy port>
其次,(这是我们所缺少的部分)您需要在代理服务器上配置一个例外,以允许 未经身份验证的 代理流量到 *.github.com
https://i.stack.imgur.com/5KVzb.jpg
问题不在于代理,而在于身份验证。绕过身份验证要求允许所需的通信使用 GitHub 桌面客户端克隆和处理项目。
另请注意,此方法不需要在 .gitconfig
文件中存储代理凭据。
如果您需要强制 Git 或 GitHub 客户端绕过代理(使用直接连接),只需将 .gitconfig
中的代理 URI 设置为空字符串即可。您可能必须手动编辑文件,我没能说服 git config
命令将配置指令的值设置为空字符串(尝试 git config --global http.proxy ""
)。
因此,只需将以下行添加到 ~/.gitconfig
:
[http]
proxy = ""
[https]
proxy = ""
127.0.0.1
而不是localhost
。在 Windows 中,似乎 localhost 首先指向 CNTLM 不侦听的 IPv6 地址。因此,git 将等到超时(几分钟),然后再切换到 IPv4 地址。