1. 两台电脑之间,Claude Code 会话为什么不能只拷项目文件
Claude Code 是 Anthropic 推出的终端 AI 编程助手,它把每一轮对话、每一次文件编辑、每一条记忆都落在本地磁盘上,而不是云端账号里。这意味着你在旧电脑上跟它聊出来的架构决策、踩坑记录、接口约定,全都躺在~/.claude目录里。一旦换电脑,只把项目源码拷过去,新机器上的 Claude Code 会把你当成第一次见面的陌生人,之前几十轮对话积累的上下文直接归零。
这个场景其实很常见:公司台式机和家里笔记本轮换、挑战杯/毕设中途换设备、旧机器重装系统前想保命。核心检索词就三个——Claude Code、会话上下文迁移、~/.claude。适合谁?适合已经把 Claude Code 当主力辅助、会话里沉淀了大量有效上下文、又不想从头再聊一遍的开发者。迁移的本质不是"同步账号",而是把本地那堆 jsonl 转录文件、sessions 元数据、file-history 编辑历史,按新机器的路径规则重新摆好,再修正 cwd 字段,让 Claude Code 启动时能顺着索引找到旧对话。
我试过最省事的做法是两台机器用户名和盘符完全一致,直接整目录覆盖就完事;但现实里用户名不同、盘符不同才是常态,所以下面重点讲路径不一致时的通用流程,顺带把 TaoToken 统一 Key 的接入一起配好,保证迁移后调用通道也一致。
2. 迁移前先把 TaoToken 通道和 Key 准备好
Claude Code 迁移完能不能立刻用,取决于两件事:会话文件摆对了没,以及 API 通道通不通。TaoToken 在这里的作用是提供一个统一的 Key 和 API 入口,让你在旧电脑、新电脑上用同一套凭证调用模型,不用每换一台机器就重新配一遍环境变量。
官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api (这个地址不加 UTM 参数,配置里直接写它)。你需要先去控制台生成一个 API Key,然后把它写进 Claude Code 的环境变量或 settings.json。
具体操作路径:打开 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 创建 Key,再到 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 管理已有 Key。如果你还没决定用哪个模型,可以先到 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 看一眼可用列表,再决定 settings.json 里写哪个模型名。
注意:Key 属于敏感凭证,迁移包打包时不要把含 Key 的 settings.local.json 一起塞进去,到了新电脑再单独填,避免明文 Key 跟着压缩包到处跑。
3. 可复制的 settings.json 配置骨架
Claude Code 读取配置的优先级是:项目级.claude/settings.json> 用户级~/.claude/settings.json>~/.claude/settings.local.json。跨电脑迁移时,我建议把跟机器无关的通道配置放用户级 settings.json,把跟本机路径、权限相关的放 settings.local.json。
下面这份骨架可以直接抄,把sk-你的Key换成控制台生成的真实值:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "permissions": { "allow": [ "Read", "Edit", "Bash(git status)", "Bash(git diff)" ], "deny": [] }, "includeCoAuthoredBy": false }几个参数说明一下。ANTHROPIC_BASE_URL指向 TaoToken 的 API 入口,这样 Claude Code 的所有请求都走统一通道;ANTHROPIC_API_KEY就是你在控制台拿到的 Key;ANTHROPIC_MODEL按你实际要用的模型填,不确定就先留空让 Claude Code 用默认。permissions.allow里我习惯只放读、改和几个只读 git 命令,写操作和危险命令保持手动确认,迁移到新机器后这套权限策略也跟着走,省得重新点一遍。
如果你更想用命令行方式而不是改文件,也可以直接导出环境变量:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的Key"Windows PowerShell 下换成$env:ANTHROPIC_BASE_URL="https://taotoken.net/api"这种写法即可。环境变量方式适合临时验证,长期用还是写进 settings.json 更稳。
4. 定位 ~/.claude 并解析 jsonl 会话文件
迁移前必须先搞清楚旧电脑上数据长什么样。~/.claude目录结构大致是这样:
~/.claude/ ├── projects/ # 按项目路径编码存放对话记录 │ └── <编码后的项目路径>/ │ ├── <session-id>.jsonl # 完整对话转录,核心数据 │ └── memory/ # /memory 持久化的内容 ├── sessions/ # 会话元数据 │ └── <pid>.json # 记录 sessionId、cwd、状态 ├── file-history/ # 文件编辑历史,供 /diff 用 ├── tasks/ # 任务追踪内部状态 ├── settings.json # 用户全局设置 └── settings.local.json # 本地权限配置最关键的是projects/<编码路径>/<session-id>.jsonl。这个 jsonl 是逐行 JSON 的对话转录,每一行是一条消息记录,包含 role、content、时间戳等字段。你可以用下面这行命令快速看一眼某个会话有多少轮:
wc -l ~/.claude/projects/<编码路径>/<session-id>.jsonl路径编码规则要记牢:Claude Code 会把项目绝对路径里的:、\、/、*、?、"、<、>、|以及所有非 ASCII 字符(比如中文)统统替换成-,每个字符对应一个-。所以C:\Users\A\Desktop\挑战杯数据集会被编码成C--Users-A-Desktop-------(中文每个字一个横杠)。两台电脑用户名不同,编码名就不同,这是迁移时必须重映射的地方。
想快速定位某个项目的 session id,打开~/.claude/history.jsonl,搜索项目路径,就能看到对应的 id 字段。拿到 id 后,去projects/下对应编码目录里找同名 jsonl 即可。
5. 路径不一致时的完整迁移步骤
假设旧电脑路径C:\Users\A\Desktop\挑战杯数据集,新电脑路径C:\Users\B\Desktop\挑战杯数据集,session id 用66762821-XXXX-XXXX-XXXX-XXXXXXXXXXXX占位,pid 用1111占位。下面所有命令里的 A、B、session id、pid 都请替换成你自己的真实值。
第 1 步,在新电脑装好 Claude Code 并至少跑一次,让它自动生成~/.claude骨架:
claude # 进入后输入 /exit 退出第 2 步,算出新路径的编码名。用 Python 跑一段:
import os new_path = r"C:\Users\B\Desktop\挑战杯数据集" result = [] for c in new_path: if c in ':\\/*?"<>|' or ord(c) > 127: result.append('-') else: result.append(c) print("新编码名:", "".join(result))输出类似C--Users-B-Desktop-------,记下这个字符串。
第 3 步,迁移对话转录。把旧机器projects/旧编码名/下的 jsonl 复制到新机器~/.claude/projects/新编码名/:
mkdir -p ~/.claude/projects/C--Users-B-Desktop-------/ cp /path/to/claude-migration/projects/OLD_ENCODED/66762821-XXXX-XXXX-XXXX-XXXXXXXXXXXX.jsonl \ ~/.claude/projects/C--Users-B-Desktop-------/如果memory/目录非空,也一并拷过去。
第 4 步,迁移 sessions 元数据并修正 cwd。先复制:
mkdir -p ~/.claude/sessions/ cp /path/to/claude-migration/sessions/1111.json ~/.claude/sessions/然后必须把1111.json里的cwd字段改成新电脑的真实路径。手动改也行,脚本改更稳:
import json, os new_cwd = r"C:\Users\B\Desktop\挑战杯数据集" f = os.path.expanduser("~/.claude/sessions/1111.json") with open(f, "r", encoding="utf-8") as fp: data = json.load(fp) data["cwd"] = new_cwd with open(f, "w", encoding="utf-8") as fp: json.dump(data, fp, ensure_ascii=False) print("cwd 已更新为:", new_cwd)第 5 步,迁移 file-history 和 tasks(非必需但建议,能保留更多编辑上下文):
mkdir -p ~/.claude/file-history/66762821-XXXX-XXXX-XXXX-XXXXXXXXXXXX/ cp -r /path/to/claude-migration/file-history/SESSION_ID/* \ ~/.claude/file-history/66762821-XXXX-XXXX-XXXX-XXXXXXXXXXXX/ mkdir -p ~/.claude/tasks/66762821-XXXX-XXXX-XXXX-XXXXXXXXXXXX/ cp -r /path/to/claude-migration/tasks/SESSION_ID/* \ ~/.claude/tasks/66762821-XXXX-XXXX-XXXX-XXXXXXXXXXXX/第 6 步,把项目源码复制到新电脑的目标路径,确保和第 4 步改的 cwd 完全一致,包括大小写和盘符。
第 7 步,启动验证:
cd "C:\Users\B\Desktop\挑战杯数据集" claude进入后输入/context,如果 token 用量和旧电脑对得上,按上箭头能看到历史对话,就说明迁移成功了。
6. 迁移后验证请求与常见报错排查
迁移完别急着关终端,先做两件事验证。一是会话层面,输入/context看 token 用量,再按上箭头翻历史消息;二是通道层面,随便发一句让它读个文件,确认请求能正常打到 TaoToken。如果模型没响应,先查 Key 和 base url:
echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_API_KEYWindows 下用echo %ANTHROPIC_BASE_URL%。确认输出是https://taotoken.net/api和你的真实 Key。
常见报错我整理成表,方便对照:
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 启动后看不到历史对话,但 token 用量正常 | 终端显示问题或 cwd 不匹配 | 运行claude --resume强制恢复;核对 sessions json 里的 cwd 与实际路径是否完全一致 |
| 提示 session 文件损坏 | sessions json 格式错误 | 删掉~/.claude/sessions/XXXX.json,Claude 会重建元数据,jsonl 转录不受影响 |
| 请求 401/403 | Key 无效或没写进环境 | 重新从控制台生成 Key,检查 settings.json 的 env 段 |
| 请求超时或连不上 | base url 写错 | 确认是https://taotoken.net/api,不要带多余路径 |
| 新电脑已有其他项目会话,怕冲突 | 不会冲突 | 每个会话靠 pid 和 session id 独立区分,不会互相覆盖 |
如果迁移后想验证模型通道是否正常,可以直接到 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 发一条测试消息,确认 Key 能通再回到 Claude Code 里用。接入细节和参数说明可以翻 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有完整的字段解释。
7. 长期编码与 Agent 场景的通道选择
如果你不只是偶尔迁移一次,而是长期在两台以上机器上跑 Claude Code 做编码或 Agent 任务,建议把通道配置固定下来。TaoToken 的 Coding Plan 就是为这种长期编码场景准备的,统一 Key 之后,旧电脑、新电脑、甚至临时借用的机器,只要把 settings.json 拷过去就能接着用,不用每台机器重新申请凭证。
具体可以看 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。配合前面讲的迁移流程,你的会话上下文和调用通道就都统一了:会话文件负责"记得聊过什么",TaoToken 统一 Key 负责"到哪都能调得通"。
最后给几个实操建议。定期备份~/.claude,一条命令就够:
tar -czf ~/claude-backup-$(date +%Y%m%d).tar.gz -C ~/ .claude/关键架构决策别只留在对话里,写进项目根目录的CLAUDE.md,这样任何环境下 AI 都能快速理解项目约定。重要信息用/memory持久化,跨会话依然有效。如果两台电脑能配成相同用户名,编码目录名就一致,迁移直接整目录覆盖,能省掉重映射那几步。