关于 shunk031-herdr-chezmoi-apply
通过 Herdr 和 chezmoi 在本地或已保存的机器上应用 dotfiles 的操作流程。它规定了 Git 检查、按顺序更新与应用、故障处理及逐目标结果报告。
主要功能
- 01选择 Local 和配置目标
- 02更新前检查 Git 状态
- 03分别应用公开与私有源
- 04处理常见应用故障
- 05逐目标报告执行结果
适用场景
- 01更新多个 Herdr 配置中的 dotfiles
- 02应用公开和私有配置
- 03诊断 chezmoi apply 失败
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ shunk031/ skills --skill shunk031-herdr-chezmoi-apply安装后在 Claude Code 中输入/shunk031-herdr-chezmoi-apply确认已加载。
详细介绍
说明
阅读此
SKILL.md后,请说:🏠 I read shunk031-herdr-chezmoi-apply.
通过 Herdr 应用点文件
使用 herdr skill 检查环境和 CLI 语法。选择 herdr machine list --json 中的 Local 和所有配置;或者只选择用户指定的目标。直接执行 SSH 命令时,使用每个配置的 SSH target;对于 Local,使用本地 shell。不要根据窗格活动情况选择目标。跳过已禁用或无法访问的配置,并避免对同一目标重复应用。
每次工具调用只运行一条命令。读取其输出和退出状态后,再选择下一条命令。转发工具结果时,保留退出状态和输出;例如,同时保留 exec_command 的 exit_code 和 output。如果命令仍在运行,请等待其完成并检查最终结果。缺少退出状态表示结果未经验证,不代表成功。按顺序逐个处理目标;不要将工作流合并为 shell 命令链、循环或脚本。编辑此 skill 并不意味着获准执行它。
先处理 Git
使用每次 chezmoi 调用的 source-path 找到两个现有源代码仓库,并在单独的命令中运行 git -C <source-path> rev-parse --show-toplevel;.chezmoiroot 可能会将源状态放在仓库根目录下。跳过未配置的环境,不要初始化它们。
- 确认每个源都是常规的
main检出,有上游分支,且没有未完成的 Git 操作。检查git status --short --branch,然后查看暂存和未暂存的差异。丢弃更改前,记录每个路径、受影响的设置或行为,以及新增、删除或更改的内容。对机密值进行脱敏,同时保留足够的上下文以说明更改;不要屏蔽所有变更行。仅提供路径、行数和差异块标题不算更改摘要。 - 用户授权丢弃该检出中所有已跟踪但未提交的更改。使用
git restore --source=HEAD --staged --worktree -- <path>还原已检查的路径,然后在单独的命令中检查状态。保留未跟踪/被忽略的文件、本地提交和其他工作树;不要使用git clean或 stash。用户明确要求保留某项更改时,以该要求为准。 - 先拉取 public,再检查结果,然后拉取 private。对每个仓库分别运行以下命令;这些标志可防止用户 Git 设置启用 rebase 或 autostash。
ssh <target> 'git -C <repository> pull --ff-only --no-rebase --no-autostash'
两次拉取都必须成功。检查每次操作后的 Git 状态,再继续应用。如果出现意外更改、保留的未跟踪文件会进入已应用的源状态,或更新需要更改本地提交历史,则停止处理该目标。
分别应用
使用 chezmoi status 或脱敏后的差异检查每项应用计划。遇到无法解释的目标端更改或确认提示时停止;不要强制覆盖。
确认目标上现有的 gh 身份验证可用,且不会打印其令牌。运行 public apply:
ssh <target> 'GITHUB_TOKEN="$(gh auth token)" chezmoi apply'
读取结果。只有成功后,才运行 private apply。通过非交互式 SSH 使用时,chezmoi-private 可能是不可用的别名;请解析其配置的源/配置,并使用明确的等效命令。使用常规路径时:
ssh <target> 'GITHUB_TOKEN="$(gh auth token)" chezmoi --source "$HOME/.local/share/chezmoi-private" --config "$HOME/.config/chezmoi-private/chezmoi.yaml" apply'
对于 Local,直接运行引号内的命令。令牌在目标上查找,且仅限于本次调用;不要在机器之间复制令牌、自动切换账户或打印凭据值。
诊断已停止的 apply
重试前先确定失败的命令。如果 gitHubLatestReleaseAssetURL 因 GitHub API 403 速率限制而失败,请确认公开 apply 使用了上述带令牌的命令。匿名请求遇到速率限制,并不意味着应该修改外部模板。
如果 mise install 因连接重置而无法下载固定版本的工具,请直接测试报告中的 URL,并通过目标环境可用的代理进行测试。如果只有代理可用,请仅为失败的 mise install 命令设置 HTTP_PROXY 和 HTTPS_PROXY,待工具安装完成后再重试 apply。保留固定版本的工具及其安装程序。
如果 apply 在技能协调过程中停止输出,请先检查其子进程,再决定是否中断。如果 skills update 卡在克隆私有的 [email protected]: URL,而 SSH 无法连接,请使用已授权的 gh 账户验证能否通过 HTTPS 访问该仓库。重试时,仅为 apply 调用设置该账户的 GH_TOKEN 和 Git URL 重写,并使用 GIT_CONFIG_COUNT=1、GIT_CONFIG_KEY_0=url.https://github.com/.insteadOf 和 [email protected]:。不要更改全局 Git 配置,也不要在没有用户指示的情况下选择其他账户;如果无法通过 HTTPS 访问,请停止。
报告
如果失败,请停止该目标的剩余步骤,并继续处理其他目标。重试前检查错误和当前状态;只有纠正原因后才重试一次。不要盲目重复已中断的 apply。
报告每个目标的公开/私有更新和 apply 结果,包括失败及未执行的步骤。然后列出移除前记录的摘要:<target> / <public or private>: Discarded <change summary> in <path>。注明保留的路径和后续待办事项。切勿包含秘密值或原始私有差异。