c/c++语言开发共享使用libgit2的“git log -1 fullpath / myfile”

我想用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

      (0)
      上一篇 2020年12月4日
      下一篇 2020年12月4日

      精彩推荐