Skip to content

[r2cn] 重构 mega 和 libra 的 diff 模块,将其迁移到 git-internal 模块,并支文件行级别的 diff #20

@benjamin-747

Description

@benjamin-747

[任务] 重构 mega 和 libra 的 diff 模块,将其迁移到 git-internal 模块,并支文件行级别的 diff

[任务分值] 60 分

[背景描述]

当前的 diff 模块(文件差异比较)位于 mega 项目中,用于在浏览器或 API 层展示文件修改内容。
该模块主要职责包括:
• 对两个 commit 或 tree 对象进行差异比较;
• 计算新增、修改、删除文件;
• 供前端或 Web UI 显示。

但现状存在以下问题:

  1. 职责分散:diff 逻辑混杂在 mega 模块中,无法在其他项目(如 git-internal、libra)中复用;
  2. 功能不完整:当前 diff 仅支持粗粒度(按文件层级或 blob-level)比较,无法展示文本的行级差异;
  3. 性能与可维护性较差:diff 逻辑较为老旧,缺乏流式计算与缓存优化,代码耦合较高;
  4. 多模块复用需求:后续 git-internal 模块将承担 Git 仓库的核心逻辑(对象存取、diff、commit、tree、packfile),因此需要将 diff 模块迁移并重构。

[需求描述]
将当前 mega 项目中的 diff 模块迁移至 git-internal 项目;
在迁移过程中对 diff 功能进行重构,使其:

  1. 支持 文本行级别 diff(line-based diff);
  2. 保持 性能可接受(O(n) 或 O(n log n));
  3. 支持 二进制文件检测与跳过;
  4. 提供统一的 API 接口供上层(mega、libra)调用;
  5. 保证与现有 diff 展示逻辑兼容(接口保持稳定);
  6. 验收标准(Acceptance Criteria):
  • 迁移完成:mega 内部不再依赖旧 diff 模块 新 diff 模块独立可用 可在 git-internal 中单独测试
  • 行级 diff 输出正确: 与 git diff 行为一致(允许少量差异)
  • 支持二进制文件检测:正确输出 “Binary files differ”
  • 兼容原有接口:不影响 mega 上层调用逻辑
  • 性能测试:10MB 文本文件 diff 时间 < 1 秒

[代码标准]

  1. 所有 PR 提交必须签署 Signed-off-by 和 使用 GPG 签名,即提交代码时(使用 git commit 命令时)至少使用 -s -S 两个参数,参考 Contributing Guide
  2. 所有 PR 提交必须通过 GitHub Actions 自动化测试,提交 PR 后请关注 GitHub Actions 结果;
  3. 代码注释均需要使用英文;

[PR 提交地址] 提交到 git-internal 仓库的 main 分支 src 目录;

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;

[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-mega 频道和导师交流。

  1. Quanyi Ma genedna@qq.com
  2. Tianxing Ye yetianxing2014@gmail.com

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions