aksimoN Ответов: 1

C# как выполнять команды GIT из консольного приложения


Я хочу выполнить "git pull" или "git pull origin master" в определенной папке, но это не работает, когда я пытаюсь сделать это так:

Есть предложения?

Что я уже пробовал:

public static void gitPull ()
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardOutput = true;
    startInfo.FileName = "CMD.exe";
    startInfo.Arguments = @"/c d:\GIT\proj1\git pull origin master";
    process.StartInfo = startInfo;
    process.Start();
    string output = process.StandardOutput.ReadToEnd();
    Console.WriteLine(output);
    process.WaitForExit();
}

РЕДАКТИРОВАТЬ: Добавлено из решения 1:
Когда я нахожусь внутри d:\GIT\proj1\ и использование git pull это работает. Но как переместиться в папку proj1 и выполнить команду git pull в одном месте?

Когда я пытаюсь сделать это методом выше а я получаю:
'd:\GIT\proj1\' is not recognized as an internal or external command,
operable program or batch file.
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Pete O'Hanlon

Ты сказал, что код не работает, но это нам ничего не говорит. Вы получаете ошибки? Если да, то какие ошибки вы видите?

Прелесть команд процесса заключается в том, что вы можете попробовать их без необходимости запускать приложение. Что вы получаете, когда запускаете d:\GIT\proj1\git pull master командовать?

aksimoN

Когда я нахожусь внутри
d:\GIT\proj1\

и используйте: git pull

это работает.

Но как переместиться в папку proj1 и выполнить команду git pull в одном месте?

Когда я пытаюсь сделать это методом выше а я получаю:

'd:\GIT\proj1\git' не распознается как внутренняя или внешняя команда,
работоспособная программа или пакетный файл.

Pete O'Hanlon

Ответ Ричарда ниже показывает, что вам нужно сделать. Проблема, возникшая в вашем коде, заключается в том, что процесс ожидает d:\GIT\proj1\GIT чтобы быть выполняемой командой, в то время как то, что вы на самом деле пытаетесь сделать, это запустить GIT (который находится в другом каталоге) внутри d:\GIT\proj1 папка.

1 Ответов

Рейтинг:
8

Richard Deeming

Попробуй:

public static void gitPull()
{
    var startInfo = new System.Diagnostics.ProcessStartInfo
    {
        UseShellExecute = false,
        RedirectStandardOutput = true,
        FileName = "CMD.exe",
        Arguments = @"/c cd d:\GIT\proj1\ & git pull master",
    });
    
    var process = System.Diagnostics.Process.Start(startInfo);
    string output = process.StandardOutput.ReadToEnd();
    Console.WriteLine(output);
    process.WaitForExit();
}


aksimoN

Я должен был улучшить свою команду, но все равно это не работает:
Скрыть   скопировать код

'd:\GIT\proj1\ ' is not recognized as an internal or external command,operable program or batch file.
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.


ПС. в cmd работ как : 'ГИТ тянуть' и 'ГИТ тянуть происхождения мастер'

Richard Deeming

Как насчёт:

var startInfo = new System.Diagnostics.ProcessStartInfo
{
    UseShellExecute = false,
    RedirectStandardOutput = true,
    FileName = "git.exe",
    Arguments = "pull master",
    WorkingDirectory = @"d:\GIT\proj1\",
});

aksimoN

Да, это работает, но это несесеры, чтобы добавить репозиторий в команду git так:

Arguments = "pull origin master"

Pete O'Hanlon

У меня 5.