2016-01-28 26 views
0

我正在嘗試使用libgit2管理版本庫的索引與它的HEAD樹(通過Objective-Git,但我越來越多地發現自己沿着香草libgit2兔子洞前進),並且想知道git_index_entry上的flags_extended字段的掩碼究竟是什麼struct實際上意味着。此外,這些標誌何時設置?我一直在挖掘libgit2源代碼,但似乎無法找到flags_extended在哪裏發揮作用。在libgit2中,git_index_entry-> flags_extended意味着什麼(以及它們何時設置)?

我之所以問:

我有一個簡單的測試版本庫提交包含一些簡單的測試文件。工作副本有一個跟蹤的文件,其中有一個較小的更改和一個未跟蹤的文件,這兩個文件都已在外部執行(命令行上的git add .)。在我的應用程序中,我需要「取消」這些文件,因此我獲取了它們各自的git_index_entry結構。我期待flags_extended的GIT_IDXENTRY_UPDATED設置爲修改後的文件,GIT_IDXENTRY_ADDED設置爲以前未跟蹤的文件,但實際上兩個flags_extended字段都是空的,這是什麼引發了這個問題(唯一的設置是GIT_IDX_ENTRY_NAMEMASK在flags字段中) 。

我當然可以獲取HEAD樹並將條目與索引中的條目進行比較,但我希望libgit2已經通過flags_extended提供了該信息。

回答

0

我期待flags_extended將GIT_IDXENTRY_UPDATED設置爲修改後的文件,爲以前未跟蹤的文件設置GIT_IDXENTRY_ADDED。

不,這些標誌基本上是libgit2的內部標誌。它們用於在從磁盤加載索引後維護內存中有關索引條目的信息。它們用於防止和/或檢測內部數據競爭,它們是而不是,用於確定存儲庫的狀態。

如果要將HEAD與索引進行比較,請加載HEAD樹,然後使用git_diff_tree_to_index

+0

謝謝!我真的希望這個東西被記錄在某處(儘管文檔註釋中提到這些標誌並沒有保存到磁盤上,它沒有說明它們在哪裏使用)。我會對頭部進行手動比較! –

相關問題