-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
[任务] 重构 mega 和 libra 的 diff 模块,将其迁移到 git-internal 模块,并支文件行级别的 diff
[任务分值] 60 分
[背景描述]
当前的 diff 模块(文件差异比较)位于 mega 项目中,用于在浏览器或 API 层展示文件修改内容。
该模块主要职责包括:
• 对两个 commit 或 tree 对象进行差异比较;
• 计算新增、修改、删除文件;
• 供前端或 Web UI 显示。
但现状存在以下问题:
- 职责分散:diff 逻辑混杂在 mega 模块中,无法在其他项目(如 git-internal、libra)中复用;
- 功能不完整:当前 diff 仅支持粗粒度(按文件层级或 blob-level)比较,无法展示文本的行级差异;
- 性能与可维护性较差:diff 逻辑较为老旧,缺乏流式计算与缓存优化,代码耦合较高;
- 多模块复用需求:后续 git-internal 模块将承担 Git 仓库的核心逻辑(对象存取、diff、commit、tree、packfile),因此需要将 diff 模块迁移并重构。
[需求描述]
将当前 mega 项目中的 diff 模块迁移至 git-internal 项目;
在迁移过程中对 diff 功能进行重构,使其:
- 支持 文本行级别 diff(line-based diff);
- 保持 性能可接受(O(n) 或 O(n log n));
- 支持 二进制文件检测与跳过;
- 提供统一的 API 接口供上层(mega、libra)调用;
- 保证与现有 diff 展示逻辑兼容(接口保持稳定);
- 验收标准(Acceptance Criteria):
- 迁移完成:mega 内部不再依赖旧 diff 模块 新 diff 模块独立可用 可在 git-internal 中单独测试
- 行级 diff 输出正确: 与 git diff 行为一致(允许少量差异)
- 支持二进制文件检测:正确输出 “Binary files differ”
- 兼容原有接口:不影响 mega 上层调用逻辑
- 性能测试:10MB 文本文件 diff 时间 < 1 秒
[代码标准]
- 所有 PR 提交必须签署
Signed-off-by和 使用GPG签名,即提交代码时(使用git commit命令时)至少使用-s -S两个参数,参考 Contributing Guide; - 所有 PR 提交必须通过
GitHub Actions自动化测试,提交 PR 后请关注GitHub Actions结果; - 代码注释均需要使用英文;
[PR 提交地址] 提交到 git-internal 仓库的 main 分支 src 目录;
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-mega 频道和导师交流。
- Quanyi Ma genedna@qq.com
- Tianxing Ye yetianxing2014@gmail.com
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核