mise bootstrap repos status 命令完全指南Git 仓库托管状态检查【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/misemise bootstrap repos status是 mise 中用于查看[bootstrap.repos]声明的 Git 仓库当前状态的核心只读命令它是mise bootstrap引导流程中仓库检查环节的抓手。读完本文你将掌握该命令的全部参数用法、五种仓库状态的判定语义、JSON 机器可读输出结构以及它与apply、update、exec三个子命令的分工并能在 CI 脚本中用--missing实现可验证的收敛检查。命令概览与定位mise bootstrap repos status用于展示[bootstrap.repos]中配置的 Git 仓库的当前状态。其完整用法如下Usage:mise bootstrap repos status [-J --json] [--missing]Effect:read-only只读不会修改任何仓库内容Source code:src/cli/bootstrap.rs它属于mise bootstrap repos子命令族与apply克隆或收敛、update拉取刷新、exec在仓库中执行命令并列详情见 docs/cli/bootstrap/repos.md。全局 flags 与参数语法见 docs/cli/。Flags 详解Flag说明-J --json以 JSON 格式输出供脚本与工具消费--missing只要有任何配置的仓库未处于期望状态即以退出码 1 结束-h --help打印帮助信息其中--missing是面向自动化场景的关键开关它把状态检查直接变成收敛断言适合在 CI、pre-commit 或引导脚本末尾使用。前置知识[bootstrap.repos]配置status命令检查的对象来自mise.toml中的[bootstrap.repos]表每个键是目标路径url必填ref可选可以是分支、标签或完整 commit SHA[bootstrap.repos] ~/src/dotfiles { url gitgithub.com:jdx/dotfiles.git, ref main } ~/src/mise { url https://github.com/jdx/mise.git }目标路径可以是绝对路径、以~/开头、或相对路径。相对路径相对于声明它的配置文件的项目根解析且必须是根目录内的目录名——不能为空、不能是.、不能包含..或绝对路径段因此相对路径只在项目配置中合法全局配置如~/.config/mise/config.toml中不能使用。详见 docs/bootstrap/repos.md。在完整mise bootstrap流程中repos 在[bootstrap.packages]之后、[dotfiles]之前执行因此引导配置可以先装 git → 克隆 dotfiles 仓库 → 再从该检出应用 dotfiles。五种仓库状态语义status的输出核心是每个仓库的状态。从源码看状态枚举定义在 src/system/repos.rs共五种State含义判定依据源码行为current仓库存在origin 匹配且 ref 匹配干净工作树 origin 匹配 无 ref 或 ref 已收敛missing目标路径不存在或为空目录路径不存在、或路径是空目录src/system/repos.rsdiffers仓库干净但不在配置的 ref 上配置了 ref 且当前分支/SHA 与目标不一致dirty仓库有本地改动或未跟踪文件git status --porcelainv1输出非空conflict目标路径不是期望的 Git 仓库路径不是目录、不是 Git 仓库、或 origin 与配置 URL 不匹配判定顺序值得注意status_one先检查路径存在性与目录类型再判断是否 Git 仓库然后比较 origin最后才检查工作树是否干净与 ref 是否收敛。也就是说origin 不匹配会优先于 dirty 判定一个改了代码但 origin 换过的仓库会被报告为conflict而非dirty。origin 匹配的传输无关比较mise 对常见网络 URL 做传输无关的身份比较githost:path、ssh://githost/path、https://host/path三种形式视为同一仓库。其余情况要求精确匹配http://和git://不安全的传输永远不会被静默当作 https 配置、没有用户的 ssh origingit 会解析为登录用户而非git、带 query string 的 URL、本地路径与file://URL。不同 host、ssh 别名、显式端口、路径或非git的 ssh 用户都会导致冲突。实现见 src/system/repos.rs。使用示例mise bootstrap repos status # 表格形式展示所有仓库状态 mise bootstrap repos status --json # JSON 输出供脚本解析 mise bootstrap repos status --missing # 任一仓库未收敛时以退出码 1 结束未配置任何[bootstrap.repos]时表格模式会输出nothing configured in [bootstrap.repos]的提示信息。表格输出默认表格包含Path、URL、Ref、State、Reason五列见 src/cli/bootstrap.rs。Reason列用于补充说明conflict会给出具体原因例如origin does not match configured url、path exists and is not a git repositorydirty显示local changes其余状态为空字符串。JSON 输出--json输出顶层为{repos: [...]}每个条目包含以下字段见 src/cli/bootstrap.rs{ repos: [ { path: /home/user/src/dotfiles, path_raw: ~/src/dotfiles, url: gitgithub.com:jdx/dotfiles.git, ref: main, origin: gitgithub.com:jdx/dotfiles.git, current_ref: main, current_sha: a1b2c3..., state: current, reason: } ] }字段说明字段含义path展开后的绝对目标路径path_raw配置中声明的原始路径url配置的克隆 URLref配置的目标 ref无则为 nullorigin仓库实际的remote.origin.url缺失则为 nullcurrent_ref当前检出的分支名detached HEAD 时为HEADcurrent_sha当前 HEAD 的完整 SHAstate状态名current/missing/differs/dirty/conflictreason状态补充说明正常为空字符串与表格模式不同JSON 模式对未配置仓库也会输出{repos: []}空数组。--missing的退出码行为--missing的实现逻辑是遍历所有状态只要存在非current的仓库即认为有缺失最后通过request_exit(1)以退出码 1 结束见 src/cli/bootstrap.rs 与 src/cli/bootstrap.rs。注意这里的缺失是广义的——differs、dirty、conflict都会触发退出码 1不只是missing状态。这让它可以直接作为引导收敛断言使用mise bootstrap repos status --missing echo all repos converged只读保证与安全语义status命令被标记为 read-only这一点与 repos 模块的整体设计一致见 src/system/repos.rs无隐式写入仓库只会在显式的apply、update、exec或顶层mise bootstrap中被修改status只做检测状态计算本身status_one只运行git rev-parse、git config --get、git status --porcelainv1等只读命令并通过-c safe.directorypath与-c core.autocrlffalse保证在不同所有权与换行符环境下的一致判定src/system/repos.rs并发检测多个仓库的状态检测通过parallelspawn_blocking并行执行src/system/repos.rs仓库较多时也能快速出结果。与 apply / update / exec 的分工status回答现在处于什么状态其余子命令回答如何改变状态子命令行为文档status只读展示状态本文apply克隆缺失仓库、将 differs 仓库收敛到配置 ref无 ref 时不拉取docs/cli/bootstrap/repos/apply.mdupdate克隆缺失仓库、对无 ref 的仓库 fetch fast-forward 当前分支docs/cli/bootstrap/repos/update.mdexec在每个可用仓库中执行命令不做 shell 插值支持--continue-on-errordocs/cli/bootstrap/repos/exec.md实操中常见的组合是先用status观察再apply收敛需要主动拉取最新时用update批量在多个检出中跑git status、git pull时用exec。所有命令的语义与安全更新原则详见 docs/bootstrap/repos.mdChoose apply or update 与 Semantics 小节。常见疑问与边界ref省略时的current判定已存在的仓库只要 origin 匹配即视为currentmise 不会 fetch 或更新它只有update会主动拉取src/system/repos.rs 与update_statuses分支。detached HEAD无ref的仓库若处于 detached HEADupdate会警告并跳过src/system/repos.rs而status中表现为current_ref为HEAD。路径过滤update/exec支持传入一个或多个路径参数进行过滤匹配配置中的原始路径或其展开形式未匹配任何仓库时会报错src/cli/bootstrap.rsstatus本身不支持路径过滤始终检查全部配置。前置条件git 必须已安装且能对每个配置的 origin 完成认证对dirty/conflict仓库mise 的策略是失败而非覆盖本地工作需要--skip-dirty时由apply/update提供status只负责如实报告。小结mise bootstrap repos status是一个轻量、只读、可脚本化的仓库状态观察命令五种状态覆盖了从未克隆到origin 不符的全部异常面--json提供结构化数据--missing提供退出码断言使其既能人肉巡检也能接入 CI 收敛检查。结合 docs/bootstrap/repos.md 的语义说明与 src/system/repos.rs 的源码实现你可以精确理解每个状态背后的判定逻辑从而安全地设计自己的引导流程。【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/mise创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考