本项目是 cnb.cool/cnb/git2go v35(v35.1.2-cnb 版本)的全量 API 接口测试验证项目。
cnb.cool/cnb/git2go/v35 的所有导出 API 进行逐一测试需要 Go 1.18 或更高版本。
本项目需要 libgit2 v1.9 静态库。构建步骤:
# 安装依赖 (macOS)
brew install cmake pkg-config openssl libssh2
# 克隆 git2go 源码并构建静态库
git clone https://cnb.cool/cnb/git2go.git /tmp/git2go-build
cd /tmp/git2go-build
git checkout v35.1.2-cnb
git submodule update --init
make install-static
# 下载 Go 依赖
make deps
# 运行所有测试(静态链接,推荐)
make test-static
# 详细输出
make test-static-verbose
# 运行指定测试
make test-run RUN=TestBlobCreateFromBuffer
# 生成覆盖率报告
make test-coverage
| 测试文件 | 模块 | 说明 |
|---|---|---|
testutil_test.go | 辅助工具 | 测试仓库创建、公共断言函数 |
settings_test.go | 全局设置 | SearchPath、MwindowSize、Caching 等 |
repository_test.go | 仓库操作 | Init、Open、Clone、属性查询 |
blob_test.go | Blob 对象 | 创建、读取、二进制检测 |
commit_test.go | Commit 对象 | 创建、修改、签名、属性 |
tree_test.go | Tree 对象 | 遍历、TreeBuilder |
tag_test.go | Tag 对象 | 创建、列表、遍历 |
branch_test.go | 分支操作 | 创建、迭代、上游设置 |
reference_test.go | 引用操作 | CRUD、迭代、解析 |
config_test.go | 配置操作 | 读写、迭代 |
index_test.go | 索引操作 | 添加、冲突、读写树 |
diff_test.go | 差异操作 | TreeToTree、ForEach、Stats |
apply_test.go | 应用操作 | ApplyDiff、ApplyToTree |
blame_test.go | Blame 操作 | 文件追溯 |
merge_test.go | 合并操作 | Merge、MergeBase、MergeCommits |
rebase_test.go | 变基操作 | InitRebase、Next、Commit |
remote_test.go | 远程操作 | 创建、查找、Refspec |
checkout_test.go | 检出操作 | Head、Index、Tree 检出 |
cherrypick_test.go | 挑选操作 | Cherrypick、CherrypickCommit |
revert_test.go | 回退操作 | Revert、RevertCommit |
reset_test.go | 重置操作 | Soft/Mixed/Hard Reset |
stash_test.go | 暂存操作 | Save、Apply、Pop、Drop |
note_test.go | 注释操作 | Create、Read、Remove |
odb_test.go | 对象数据库 | Read、Write、Stream |
mempack_test.go | 内存包 | Dump、ObjectCount |
packbuilder_test.go | 包构建 | Insert、Write |
indexer_test.go | 索引器 | Write、Commit |
walk_test.go | RevWalk 遍历 | Push、Hide、Sorting |
revparse_test.go | 版本解析 | Single、Ext、Full |
object_test.go | Object 操作 | Lookup、Peel、类型转换 |
oid_test.go | Oid 操作 | 创建、比较、字符串化 |
signature_test.go | 签名操作 | DefaultSignature、Offset |
describe_test.go | 描述操作 | Describe、Format |
status_test.go | 状态查询 | StatusFile、StatusList |
submodule_test.go | 子模块操作 | Add、Lookup、Update |
ignore_test.go | 忽略规则 | AddRules、IsPathIgnored |
refspec_test.go | Refspec 解析 | Src、Dst、Transform |
credential_test.go | 凭证操作 | 各类凭证创建 |
features_test.go | 特性检查 | Features 位标志 |
message_test.go | 消息操作 | MessageTrailers |
graph_test.go | 图操作 | AheadBehind、DescendantOf |
deprecated_test.go | 已弃用接口 | 向后兼容性验证 |
transport_test.go | 传输层 | Transport 注册 |
patch_test.go | 补丁操作 | PatchFromBuffers |
测试使用两种类型的 Git 仓库:
createTestRepo):包含工作目录,用于测试工作区操作(checkout、status、stash 等)createBareTestRepo):无工作目录,用于测试纯 Git 对象操作(odb、packbuilder 等)所有测试仓库在运行时自动生成到临时目录,测试结束后自动清理。
详见 API_COVERAGE.md 文档,记录了每个导出 API 的测试状态。
当前统计:227 PASS, 12 SKIP, 0 FAIL
影响范围: 所有涉及 xdiff 的 API(12 个测试被 Skip)
现象: git_patch_from_diff、git_diff_get_stats、git_diff_foreach、git_diff_to_buf、
git_patch_from_buffers、git_blame_file 在 macOS ARM64 上触发 SIGBUS (PC=0x12)。
排查结论:
git_patch_generated_from_diff → patch_generated_create → output->diff_cb(output, patch) 调用 xdiff 时NumDeltas()、Delta()、FindSimilar(nil) 等不涉及 xdiff 的 API 正常工作受影响的测试: TestDiffStats, TestDiffForEach, TestDiffPatch, TestDiffToBuf, TestDiffBlobs, TestApplyDiff, TestApplyToTree, TestBlameFile, TestBlameHunkByLine, TestBlameMultipleCommits, TestPatchFromDiff, TestPatchFromBuffers
建议: 等待 libgit2 上游修复 xdiff 在 ARM64 上的兼容性问题后,取消这些测试的 Skip 即可运行。
cnb.cool/cnb/git2go/v35 v35.1.2-cnbtesting 包-tags static(静态链接 libgit2)MIT License