1 submoude 介绍
(1)项目很大参与开发人员多的时候,需要将各个模块文件进行抽离单独管理。
(2)使用git submodule来对项目文件做成模块抽离,抽离出来的文件可单独成为一个git仓库。整个主项目对抽离出来的子项目(子模块)有依赖关系,却又并不关心子项目(子模块)的内部开发流程细节;
(3)代码如果全员可见,可以做成分支进行管理;如果代码不可见,可以创建为子仓库(独立一个git 仓库);子仓库管理模块代码,主仓库定时更新
(4)简单理解:项目工程为一个仓库;模块为一个仓库;主仓库操作git module命令来使用这个模块子仓库;主项目,子模块可由不同的开发人员维护。
2 带Submodule 模块的主项目仓库环境搭建
(1)克隆一个主项目仓库git_test
命令:git clone git@gitee.com:monkeyqiyu/git_test.git
(2)添加模块子仓库的路径到主项目中
执行添加子仓库的命令:
git submodule add git@gitee.com:monkeyqiyu/git_submodule.git
//其中模块即子仓库的路径为:git@gitee.com:monkeyqiyu/git_submodule.git
子模块仓库:
注:git submodule 还支持嵌套开发
(3)提交代码到远程仓库
git add .
git commit - m “添加子仓库到主仓库”
git push origin master
3 带Submodule 模块的主项目开发操作流程
3.1主仓库开发人员A克隆代码进行开发
(1)克隆主仓库代码,子仓库代码为空
git clone git@gitee.com:monkeyqiyu/git_test.git
(2)执行以下命令,获取子仓库代码:
git submodule init //初始化子仓库
git submodule update //获取子仓库最新代码
或者直接执行:git submodule update --init --recursive
3.2子仓库和主仓库修改后操作
(1) 非子仓库代码修改跟普通git操作一样提交代码
(2)主仓库由开发人员A开发,子仓库由开发人员B进行开发:
【1】发人员B开发完后提交代码到远程仓库;
【2】开发人员A要对submodule 模块进行更新
要执行下限命令对submodule进行更新,会更新最新的内容和commit id:
git submodule update --remote
再回到主项目仓库,对主项目进行一次提交,推送;把关联子仓库新的commit id提交推送到远程,下次克隆使用才不会出错!
远仓库主仓库中的子模块commit id有更新,点击会跳到子仓库
3. 3 开发人员A同时管理主仓库和子仓库:
【1】子仓库代码有修改,要进入子仓库目录进行一次代码提交,推送远程
git add .
git commit -m "修改index = 100"
git push origin HEAD:master
【2】再回到主项目仓库,对主项目进行一次提交,推送
git add .
git commit -m "更新子仓库index = 100"
git push origin master
注:
如果直接在主仓库目录执行git add .是不起作用的(可以使用git status查看 生效情况,只要子项目有修改,当我们进入主项目使用 git status查看状态 都会有子项目修改的记录);
必须先提交推送子仓库代码,然后到主仓库路径提交一次子仓库的更新;
4 主仓库中删除子仓库
(1)执行要删除的部分
rm -rf 子模块目录 //删除子模块目录及源码
vi .gitmodules //删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config //删除配置项中子模块相关条目
rm .git/module/* //删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可
git rm --cached 子模块名称
(2)重新提交推送到远程仓库
5、submodule 注意事项
(1)当远程仓库的 submodule 进行了新的提交,父代码仓库的 submodule 不会自动更新 (执行git pull 或gitsubmodule update也无用)
(2)主工程并不直接跟踪子模块的代码,而仅仅只跟踪子模块的 commit id 的改动。在执行 git submodule update 更新子模块代码时,Git 就是根据主工程所维护的 commit id 来更新子模块到指定状态的。文章来源:https://www.toymoban.com/news/detail-744615.html
(3)在子模块中修改并提交了代码,必须到主工程把子模块的 commit id 提交一下提交一次;否则其它开发人员还是停留在老的commit id所致的状态文章来源地址https://www.toymoban.com/news/detail-744615.html
到了这里,关于git submodule 使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!