将 Gitee 混合项目仓库拆分并精准迁移至 GitHub(保留完整 Commit 历史)

实战:将 Gitee 混合项目仓库拆分并精准迁移至 GitHub(保留完整 Commit 历史)

  • [将 Gitee 混合项目仓库拆分并精准迁移至 GitHub](#将 Gitee 混合项目仓库拆分并精准迁移至 GitHub)
    • [🚀 背景介绍](#🚀 背景介绍)
    • [🛠️ 迁移三步走](#🛠️ 迁移三步走)
      • 第一步:准备本地工作区
      • [第二步:利用 git subtree 拆分历史](#第二步:利用 git subtree 拆分历史)
      • [第三步:精准推送到 GitHub](#第三步:精准推送到 GitHub)
    • [🔐 避坑指南:GitHub 身份验证与安全防护](#🔐 避坑指南:GitHub 身份验证与安全防护)
    • [💡 后续开发建议](#💡 后续开发建议)

将 Gitee 混合项目仓库拆分并精准迁移至 GitHub

🚀 背景介绍

在开发初期,我们常为了方便将多个小项目放在同一个 Gitee 仓库的不同子文件夹中。但随着项目成熟,我们需要将它们拆分出来,迁移到 GitHub 建立独立的仓库。

挑战点:

  1. 历史记录不能丢:必须保留每个项目的每一次提交记录。
  2. 路径归位:迁移后,子文件夹的内容要变成新仓库的根目录。
  3. 安全防护:GitHub 的 Secret 扫描机制会拦截包含敏感信息(如 AccessKey)的代码推送。

🛠️ 迁移三步走

假设原 Gitee 仓库为 project.git,内含 java_gobanglottery-system 两个子文件夹。

第一步:准备本地工作区

克隆原仓库并进入临时目录:

powershell 复制代码
git clone https://gitee.com/sweet-ren/project.git migration_tmp
cd migration_tmp

第二步:利用 git subtree 拆分历史

git subtree 是 Git 的高级命令,能够从主仓库中提取某个特定目录的提交历史,并生成一个全新的本地分支。

powershell 复制代码
# 1. 提取 java_gobang 的历史到 split_gobang 分支
git subtree split --prefix=java_gobang -b split_gobang

# 2. 提取 lottery-system 的历史到 split_lottery 分支
git subtree split --prefix=lottery-system -b split_lottery

第三步:精准推送到 GitHub

由于 GitHub 默认分支已改为 main,我们使用冒号语法进行推送:

powershell 复制代码
# 推送五子棋项目
git push https://github.com/您的用户名/java_gobang.git split_gobang:main

# 推送抽奖系统项目
git push https://github.com/您的用户名/lottery-system.git split_lottery:main

🔐 避坑指南:GitHub 身份验证与安全防护

  1. 身份认证 (Token)
    GitHub 目前强制要求使用 Personal Access Token (PAT) 替代密码。
    入口:Settings > Developer settings > Tokens (classic)。
    权限:必须勾选 repo。
    使用:推送时在密码框输入生成的 ghp_... 字符串。
  2. 拦截处理 (Push Protection)
    如果您代码中包含了云服务的 AccessKey,GitHub 会抛出 GH013: Repository rule violations 错误。
    原因:GitHub 检测到敏感信息泄露。
    解决:GitHub 会在报错信息中提供一个 Unblock Secret URL。点击该链接并在网页中确认允许推送(建议仅对测试用 Key 这样做),然后重新执行推送命令即可。

💡 后续开发建议

迁移完成后,建议采用以下方式管理敏感信息,避免再次被拦截:

.gitignore:将包含 Key 的配置文件加入忽略列表。

环境变量:在代码中使用 ${MY_KEY} 占位符,通过系统环境变量注入真实值。

模板文件:提供 application.properties.example 供他人参考。


🎯 总结

通过 git subtree split 命令,我们实现了:

子文件夹层级自动归位(不再有多余的父目录)。

100% 保留了每一条 Commit 记录。

成功绕过 GitHub 安全拦截。

迁移成功,开启 GitHub 协作新篇章!

相关推荐
孪生质数-1 小时前
AI Agent 工程实践(一):大模型 API 接入示范
网络·人工智能·ai·chatgpt·github·claude·claudecode
fthux2 小时前
装闭 RenoPit 源码解析(13):生成AI装修闭坑PDF报告
人工智能·ai·pdf·开源·github
TunerT_TQ2 小时前
Valhalla 静态工程审阅 #007|AgentENV 源码证据驱动评测【大厂开源基础设施特辑】
rust·开源·go·github·sandbox·分布式系统·ai基础设施
小泊客3 小时前
友善R5C刷OpenWrt后RTL8822CE无线网卡显示“禁用”或“未激活”的完整解决方案
linux·github·运维开发
tokenKe4 小时前
OpenWork:把 AI Agent 工作台 从订阅制变成开源 + 本地的革命 | SSP Github Daily
人工智能·开源·github
yanlaifan4 小时前
Github有没有类似GitLab CI/CD的功能
github
蓝斯4974 小时前
C# 调用邮箱应用发送带附件的邮件
网络·c#·github
TunerT_TQ4 小时前
GitHub深度工程评测:Cline 源码级工程评测|65k Star 开源AI编程助手的工程全景
typescript·开源·github·vs code·ai编程助手·开源供应链安全·静态源码审计
m4Rk_5 小时前
【论文阅读】Agent 记忆机制(26):Infini Memory——将长期记忆维护成可读写的主题文档
论文阅读·人工智能·学习·开源·github
打妖妖灵滴哪吒14 小时前
github创建远程仓库+推送代码(图文版)
github