Как игнорировать коммиты слияния с помощью libgit2sharp?

Мне нужно получить список коммитов без автоматически объединенных коммитов, сделанных Git. Как это можно сделать с помощью пакета libgit2sharp?


person juvchan    schedule 03.09.2014    source источник


Ответы (1)


Коммит слияния — это коммит с более чем одним родителем.

Чтобы сделать это с помощью Git, можно было бы выполнить, например, следующую команду, в которой будут перечислены все коммиты, доступные HEAD, которые не являются коммитами слияния.

git log --no-merges HEAD

Где --no-merges задокументировано как "Не печатать фиксирует более чем одного родителя. Это точно так же, как --max-parents=1.".


То же самое можно сделать с LibGit2Sharp с помощью следующего фрагмента кода:

using (var repo = new Repository(path))
{
    var allCommitsReachableByHead = repo.Commits;

    const string RFC2822Format = "ddd dd MMM HH:mm:ss yyyy K";

    foreach (var c in allCommitsReachableByHead)
    {
        if (c.Parents.Count() > 1)
        {
            continue;
        }

        Console.WriteLine("Author: {0} <{1}>", c.Author.Name, c.Author.Email);
        Console.WriteLine("Date:   {0}", c.Author.When.ToString(RFC2822Format, CultureInfo.InvariantCulture));
        Console.WriteLine();
        Console.WriteLine(c.Message);
        Console.WriteLine();
    }
}
person nulltoken    schedule 03.09.2014