#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();