
零 Git 基础迁移手册Codex 对话迁移教程Windows 旧电脑 → Windows 新电脑不使用 Git也能备份、迁移并恢复本地历史对话最终成功标准旧电脑的历史对话出现在新电脑 Codex 列表中并且可以双击正常打开。文件数量相同、命令能够列出会话都只是中间检查不等于迁移已经完成。适用系统Windows 10 / Windows 11本文是我操作踩坑后迁移成功AI协助整理后的教程先看结论整个迁移分为 5 个动作旧电脑找到并备份 .codex\sessions 中的会话文件。同时迁移需要继续使用的项目文件夹尽量保持原来的相对路径。新电脑确认 Codex 图形界面可正常打开并登录再安装 Node.js 和 Codex CLI。合并旧会话如果用户名或项目路径不同再修复会话文件中的旧路径。使用 codex resume --all 检查然后回到 Codex 界面逐条双击验证。最后有常见问题排查在迁移过程中若遇到问题可看排查中是否有同样问题。重要边界本教程迁移的是 Codex 本地会话不是 ChatGPT 网页版的普通聊天记录。对话文件也不等于项目代码如果希望在新电脑继续开发项目文件夹需要另外复制或重新拉取。开始前准备两台 Windows 电脑且旧电脑仍能访问 Codex 文件。一个可正常读写的 U 盘、移动硬盘或其他安全传输介质。新电脑能够正常打开 Codex 图形界面并已登录自己的 OpenAI 账号。迁移期间不要同时打开 Codex 桌面端或运行中的 Codex CLI。所有操作以“复制”为主不剪切、不删除旧电脑文件。隐私提醒会话文件可能包含提示词、代码、项目路径或其他工作内容。不要把 .codex 文件夹公开上传也不要向他人发送 auth.json。先记下两台电脑的用户名和用户目录分别在旧电脑和新电脑打开 PowerShell执行下面两行。$env:USERNAME$env:USERPROFILE记录结果。后面的示例使用旧电脑用户名 OLD_NAME新电脑用户名 NEW_NAME。请替换成你自己的结果不要照抄示例。第一部分在旧电脑完成备份步骤 1 完全退出 Codex关闭 Codex 窗口如果右下角系统托盘仍有图标也一并退出。再关闭所有正在运行 Codex 的 PowerShell 或命令提示符窗口。步骤 2 打开旧电脑的 Codex 数据目录按 Win R粘贴下面的路径然后按回车。%USERPROFILE%\.codex正常情况下可以看到 sessions 文件夹。里面通常按 年 / 月 / 日 分层存放 .jsonl 会话文件。步骤 3 统计旧电脑的会话文件数量在 PowerShell 执行(Get-ChildItem$env:USERPROFILE\.codex\sessions-Recurse-Filter*.jsonl-File).Count把显示的数字记下来。后面需要用新电脑再次统计确认文件是否完整复制。步骤 4 使用 PowerShell 复制 sessions 和项目文件建议使用 PowerShell 调用 Windows 自带的 robocopy 完成复制。它会保留原有目录层级并在复制结束后显示结果比直接拖拽文件夹更容易检查。4.1 确认 U 盘盘符打开“此电脑”查看 U 盘对应的盘符例如 E: 或 F:。下面的命令以 E: 为例如果你的 U 盘不是 E:只修改代码第一行中的盘符。执行方式在旧电脑打开 PowerShell把下面整段命令一次性粘贴进去然后按回车。无需以管理员身份运行。4.2 复制 sessions 并自动核对数量{# 只修改这里的 U 盘盘符$usbDriveE:$sourceJoin-Path$env:USERPROFILE.codex\sessions$timeStampGet-Date-FormatyyyyMMdd-HHmmss$backupRootJoin-Path$usbDriveCodex-Migration-Backup-$timeStamp$destinationJoin-Path$backupRootsessionsif(-not(Test-Path$usbDrive\)){Write-Host没有找到 U 盘请检查盘符。-ForegroundColor Redreturn}if(-not(Test-Path$source)){Write-Host没有找到 sessions$source-ForegroundColor Redreturn}New-Item-ItemType Directory-Force-Path$destination|Out-Nullrobocopy$source$destination/E/Z/FFT/COPY:DAT/DCOPY:DAT/R:2/W:2/XJ$copyCode$LASTEXITCODE$sourceCount(Get-ChildItem$source-Recurse-Filter*.jsonl-File).Count$destinationCount(Get-ChildItem$destination-Recurse-Filter*.jsonl-File).CountWrite-Host旧电脑文件数量$sourceCountWrite-HostU 盘文件数量$destinationCountWrite-Host备份位置$backupRootif(($copyCode-lt8)-and($sourceCount-eq$destinationCount)){Write-Host复制完成文件数量一致。-ForegroundColor Green}else{Write-Host复制结果需要检查请先不要拔出 U 盘。-ForegroundColor RedWrite-HostRobocopy 返回代码$copyCode}}命令每次都会在 U 盘中新建一个带日期和时间的文件夹例如 E:\Codex-Migration-Backup-20260827-153000不会覆盖之前的备份。显示绿色的“复制完成文件数量一致”sessions 已完整复制。显示红色提醒或数量不一致先不要拔出 U 盘也不要删除旧电脑文件。命令没有使用 /MIR/MIR 可能删除目标中多余的文件不适合迁移备份。4.3 复制 archived_sessions如果旧电脑上存在部分电脑的 .codex 下还可能存在 archived_sessions。先把第一行改成上一步显示的实际备份位置再执行$backupRootE:\Codex-Migration-Backup-20260827-153000$archivedSourceJoin-Path$env:USERPROFILE.codex\archived_sessions$archivedDestinationJoin-Path$backupRootarchived_sessionsif(Test-Path$archivedSource){robocopy$archivedSource$archivedDestination/E/Z/FFT/COPY:DAT/DCOPY:DAT/R:2/W:2/XJif($LASTEXITCODE-lt8){Write-Hostarchived_sessions 复制完成。-ForegroundColor Green}else{Write-Hostarchived_sessions 复制失败请检查。-ForegroundColor Red}}else{Write-Host旧电脑中没有 archived_sessions可以跳过。}4.4 复制需要继续使用的项目文件Codex 对话文件不等于项目代码。如果希望在新电脑继续原来的工作还需要把相关项目文件夹复制到 U 盘。以下为单个项目示例执行前必须修改前三行$projectSourceC:\Users\旧用户名\Documents\ProjectA$backupRootE:\Codex-Migration-Backup-20260827-153000$projectNameProjectA$projectDestinationJoin-Path$backupRootprojects\$projectNameif(Test-Path$projectSource){robocopy$projectSource$projectDestination/E/Z/FFT/COPY:DAT/DCOPY:DAT/R:2/W:2/XJif($LASTEXITCODE-lt8){Write-Host项目复制完成$projectName-ForegroundColor Green}else{Write-Host项目复制失败$projectName-ForegroundColor Red}}else{Write-Host没有找到项目$projectSource-ForegroundColor Red}有多个项目时分别修改 projectSource 和 projectName逐个复制。不要为了迁移会话而复制 auth.json新电脑应当自行登录。备份完成检查打开 U 盘中的备份文件夹确认 sessions 可以继续进入年、月、日目录并看到 .jsonl 文件PowerShell 显示的新旧文件数量一致需要继续使用的项目也已复制。全部确认后再安全弹出 U 盘。第二部分在新电脑安装 Codex CLI步骤 5 安装 Node.js LTSCodex CLI 可以通过 npm 安装因此先在新电脑打开 PowerShell执行下面的命令安装 Node.js 长期支持版LTS。winget install--id OpenJS.NodeJS.LTS如果出现来源协议或安装确认提示输入“Y”。安装完成后关闭当前 PowerShell再重新打开一个 PowerShell 窗口。步骤 6 验证 Node.js 和 npm在新打开的 PowerShell 中逐行执行node-v npm-v两条命令都能显示版本号说明 Node.js 和 npm 已可正常使用。如果提示找不到命令先重启新电脑再重新验证。步骤 7 安装并验证 Codex CLI在 PowerShell 中执行npm install-g openai/codexlatest安装完成后大概需要2分钟 关闭并重新打开 PowerShell然后执行下面的命令codex--version能够显示 Codex CLI 版本号才说明安装成功。这里安装的是后文执行 codex resume --all 所需的命令行工具。步骤 8 首次启动 Codex CLI 并登录继续在 PowerShell 中执行codex首次启动时按照屏幕提示选择使用 ChatGPT/OpenAI 账号登录并在浏览器中完成授权。登录成功并进入 Codex CLI 后可以先退出后续迁移验证时还会再次使用它。第三部分在新电脑合并会话步骤 9 让新电脑先生成本机目录打开一次 Codex 图形界面确认已经登录。建议新建一条临时对话等待它正常显示后再退出 Codex。这样可以确认新电脑的 .codex\sessions 已经生成。步骤 10 备份新电脑现有 sessions即使新电脑只有一条测试对话也先做备份。打开 PowerShell逐行执行$sessionRootJoin-Path$env:USERPROFILE.codex\sessions$backupRootJoin-Path$env:USERPROFILE(.codex\sessions-before-migration-(Get-Date-FormatyyyyMMdd-HHmmss))Copy-Item$sessionRoot$backupRoot-Recurse-ForceWrite-Host备份位置$backupRoot步骤 11 把旧电脑 sessions 合并到新电脑保持 Codex 完全退出。这一步也建议使用 PowerShell 完成不再手动拖拽文件夹。PowerShell 调用 Windows 自带的 robocopy可以保留原有目录层级、跳过新电脑中已经存在的文件并在完成后核对结果。先打开“此电脑”确认 U 盘盘符并找到步骤 4 生成的实际备份文件夹。下面以 E:\Codex-Migration-Backup-20260827-153000 为例只修改命令第一行的备份路径。然后在新电脑打开 PowerShell把整段命令一次性粘贴并按回车。无需管理员权限。{# 只修改这里U 盘中的实际备份文件夹$backupRootE:\Codex-Migration-Backup-20260827-153000$sourceJoin-Path$backupRootsessions$destinationJoin-Path$env:USERPROFILE.codex\sessionsif(-not(Test-Path$source-PathType Container)){Write-Host没有找到 U 盘中的 sessions$source-ForegroundColor Redreturn}New-Item-ItemType Directory-Force-Path$destination|Out-Null$sourceCount(Get-ChildItem$source-Recurse-Filter*.jsonl-File).Count$beforeCount(Get-ChildItem$destination-Recurse-Filter*.jsonl-File).Countif($sourceCount-eq0){Write-HostU 盘的 sessions 中没有找到 .jsonl 文件请检查备份路径。-ForegroundColor Redreturn}robocopy$source$destination/E/Z/FFT/COPY:DAT/DCOPY:DAT/R:2/W:2/XJ/XC/XN/XO$copyCode$LASTEXITCODE$afterCount(Get-ChildItem$destination-Recurse-Filter*.jsonl-File).Count$missingCount (Get-ChildItem$source-Recurse-Filter*.jsonl-File|Where-Object{$relativePath$_.FullName.Substring($source.Length).TrimStart([char]\)-not(Test-Path(Join-Path$destination$relativePath))}).CountWrite-HostU 盘旧会话数量$sourceCountWrite-Host合并前新电脑数量$beforeCountWrite-Host合并后新电脑数量$afterCountWrite-Host仍缺少的旧会话数量$missingCountif(($copyCode-lt8)-and($missingCount-eq0)){Write-Host合并完成所有旧会话文件都已到位。-ForegroundColor Green}else{Write-Host合并结果需要检查请先不要继续后面的路径修复。-ForegroundColor RedWrite-HostRobocopy 返回代码$copyCode}}命令会把 U 盘备份中 sessions 里面的内容直接复制到新电脑 sessions不会形成 sessions\sessions\年份 这样的重复层级。正确结构仍是 sessions\年份\月份\日期*.jsonl。参数 /XC /XN /XO 会跳过目标中已经存在的同路径文件不覆盖新电脑现有会话。命令未使用 /MIR不会删除新电脑 sessions 中原有的文件。看到绿色的“合并完成所有旧会话文件都已到位”并且“仍缺少的旧会话数量”为 0才继续下一步如果出现红色提醒先检查 U 盘路径和复制结果。步骤 12 再次统计新电脑会话数量(Get-ChildItem$env:USERPROFILE\.codex\sessions-Recurse-Filter*.jsonl-File).Count结果至少应包含旧电脑的会话数量如果新电脑原本已经有新会话总数可能更大。数量明显偏少时先不要继续修复路径应回到复制步骤检查。第四部分处理用户名或项目路径不同什么时候需要做这一部分旧电脑和新电脑的 Windows 用户名不同或旧项目文件夹在新电脑换了盘符/位置时需要检查路径。用户名完全相同且项目仍在原路径可以先跳到“第五部分”。为什么文件明明存在却提示恢复失败Codex 会话不只保存聊天文字还可能保存当时的工作目录。例如旧电脑的会话记录仍指向 C:\Users\OLD_NAME\Desktop\ProjectA而新电脑真实路径已经变成 C:\Users\NEW_NAME\Desktop\ProjectA。只复制 .jsonl 文件并不会自动修复这些旧路径。只迁移对话可能可以看到标题但打开或恢复时仍失败。对话和项目一起迁移并保持相同的相对目录通常只需要替换用户目录。项目换了盘符或文件夹需要把完整旧项目路径映射成完整新项目路径。步骤 13 先检查旧路径出现了多少次把 OLD_NAME 替换为旧电脑真实用户名然后执行$oldRootC:\Users\OLD_NAME$oldEscaped$oldRoot.Replace(\,\\)$sessionRootJoin-Path$env:USERPROFILE.codex\sessions$hitsGet-ChildItem$sessionRoot-Recurse-Filter*.jsonl-File|Select-String-SimpleMatch$oldEscapedWrite-Host包含旧用户路径的记录数$($hits.Count)如果结果是 0并且两台电脑用户名本来就相同可以跳过批量修复。如果结果大于 0继续下一步。步骤 14 批量替换旧用户目录执行前确认必须已经完成“步骤 10”的新电脑 sessions 备份。下面的命令会直接修改 .jsonl 文件。只修改 OLD_NAMENEW_NAME 会自动使用当前新电脑的用户目录。$oldRootC:\Users\OLD_NAME$newRoot$env:USERPROFILE$oldEscaped$oldRoot.Replace(\,\\)$newEscaped$newRoot.Replace(\,\\)$sessionRootJoin-Path$env:USERPROFILE.codex\sessions$utf8NoBomNew-ObjectSystem.Text.UTF8Encoding($false)$changed 0Get-ChildItem$sessionRoot-Recurse-Filter*.jsonl-File|ForEach-Object{$text[System.IO.File]::ReadAllText($_.FullName)$updated$text.Replace($oldEscaped,$newEscaped).Replace($oldRoot,$newRoot)if($updated-ne$text){[System.IO.File]::WriteAllText($_.FullName,$updated,$utf8NoBom)$changedWrite-Host已修复$($_.FullName)}}Write-Host修复完成共修改$changed个文件。这段命令同时处理 JSON 中经过转义的双反斜杠路径和普通 Windows 路径并使用 UTF-8 无 BOM 写回减少破坏 JSONL 文件编码的风险。步骤 15 项目位置也改变时按完整路径映射如果旧项目原来在 D 盘新电脑改到其他位置只替换用户名没有用。应把下面两行改成项目的完整旧路径和完整新路径再使用与步骤 14 相同的替换逻辑。$oldRootD:\旧项目目录\ProjectA$newRootC:\Users\NEW_NAME\Documents\ProjectA不要一刀切如果历史会话来自多个项目先分别列出旧路径再逐个映射。不要把所有会话强行指向同一个空文件夹否则虽然可能打开对话对应的项目上下文会变错。真实案例例如旧电脑用户名是 86178新电脑用户名是 kiemm那么步骤 14 中只需要把第一行写成$oldRootC:\Users\86178$newRoot 仍然使用 $env:USERPROFILE新电脑会自动得到 C:\Users\kiemm。教程读者不应照抄 86178 或 kiemm而应使用自己的实际用户名。第五部分让 Codex 重新识别并验证会话步骤 16 在安全的普通目录运行 resume不要在 C:\WINDOWS\system32 中运行或信任目录。打开 PowerShell逐行执行$resumeDirJoin-Path$env:USERPROFILECodexResumeNew-Item-ItemType Directory-Force-Path$resumeDir|Out-NullSet-Location$resumeDircodex resume--all如果出现是否信任当前目录的提示只确认当前路径确实是自己刚创建的 C:\Users\你的用户名\CodexResume然后再选择信任。看到列表代表什么codex resume --all 能列出历史会话说明 CLI 已经读取到会话文件但仍要回到 Codex 图形界面双击验证才能判定迁移完成。步骤 17 重启 Codex 并实际打开旧对话退出 CLI 会话完全关闭 Codex。重新打开 Codex等待历史列表加载。不要寻找并不存在的“按照时间顺序”按钮直接在当前列表中检查旧标题。至少抽查 3 条不同日期、不同项目的旧对话并双击打开。打开后检查内容是否完整、关联项目目录是否正确。迁移成功验收表检查项目通过标准文件数量旧会话文件已完整复制新电脑总数不少于旧电脑数量CLI 识别codex resume --all 能显示旧会话界面列表Codex 界面能够看到旧对话标题实际打开抽查的旧对话可以双击打开不再提示恢复失败项目对应打开后关联的工作目录存在且指向正确项目新会话保留新电脑迁移前产生的会话仍然存在常见问题与排查U 盘在旧电脑正常新电脑读不到先换另一个 USB 接口。接口接触、供电或兼容问题会造成看似复制失败确认能稳定读取后再重新统计 .jsonl 数量。文件数量对但双击仍显示“恢复对话失败”优先检查会话中的旧用户名、旧盘符和旧项目目录。数量一致只能证明文件到位不能证明记录里的工作目录有效。运行 codex resume --all 时位于 system32不要信任 C:\WINDOWS\system32。退出提示进入自己创建的 CodexResume 文件夹后重新运行。PowerShell 说找不到 codex 命令回到步骤 6确认 node -v 和 npm -v 都能显示版本号再按步骤 7 重新安装 Codex CLI。安装完成后关闭并重新打开 PowerShell执行 codex --version 验证。不要在命令尚未安装成功时继续修改会话文件。新电脑看不到任何旧对话检查是否多套了一层 sessions 文件夹正确结构是 .codex\sessions\年份\月份\日期*.jsonl。然后完全退出并重启 Codex。只恢复了一部分对话重新统计旧电脑、U 盘和新电脑三处文件数量若旧电脑存在 archived_sessions也检查是否遗漏。修复命令执行后情况更糟停止继续修改完全退出 Codex把当前 sessions 改名保留再用步骤 10 生成的 sessions-before-migration 时间戳备份恢复。对话能打开但项目内容不对会话路径被映射到了错误目录。使用完整项目路径逐个修复不要把多个项目统一替换成一个文件夹。回退方法如果路径修改后出现异常可以使用新电脑迁移前的时间戳备份恢复。恢复前先完全退出 Codex。打开 %USERPROFILE%.codex。把当前 sessions 改名为 sessions-problem保留现场不要直接删除。把 sessions-before-migration-日期时间 文件夹复制一份并改名为 sessions。重新打开 Codex确认新电脑原有会话恢复正常。最后的安全提醒迁移完成并稳定使用一段时间前不要删除旧电脑原始 sessions。不要用记事本批量另存为 .jsonl避免编码或换行被改变。不要复制或分享 auth.json账号授权应在新电脑重新登录完成。Codex 更新后本地目录结构可能变化发现结构明显不同应先停止并重新确认。