Получение различий между мастером и разработкой для конкретной директории с помощью libgit2sharp - PullRequest
0 голосов
/ 26 марта 2019

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

Я хочу скопировать "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.Start», но, возможно, libgit2sharp - более чистый подход. У меня нет .Net Core 2.0 для PowerShell.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Я решил это с помощью 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();
0 голосов
/ 26 марта 2019

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

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