使用LibGit2Sharp抛出企业防火墙后面的Git网络操作

aat*_*que 5 proxy ntlm git-push libgit2sharp

我正在尝试使用LibGit2Sharp来git push origin使用以下内容

using(var repo = new Repository("path\to\repo\.git"))
{
   var commit = repo.Commit("Commit message", author, committer);

   var options = new PushOptions{ CredentialsProvider = (u, s, t) => new UserNamePasswordCredentials { Username = "username", Password = "password" } };
   repo.Network.Push(repo.Branches("master"), options); 
}
Run Code Online (Sandbox Code Playgroud)

我得到一个LibGit2SharpException说

附加信息:无法设置代理:参数不正确.

但是在git bash中我做的一切都很好git push origin.

我们有NTLM代理正在工作,我正在推动内部网https远程URI.我已http://username:password@proxy.fqdn:80按如下方式配置代理:

  • 环境变量:HTTP_PROXY和HTTPS_PROXY
  • repos .git/config:
    • remote.origin.proxy
    • http.proxy
    • https.proxy
    • http.sslCAInfo和https.sslCAInfo - 这是主机的根CA的路径

通读了这个SO并在那里链接,似乎libgit2sharp应该找到代理参数就好了.有没有人得到这个工作behing ntlm?

我正在使用:Windows 7,LibGit2Sharp.0.22.0,Git 2.10.1.windows.1,bash 4.3.46,.net4.5.2

关于实现推动替代方案的任何想法/技巧也非常受欢迎!

Von*_*onC 2

这来自“ libgit2 src/transports/winhttp.c”,它直接调用Windows APIWinHttpSetOption函数

它传递一个WINHTTP_OPTION_PROXY来设置或检索WINHTTP_PROXY_INFO包含现有会话句柄或请求句柄上的代理数据的结构。

仅当设置为低于 的值时,该函数才返回ERROR_INVALID_PARAMETER(参数无效)。WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL15000

我不知道为什么LibGit2Sharp有这个问题,但首先尝试仅设置环境变量HTTP_PROXY& HTTPS_PROXY(不是http.proxy& https.proxy),并确保对两个代理环境变量使用相同的 http url (不是 https url HTTPS_PROXY

官方的 libgit2 错误是问题 2106,应该通过PR 3110解决,并提交 1dc4491
但是,该修复尚未包含在发布版本中。