我有一些存储库(可能是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中没有任何内容)。
答案 0 :(得分:1)
可能不是最美妙的方式,但从Windows .cmd文件调用的这一行对我有用:
cmd.exe /c start /d"c:\my\git\repo\dir" /b git.exe --no-pager log > log.txt