我需要获得master和developer特定目录的完整区别,以便我可以解析它并创建易于阅读的变更日志。
我想用libgit2sharp复制“ git diff --unified = 0主目录/> 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也许是一种更干净的方法。我没有适用于PowerShell的.Net Core 2.0。
答案 0 :(得分:0)
默认补丁是统一格式
git diff master..develop <directory> > output.diff
答案 1 :(得分:0)
我使用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();