我一直在尝试使用System.Diagnostic.Process在git可执行文件周围实现一个C#包装器,并且已经打了一针墙。我想做的是在与远程存储库交互时,只要git提示输入用户名和密码,就可以在我的应用程序中弹出密码提示。这将允许用户自动使用所有内置的git密码凭据存储工具,并且仍然可以选择在应用程序未使用时在应用程序中输入凭据。
我尝试的是以下代码。
var process = new System.Diagnostics.Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c git fetch";
StringBuilder output = new StringBuilder();
StringBuilder error = new StringBuilder();
process.OutputDataReceived += (sender, e) =>
{
Debug.Log("OUTPUT DATA: " + e.Data);
};
process.ErrorDataReceived += (sender, e) =>
{
Debug.Log("ERROR DATA: " + e.Data);
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
我看到命令窗口弹出"密码:http://www.gitrepo.com"但是我的OutputDataReceived或ErrorDataReceived回调中没有看到此输出供我的应用程序读取。理想情况下,我希望在出现这些提示时触发事件,并为用户显示一个很好的用户名/密码对话框。
我挖了一下git代码,发现这些密码提示输出到/ dev / tty并从中读取。现在我不太熟悉输入/输出流和TTY如何工作。我想知道是否有人能指出我正确的方向,以便我能够检测到这个提示何时弹出并允许用户传入
答案 0 :(得分:1)
啊哈。我找到了答案。我可以创建一个小的GUI应用程序,git会在需要密码时通过设置" git config core.askpass
来提示我。我使用以下的askpass脚本进行了测试,它可以根据需要运行。
http://code.metager.de/source/xref/git/git-gui/git-gui--askpass