使用C#获取Git命令行返回值

5
我希望能够从C#运行git命令。以下是我编写的代码,它确实执行了git命令,但我无法捕获返回值。当我手动从命令行运行时,这是输出:

enter image description here

当我从程序中运行时,我只得到:

Cloning into 'testrep'...

其他信息未被捕获,但命令成功执行。

class Program
{
    static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("git.exe");

        startInfo.UseShellExecute = false;
        startInfo.WorkingDirectory = @"D:\testrep";
        startInfo.RedirectStandardInput = true;
        startInfo.RedirectStandardOutput = true;
        startInfo.Arguments = "clone http://tk1:tk1@localhost/testrep.git";

        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();

        List<string> output = new List<string>();
        string lineVal = process.StandardOutput.ReadLine();

        while (lineVal != null)
        {

            output.Add(lineVal);
            lineVal = process.StandardOutput.ReadLine();

        }

        int val = output.Count();
        process.WaitForExit();

    }
}
5个回答

3

您尝试过libgit2sharp吗?文档不是很完整,但它非常容易使用,而且有一个nuget包可用。您也可以查看测试代码了解如何使用。一个简单的克隆操作如下所示:

string URL = "http://tk1:tk1@localhost/testrep.git";
string PATH = @"D:\testrep";
Repository.Clone(URL, PATH);

获取更改也很容易:
using (Repository r = new Repository(PATH))
{
    Remote remote = r.Network.Remotes["origin"];
    r.Network.Fetch(remote, new FetchOptions());
}

3
git clone手册页面中可以得知:
--progress 默认情况下,如果连接到终端,则在标准错误流上报告进度状态,除非指定了-q。此标志即使未将标准错误流定向到终端也会强制使用进度状态。
运行git clone交互式时,输出的最后三行将发送到标准错误,而不是标准输出。但是,由于它不是交互式终端,因此当您从程序中运行命令时,它们不会显示在那里。您可以强制它们出现,但输出对于程序来说不可用于解析(有很多\r以更新进度值)。
您最好根本不解析字符串输出,而是查看git clone的整数返回值。如果它不是零,则表示存在错误(并且可能会在标准错误中显示一些内容,供用户查看)。

2

一旦您调用process.WaitForExit()并且进程已终止,您可以简单地使用process.ExitCode来获取所需的值。


0

你的代码看起来没问题。 这是git的问题。

git clone git://git.savannah.gnu.org/wget.git 2> stderr.txt 1> stdout.txt

stderr.txt为空 stdout.txt: 正在克隆到 'wget'...

看起来git不使用标准的console.write()输出,你可以在它写百分比时看到它都在一行中,而不是像这样: 10%

25%

60%

100%


0
process.StandardError.ReadToEnd() + "\n" + process.StandardOutput.ReadToEnd();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接