Я думаю, что ответ SushiHangover на это довольно правильный. Всего пара поправок/обновлений. (P.S. Да, я знаю, что этот вопрос относительно старый, но полный ответ помог бы мне, если бы я нашел его сегодня, поэтому поместите его здесь для будущих заглядываний).
Этот фрагмент должен быть комментарием к поправке, но я пока не могу комментировать (мало репутации):
Во-первых, я думаю, что в примере с Sushi master и head.Tip — это неправильные вещи. Пока исключает фиксацию из результатов и исключает ее предков. Поэтому, если вы поместите туда head.Tip, это практически исключит все дерево истории.
Итак, AFAIK, это должно читаться примерно так:
// git log HEAD..master --reverse
public ICommitLog StalkerList {
get {
var filter = new CommitFilter {
SortBy = CommitSortStrategies.Reverse | CommitSortStrategies.Time,
Since = head.Tip,
Until = master
};
return repo.Commits.QueryBy (filter);
}
}
Также СУПЕР важно понимать, что порядок, который вы им отдаете, имеет значение. Если вы просто поменяете их местами, вы ничего не получите взамен.
(Также обратите внимание, что в исходном примере Sushi после «head.Tip» был неправильный «,».
Это обновление:
Также стоит отметить, что недавно была обновлена библиотека libgit2sharp. Замена «с» и «до» на «IncludeReachableFrom» и «ExcludeReachableFrom» соответственно.
Имена не особенно полезны, пока вы не поймете, что они просто более подробно рассказывают о том, что они делают.
Комментарий к Exclude, например, гласит:
/// A pointer to a commit object or a list of pointers which will be excluded (along with ancestors) from the enumeration.
Таким образом, последняя реализация будет выглядеть примерно так:
using (Repository r = new Repository(@"[repo_location]"))
{
CommitFilter cf = new CommitFilter
{
SortBy = CommitSortStrategies.Reverse | CommitSortStrategies.Time,
ExcludeReachableFrom = r.Branches["master"].Tip,
IncludeReachableFrom = r.Head.Tip
};
var results = r.Commits.QueryBy(cf);
foreach (var result in results)
{
//Process commits here.
}
}
Протестировал это в LINQPad, и, похоже, это работает. Хотя, возможно, что-то упустил, так как это был быстрый набросок. Если это так, дайте мне знать.
Что следует отметить: master и Head на самом деле являются свойствами репозитория, я не мог видеть, что это происходит откуда-либо в старом примере, но это может быть просто разница в версии со старой версией.
person
Nick Stafford
schedule
20.10.2017