实操记录:
git lfs fetch origin --all
git push --mirror https://cnb.cool/xxx/xxx/xxx
git remote -v
git remote set-url origin https://cnb.cool/xxx/xxx/xxx.git
git push
1. 文档概述
1.1 背景
由于 CODING DevOps 标准版产品已于 2025 年 9 月 1 日正式下线 ,原托管于 coding.net 的代码仓库无法再进行写操作(Push)。为确保项目持续迭代与数据安全,需将代码仓库完整迁移至腾讯云新一代代码托管平台 CNB (cnb.cool)。
1.2 目标
- 完整性:保留所有分支(Branches)、标签(Tags)、提交历史(Commit History)及 Git LFS 大文件对象。
- 无缝切换:在本地开发环境中更新远程地址,确保后续开发流程不受影响。
- 验证:确认新仓库可正常读写。
1.3 适用范围
- 源平台:CODING.net (已下线/只读)
- 目标平台:腾讯云 CNB (cnb.cool)
- 涉及项目:xxx(示例)
2. 前置准备
在执行迁移前,请确保具备以下条件:
- 目标仓库创建 :已在
cnb.cool平台上创建好对应的空仓库(或已准备好接收镜像的仓库地址)。 - 访问凭证 :
- 拥有源仓库的读取权限(若尚未完全下线)。
- 拥有目标仓库的写入权限。
- 重要 :建议使用 个人访问令牌 (Personal Access Token) 代替账号密码进行 HTTPS 认证,以避免交互式输入密码导致的脚本中断或验证失败。
- Git LFS 支持 :若项目包含大文件,确保本地已安装
git-lfs(git lfs install)。
3. 迁移操作步骤
本方案采用 本地镜像推送 (Mirror Push) 方式,适用于保留完整历史的场景。
步骤一:获取最新代码与 LFS 对象
在本地项目根目录下,先拉取所有远程引用和 LFS 对象,确保本地状态是最新的。
# 进入项目目录
cd D:\Project\xxx
# 获取所有分支和标签
git fetch --all --tags
# 获取所有 Git LFS 对象 (关键步骤,防止大文件丢失)
git lfs fetch origin --all
步骤二:执行全量镜像推送
使用 --mirror 参数将本地仓库的所有引用(refs)、分支、标签一次性推送到新的 CNB 仓库地址。
注意 :请将
<NEW_REPO_URL>替换为实际的 CNB 仓库地址(例如:https://cnb.cool/xxx/xxx/xxx.git)。
# 执行镜像推送
git push --mirror https://cnb.cool/xxx/xxx/xxxx.git
预期输出:
日志应显示所有分支(如 master, dev, feature/*)和标签均显示 [new branch] 或 [new tag],且无报错。
步骤三:切换本地默认远程地址
镜像推送完成后,本地仓库的 origin 仍指向旧的 CODING 地址。需将其修改为新的 CNB 地址,以便后续的 git push 和 git pull 操作默认指向新仓库。
# 1. 查看当前远程地址(确认旧地址)
git remote -v
# 2. 修改 origin 地址为新仓库地址
git remote set-url origin https://cnb.cool/xxx/xxx/xxx.git
# 3. 再次验证修改结果
git remote -v
验证标准:
输出中的 fetch 和 push 地址均应变为 https://cnb.cool/...。
步骤四:验证与新分支同步
切换地址后,尝试推送当前分支的剩余提交(如果有),并拉取验证。
# 推送当前分支(如有本地未推送的提交)
git push
# 推送所有分支和标签(双重保险,确保完全同步)
git push --all
git push --tags
# 验证拉取功能
git fetch --all
4. 常见问题与解决方案 (FAQ)
Q1: 推送时提示 Permission denied 或 Product offline
- 原因 :本地
origin地址仍指向已下线的 CODING.net。 - 解决 :严格执行 步骤三 ,使用
git remote set-url origin <新地址>更新地址。
Q2: 推送大文件失败或提示 LFS 错误
- 原因:LFS 对象未完整下载或新仓库未正确识别 LFS 钩子。
- 解决 :
- 确保执行了
git lfs fetch origin --all。 - 在新仓库目录下运行
git lfs install --force。 - 重新执行
git push --mirror。
- 确保执行了
Q3: 需要输入密码但不知道填什么
- 原因:CNB 平台通常不再支持直接使用登录密码进行 Git 操作。
- 解决 :
-
登录
cnb.cool控制台。 -
进入「个人设置」->「访问令牌」。
-
生成一个新的 Token(勾选
repo相关权限)。 -
在 Git 提示输入密码时,填入该 Token 而非登录密码。
-
(可选) 更新凭据管理器:
# Windows PowerShell 清除旧凭据(如果需要) cmdkey /delete:git:https://cnb.cool
-
Q4: 某些旧分支不需要迁移
-
解决 :
--mirror会迁移所有引用。如果只需迁移特定分支,请不要使用--mirror,而是手动添加新 remote 并推送指定分支:git remote add new-origin https://cnb.cool/... git push new-origin master dev git push new-origin --tags # 然后移除旧 origin,重命名 new-origin 为 origin
5. 附录:常用命令速查表
| 操作 | 命令 |
|---|---|
| 查看远程地址 | git remote -v |
| 修改远程地址 | git remote set-url origin <新URL> |
| 添加新远程 | git remote add <名称> <URL> |
| 删除远程 | git remote remove <名称> |
| 获取所有 LFS 文件 | git lfs fetch origin --all |
| 镜像推送 (全量) | git push --mirror <URL> |
| 推送所有分支 | git push --all |
| 推送所有标签 | git push --tags |
6. 总结
本次迁移通过 git push --mirror 实现了代码资产的完整转移,并通过 git remote set-url 完成了本地开发环境的无缝切换。迁移后,请务必通知团队成员更新本地仓库的远程地址,或建议团队成员重新克隆新仓库以确保环境纯净。
后续建议:
- 更新 CI/CD 流水线配置,将构建源指向新的 CNB 仓库地址。
- 在项目文档中更新仓库链接。
- 若旧仓库仍可读取,建议在一段时间后归档或标记为"只读/已迁移",防止误操作。