我需要从Intranet应用程序(Windows环境)推送分支。一个团队的一些用户可以执行此操作。 Git本地存储库托管在Web服务器上,远程托管在另一台服务器上。网址协议为 https ,我们使用 Kerberos 身份验证。我不希望应用程序的用户输入他们的Windows用户ID和密码。
因此,作为初始化步骤,我根据用户配置本地存储库:
var m_Repo = new Repository(repoFldPathName);
Configuration config = m_Repo.Config;
config.Set<string>("user.name", m_UserName);
config.Set<string>("http.sslVerify", "false");
string url = string.Format(https://{0}@my-host.fr/folder/repo_name.git, m_UserName);
Remote remote = m_Repo.Network.Remotes["origin"];
if (remote != null)
{
if (remote.Url != url)
{
m_Repo.Network.Remotes.Remove("origin");
m_Repo.Network.Remotes.Add("origin", url);
}
}
else
m_Repo.Network.Remotes.Add("origin", url);
现在是时候推动分支机构&#34;掌握&#34;我准备推(正如我在另一篇文章中看到的那样):
PushOptions options = new PushOptions();
Remote remote = m_Repo.Network.Remotes["origin"];
Branch branch = m_Repo.Branches["master"];
if (branch.Remote == null)
m_Repo.Branches.Update(branch,
b => b.Remote = remote.Name,
b => b.UpstreamBranch = branch.CanonicalName);
options.CredentialsProvider = (_url, _user, _cred) => new DefaultCredentials();
m_Repo.Network.Push(branch, options);
执行几分钟后,我得到了这个例外:
LibGit2Sharp.LibGit2SharpException was unhandled by user code
HResult=-2146233088
Message=Failed to receive response: La requête doit être renvoyée
Source=LibGit2Sharp
StackTrace:
à LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
à LibGit2Sharp.Core.Ensure.ZeroResult(Int32 result)
à LibGit2Sharp.Core.Proxy.git_remote_push(RemoteSafeHandle remote, IEnumerable`1 refSpecs, GitPushOptions opts, Signature signature, String reflogMessage)
à LibGit2Sharp.Network.Push(Remote remote, IEnumerable`1 pushRefSpecs, PushOptions pushOptions, Signature signature, String logMessage)
à LibGit2Sharp.Network.Push(Remote remote, String pushRefSpec, PushOptions pushOptions, Signature signature, String logMessage)
à LibGit2Sharp.NetworkExtensions.Push(Network network, IEnumerable`1 branches, PushOptions pushOptions)
à LibGit2Sharp.NetworkExtensions.Push(Network network, Branch branch, PushOptions pushOptions)
à CDM.ESD1_WSGINSTALL.Business.GitRepo.Push(brEnum brName) dans c:\PRIV\Projects\ESD1\ESD1_WSGINSTALL\ESD1_WSGINSTALL.Business\GitRepo.cs:ligne 72
à CDM.ESD1WSGINSTALL.Commands.CharteView.DoBuildRPM(String id) dans c:\PRIV\Projects\ESD1\ESD1_WSGINSTALL\ESD1_WSGINSTALL\App_Code\Commands\CharteViewActivity\CharteView.cs:ligne 262
InnerException:
感谢您的帮助
答案 0 :(得分:2)
我认为DefaultCredentials
类型就是你所追求的。
正如 xml documentation 所述,&#34;一个凭据对象,它将提供&#34;默认&#34;凭证(登录用户信息)通过NTLM或SPNEGO身份验证。&#34;
将PushOptions.CredentialsProvider
设置为以下内容应该可以解决问题
CredentialsProvider = (_url, _user, _cred) => new DefaultCredentials()
当我在我的Windows机器上使用Git Extensions推送分支时,(git push origin master --tag)a&#34; OpenSSH&#34;弹出窗口声称我的密码
可悲的是,LibGit2Sharp还没有支持SSH。我建议您订阅未解决的问题 #852 以获得有关其进展的通知。