Проверка Git с помощью libgit2

Этот вопрос является развитием или решением моего предыдущего вопроса: Клонировать репозиторий git (углубленно) Я думаю, что лучше всего в этой ситуации создать новый вопрос, но я могу ошибаться.

Это просто: как мне сделать что-то эквивалентное git checkout master с libgit2

Кажется, год назад это было невозможно: https://github.com/libgit2/libgit2/issues/247 По этому клон был возможен как минимум 5 месяцев назад. Но я никогда не видел никакого кода, документация или примеры о том, как это сделать. (Редактировать) Я имею в виду, что я не видел ничего о полном клоне с включенным git checkout, ни кода/документов о проверке.


person Johannes Lund    schedule 30.05.2012    source источник


Ответы (2)


По этому клон был возможен минимум 5 месяцев назад. Но я никогда не видел никакого кода, документации или примеров того, как это сделать.

Операция клонирование в основном состоит из четырех шагов:

  • Инициализировать новый репозиторий
  • Добавить удаленный с fetch refspec
  • Получите пакетный файл с удаленного компьютера и обновите локальные ссылки.
  • Обновите содержимое рабочего каталога из дерева коммитов HEAD.

Текущая версия libgit2 (v0.17.0) позволяет выполнить три первых шага.

Исходный код содержит несколько примеров. Существует "fetch.c"< /strong> тоже один.

как мне сделать что-то эквивалентное git checkout master с libgit2

Checkout еще не реализован. Тем не менее, следующее должно помочь вам двигаться вперед.

  • git_reference_name_to_oid() для получения oid ветки master
  • git_commit_lookup() для получения коммита из oid
  • git_commit_tree() для получения дерева фиксации
  • git_iterator_for_tree() для рекурсивного просмотра всех листьев дерева (и его поддеревьев)

Обновлять

Функция клонирования только что была объединена с репозиторием libgit2.

В рамках запроса на включение автор также позаботился о том, чтобы предоставить пользователям реализацию проверки.

person nulltoken    schedule 30.05.2012
comment
git_reference_name_to_oid() вместо get_re...? - person Johannes Lund; 02.06.2012

Вы можете создать символ HEAD, а затем перейти к голове, например

git_reference_create_symbolic(&head, repo, GIT_HEAD_FILE, branchname, 1);
git_checkout_head(repo, opts, stat);
person Zhengming Ying    schedule 26.11.2012