Fork me on GitHub

代码仓库迁移-保留历史提交记录和分支

一、项目仓库迁移,保留提交记录和分支

主要有以下几种方法:

1. 使用 GitHub 的 Import 功能 (推荐,最简单):

  • 在 GitHub 上新建一个空的仓库。
  • 在新仓库的 “Import code” 页面,输入原仓库的地址 (例如:https://github.com/username/original-repo.git https://gitlab.com/username/original-repo.git )。
  • GitHub 会自动克隆原仓库,包括所有分支和提交记录。

2. 使用 git clone --mirrorgit push --mirror (命令行,更灵活):

这是最常用的方法,适用于从任何 Git 平台迁移到另一个。

# 克隆原仓库,使用 --mirror 选项保留所有分支和引用。在终端执行(将 URL 替换为你的原始仓库地址)
git clone --mirror https://github.com/username/old-repo.git
# 或使用 SSH 地址
# git clone --mirror git@github.com:username/old-repo.git

# 进入克隆后的仓库(注意带有 .git 后缀)
cd old-repo.git

# 添加新仓库的远程地址
git remote add origin <新仓库地址>
# 或修改远程地址指向新仓库
# git remote set-url origin git@github.com:username/new-repo.git

# 推送所有内容到新仓库,使用 --mirror 选项确保所有分支和引用都被推送
git push --mirror 

遇到问题:! [remote rejected] master -> master (pre-receive hook declined)

原因:权限问题,Develop角色默认下没有远程访问master的权限

解决方案:

方案一:在项目的【Setting】中的【Protected branches】可以设置哪些分支是被保护的,默认情况下【master】分支是处于被保护状态下的,develop角色的人是无法提交到master分支的,在下面的【Developers can push】打上钩就可以了。

方案二:使用其他分支push 入

#方案二:
git checkout -b 分支名
git add .
git commit -m "提交的信息"
git remote add origin 远程仓库地址
git push -u origin 分支名

3. 使用 使用 git push --all 和 git push --tags (命令行,简单但可能不完整):

这种方法相对简单,但可能不会迁移所有引用,例如 GitHub Actions workflows 或 protected branches 的设置。

# 克隆原仓库
git clone <原仓库地址>

# 进入克隆后的仓库
cd <新仓库本地目录>

# 添加新仓库的远程地址
git remote add origin <新仓库地址>

# 推送所有分支
git push --all origin

# 推送所有标签
git push --tags origin

4. Fork (仅限在同一平台内,例如 GitHub 到 GitHub):

  • 在原仓库页面点击 "Fork" 按钮。
  • 这会在你的账户下创建一个原仓库的副本。
  • 如果你需要将 Fork 后的仓库转移到另一个组织或用户,可以在仓库设置中更改 ownership。

选择哪种方法?

  • GitHub Import: 最简单,推荐首选,尤其适用于从其他平台迁移到 GitHub。
  • git clone --mirrorgit push --mirror: 最灵活,适用于任何 Git 平台之间的迁移,也是最完整的迁移方式,推荐用于复杂项目。
  • git push --allgit push --tags: 简单,但可能不完整,适用于简单的项目。
  • Fork: 仅限同一平台内部迁移,方便快捷,但需要额外的步骤来转移 ownership。

迁移后检查:

  • 确认所有分支都已迁移:git branch -a
  • 确认提交记录完整:git log
  • 确认标签已迁移:git tag

一些额外的提示:

  • 如果你的仓库很大,迁移可能需要一些时间。
  • 确保你有新仓库的写入权限。
  • 如果使用 SSH 方式连接,确保你的 SSH key 已添加到新平台的账户中.
  • 对于私有仓库,需要在新平台上重新设置访问权限。
  • 一些 CI/CD 配置可能需要在新仓库中重新配置。

 

二、项目仓库迁移,迁移一个分支和提交记录

从A仓库只推送某个分支到B仓库,终端验证操作截图如下:

 

要将 A仓库 的某个特定分支(例如 分支a)推送到 B仓库,并保留提交历史,可以按照以下步骤操作:

步骤 1:克隆 A 仓库(如果尚未克隆)

git clone https://github.com/username/old-repo.git
cd old-repo # 进入克隆后的仓库

假设将A仓库已存在的develop/migration分支推送到B仓库,先拉分支代码,再切换分支

git fetch origin develop/migration
git checkout develop/migration

步骤 2:添加 B 仓库作为新的远程仓库

git remote add new-origin git@github.com:username/new-repo.git

步骤 3:推送 分支a 到 B 仓库

方法 1:直接推送(如果 B 仓库允许)

git push new-origin 分支a:分支a
  • 如果 分支a 在 B 仓库不存在,会直接创建。
  • 如果 B 仓库已有 分支a,但允许强制推送(--force),可以:
git push new-origin 分支a:分支a --force

方法 2:先拉取 B 仓库的 分支a(如果已存在)

如果 B 仓库已有 分支a,并且不能强制推送(--force),可以尝试:

git fetch new-origin 分支a
git checkout 分支a
git merge new-origin/分支a  # 或使用 `git rebase`
git push new-origin 分支a

步骤 4:验证推送是否成功

git remote -v  # 查看远程仓库
git branch -a  # 查看所有分支
git log --oneline  # 检查提交历史

 


posted @ 2025-05-08 14:06  极度恐慌_JG  阅读(682)  评论(0)    收藏  举报