前言
简略清晰的代码构造有利于我的项目代码的治理。OneOS-Lite
应用 git submodule
的形式来进行代码的治理。
其中,OneOS-Lite
仓库为主存储库。而内核 kernel
,以及组件components
和驱动 drivers
都将作为子模块的模式和 OneOS-Lite
主仓库关联治理。
检索子模块
该命令 git submodule
能够查看主仓库中,已有的子模块或子仓库。
$ git submodule
-ba2c4170016ff14db298c5e87134704996c5aff5 thirdparty/cJSON
-e99c7b71349f74804eb215c59fa426bf5a357d8f thirdparty/telnetd
拿以上举例:
-
代表该子模块仓库源码文件还未检入(空文件夹),没有-
代表已检入;e99c7b71349f74804eb215c59fa426bf5a357d8f
代表该子模块组件和OneOS-Lite
所关联的版本 id;thirdparty/telnetd
代表该子模块仓库对应的目录和其组件名称。
获取子模块
应用 git clone
是不会把子模块仓库源码文件检入的,只会把拉取下来对应子模块组件的空文件夹。这时,如果须要应用某个子模块组件,能够应用以下命令:
git submodule init
git submodule update xxx(子模块组件名,可通过 git submodule 查看已有的奉献组件)
举个栗子:
$ git submodule init
Submodule 'thirdparty/cJSON' (git@10.12.3.198:luoshunyuan/cJSON.git) registered for path 'thirdparty/cJSON'
Submodule 'thirdparty/telnetd' (git@10.12.3.198:luoshunyuan/telnetd.git) registered for path 'thirdparty/telnetd'
$ git submodule update thirdparty/telnetd
Cloning into 'D:/xiaoneng/oneos-2.0-test/thirdparty/telnetd'...
Authorized users only. All activity may be monitored and reported.
Submodule path 'thirdparty/telnetd': checked out 'e99c7b71349f74804eb215c59fa426bf5a357d8f'
如果须要获取所有子模块仓库,能够间接应用git submodule update
。
关联子模块
通过我的项目根目录下的一个 .gitmodules
文件,能够发现曾经关联的子仓库,每增加一个子模块仓库就会新增一条记录。内容如下:
[submodule "thirdparty/telnetd"]
path = thirdparty/telnetd
url = git@10.12.3.198:luoshunyuan/telnetd.git
[submodule "thirdparty/cJSON"]
path = cJSON
url = git@10.12.3.198:luoshunyuan/cJSON.git
持续关联新的子模块能够应用如下 git
命令,这里以 telnetd
为例:
git submodule add git@10.12.3.198:luoshunyuan/telnetd.git thirdparty/telnetd
如果须要更改子仓库,可先在对应的子仓库目录中,关上 git
命令行,进入对应奉献组件的 git 仓库治理,并执行代码提交操作:
因为批改了子模块仓库代码并提交了,然而主仓库的指针仍旧指向那个老的子仓库的 commit id
,如果不提交这个批改的话,他人拉取主我的项目并且应用git submodule update
更新子模块还是会拉取到批改前的代码。
因而,这时候须要把主我的项目进行提交更新。
删除废除组件
当某些子仓库不须要了,须要废除,删除的时候,git
没有间接删除子模块的命令,所以只能逐渐删除相干文件:
-
在版本控制中删除子模块:
git rm -r thirdparty/cJSON
-
在编辑器中删除
.gitmodules
相干内容:[submodule "thirdparty/cJSON"] path = thirdparty/cJSON url = git@10.12.3.198:luoshunyuan/cJSON.git
-
在编辑器中删除
.git/config
相干内容:[submodule "thirdparty/cJSON"] url = git@10.12.3.198:luoshunyuan/cJSON.git active = true
-
删除
.git
下的缓存模块:rm -rf .git/modules/thirdparty/cJSON
-
提交批改:
git commit -am "delete submodule" git push
关注 && 分割
gitee:https://gitee.com/cmcc-oneos/OneOS-Lite
docs:https://oneos-lite.com/
公众号:CMCC-OneOS