Git 仓库迁移技术文档:从 CODING.net 迁移至腾讯云 CNB

实操记录:

复制代码
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. 前置准备

在执行迁移前,请确保具备以下条件:

  1. 目标仓库创建 :已在 cnb.cool 平台上创建好对应的空仓库(或已准备好接收镜像的仓库地址)。
  2. 访问凭证
    • 拥有源仓库的读取权限(若尚未完全下线)。
    • 拥有目标仓库的写入权限。
    • 重要 :建议使用 个人访问令牌 (Personal Access Token) 代替账号密码进行 HTTPS 认证,以避免交互式输入密码导致的脚本中断或验证失败。
  3. 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 pushgit pull 操作默认指向新仓库。

复制代码
# 1. 查看当前远程地址(确认旧地址)
git remote -v

# 2. 修改 origin 地址为新仓库地址
git remote set-url origin https://cnb.cool/xxx/xxx/xxx.git

# 3. 再次验证修改结果
git remote -v

验证标准:

输出中的 fetchpush 地址均应变为 https://cnb.cool/...

步骤四:验证与新分支同步

切换地址后,尝试推送当前分支的剩余提交(如果有),并拉取验证。

复制代码
# 推送当前分支(如有本地未推送的提交)
git push

# 推送所有分支和标签(双重保险,确保完全同步)
git push --all
git push --tags

# 验证拉取功能
git fetch --all

4. 常见问题与解决方案 (FAQ)

Q1: 推送时提示 Permission deniedProduct offline

  • 原因 :本地 origin 地址仍指向已下线的 CODING.net
  • 解决 :严格执行 步骤三 ,使用 git remote set-url origin <新地址> 更新地址。

Q2: 推送大文件失败或提示 LFS 错误

  • 原因:LFS 对象未完整下载或新仓库未正确识别 LFS 钩子。
  • 解决
    1. 确保执行了 git lfs fetch origin --all
    2. 在新仓库目录下运行 git lfs install --force
    3. 重新执行 git push --mirror

Q3: 需要输入密码但不知道填什么

  • 原因:CNB 平台通常不再支持直接使用登录密码进行 Git 操作。
  • 解决
    1. 登录 cnb.cool 控制台。

    2. 进入「个人设置」->「访问令牌」。

    3. 生成一个新的 Token(勾选 repo 相关权限)。

    4. 在 Git 提示输入密码时,填入该 Token 而非登录密码。

    5. (可选) 更新凭据管理器:

      复制代码
      # 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 仓库地址。
  • 在项目文档中更新仓库链接。
  • 若旧仓库仍可读取,建议在一段时间后归档或标记为"只读/已迁移",防止误操作。
相关推荐
梅孔立3 小时前
Ansible 100 台服务器一键管控实战 进阶版
服务器·git·ansible
qq_4260039615 小时前
git切换当前分支到远程分支
git
ON10N18 小时前
100% 纯 Vibe Coding,我是怎么用 AI 撸出一个 VS Code 插件的
git·ai编程·visual studio code
Lunar*1 天前
告别臃肿!使用 git-filter-repo 优雅清理 Git 历史记录
git
tq10861 天前
agent 记忆 = markdown + json + git
人工智能·git
何以不说话1 天前
DevOps、Git 和 GitLab
git·gitlab·devops
最最菜的菜鸟1 天前
本地环境通过 SSH 协议访问 GitHub 上的仓库时,SSH 公钥认证失败,配置 Git SSH 密钥
git·ssh·github
无限进步_2 天前
21. 合并两个有序链表 - 题解与详细分析
c语言·开发语言·数据结构·git·链表·github·visual studio
宁静致远20212 天前
STM32CubeMX、MDK(Keil MDK)、git、vscode等工具中统一编码设置(UTF-8),确保中文支持,避免乱码问题
git·vscode·stm32