从批处理文件调用时,将git日志写入文本文件

时间:2016-06-27 20:54:23

标签: c# git batch-file

我有一些存储库(可能是15或20),大多数都有几百个提交。我希望能够调用一个批处理文件,其中git将每个文件的日志写入文本文件,以便我可以解析它们(一旦我有单独的文件,我相信我可以轻松完成,并计划最有可能使用C# )。

我知道我可以在单独的命令中使用git-bash来执行以下操作:

cd "<path to my repo>"
git --no-pager log > log.txt

这可以获取我想要的文件,但是如何在批处理文件中完成呢? 我可以用这种方式使用git-bash吗?我必须使用git.exe吗?

如果通过批处理文件执行此操作不是一个好主意,是否可以在C#中使用Process.Start执行此操作?

到目前为止我关注的一些问题:
How do I export a git log to a text file?(我如何倾向于使用git-bash创建文本日志)
Run git commands from a C# function
Running Bash Commands from C#

但我仍然不确定如何在每个单独的存储库中调用我想要的内容。特别是在批处理文件中,我的知识有限,每一行都是一个独立的命令(消除git-bash.exe的可能性?)。

更新

我已尝试使用以下代码:

public void RunGitForLogs()
{
    Process process = new Process();

    ProcessStartInfo processStartInfo = new ProcessStartInfo();
    processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    processStartInfo.FileName = @"C:\Program Files\Git\bin\git.exe";
    processStartInfo.WorkingDirectory = @"E:\git\myRepo";
    processStartInfo.Arguments = @"log --no-pager > C:\users\me\desktop\log.txt";
    processStartInfo.RedirectStandardOutput = true;
    processStartInfo.RedirectStandardError = true;
    processStartInfo.UseShellExecute = false;

    process.StartInfo = processStartInfo;
    process.Start();

    var outStd = new List<string>();
    var outErr = new List<string>();

    //https://stackoverflow.com/a/16276776/2957232
    while (process.StandardOutput.Peek() > -1)
        outStd .Add(process.StandardOutput.ReadLine());

    while (process.StandardError.Peek() > -1)
        outErr .Add(process.StandardError.ReadLine());

    process.WaitForExit();
}  

但是在外面我得到以下几行:

  

致命:含糊不清的论点&#39;&gt;&#39;:未知的修订版或路径不在工作树中。
      使用&#39; - &#39;将路径与修订分开,如下所示:
      &#39; git [...] - [...]&#39;

使用&#34; status&#34;作为一个参数按照这个回购的预期工作(outStd中的许多行,outErr中没有任何内容)。

1 个答案:

答案 0 :(得分:1)

可能不是最美妙的方式,但从Windows .cmd文件调用的这一行对我有用:

cmd.exe /c start /d"c:\my\git\repo\dir" /b git.exe --no-pager log > log.txt