一、两种子仓库方案介绍
-
submodule:类似于引用
-
subTree:类似于拷贝
场景例子:在一篇博客中想用到你另一篇博客的内容,git submodule是使用那篇博客的链接,而git subtree则是将内容完全copy过来。
-
优劣
subtree
与submodule
的作用是一样的,但是subtree
出现得比submodule
晚,它的出现是为了弥补submodule
存在的问题:1、
submodule
不能在父版本库中修改子版本库的代码,只能在子版本库中修改,是单向的
2、submodule
没有直接删除子版本库的功能 -
二者共同缺陷 - 分支管理不便
submodule更新子仓库代码后,关联的是commit,需手动切换到相应分支再进行开发。
subtree无法在编译器同一窗口对子仓库分支直接管理,以及无法查看关联的子仓库分支或commit。
-
相关命令超链
二、推荐方案 submodule,原因如下
属于子仓库的代码希望能由子仓库直接接管,subtree是双向的,容易导致漏合代码到子仓库
能够随时查看git origin的一个更新状态
能够在同一编译器窗口下对子仓库的分支进行管理,如合并切换等操作,更便捷
支持foreach更新所有子仓库:git submodule foreach git pull
操作命令更简易
三、技术难点及解决方案
-
难点
子仓库分支与主仓库分支不会主动关联,不便管理,开发中需要较为小心 -
解决方案
增加branch node脚本,支持主仓库子仓库同频branch操作,保证主、子分支一致性
四、方案超链
git submodule使用 解决同频操作分支难点_阿东、的博客-CSDN博客
五、jenkins配置
stage('Git-pull') {
// 从Git中clone代码
git branch: "${currentBranch}", url: "${gitRepo}"
// 子仓库初始化并更新
sh "git submodule update --init"
}