Sampath579 Ответов: 1

Как использовать команду git bash в приложении C#


Привет
Я реализовал небольшое приложение, которое будет вызывать Git-bash.exe и выполните команду, чтобы получить список файлов, связанных с идентификатором фиксации. Я уверен, что весь код верен, за исключением того, как я передаю Аргументы процессу. Может ли кто-нибудь, пожалуйста, дать мне знать, как передать аргумент Git bash процессу C#. Я много гуглил и не нашел правильного способа привести этот аргумент.




Я знаю, что проблема находится в нижней строке
gitInfo.Arguments = "-c \"" + "git diff-tree -r 61140bb40f879dd21e8624fe8e2125df846572e8" + "\"";


Может ли кто-нибудь дать мне знать, как правильно передать аргументы?

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

ProcessStartInfo gitInfo = new ProcessStartInfo();
gitInfo.CreateNoWindow = false;
gitInfo.UseShellExecute = false;
gitInfo.RedirectStandardError = true;
gitInfo.RedirectStandardOutput = true;
gitInfo.FileName = @"C:\Program Files\Git\git-bash.exe";
Process gitProcess = new Process();

gitInfo.WorkingDirectory = @"D:\CodeBranch";
gitInfo.Arguments = "-c \"" + "git diff-tree -r 61140bb40f879dd21e8624fe8e2125df846572e8" + "\"";

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();

Richard MacCutchan

Это выглядит правильно. В чем же проблема?

OriginalGriff

Что он делает, чего вы не ожидали, или не делает, что вы сделали?
Есть ли какие-либо сообщения об ошибках?
Что вы пытались выяснить, что именно происходит?

Sampath579

Окно git-bash всплывает и немедленно исчезает. Та же команда git diff-tree-r 61140bb40f879dd21e8624fe8e2125df846572e8 если я ввожу вручную в консоль git-bash, то я получаю список файлов правильно, но когда отправляю его как arugment в процессе c#, он не может выполнить эту команду. Если я комментирую эту часть аргументов и выполняю свой код, то консоль git-bash всплывает и остается на более длительное время, и поэтому я чувствую, что способ передачи аргументов процессу неправильный.

OriginalGriff

Итак, что же говорит отладчик в потоках strerr и strout?
Что он показывает - именно то, что находится в строке свойства arguments? (Я предполагаю, что это не фиксированное значение идентификатора, судя по тому, как вы разнесли строку с одним аргументом).

Sampath579

strerr_str пуст, так как консоль git-bash не содержит никаких данных, и окно больше не существует во время его чтения. Этот идентификатор-это идентификатор фиксации, который я предоставил и который является действительным в моем проекте.

Когда я проверяю значение аргументов в visual studio во время отладки значение аргументов выглядит следующим образом:
-c "git diff-tree -r 61140bb40f879dd21e8624fe8e2125df846572e8"

Richard MacCutchan

Вы пробовали его без опции-c?

Sampath579

Я попробовал сделать следующее:
gitInfo.Аргументы = "git diff-tree -r 61140bb40f879dd21e8624fe8e2125df846572e8";

и вот результат

bash: /mingw64/bin/git: не удается выполнить двоичный файл
/usr/bin/bash: выход 126.
в консоли git bash.

Richard MacCutchan

Это говорит о том, что путь к git неверен или сам файл поврежден.

Sampath579

Нет. Я так не думаю, если это так, то как консоль git bash может правильно вызывать без аргументов?

Richard MacCutchan

Извините, понятия не имею. Но я не думаю, что это проблема с вашим кодом. Гораздо более вероятно, что это будет среда, в которой вы пытаетесь работать. Она работает на чистой Windows или ВСЛ?

Richard MacCutchan

У меня нет опыта работы с git-bash, но документация по адресу Git для Windows[^] предполагает, что исполняемый файл-это git, а не bash. Так что, возможно, вам нужно удалить "-c git" из ваших аргументов и просто передать фактическую команду git, начинающуюся с "diff-tree".

Sampath579

Даже попробовал это сделать, но безрезультатно. Везде, где в google люди просто говорят, чтобы написать команду там, но никто не дал пример, как написать команду в качестве образца.. :(

Richard MacCutchan

Я предлагаю вам перейти на сайт Git for Windows (ссылка находится в моем предыдущем сообщении) и обсудить это с другими пользователями. Это довольно специализированная часть программного обеспечения, и проблема не является программированием в обычном смысле.

Sampath579

Я мог бы решить эту проблему по-другому. Поскольку я не знаю, как передать этот аргумент командной строки в процессе c#, я написал пакетный файл со всеми этими командами GIT и вызвал этот пакетный файл из кода c#, и он работал как заклинание..

1 Ответов

Рейтинг:
2

Sampath579

I could able to solve this issue in different way. Since i am not aware of how to give this command line argument in c# Process, i written a batch file with all those GIT commands and called that batch file from c# code and it worked like a charm..