背景:什么是submodule,有什么用?

git submodule是git的一个功能,可以将其他的github工程加入到自己的项目里。通常与cmake  `ExternalProject_Add`命令相结合。

下载第三方库,然后编译,在我们的工程中调用。

举例: Paddle-Lite通过submodule调用gflag 和protobuf,编译后作为一个第三方库在Paddle-Lite源码中调用。

(0)如何查看Submodule

git submodule

(1)如何修改submodule — 修改其版本(github tag)

问题描述:Paddle-Lite调用的protobuf版本为3.1.0 ,通过submodule定义的。(执行时会下载protobuf源码到Paddle-Lite/third-party,然后编译到 build/third_party/install。)  我想修改protobuf版本为3.2.0,如何做到。

解决方法:修改submodule的tag号。

参考:添加Git子模块时如何指定分支/标记?

基础概念: git添加一个submodule,只需要添加该module的github源码地址,不需要设置tag。但是submodule下载下来的源码其实是有tag,而且是稳定不会改变的tag。

如何修改:进入到submodule对应的文件夹地址,git checkout 切换到你想要的tag , git add dirname 。git commit 、git push.

总的说就是 git submodule 指定第三方库的源地址和下载到那个目录,这个目标目录保存了github信息就是git tag。两者结合实现了submodule 下载第三方库源码并切换到指定分支。所以想换submodule的分支或tag,只需要修改文件夹就可以(git checkout ..)

示例代码:

cd submodule_directory

git checkout v1.0

cd ..

git add submodule_directory

git commit -m “moved submodule to v1.0”

git push

注:其他submodule基础方法

(3)运行下面命令可以实现下载submodule源码

git submodule update –init –recursive

(4)其实cmake中的ExternalProject_Add也可以切换分支。但不知道为什么和submodule结合没有成功,最后的分支只是submodule下载的分支。需要继续研究一下。


版权声明:本文为weixin_39673293原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39673293/article/details/111786946