mcpField
S
shunk031-herdr-chezmoi-apply

shunk031-herdr-chezmoi-apply

github.com/shunk031云与 DevOps030 次安装2 天前更新
代码仓库

关于 shunk031-herdr-chezmoi-apply

通过 Herdr 和 chezmoi 在本地或已保存的机器上应用 dotfiles 的操作流程。它规定了 Git 检查、按顺序更新与应用、故障处理及逐目标结果报告。

主要功能

  1. 01选择 Local 和配置目标
  2. 02更新前检查 Git 状态
  3. 03分别应用公开与私有源
  4. 04处理常见应用故障
  5. 05逐目标报告执行结果

适用场景

  1. 01更新多个 Herdr 配置中的 dotfiles
  2. 02应用公开和私有配置
  3. 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 可能会将源状态放在仓库根目录下。跳过未配置的环境,不要初始化它们。

  1. 确认每个源都是常规的 main 检出,有上游分支,且没有未完成的 Git 操作。检查 git status --short --branch,然后查看暂存和未暂存的差异。丢弃更改前,记录每个路径、受影响的设置或行为,以及新增、删除或更改的内容。对机密值进行脱敏,同时保留足够的上下文以说明更改;不要屏蔽所有变更行。仅提供路径、行数和差异块标题不算更改摘要。
  2. 用户授权丢弃该检出中所有已跟踪但未提交的更改。使用 git restore --source=HEAD --staged --worktree -- <path> 还原已检查的路径,然后在单独的命令中检查状态。保留未跟踪/被忽略的文件、本地提交和其他工作树;不要使用 git clean 或 stash。用户明确要求保留某项更改时,以该要求为准。
  3. 先拉取 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>。注明保留的路径和后续待办事项。切勿包含秘密值或原始私有差异。

评论

支持 Markdown