git仓库迁移,保留提交记录--Mac版

430 阅读2分钟

注意 !!!

进行 git 仓库操作时 源仓库建议将所有分支锁定 目标仓库建议拉取独立分支操作 其他分支锁定

环境准备

  • macos
  • git版本要求 >= 2.22.0
  • homebrew

1. 使用 homebrew 安装 git-filter-repo

git-filter-repo 文档

    brew install git-filter-repo

    # 安装完成后 执行brew ls 查看是否安装成功

2.源仓库根目录迁移到目标仓库/a/b文件夹下

  • 源仓库 git url http://testa.git
  • 源分支 feature-a
  • 源目录 /
  • 目标仓库 url http://testb.git
  • 目标分支 main
  • 目标目录 /a/b

备注解释:

将源仓库中的根目录所有文件迁移到目标仓库 /a/b 文件夹下,并保留所有 commit

2.1 克隆源仓库指定分支

git clone --branch feature-a http://testa.git

命令解释:

克隆源仓库的指定分支 feature-a

注意克隆完后在这个仓库不要进行任何操作

2.2 进行 commit 裁剪处理

    # cd 到克隆下来的文件夹
    cd ./testa

   git filter-repo --to-subdirectory-filter a/b

命令解释:

为当前分支根目录下的所有文件 commit 路径增加/a/b 前缀

/a/b 也就是你要迁移的仓库目录

2.3 添加远程仓库进行推送

    
   # 推送前用idea或者vscode查看修剪后的git仓库

   # 增加git remote 地址
   git remote add source http://testb.git

   # 查看远程仓库地址是否添加成功
   git remote -v

   # 结果应该是
   # source	http://testb.git (fetch)
   # source	http://testb.git (push)

   # 拉取source远程仓库的目标分支的代码
   git pull --no-rebase --allow-unrelated-histories source main

   # 然后会进入命令行编辑器界面 输入提交信息后 按一下esc键 输入 :wq 保存退出

   # 推送裁剪后的commit到source远程仓库 main分支
   git push source HEAD:main

   # 迁移完毕 进入目标仓库中查看

3. 源仓库/a/b目录下的所有文件迁移到目标仓库/c/d文件夹下

  • 源仓库 git url http://testa.git
  • 源分支 main
  • 源目录 /a/b
  • 目标仓库 url http://testb.git
  • 目标分支 main
  • 目标目录 /c/b

备注解释:

将源仓库中的/a/b所有文件迁移到目标仓库 /c/d 文件夹下,并保留所有 commit

3.1 克隆源仓库指定分支

git clone --branch main http://testa.git

命令解释:

克隆源仓库的指定分支 main

注意克隆完后在这个仓库不要进行任何操作

3.2 进行 commit 裁剪处理

   # cd 到克隆下来的文件夹
   cd ./testa

   git filter-repo --subdirectory-filter a/b

   git filter-repo --to-subdirectory-filter c/d

命令解释:

  • 将 b 文件夹下所有文件提取到根目录
  • 为当前分支根目录下的所有文件 commit 路径增加/a/b 前缀

3.3 添加远程仓库进行推送 步骤同 2.3

其他

brew 卸载 git-filter-repo

brew uninstall git-filter-repo

brew autoremove

brew cleanup