94

我正在尝试让 Windows 的 GitHub 客户端正常工作。我在公司代理和防火墙后面的公司 Win 7 x64 计算机上。关注其他各种帖子并尝试环境变量和配置变量的多种组合,我发现获得克隆和推送更新工作的唯一方法是使用 HTTPS_PROXY 环境变量,包括我的完整公司域用户 ID 和密码。

从安全的角度来看,这是不可接受的。有没有其他方法可以让它工作?

补充说明:

以下工作:

  • 添加一个使用值调用的环境HTTPS_PROXY变量http://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

以下没有工作

  • HTTPS_PROXY从变量中省略用户名和密码
  • 使用名为HTTP_PROXY(no 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

随后是几次失败的代理身份验证尝试的输出,所有这些都表明“凭据丢失”。

4

10 回答 10

132

将这些条目添加到用户目录中的“.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>
于 2013-09-04T16:14:20.783 回答
15

尝试了以上所有方法 - 并没有成功,唯一帮助我的是 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 的东西)

于 2013-12-10T07:36:29.287 回答
8

我能够让 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 中有效。

于 2013-06-12T11:51:43.273 回答
7

如果您在企业中使用 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

于 2013-09-04T11:59:03.377 回答
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 中设置的代理信息。日志消息似乎与我们在配置文件或环境变量中设置的内容无关。

于 2013-06-13T15:49:59.723 回答
3

我不知道你的防火墙,但我的校园使用代理

你使用任何 git gui 吗?编辑:刚刚注意到您正在使用 github 客户端 for windows

我正在使用 tortoisegit,它很容易设置代理。只需右键单击任意位置,tortoisegit>network,启用代理服务器并设置服务器地址、用户名和密码。完毕

据我记得,tortoisegit 也可以在 github 上开箱即用。

于 2013-04-22T17:51:50.407 回答
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

PS -> 我建议使用此方法设置代理,因为您将进一步了解
源代码

于 2017-12-27T23:02:43.590 回答
1

我发现这个博客很有用。它描述了ntlmaps代理。它可能不太安全,但工作顺利。我无法让cntlm工作。

于 2014-06-04T18:32:42.090 回答
1

对我们来说,解决方案涉及两件不同的事情。首先,如 Sogger 的回答中所述,您需要将条目添加到您的.gitconfig文件中,该文件位于%USERPROFILE%.

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

其次,(这对我们来说是缺失的部分,)您需要在代理服务器上配置一个例外,以允许未经身份验证的代理流量*.github.com

在 iPrism 中,它看起来像这样: 在此处输入图像描述

问题不在于代理,而在于身份验证。绕过身份验证要求允许使用 GitHub 桌面客户端克隆和处理项目所需的通信。

另请注意,此方法不需要.gitconfig文件中存储代理凭据。

于 2016-09-23T19:22:54.950 回答
0

如果您需要强制 Git 或 GitHub 客户端绕过代理(使用直接连接),只需将 中的代理 URI 设置.gitconfig为空字符串即可。您可能必须手动编辑文件,我没能说服git config命令将配置指令的值设置为空字符串(尝试过git config --global http.proxy "")。

所以只需将以下行添加到~/.gitconfig

[http]
    proxy = ""
[https]
    proxy = "" 
于 2021-05-31T06:43:40.140 回答