用 Git Subtree 在多个 Git 项目间双向同步子项目
大家在实际的git项目开发中有没有遇到过这么一种情况,就是一个git仓库的某一个目录独立一个新的 git 仓库,但又希望能够保留这部分代码的历史提交记录,那么这个时候就可以使用Git Subtree的功能了。下面我会以一个实例来进行相关的介绍。
一.什么时候需要 Subtree
1、当多个项目共用同一坨代码,而这坨代码跟着项目在快速更新的时候
2、把一部分代码迁移出去独立为一个新的 git 仓库,但又希望能够保留这部分代码的历史提交记录。
二.Git Subtree具体实例说明
假设,你要在各个项目里的idh.code/xxx这个目录对 git@172.16.2.199:xxx这个项目做Subtree
1.首先必须确保各个项目已经添加xxx这个 remote(关于remote是什么可以看这里):
git remote add xxx git@172.16.2.199:xxx
2.将xxx添加到各个项目里
git subtree add --prefix=idh.code/xxx xxx master --squash
其中--squash的使用大家可以百度搜索一下
3.各项目更新xxx代码的方法:
git subtree pull --prefix=idh.code/xxx xxx master --squash
4.各项目提交xxx代码的方法:
git subtree push --prefix=idh.code/xxx xxx xxx/xxx_xxxx
这会在远程的xxx的仓库里生成一个叫 xxx/xxx_xxxx 的的分支,包含了你过去对idh.code/xxx所有的更改记录(本人实际开发工作中,只需要pull xxx分支的所以不会进行这一步操作)
5.把xxx/xxx_xxxx分支更新并合并到master并提交
这样其他工程就可以更新到你提交的代码了。
具体的脚本如下:
git remote rm xxx
git remote add xxx git@172.16.2.199:xxx
if [ ! -d "idh.code/xxx" ];then
git subtree add --prefix=idh.code/xxx xxx master --squash
else
echo "xxx directory exist!"
git subtree pull --prefix=idh.code/xxx xxx master --squash
fi
参考的博客文章如下: