背景:什么是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下载的分支。需要继续研究一下。