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