如何通过c#代码打开和使用Git Bash

问题描述 投票:1回答:2

我正在尝试包括打开Git Bash,推送和拉入我的c#代码。虽然用Process.Start()打开Git Bash不是问题,但我无法将命令写入Git Bash。

我尝试在ProcessStartInfo.Arguments中包含命令,以及重定向标准输出。两者都没有奏效。在下面你可以看到我试过的不同代码片段。

private void Output()
{
    //Try 1
    processStartInfo psi = new ProcessStartInfo();
    psi.FileName = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Git\Git Bash.lnk";
    psi.UseShellExecute = false;
    psi.RedirectStandardOutput = true;
    psi.Argument = "git add *";
    Process p = Process.Start(psi);
    string strOutput = p.StandardOutput.ReadToEnd();
    Console.WriteLine(strOutput);

    //Try 2
    ProcessStartInfo psi = new ProcessStartInfo(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Git\Git Bash.lnk");
    Process.Start(psi);
    psi.Arguments = "git add *";
    Process.Start(psi);

    //Try 3
    var escapedArgs = cmd.Replace("\"", "\\\"");
    var process = new Process()
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Git\Git Bash.lnk",
            Arguments = "cd C:\\Users\\strit\\autocommittest2\\autocommittest2\n",
             RedirectStandardOutput = true,
             UseShellExecute = false,
             CreateNoWindow = true,
         }
    };
    process.Start();
    string result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
}

Git Bash打开但在命令行中没有写入任何内容。

c# windows git git-bash
2个回答
0
投票

我想你是在正确的道路上。我会尝试在路径中使用git,但是应该可以直接使用git-bash.exe,在我的机器上它位于:C:\Program Files\Git\git-bash.exe

Process gitProcess = new Process();
gitInfo.Arguments = YOUR_GIT_COMMAND; // such as "fetch origin"
gitInfo.WorkingDirectory = YOUR_GIT_REPOSITORY_PATH;
gitInfo.UseShellExecute = false; 

gitProcess.StartInfo = gitInfo;
gitProcess.Start();

string stderr_str = gitProcess.StandardError.ReadToEnd();  // pick up STDERR
string stdout_str = gitProcess.StandardOutput.ReadToEnd(); // pick up STDOUT

gitProcess.WaitForExit();
gitProcess.Close();

0
投票

就像@ S.Spieker已经告诉你它的好答案一样,不需要使用git bash(这使得它更难以实现并且性能更低),只需直接调用git可执行文件即可。

您可以查看正在执行此操作的GitExtensions代码:https://github.com/gitextensions/gitextensions/blob/027eabec3be497f8d780cc68ece268c64a43a7d5/GitExtensionsVSIX/Git/GitCommands.cs#L112

你也可以使用libgit2sharp(https://github.com/libgit2/libgit2sharp)实现你想要的。如果要解释命令运行的结果,这可能会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.