- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我关注了libgit2-backend为 libgit2 ODB 后端创建 mysql 后端的项目。
创建 blob 对象并将其放入 mysql 支持的 ODB 中相当容易,我正在使用 git_blob_create_frombuffer
但是当涉及到像树这样的其他 ODB 对象时,就很难了。
据我从 libgit2 文档 101 示例和 API 引用中了解到,您可以使用 treebuilder 或 index 编写树,但这两种方法都需要路径。由于存储库是使用 git_repository_wrap_odb 创建的假存储库
我试过使用像“README.md”这样的相对路径来构建树或索引,然后使用 git_treebuilder_write 或 git_index_write_tree_to,但都在路径验证时失败。
我想知道将树对象写入 mysql odb 后端的选项。
提前致谢!
示例代码:
git_odb_backend_mysql(odb_backend,"localhost", "git2", "git2", "git2", 0, NULL, 0);
git_odb_new(&odb_backend->odb);
git_repository_wrap_odb(&repo, odb_backend->odb);
git_odb_add_backend(odb_backend->odb, odb_backend, 1);
git_blob_create_frombuffer(&oid, repo, str, strlen(str));
git_treebuilder_new(&bld, repo, NULL);
git_treebuilder_insert(NULL, bld, "README.md", &oid, 0100644);
git_treebuilder_write(&treeoid, repo, bld);
这是在 windows 7 32 位、visual studio 2013 express for desktop edition 上测试的
Libgit2 版本:0.22.1
我将我的测试代码放入 libgit2_clar
str被写入mysql:
select lower(hex(oid)),type, size, convert(uncompress(data) using utf8)
from git2_odb;
oid type size data
5dd01c177f5d7d1be5346a5bc18a569a7410c2ef 3 13 Hello, world!
调用 git_treebuilder_insert 时出现错误
错误信息:libgit2_clar.exe 中 0x013A56A1 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。
Visual Studio 调试在 libgit2/src/win32/path_w32.c,第 196 行停止
if (path__is_absolute(src)) {
最佳答案
由于您遇到段错误/AV,这是 libgit2 中某处的错误。这最有可能来自于路径验证,以确保没有插入危险或无效的路径。此 NULL
值的可能来源是存储库的路径,因为它被用作确定最终路径是否会尝试写入任何检查它的 gitdir 的方法。
您使用的构造函数仅用于读取数据数据库,而 AFAIK 从未作为一种写入方式进行过测试。我建议使用打开一个存储库然后使用 git_repository_set_odb()
设置 odb 如果你确实想使用存储库接口(interface)来做某事。
关于mysql - libgit2 - 将树对象写入 mysql odb 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28978460/
我需要遍历存储库的提交并为每次提交获取受影响的文件。这是我目前巨大的性能瓶颈。 我有一个 libgit 函数的 C++ 包装器,但这段代码应该足够容易理解。 std::vector Commit::g
我正在使用 libgit2(在 C++ 中)创建一个 git 存储库和一个提交。它工作正常,但是, checkout 会破坏所有本地文件。 但是它们似乎仍然存在于 repo 中。这就是我尝试查看存储库
我是一名优秀的程序员,十分优秀!