tl; dr: libgit2-newbie запутывается в индексах при фиксации кода, в итоге решает проигнорировать индекс и просто обновить дерево фиксации.Пожалуйста, сообщите, если это не так.
Это (libgit2-newbie) вопрос о внутренностях git, использующих libgit2.Я пытаюсь написать некоторый код, чтобы подготовить файл и зафиксировать его, чтобы я мог отправить его.Для простоты предположим, что я только что клонировал хранилище, и в хранилище есть несколько файлов.Таким образом, индекс на диске пуст.Затем я считываю индекс в мою программу, добавляю в него новый файл и фиксирую изменение, используя индекс (с предыдущим коммитом в качестве родителя).Это означает, что в дереве есть только один файл, который я передаю для фиксации.Однако это приводит к удалению всех моих других файлов.
Что я делаю не так?
Должно ли дерево, которое я передаю для фиксации, содержать все файлы (включая существующие) или только новый файл?Если все файлы, откуда мне взять список?Я посмотрел примеры в https://libgit2.org/docs/guides/101-samples/#commits, но это не отвечает на мой вопрос.
Мой код написан на Rust, поэтому я избавлю вас от подробностей, если кто-то этого не захочет.
редактировать: хорошо, я посмотрел немного дальше на документацию.Является ли индекс красной селедкой, которую я должен игнорировать в этом упражнении?Является ли решение использовать git_treebuilder_new()
(или, точнее, repo.treebuilder(Some(old_tree))
, для меня), добавить мой новый файл, используя построитель дерева, построить новое дерево и зафиксировать, используя новое дерево? ..., которое, кажется, работает