Использование родительских ссылок

Я использую libgit2sharp и хочу получить объект Commit, представляющий что-то вроде HEAD~10. Я пробовал repo.Lookup("HEAD~10"), но это не работает:

LibGit2Sharp.LibGit2Exception: libgit2 вызвала ошибку. Class = GITERR_REFERENCE (-1).
Указанное имя ссылки недопустимо
в LibGit2Sharp.Core.Ensure.Success(результат Int32, логическое значение allowPositiveResult)
в LibGit2Sharp.ReferenceCollection.Resolve[T](String name)
в LibGit2Sharp.Repository.Lookup(String shaOrReferenceName, тип GitObjectType, LookUpOptions lookUpOptions)
в LibGit2Sharp.Repository.Lookup(String shaOrReferenceName, тип GitObjectType)
в libgit_tmp.Program.Main(String[] аргументы)

Я понимаю, что мог бы сделать то же самое с помощью следующего кода, но я бы все же предпочел, чтобы я мог указать ссылку таким образом. Есть ли способ сделать это? Если нет, то это ограничение libgit2sharp или libgit2?

var commit = repo.Head.Tip;
for (int i = 0; i < 10; i++)
    commit = commit.Parents.First();

person svick    schedule 12.06.2012    source источник


Ответы (1)


К сожалению, LibGit2Sharp не может принимать параметры в соответствии со спецификацией rev-parse. синтаксис.

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

Суффикс ~‹n> к параметру ревизии означает, что объект фиксации является предком ‹n>го поколения именованного объекта фиксации, следующим только за первыми родителями.

Однако недавно функция была объединена в ветке разработки. libgit2, который может охватывать необходимость «получения родительских ссылок» и не только.

Хороший API теперь доступен и позволяет получить конкретный объект git из текстовой спецификации revparse. Чтобы быстро ознакомиться с его использованием, доступны тесты здесь.

Привязать этот API и сделать его широко доступным для LibGit2Sharp еще предстоит.

person nulltoken    schedule 12.06.2012