0


git submodule 使用教程

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 来更新子模块到指定状态的。

(3)在子模块中修改并提交了代码,必须到主工程把子模块的 commit id 提交一下提交一次;否则其它开发人员还是停留在老的commit id所致的状态

标签: git github

本文转载自: https://blog.csdn.net/weixin_42107504/article/details/129696242
版权归原作者 卓学课堂 所有, 如有侵权,请联系我们删除。

“git submodule 使用教程”的评论:

还没有评论