mise bootstrap dotfiles origin 完全指南连接与断开个人配置仓库Setup Repository【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/misemise bootstrap dotfiles origin是 mise 的 dotfiles 历史同步体系与远端仓库之间的接线命令它把一个普通的 Git 仓库推荐私有仓库连接为本机的配置仓库 origin使所有已提交的检查点具备双向同步资格也负责在不需要时干净地断开连接。读完本文你将掌握origin set的完整参数语义、三种同步模式sync/fetch-only/manual的取舍、连接/断开/查询三种操作的准确用法以及命令背后的源码级校验与状态写入机制从而安全地把多台机器上的配置文件历史串联起来。命令总览连接或断开配置仓库origin是mise bootstrap dotfiles家族中的一个管理子命令其定义与完整帮助文本由 usage 规范自动生成源码位于 src/cli/dotfiles/origin.rs。用法mise bootstrap dotfiles origin [--remove] [SUBCOMMAND]效果破坏性destructive——可能删除或不可逆地覆盖数据使用--remove时需谨慎子命令唯一的子命令是mise bootstrap dotfiles origin set [FLAGS] URL用于连接配置仓库命令本身不带子命令用于查询当前连接状态加--remove则用于断开连接。对应到源码DotfilesOrigin::run依据是否存在子命令做三分支处理src/cli/dotfiles/origin.rs有set子命令 → 执行连接流程无子命令但带--remove→ 调用origin::remove()断开无子命令且无--remove→ 打印当前连接信息已连接时输出URL (branch) declared in 配置文件路径; mode 模式未连接时提示no setup repository is connected。为什么需要 origin在未连接 origin 时mise bootstrap dotfiles的检查点历史只保存在本机的 Git 仓库里见 docs/dotfiles.md 中 Share with another machine 一节。只有当你配置一个远端仓库origin并开启自动同步后本机保存的编辑才能推送出去其他机器上的编辑才能流回来实现笔记本与台式机之间的双向共享。origin 就是这个共享通道的锚点。使用前提history 必须开启连接 origin 之前需要先确认 history 功能处于启用状态。在 DotfilesOriginSet::run 中mise 首先检查配置项if !crate::config::Settings::get().history.enabled { bail!(history is disabled (history.enabled false)); }即当history.enabled false时origin set会直接报错退出这是连接操作的第一道前置校验。此外连接还需要本机具备 Git源码中store.repo()取不到仓库时会报connecting a setup repository requires git见 src/system/history/sync/origin.rs。连接配置仓库origin setmise bootstrap dotfiles origin set是唯一的连接入口完整参数定义见 src/cli/dotfiles/origin.rs 与 docs/cli/bootstrap/dotfiles/origin/set.md。用法mise bootstrap dotfiles origin set [FLAGS] URL效果修改状态modifies state位置参数URL配置仓库的地址可以是任意 Git URL。官方文档特别建议使用私有仓库因为同步会把更早的检查点也一并发送All committed history becomes eligible for synchronization包括连接之前的中期提交临时编辑可能因此进入共享历史见 docs/dotfiles.md。源码在连接前会执行network::validate_url(opts.url)校验 URL 合法性src/system/history/sync/origin.rs空 URL 会被拒绝。标志Flags标志说明默认值--branch BRANCH指定配置分支setup branchmain--sync MODE仓库使用方式sync、fetch-only或manual省略时交互提示配合--yes时接受已配置模式默认sync提示默认sync-y --yes跳过确认提示等价于设置MISE_YES或全局yes配置—-h --help打印帮助—--sync的决策逻辑--sync模式的选择不是简单的参数读取源码中有一套完整的决策链src/cli/dotfiles/origin.rs显式传入--sync mode直接解析非法值报错unknown history.sync mode ...; use sync, fetch-only, or manual解析逻辑见 src/system/history/sync/mod.rs未传入但带了--yes或全局yes配置为真直接采用当前settings.history.sync配置的模式默认sync不再询问交互终端下省略弹出确认提示 Automatically publish saved edits AND apply incoming changes to live files? Choose no for manual sharing; local autosave continues in either mode.——回答 Yes 选择Sync回答 No 选择Manual非交互环境无 TTY且无--yes提示不可用直接失败并提示not connected: choose --sync manual, --sync sync, or --sync fetch-only to connect without a mode prompt。选择--sync manual的含义是保留自动的本地历史记录watcher 继续在本地 Git 中保存检查点但不进行任何自动网络活动不自动推送、不自动拉取同步完全由你手动触发。三种同步模式详解同步模式对应配置项settings.history.sync由SyncMode枚举实现src/system/history/sync/mod.rs。每种模式定义了 watcher 在后台做什么、不做什么其自动行为矩阵由Automatic结构体给出src/system/history/sync/mod.rs模式自动发布publish自动获取fetch自动应用apply适用场景sync✅✅✅多台机器双向自动共享日常首选fetch-only❌✅❌只想接收远端历史绝不让本机内容上网manual❌❌❌完全手动控制网络行为本地自动保存照常官方对各模式的完整披露说明连接时会打印给用户见SyncMode::disclosuresrc/system/history/sync/mod.rssyncwatcher 在保存后发布提交并周期性获取。任何冲突都会暂停整个配置的发布与传入应用本地提交与获取继续。传入变更会一起预检并以保护性检查点与恢复日志的方式应用。应用过程不会运行mise bootstrap也不会渲染模板新增声明需要你手动运行mise bootstrap来落地。fetch-onlywatcher 只获取 origin 分支。绝不发布任何内容除非你运行mise bootstrap dotfiles pull否则不改变任何 live 文件。manual无自动网络活动。mise bootstrap dotfiles sync负责发布与获取mise bootstrap dotfiles pull负责应用都只在你主动运行时发生。连接过程的内部机制预览 → 校验 → 确认 → 写入 → 首次同步origin set的实际工作流集中在origin::set与origin::set_innersrc/system/history/sync/origin.rs 与 src/system/history/sync/origin.rs。理解它你就知道连接时屏幕上每一行输出的含义。1. 安全获取与预览隔离连接会先获取一个同步锁并把操作放在一个可废弃的预览仓库中进行——已连接仓库的 remote-tracking ref 在连接被确认前保持不动即使后续校验或隐私检查失败也会把预览期间改动的 ref 恢复到连接前的状态previous_upstream恢复逻辑见 src/system/history/sync/origin.rs。这保证了预览获取绝不会意外改变活动连接。2. 仓库格式检测连接前会先fetch指定分支然后通过format::detect检查远端仓库状态并执行repo_state.check()src/system/history/sync/origin.rs。仓库状态分为三类并分别提示Empty空仓库首次发布会在该分支创建带 mise 标记的文件Marked已标记远端已经是 mise 配置仓库含有 mise 版本标记格式见 src/system/history/sync/format.rs继续连接Unmarked未标记仓库已有内容但没有 mise 登记元数据。此时不会导入其文件也不会替换无关历史同步要求兼容的 Git 祖先建议使用空 origin 或显式协调历史。3. 保存现场与信息披露连接前会先capture_now保存当前跟踪文件随后向用户披露每一条已提交的跟踪文件版本都有资格参与同步包括连接前的中期提交配置仓库 URL 与分支所选同步模式的行为披露见上文三种模式当前提交中跟踪文件的分布统计按configuration流与各 home 目录流计数若远端已有上游N identical, M differing (decided with mise bootstrap dotfiles pull --take-remote|--keep-local), K incoming to apply并列出具差异的前 10 个路径。4. 加密文件策略检查加密策略在每个可达提交上检查。文档明确指出Encrypted-file policy is checked across every reachable commit; unrelated histories are never replaced. 结合 src/system/history/config.rs加密接收方配置在[history.encryption].recipients中且使用该配置的配置文件必须先被信任trusted否则报错需要在连接前就为需要加密保存的文件配置好接收方参见 docs/dotfiles.md 中 Encrypted tracking 说明。5. 确认与写入配置通过confirmed()src/system/history/sync/origin.rs确认连接--yes或全局yes→ 直接放行交互终端 → 弹出Connect this setup repository?确认框非交互且无--yes→ 视为拒绝。确认后调用write_configsrc/system/history/sync/origin.rs把连接写入机器本地的配置文件config.local.toml旁的全局配置见origin_file()src/system/history/sync/origin.rs[history.origin] url https://github.com/you/setup.git branch main关键设计点机器本地存储意味着该声明永远不会被发布出去——每台机器用自己的方式命名同一仓库新机器的声明也不会与它拉取到的配置冲突只有当所选模式与settings.history.sync的当前值不同时才额外写入[settings.history.sync]源码注释明确这样mise settings set history.sync …之后仍然生效若此前已连接了不同的origin 或分支会重置旧的同步状态本地检查点保留因为另一个仓库或分支从干净状态开始。6. 首次同步配置写入后会立即执行一次同步run::sync且以刚选择的模式为准而不是写入配置前加载的设置fetch-only模式连接时不会发布任何内容src/system/history/sync/origin.rs。随后报告发布结果、待应用的传入变更数与待决策的冲突数。查询当前连接mise bootstrap dotfiles origin不带参数运行时命令只做只读查询。已连接时的输出形如https://github.com/you/setup.git (branch main) declared in /home/you/.config/mise/config.local.toml; mode sync未连接时则提示no setup repository is connected; mise bootstrap dotfiles origin set url connects one注意其中的mode部分来自SyncMode::current()即读取当前的settings.history.syncsrc/system/history/sync/mod.rs。断开连接origin --removemise bootstrap dotfiles origin --remove用于断开配置仓库src/system/history/sync/origin.rs移除声明从机器本地文件以及手工或早期 mise 写入的共享全局配置文件中删除[history.origin]标记断开把记录中的连接状态标记为disconnected保留本地数据本地检查点checkpoints与已获取的远端 refsfetched refs原样保留——断开只是切断同步通道不删除你已有的历史如果本来就没有连接会提示no setup repository was connected。因为该命令会删除配置所以被标注为破坏性操作执行前请确认不再需要自动同步。官方示例速查原文档给出的四组典型用法同样内嵌在AFTER_LONG_HELP中见 src/cli/dotfiles/origin.rsmise bootstrap dotfiles origin set https://github.com/you/setup.git mise bootstrap dotfiles origin set gitgithub.com:you/setup.git --sync manual mise bootstrap dotfiles origin # what is connected mise bootstrap dotfiles origin --remove第一行用 HTTPS 地址连接并走默认模式第二行用 SSH 地址连接但选择manual模式保留自动本地历史、禁止自动网络活动第三行查询第四行断开。连接之后日常同步工作流连接 origin 后同步行为由settings.history.sync驱动主要有两个入口后台 watcher在sync与fetch-only模式下自动执行发布/获取见 docs/cli/bootstrap/dotfiles/sync.md 中的说明手动命令mise bootstrap dotfiles sync立即发布、获取并记录待办绝不直接改动 live 文件、mise bootstrap dotfiles pull应用传入变更冲突时用--take-remote/--keep-local决策、mise bootstrap dotfiles status查看同步状态与冲突清单。需要提醒的是同步含 watcher 自动发布依赖每台机器上的 Git 凭证参见 docs/dotfiles.md Share with another machine 一节而在sync模式下任何冲突都会暂停整个配置的发布与传入应用此时status会列出需要决策的冲突处理后再继续。安全与隐私要点务必使用私有仓库连接前的所有提交包括临时的中间编辑都会获得同步资格误存敏感内容将进入共享历史需要加密的文件请在首次保存之前就配置好[history.encryption].recipients加密策略见 docs/dotfiles.md 的 Encrypted shared files 相关说明加密策略覆盖每个可达提交这是连接校验的一部分防止绕过机器本地配置[history.origin]写在机器本地配置层不会随配置仓库被发布因此每台机器可以各自用不同的 URL/凭证访问同一仓库断开连接不会清除本地检查点与已获取 refs如需彻底清理需另行处理。关联文档与进一步阅读子命令完整参考mise bootstrap dotfiles origin set同步命令参考mise bootstrap dotfiles sync检查点浏览mise bootstrap dotfiles historydotfiles 所有权与模式总览Dotfile ownership and modes源码实现src/cli/dotfiles/origin.rs、src/system/history/sync/origin.rs、src/system/history/sync/mod.rs、src/system/history/config.rs【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/mise创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考