Skip to content

[r2cn-测试任务] 为init命令添加--ref-format <format>参数 #146

@Hzm-1

Description

@Hzm-1

[具体描述]
--ref-format 允许用户在初始化时指定默认引用命名模板(例如用于创建初始 HEAD 指向的引用名称模式或其它初始化时要写入的 refs 名称格式)。
该参数应只影响仓库初始化阶段写入的引用路径/名称格式,不改变 libra 运行时对引用解析的通用规则(兼容现有库内引用结构)。
若传入不合法的格式,应返回友好错误并退出,避免创建不一致仓库状态。

[实现方案]
参数结构:在 init 子命令对应的参数结构(例如 InitArgs)中添加一个 Option 字段 ref-format 用于表示 --ref-format 的值;通过现有的命令行解析库将该选项注册为 --ref-format 。
解析与校验:当 ref-format 被提供时,对格式进行语法校验(例如禁止包含非法路径字符、确保不生成空引用名、按照仓库引用命名规则检验)。校验失败返回错误信息并中止初始化。
初始化流程:在 init 实现中将 ref-format 作为参数传入仓库初始化函数:
普通初始引用(如初始 HEAD、默认分支 refs)的创建使用该模板生成实际引用名称并写入仓库元数据(例如在description、libra.db 或 refs 相关的初始化逻辑点)。
若 --ref-format 未提供,则保持现有默认行为(例如创建 refs/heads/main 或仓库当前约定的默认引用)。
重初始化检测:调整已有的仓库存在 / reinit 判断逻辑(参考 Git 的 is_reinit):通过检测初始化时期常写入的文件(例如 description、libra.db、info/exclude 等)来判断仓库是否已被初始化,避免重复初始化或在已存在仓库上错误应用新的 ref_format(除非显式允许 reinit 并有明确策略)。
兼容性注意:libra 的 .libra 与 .git目录结构不同;此功能应只影响 libra 自己的引用写法与初始化元数据,不做 .libra ↔ .git 转换或其它跨工具兼容操作。

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions