跳转到内容

配置即代码

高级

内容验证于 2026-06-24适用 Claude Code CLI v2.1

本教程属于学习路径: · 浏览全部路径

搬家时你不用重新买家具。一个 U 盘插上新电脑,跑一个脚本,所有配置自动到位。

IaC(Infrastructure as Code)传统上用于管理服务器配置——用代码描述服务器应该装什么软件、开什么端口、设什么权限。你的 Claude Code 配置同样可以 IaC:CLAUDE.md、settings.json、Skill、Hook、Memory 全部纳入 git 版本管理。

目标:换电脑 → clone 一个仓库 → 跑一个脚本 → Claude Code 完全恢复,包括所有偏好、规则、技能和记忆。

核心思想:所有配置文件的实际内容存在 git 仓库里,~/.claude/ 下的文件通过 symlink 指向它们。编辑 ~/.claude/ = 编辑 git 仓库 = 自动跟踪。

~/intern-journal/dotfiles/ ← git 仓库中的配置源
home-claude/
CLAUDE.md ← 全局 CLAUDE.md 的源文件
settings.template.json ← settings.json 的模板(不含真实凭证)
memory/ ← 记忆文件的源
skills/ ← Skill 定义的源
hooks/ ← Hook 脚本的源
~/.claude/
CLAUDE.md → symlink → dotfiles/home-claude/CLAUDE.md
settings.json ← 由 template + envsubst 生成(不跟踪)
skills/ → symlink → dotfiles/home-claude/skills/
hooks/ → symlink → dotfiles/home-claude/hooks/

上面是 Jason 的实际架构,以最小示例展示——不需要照搬,理解原理后按你的项目结构调整。

关键:编辑 ~/.claude/CLAUDE.md 实际上在编辑 dotfiles/home-claude/CLAUDE.md——git 自动看到变更。不需要“备份”这一步——备份是自动的,它就是 git。

创建 symlink 的方法:

Terminal window
ln -sf ~/intern-journal/dotfiles/home-claude/CLAUDE.md ~/.claude/CLAUDE.md

-s = symbolic link(符号链接,像一个指针),-f = force overwrite if exists(如果目标已存在就覆盖)。

敏感信息(API key、token、密码)绝对不能进 git。但你又想在 git 里保存配置结构——怎么办?

模板文件方案:

  1. 在 git 里存 settings.template.json,敏感值用占位符
  2. 生成真实 settings.json 时用环境变量替换
  3. settings.json.gitignore

模板示例 settings.template.json

{
"model": "claude-sonnet-4",
"mcpServers": {
"supabase": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server-supabase"],
"env": {
"SUPABASE_ACCESS_TOKEN": "${SUPABASE_ACCESS_TOKEN}"
}
}
}
}

注意:Claude Code 的 API key 通过环境变量 ANTHROPIC_API_KEY 传入,不写在 settings.json 里。模板中只需要放 MCP server 等需要凭证的配置项。

生成真实配置:

Terminal window
envsubst < settings.template.json > settings.json

envsubst${VAR} 替换为环境变量的实际值。生成的 settings.json 包含真实 API key,但它在 .gitignore 里——git 不会跟踪它。

验证安全性:

Terminal window
# 检查有没有意外把真实凭证写进了模板
grep -E '(sk-ant|sb_publishable|eyJ)' settings.template.json
# 应该没有输出。如果有 → 凭证泄漏,立即在服务端 revoke key

换新电脑时,初始化脚本的最小逻辑:

#!/bin/bash
# 1. Clone 配置仓库
git clone git@github.com:you/dotfiles.git ~/dotfiles
# 2. 创建 symlink
ln -sf ~/dotfiles/home-claude/CLAUDE.md ~/.claude/CLAUDE.md
ln -sf ~/dotfiles/home-claude/skills ~/.claude/skills
ln -sf ~/dotfiles/home-claude/hooks ~/.claude/hooks
# 3. 从模板生成 settings.json(需要先设置好环境变量)
envsubst < ~/dotfiles/home-claude/settings.template.json > ~/.claude/settings.json
# 4. 验证
claude --version
ls -la ~/.claude/CLAUDE.md # 确认箭头指向 dotfiles

初始化脚本的本质:把你手动配置新电脑的每一步写成代码。第一次写花 30 分钟,以后每次换机器 30 秒。

如果你同时用 Claude Code 和 Codex CLI(或其他 AI 编程工具),Skill 定义不需要维护两套。通过 symlink 让多个工具共享同一套 Skill 源:

dotfiles/home-claude/skills/ ← 唯一源(git 跟踪)
~/.claude/skills/ → symlink(Claude Code 读这里)
~/.agents/skills/ → symlink(Codex 读这里)

修改一次,两个工具同步生效。不要手动维护两套 Skill——那是给自己找麻烦。

同样的模式可以扩展到其他共享配置:如果你有多个 AI 编程工具都需要知道你的偏好,把核心规则抽到一个共享文件,各工具的配置文件引用它。

进:

  • 全局 CLAUDE.md(跨项目通用的规则)
  • Skill 定义文件
  • Hook 脚本
  • settings.json 模板(不含凭证)
  • Memory 文件
  • 初始化脚本

不进:

  • 项目级 CLAUDE.md(每个 git 项目自己管——它就是项目仓库的一部分)
  • 包含真实凭证的文件
  • 会话历史 / 日志
  • node_modules / 依赖包
  • 二进制文件

判断标准:“换一台新电脑,这个东西我需要手动重建吗?” 需要 → 进 dotfiles。不需要(比如项目本身的文件在项目仓库里)→ 不进。

  1. 编辑 ~/.claude/ 下的文件而不是 symlink 源:如果创建 symlink 前文件已存在,或者某次操作替换了 symlink 为普通文件,你的编辑就不在 git 跟踪里。验证:ls -la ~/.claude/CLAUDE.md——看输出中有没有 -> 箭头

  2. settings.json 含真实 API key 进 git:即使你后来删了、加了 .gitignore,git 历史里还有。检查:git log -p -- settings.json。如果泄漏了,立即在服务端 revoke 那个 key

  3. symlink 断掉:源文件被移动或删除后,symlink 变成“悬空链接”。Claude Code 读不到配置但不会报明显错误。验证:ls -la ~/.claude/ 逐个看箭头

  4. 新机跑脚本前没装依赖:git、node、jq、envsubst、Claude Code 本身——这些是脚本的前提。脚本开头加依赖检查