1

我正在尝试使用 libgit2 管理存储库的索引与其 HEAD 树(通过 Objective-Git,但我越来越发现自己正朝着香草 libgit2 兔子洞前进),并且想知道 git_index_entry 结构上的 flags_extended 字段的位掩码到底是什么意思是。此外,这些标志何时设置?我一直在挖掘 libgit2 源代码,但似乎找不到 flags_extended 发挥作用的地方。

我问的原因:

我有一个简单的测试存储库,其中一个提交包含一些简单的测试文件。工作副本有一个带有微小更改的跟踪文件和一个未跟踪文件,这两个文件都已在外部暂存(git add .在命令行上)。在我的应用程序中,我需要“取消暂存”文件,因此我获取了它们各自的 git_index_entry 结构。我期待 flags_extended 为修改后的文件设置 GIT_IDXENTRY_UPDATED 并为以前未跟踪的文件设置 GIT_IDXENTRY_ADDED ,但实际上两个 flags_extended 字段都是空的,这就是提示这个问题的原因(唯一设置的是标志字段中的 GIT_IDX_ENTRY_NAMEMASK ) .

我当然可以获取 HEAD 树并将条目与索引中的条目进行比较,但我希望 libgit2 已经通过 flags_extended 提供了该信息。

4

1 回答 1

1

我期待 flags_extended 为修改后的文件设置 GIT_IDXENTRY_UPDATED ,为先前未跟踪的文件设置 GIT_IDXENTRY_ADDED 。

不,这些标志基本上是 libgit2 内部的。它们用于在从磁盘加载索引后在内存中维护有关索引条目的信息。它们用于防止和/或检测内部数据竞争,而不是用于确定存储库的状态。

如果要将 HEAD 与索引进行比较,请加载 HEAD 树,然后使用git_diff_tree_to_index.

于 2016-01-29T02:40:40.407 回答