代理背后的GitHub Windows客户端

代理背后的GitHub Windows客户端,github,proxy,github-for-windows,Github,Proxy,Github For Windows,我正在尝试让Windows的GitHub客户端正常工作。我在公司的Win 7 x64计算机上,在公司代理和防火墙后面。在其他各种帖子之后,我尝试了环境变量和配置变量的多种组合,发现实现克隆和推送更新的唯一方法是使用HTTPS_代理环境变量,包括我的完整公司域用户ID和密码 从安全角度来看,这是不可接受的。有没有其他方法可以让它发挥作用 补充说明: 以下方面发挥了作用: 添加一个名为HTTPS\u PROXY的环境变量,其值为http://[domain]\[userid]:[password]

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

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

补充说明: 以下方面发挥了作用:

  • 添加一个名为
    HTTPS\u PROXY
    的环境变量,其值为
    http://[domain]\[userid]:[password]@someproxy.mycorp.com:8080
以下内容不起作用:

  • HTTPS\u PROXY
    变量中省略用户id和密码
  • 使用名为
    HTTP\u 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

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

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

您是否使用git gui编辑:刚刚注意到您正在使用适用于windows的github客户端

我使用的是陆龟,设置代理非常容易。只需右键单击任意位置,Ortoisegit>network,启用代理服务器并设置服务器地址、用户名和密码。完成


据我记忆所及,Ortoisegit也将与github一起开箱即用

我能够让GitHub Shell与我们的公司代理一起工作。我正在启动GitHub Shell并执行以下命令:

export http_proxy=http://<username>:<password>@<corporate proxy>:3128
导出http_proxy=http://:@:3128 我真的很想让GUI也能工作。但我不想设置包含公司凭据信息的Windows全局环境变量


奇怪的是,GitHub GUI客户端能够连接到GitHub进行用户身份验证,但唯一的问题是从GitHub中克隆、拉入和推入项目。问题似乎出在git实现上。我能够将git配置为通过我们的代理运行,而无需将我的凭据放入git全局设置,并且它在执行拉或推请求时请求我的凭据。但这只在Git Shell中起作用

我也遇到了这个问题,并试图深入研究一下(分解了客户端)

生成我们看到的日志消息的代码如下所示:

private static void LogProxyServerConfiguration()
{
WebProxy defaultProxy=WebProxy.GetDefaultProxy();
字符串str=defaultProxy.Address!=(Uri)null?defaultProxy.Address.ToString():“(无)”;
StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture,“代理信息:{0}”,str);
尝试
{
if(defaultProxy.Credentials==null)
{
StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture,“无法获取代理的凭据”,新对象[0]);
}
其他的
{
NetworkCredential credential=defaultProxy.Credentials.GetCredential(GitHubClient.GitHubDotComUri,“基本”);
StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture,“代理已验证:{0}”,credential!=null&!string.IsNullOrWhiteSpace(credential.UserName));
}
}
捕获(例外情况除外)
{
StartupLogger.log.InfoException(“无法获取代理的凭据”,例如);
}
}

因此,此块仅记录在IE中设置的代理信息。日志消息似乎与我们在配置文件或环境变量中的设置无关。

如果您在公司中使用GitHub for Windows,则您很有可能处于严重的公司防火墙/代理之后。GitHub for Windows的GUI中还没有用于设置选项的代理参数

要将GitHub for Windows配置为使用您的公司代理,请编辑通常位于C:\Users\.gitconfig或C:\Documents&Settings\.gitconfig的.gitconfig文件

关闭Windows的GitHub;在.gitconfig中,只需添加

[https]
proxy=proxy.yourcompany.com:port

将这些条目添加到用户目录中的“.gitconfig”文件(转到%USERPROFILE%):

[http]
proxy=http://:
[https]
proxy=https://:
如果您不想以明文形式存储密码,我会使用一个本地代理转发器,如CNTLM,它允许您通过它引导所有流量,并可以存储散列的密码


与原始问题不同,如果您不在乎密码是否为纯文本,请添加以下内容:

[http]
proxy=http://:@:
[https]
proxy=https://:@:

尝试了上述所有方法,但没有成功,唯一帮助我的是CNTLM-

安装并运行cntlm-H,然后对corp proxy进行身份验证,使用cntlm的输出编辑cntlm.ini文件,重新启动windows服务。将.gitconfig更新为:

[https] proxy = localhost:3128
[http] proxy = localhost:3128

现在cntlm将完成所有身份验证,您将能够在corp代理后面使用GitHub(和Dropbox,顺便说一句)。至少在下一次密码更改之前:)(比cntlm-H更有用)

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

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

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

[https]
    proxy = https://<proxy address>:<proxy port>
[http]
proxy=http://:
[https]
[https] proxy = localhost:3128
[http] proxy = localhost:3128
[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>
git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
git config --global http.proxy http://172.16.10.10:8080
git config --global https.proxy http://172.16.10.10:8080
[http]
    proxy = ""
[https]
    proxy = ""