git submodule小记

这是一篇记录git submodule中存在的坑的文档

引用一个模块的命令

git submodule add http://your-submodule-url.com/ local/path

这个命令可以将一个子模块添加到当前的主仓库中(注意,这样添加的是最新版的)

运行该命令的路径,为主仓库的根目录

 

这个git submodule有一些坑爹的地方

首先,在云端,git submodule所引用的模块,并非永远追踪最新的模块,而是追踪被引用模块的特定版本号的内容

不管子模块如何更新,只要主模块中不修改对应的id,则永远克隆老的id

如下图所示,引用的两个problem_analyzer后面的@的编号(提交id)有所区别

 

 下图为提交记录,可以看到主模块所引用的子模块,并非都是最新的提交ID

 

同时更新本地和云端的主仓库至最新的办法

首先,运行git pull以保证本地为最新代码

随后,运行git submodule update --init --recursive 下载全部的子模块代码(但可能是revision)

接着,运行git submodule update --remote --merge 下载全部的子模块的最新代码(将本地的代码全部都升级到latest,但远程的依然还不是latest)

然后,运行git diff,根据输出的数据,你可以看到有哪一些子模块的本地和云端版本不同

 

 

随后,运行git add . (注意点)以更新引用仓库的编号信息

最后,运行git commit和git push以更新云端的子模块版本号

命令如下

git pull
git submodule update --init --recursive
git submodule update --remote --merge
git diff
git add .
git commit -m "update submodule"
git push origin main
posted @ 2024-06-15 21:07  AlphaInf  阅读(40)  评论(0编辑  收藏  举报