Git submodule---切换submodule的分支

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

你可能感兴趣的:(C++框架开发,PaddlePaddle开发)