代理背后的GitHub Windows客户端
我正在尝试让Windows的GitHub客户端正常工作。我在公司的Win 7 x64计算机上,在公司代理和防火墙后面。在其他各种帖子之后,我尝试了环境变量和配置变量的多种组合,发现实现克隆和推送更新的唯一方法是使用HTTPS_代理环境变量,包括我的完整公司域用户ID和密码 从安全角度来看,这是不可接受的。有没有其他方法可以让它发挥作用 补充说明: 以下方面发挥了作用:代理背后的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]
- 添加一个名为
的环境变量,其值为HTTPS\u PROXY
http://[domain]\[userid]:[password]@someproxy.mycorp.com:8080
- 从
变量中省略用户id和密码HTTPS\u PROXY
- 使用名为
(noHTTP\u PROXY
)的环境变量S
- 将
变量添加到全局配置文件(http.proxy
).gitconfig
- 将
变量添加到全局配置文件https.proxy
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 = ""