avatar

目录
保留git历史的情况下进行代码迁移

最近遇到了一种场景,需要把原有的代码从一个 repo 迁移到新的 repo,同时希望能保留 git 历史。如果只是简单的将文件从一个库迁移到另一个库,没法追溯 git 记录,以后也就不能随意的回退了,所以迁移的时候还是希望尽可能的保留 git 记录。

从网上找了一下方案,在此简单记录一下:

备份想要迁移的repo

plaintext
1
2
3
4
5
mdir testClone
cd testClone

git clone --brach --origin origi --progress -v
# eg: git clone --branch master --origin origin --progress -v https://github.com/ViolaTangxl/ViolaTangxl.github.io.git

删除原始库的关联

首先进入上一步 clone 下的目录,然后断开与远程原始库的链接(目前是避免不小心污染原始库)

plaintext
1
2
cd testClone
git remote rm orign

重写分支

这一步涉及了我之前没有使用过的 git 命令:git-filter-branch - 重写分支 (建议和我一样之前没有使用过的小伙伴看一眼文档, 具体使用不再赘述)

plaintext
1
git filter-branch --subdirectory-filter  -- --all 

清除无用的数据

plaintext
1
2
3
4
git reset --hard
git gc --aggressive
git prune
git clean -fd

移动文件到新文件夹 & git commit

plaintext
1
2
3
4
5
6
mkdir 
#eg mkdir newRepo
mv *
#eg mv * newRepo
git add .
git commit -m "xxxxx"

到此为止,对旧的repo的清理操作大概就结束了,接下来就是如何merge到新的repo中

在新repo中创建一个旧repo的远程连接

plaintext
1
2
git remote add testClone 
# eg. git remote add testClone ~/testClone

git pull想要的文件

plaintext
1
git pull testClone master --allow-unrelated-histories

移除上面的远程连接&提交文件

plaintext
1
2
git remote rm testClone
git push

最终,删除掉迁移用的testClone和其他无用的文件文件夹,包含git历史的文件就迁移到新repo中啦。

本菜平时是使用了一些基本的git命令,特此记录一下。内心觉得…命令这种东西吧,遇到去搜好了,能解决问题就ok,当然,用过最好还是有印象或者刻意记一下。就这样~

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2020/03/10/move-file-from-one-repo/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论