我正在与LibGit2Sharp一起为应用程序添加许多Git操作。我添加了Microsoft.Alm.Authentication
以帮助进行身份验证和凭据管理器访问。它对于检索已从命令行输入的凭据非常有用。
但是,也可以通过任何方法来挂接到凭据管理器的登录UI,该UI提示输入Github,BitBucket和VSTS的用户名和密码。该用户界面会从命令行自动弹出,但在使用LibGit2Sharp时不会触发。
我已经查看了Github上的GitCredentialManager项目,并且可以看到提供UI的组件,但是在试图弄清楚如何将其显式连接之前,是否有某种方式我想不到了它是作为Microsoft.Alm.Authentication
(或相关软件包)?还是有人可以指出一个示例或指南,以更好地说明这一点?
最佳答案
不幸的是,libgit2(或LibGit2Sharp)中没有功能可直接与git-credential-helper
功能对话,而git本身就是用来执行此操作的。
相反,您可以在CredentialsHandler
(或PushOptions
)上设置一个FetchOptions
,例如:
options.CredentialsProvider = (url, usernameFromUrl, types) => {
string username, password;
Uri uri = new Uri(url);
string hostname = uri.Host;
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.FileName = "git.exe";
startInfo.Arguments = "credential fill";
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.StandardInput.WriteLine("hostname={0}", hostname);
process.StandardInput.WriteLine("username={0}", usernameFromUrl);
while ((line = process.StandardOutput.ReadLine()) != null)
{
string[] details = line.Split('=', 2);
if (details[0] == "username")
{
username = details[1];
}
else if (details[0] == "password")
{
password = details[1];
}
}
return new UsernamePasswordCredentials(username, password);
};