проверка libgit2 не обновляет голову

У меня есть репозиторий git с двумя ветками, master и foo. Коммит ветки master содержит 3 файла (1.txt, 2.txt, 3.txt), коммит ветки foo удалил файл 3.txt.

Я вызываю git_checkout_tree с идентификатором коммита, на который указывает ветка foo, и файл 3.txt действительно удаляется. Однако заголовок не указывает на foo, он по-прежнему указывает на master, а в статусе git указано «D 3.txt».

Что мне не хватает? Как мне обновить голову, чтобы она указывала на foo? Я предполагаю, что это как-то связано с эталонным API libgit2.

Спасибо


person Michael Chourdakis    schedule 30.12.2014    source источник


Ответы (1)


Функции извлечения предназначены для извлечения файлов в рабочее дерево, как указано в описании функции.

Обновляет файлы в индексе и рабочем дереве, чтобы они соответствовали содержимому дерева, на которое указывает древовидный.

Семейство функций checkout не имеет ничего общего с режимом переключения ветвей команды checkout git. Чтобы изменить активную ветку, вам нужно сделать так, чтобы HEAD указывал на эту ветку, либо с помощью общих функций git_reference_*, либо вспомогательной вспомогательной функции git_repository_set_head().

person Carlos Martín Nieto    schedule 15.01.2015