带有加载的存储库对象的 libgit2 对工作树的外部更改有多宽容?
How tolerant against external changes to a working tree is libgit2 with a loaded repository object?
假设您有一个很长的 运行 进程,它在程序启动时实例化一个 git_repository*
对象。不时查询提交(git_commit_lookup
)、检查存储库状态(git_repository_head_unborn
)、解析和列出引用(git_revparse_single
、git_reference_lookup
、git_branch_iterator_new
, ...).
然而,独立于这个过程,还有其他过程(例如,vanilla git)在处理和更改该工作树(例如,提交、拉取、推送、变基、创建分支......) .
- 我是否必须期待基于例如过时的缓存数据(例如索引结构或 odb 文件)或内存映射文件?
- 我是否需要担心收到过时的数据?
- 我是否需要担心,因为 libgit2 开始为缓存分配越来越多的内存?
- 或者我是否必须
git_repository_free
并定期获取 "fresh" git_repository*
指针?
我使用 Visual Studio 2013 (Update4),当我在工作树上工作时,它会不时地在 git2-...dll
中崩溃...所以我想知道 libgit2一般是为这种场景设计的。
我自己的应用程序的第一次测试表明没有发生崩溃,但这当然取决于我的具体测试...
预计 libgit2 的实例将与其他 git 客户端(git.git、libgit2、jgit等)。
Do I have to expect crashes based on e.g. outdated cached data (such as index structures or odb files) or mem-mapped files?
你不应该,不。我们将索引读入内存并对其进行操作。如果在下面进行了更改,您可能会看到 过时的 信息,但您不应该 崩溃 。如果你这样做,那将是一个错误。
Do I have to worry that I receive outdated data?
你需要用一个实际场景来说明这一点。例如:对于索引,如果你用 git_index_load
加载它,这会将索引读入内存。然后你可以对其进行操作。如果其他人更新了索引,那么你的数据确实已经过时了。
如果您期待大量并发,您可能希望重新加载东西。例如,如果索引自上次加载后发生变化,您可以调用 git_index_load
重新加载索引。
Do I have to worry because libgit2 starts allocating more and more memory for caching?
缓存配置为libgit2 option。它的默认值比较适中,但是缓存的大小是有限制的。
Or do I have to git_repository_free and get a "fresh" git_repository* pointer regularly?
我不认为这会有什么好处。
假设您有一个很长的 运行 进程,它在程序启动时实例化一个 git_repository*
对象。不时查询提交(git_commit_lookup
)、检查存储库状态(git_repository_head_unborn
)、解析和列出引用(git_revparse_single
、git_reference_lookup
、git_branch_iterator_new
, ...).
然而,独立于这个过程,还有其他过程(例如,vanilla git)在处理和更改该工作树(例如,提交、拉取、推送、变基、创建分支......) .
- 我是否必须期待基于例如过时的缓存数据(例如索引结构或 odb 文件)或内存映射文件?
- 我是否需要担心收到过时的数据?
- 我是否需要担心,因为 libgit2 开始为缓存分配越来越多的内存?
- 或者我是否必须
git_repository_free
并定期获取 "fresh"git_repository*
指针?
我使用 Visual Studio 2013 (Update4),当我在工作树上工作时,它会不时地在 git2-...dll
中崩溃...所以我想知道 libgit2一般是为这种场景设计的。
我自己的应用程序的第一次测试表明没有发生崩溃,但这当然取决于我的具体测试...
预计 libgit2 的实例将与其他 git 客户端(git.git、libgit2、jgit等)。
Do I have to expect crashes based on e.g. outdated cached data (such as index structures or odb files) or mem-mapped files?
你不应该,不。我们将索引读入内存并对其进行操作。如果在下面进行了更改,您可能会看到 过时的 信息,但您不应该 崩溃 。如果你这样做,那将是一个错误。
Do I have to worry that I receive outdated data?
你需要用一个实际场景来说明这一点。例如:对于索引,如果你用 git_index_load
加载它,这会将索引读入内存。然后你可以对其进行操作。如果其他人更新了索引,那么你的数据确实已经过时了。
如果您期待大量并发,您可能希望重新加载东西。例如,如果索引自上次加载后发生变化,您可以调用 git_index_load
重新加载索引。
Do I have to worry because libgit2 starts allocating more and more memory for caching?
缓存配置为libgit2 option。它的默认值比较适中,但是缓存的大小是有限制的。
Or do I have to git_repository_free and get a "fresh" git_repository* pointer regularly?
我不认为这会有什么好处。