tl; dr:libgit2-newbie 对编码提交中的索引感到困惑,最终决定忽略索引并仅更新提交树。如果这是错误的,请告知。
这是一个关于 git 内部的(libgit2-newbie)问题,使用 libgit2。我正在尝试编写一些代码来暂存文件并提交它,以便我可以推送它。为简单起见,假设我刚刚克隆了存储库,并且存储库中有几个文件。所以磁盘上的索引是空的。然后我将索引读入我的程序,将我的新文件添加到索引中并使用索引提交更改(以之前的提交作为父项)。这意味着我传递给提交的树中只有一个文件。但是,这会导致我的所有其他文件都被删除。
我究竟做错了什么?
我传递给提交的树应该包含所有文件(包括现有文件)还是只包含新文件?如果所有文件,我从哪里得到列表?我查看了https://libgit2.org/docs/guides/101-samples/#commits中的示例,但这并不能回答我的问题。
我的代码是用 Rust 编写的,所以除非有人需要,否则我不会详细说明。
编辑:好的,我进一步查看了文档。在这个练习中我应该忽略这个索引吗?使用的解决方案git_treebuilder_new()
(或者更确切地说repo.treebuilder(Some(old_tree))
,对我来说),使用树构建器添加我的新文件,构建新树,并使用新树提交?...这似乎工作