Перебирать каждую фиксацию в репозитории Git с помощью LibGit2Sharp?

Я попытался выполнить цикл через new LibGit2Sharp.Repository(path).Commits, но, похоже, он проходит только через коммиты в мастере (или, я думаю, туда, куда указывает HEAD?).

Как мне прокручивать каждую фиксацию в репозитории, независимо от того, в какой ветке она находится, и прокручивать их в порядке, когда произошли фиксации (дата)?

Я делаю это для такой цели, как git log, чтобы перечислить коммиты независимо от ветвей в порядке даты.

Бонусные баллы, если бы я мог также перебирать коммиты, на которые нет ссылок (т. Е. Если вы git reset отдалились от некоторых коммитов, а коммиты больше не упоминаются и вот-вот получат gc'd).

Мысли?


person Tower    schedule 06.05.2012    source источник


Ответы (1)


Поддержка git log --all должна быть достижима со следующим синтаксисом

using (var repo = new Repository(yourRepoPath))
{
      var commits = repo.Commits.QueryBy(new Filter { Since = repo.Refs });
}

Filter также предоставляет свойство SortBy для управления порядком результатов. Сортировка по умолчанию (GitSortOptions.Time) сначала выводит самые последние коммиты.

Бонусные баллы, если бы я мог также перебирать коммиты, на которые нет ссылок

Нет способа получить доступ к коммитам в reflog или к зависшему (пока?). Тогда, я думаю, никаких бонусных баллов :-)

person nulltoken    schedule 06.05.2012
comment
Это сработало! Но я хотел бы понять, почему... если repo.Commits не содержал их всех, то почему после QueryBy он теперь содержал оставшиеся коммиты? - person Tower; 06.05.2012
comment
Нет способа получить доступ к оборванным фиксациям (пока?). Это нормально. Как вы думаете, будет ли это возможно в будущем? Я предполагаю, что это будет похоже на git reflog, но с пропуском незафиксированных. - person Tower; 06.05.2012
comment
repo.Commits — это ярлык для repo.Commits.QueryBy(new Filter { Since = repo.Head }). Это похоже на git log - person nulltoken; 06.05.2012
comment
Висячие коммиты потребуют чего-то похожего на git fsck --unreachable. git reflog должен быть частью LibGit2Sharp v0.10.0 - person nulltoken; 06.05.2012
comment
Тогда я подожду релиза v0.10.0 :) - person Tower; 06.05.2012
comment
при использовании версии 0.13 использование Filter выдает предупреждение: 'LibGit2Sharp.Filter' is obsolete: 'This type will be removed in the next release. Какова рекомендуемая альтернатива? - person p.campbell; 05.08.2013
comment
@p.campbell Устаревший метод QueryBy должен указывать на использование вместо него перегрузки QueryBy(CommitFilter). - person nulltoken; 06.08.2013