learning_record_doc/git/gitbash/git submodule 用法.md
2023-02-07 00:39:45 +08:00

4.2 KiB
Raw Permalink Blame History

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

前言

当我们的项目很大很复杂的时候,需要将各个模块文件进行抽离,以此来降低项目文件之间的耦合程度。(当然你项目不大不复杂也可以使用,看个人喜好啦!!!)这个时候就可以使用 git submodule 来对项目文件进行抽离,最终使抽离出来的文件可以单独成为一个 git 仓库。这样做的好处是整个主项目对抽离出来的子项目(子模块)有依赖关系,却又并不关心子项目(子模块)的内部开发流程细节。

一、使用步骤

1、首先创建一个主项目文件夹里面包含的是我们后期开发所有需要的资源

主项目名称submoduleTest
子项目名称my_common在主项目中通过命令git submodule add 'my_common的仓库地址'

操作指示:

mkdir tt 创建文件夹tt也可以手动创建一个文件夹
cd tt  进入创建的文件tt也可以利用常用的开发工具打开创建的文件,后续操作都在命令行进行哦!)
git clone git@github.com:xxx/submoduleTest.git 将远程git中创建的的主项目clone下来
cd submoduleTest 进入主项目submoduleTest
git submodule add git@github.com:xxx/my_common.git  在主项目中添加一个字项目

提示:此时项目中就会多出这个 my_common 文件,隶属于这个 git@github.com:xxx/my_common.git 仓库,是独立于主项目存在的。然后主项目中也会多一个. gitmodules 文件,对应的是 my_common 仓库的信息。

项目结构

2. 提交本次的修改

此时可以在主项目中提交一次代码就完成了一个简易的包含了主子项目的demo了。

git commit -m '修改描述'	
git pull origin master
git push origin master

二、获取操作(前提是这个项目已经完成了上述第一大步的工作)

我们在最初拉取这一整个项目的时候获取到的只有包含主项目中的最新代码而子项目my_common中是空空如也滴。那就需要我们在最初获取项目的时候使用两个指令来完成这一系例操作的。

cd submoduleTest
git submodule init  初始化子项目
git submodule update 对子项目获取远程项目中最新的状态

提示:这个时候 my_common 中就可以看到远程仓库中最新的代码和更新了。那么这个时候就可以进行正常开发流程了!

三、日常开发操作

提问?在开发中如果更新代码了要怎么提交到远程仓库呢?

大可不必担心操作有多麻烦---我们只需像日常开发过程中提交代码一样!!!唯一不同的是:

	1、需要进入到子项目中对本次更新的代码进行一次提交操作并推送到远程。
	2、再回退到主项目中对主项目进行一次提交、推送。

注意:不管主项目中的是否有更新,只要子项目中修改过代码并提交过,主项目就需要再提交一次,因为子项目的修改是会同步到主项目中的,这样才能保证开发的一致性!

只要子项目有修改,当我们进入主项目使用 git status查看状态 都会有子项目修改的记录滴!
然后日常开发的时候,不要忘记同步去子项目提交更新一下代码就可以了。记住了!!!!!!!(因为本人在实际开发中初次接触的时候有忘过几次!)

四、总结

总的来说这个 submodule 还是用处挺大的!
本人的最大感触就是:可以让功能性比较强大的封装好的组件独立存在于一个文件中,放到远程仓库中独立维护。这样不管后面我们做啥项目,需要用到时候就可以直接在项目中拉取这个封装好的组件仓库拿来即用,不需要再写组件封住啥的啦(或者去其他地方复制粘帖)。