我想用libgit2实现git log -1 fullpath/myfile
。 我是libgit2的新手。 我是在正确的轨道上吗? 这是我到目前为止:
git_repository_head(&refToHead, repo); headOID = git_reference_oid(refToHead); git_commit_lookup(&headCommit, repo, headOID); headTreeOID = git_commit_tree_oid(headCommit); git_tree_lookup(&tree, repo, headTreeOID); git_tree_entry_byname(tree, "repopath/myfile");
不幸的是, git_tree_entry_byname
似乎不适用于repo的子目录中的文件。 任何的想法?
谢谢你,拉尔斯
不幸的是,git_tree_entry_byname似乎不适用于repo的子目录中的文件。
git_tree_entry_byname
仅适用于紧接在传递树下的条目(树,blob和受支持的子模块)。
一个简单的解决方案就是依靠git_tree_get_subtree (参见测试 )来检索树中包含的最深子树,给出它的相对路径。 无论条目在树结构中有多深,这都可以工作。
因此,您必须调用git_tree_git_subtree
来检索您所访问的条目的父树,然后调用get_tree_entry_byname
将其传递给父树。
我想用libgit2实现git log -1 fullpath / myfile
如果您愿意检索最后更新文件的哪个提交,您可能需要查看此答案 ,该答案提供了有关文件历史记录主题和警告的一些通用提示。
我找不到任何线索来获得链接答案中的提交。
您必须利用revision walking
API。
基本上,您必须从HEAD
找到与您的filename
匹配的树条目的oid
。 完成此操作后,您必须以递归方式遍历HEAD
提交的父级,并且对于每个提交树,尝试识别以下两个更改之一。
当你检测到一个,或者你没有更多的提交来处理时,立即从循环中退出。
以上就是c/c++开发分享使用libgit2的“git log -1 fullpath / myfile”相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/518796.html