为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
陪伴而非守候 2022-11-13 14:43:55
我正在尝试包括打开 Git Bash,推入和拉入我的 c# 代码。虽然打开 Git BashProcess.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 打开,但命令行中没有写入任何内容。
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

我知道这是个老问题,几天前我还在添加答案,我也面临同样的问题。


我认为你缺少的是-c参数。我使用了下面的代码,它解决了这个问题。-c告诉 git-bash 执行后面的任何内容,它类似于-cmd命令行中的参数。


在下面提到的功能中 -


fileName= git-bash.exe 的路径。


command= 你要执行的 git 命令。


workingDir= git 存储库的本地路径。


public static void ExecuteGitBashCommand(string fileName, string command, string workingDir)

{


    ProcessStartInfo processStartInfo = new ProcessStartInfo(fileName, "-c \" " + command + " \"")

    {

        WorkingDirectory = workingDir,

        RedirectStandardOutput = true,

        RedirectStandardError = true,

        RedirectStandardInput = true,

        UseShellExecute = false,

        CreateNoWindow = true

    };


    var process = Process.Start(processStartInfo);       

    process.WaitForExit();


    string output = process.StandardOutput.ReadToEnd();

    string error = process.StandardError.ReadToEnd();

    var exitCode = process.ExitCode;


    process.Close();

}

我希望它能解决问题。


查看完整回答
反对 回复 2022-11-13
?
慕娘9325324

TA贡献1783条经验 获得超5个赞

我认为你是在正确的道路上。我会尝试在路径中使用 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();


查看完整回答
反对 回复 2022-11-13
?
倚天杖

TA贡献1828条经验 获得超3个赞

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

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

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


查看完整回答
反对 回复 2022-11-13
  • 3 回答
  • 0 关注
  • 315 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号