Как открыть и использовать Git Bash через код C # - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь включить открытие Git Bash, вставку и вставку моего кода на C #. Хотя открытие Git Bash с помощью Process.Start() не является проблемой, я не могу написать команды в 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 открывается, но ничего не пишется в командной строке.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Как @ S.Spieker уже сказал вам в хорошем ответе, нет необходимости использовать git bash (это усложняет достижение и снижает производительность), просто вызовите непосредственно исполняемый файл git.

Вы можете взглянуть на код GitExtensions, который делает это: https://github.com/gitextensions/gitextensions/blob/027eabec3be497f8d780cc68ece268c64a43a7d5/GitExtensionsVSIX/Git/GitCommands.cs#L112

Вы также можете достичь желаемого с помощью libgit2sharp (https://github.com/libgit2/libgit2sharp). Это может быть проще, если вы хотите интерпретировать результаты выполнения команды.

0 голосов
/ 26 марта 2019

Я думаю, вы на правильном пути. Я бы попытался использовать 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();
...