Skip to content

大仓库的浅克隆 / ref 过滤镜像(depth、ref glob) #14

Description

@yangflow

问题

有些仓库(monorepo、游戏资产库、ML 模型库)完整历史达数 GB,镜像全量历史既占磁盘也拖慢首次同步。用户可能只关心最近 N 个提交,或只关心 main 分支 + 语义化 tag,却没有开关控制。

建议改动

  • RepoConfig 增加字段:
    • depth: Int?(nil = 全量,>0 = 浅克隆深度)
    • refSpecs: [String](默认 ["+refs/heads/*:refs/heads/*", "+refs/tags/*:refs/tags/*"],用户可自定义如 ["+refs/heads/main:refs/heads/main", "+refs/tags/v*:refs/tags/v*"])
  • 同步逻辑用 git fetch --depth=N 与自定义 refspec
  • UI 在 AddEditRepoSheet 的"高级选项"折叠区暴露这两项
  • 警告:浅克隆不支持完整 git push --mirror; 此模式下退化为"sync only selected refs",并明确标注不是完整备份

备选方案

  • 始终全量:当前行为,对大仓库不友好
  • 第一次全量之后增量:git 默认就是增量,不能解决"首次就太大"

作用域检查

  • 与 GitRelay 的单向镜像模型兼容(只是 fetch/push 的 ref 子集)
  • 不需要在 Keychain 以外存储凭证
  • 不引入新运行时依赖

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions