我需要获取master之间的完全差异并为特定目录开发,所以我可以解析它并创建一个易于阅读的更改日志。
我想用libgit2sharp复制“git diff --unified = 0 master directory /> file.diff”。我设法获得所有修改/添加/删除文件的列表,但我不知道如何获取每个文件的差异内容。
using (var repo = new Repository("C:\\dev\\myProject"))
{
var changes = repo.Diff.Compare<TreeChanges>(repo.Branches["master"].TrackedBranch.Tip.Tree,
DiffTargets.WorkingDirectory);
foreach (var changed in changes.Modified)
{
if (changed.Path.Contains("directory"))
{
Console.WriteLine("modified:" + changed.Path);
}
}
}
我想要有类似于实际的git命令,所以我可以解析它。另一种解决方案是使用“Process.Start”,但也许libgit2sharp是一种更清洁的方法。我没有.Net Core 2.0 for PowerShell。
默认情况下,补丁是统一格式
git diff master..develop <directory> > output.diff
我用Process.Start解决了它。我仍然对libgit2sharp解决方案感兴趣。提示:1252编码在标准.Net Core中不起作用。
const string command = "git";
const string directory = "C:\\dev\\myProject";
const string arguments = "diff --unified=0 master directory/";
var startInfo = new ProcessStartInfo
{
WorkingDirectory = directory,
FileName = command,
Arguments = arguments,
StandardOutputEncoding = Encoding.GetEncoding(1252),
UseShellExecute = false,
RedirectStandardOutput = true
};
var cmd = Process.Start(startInfo);
var sr = cmd?.StandardOutput;
var output = sr?.ReadToEnd();
cmd?.WaitForExit();