Получение различий между master и development для определенного каталога с помощью libgit2sharp

#c# #git #libgit2 #libgit2sharp

#c# #git #libgit2 #libgit2sharp

Вопрос:

Мне нужно получить полное различие между master и develop для определенного каталога, чтобы я мог проанализировать его и создать легко читаемый журнал изменений.

Я хочу повторить «git diff —unified=0 master directory />file.diff» с помощью libgit2sharp. Мне удается получить список всех измененных / добавленных / удаленных файлов, но я не знаю, как получить содержимое 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.Начать», но, возможно, libgit2sharp — гораздо более чистый подход. У меня нет .Net Core 2.0 для PowerShell.

Ответ №1:

По умолчанию исправления имеют унифицированный формат

 git diff master..develop <directory> > output.diff
  

Ответ №2:

Я решил это с помощью Process.Запуск. Я все еще был бы заинтересован в решении 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();