1、在主仓库添加子仓库:
直接在主仓库路径下clone子仓库代码,如我的主仓库是test_git_master,clone到src/perception路径,clone完用git status查看,会提示有修改:
此时如果执行git add . 命令,会提示我们这修改和submodule相关;
将该子仓库加入主仓库:
git init #初始化一个git 本地仓库
git submodule add <sub_git_url> 相对路径 # <sub_git_url> :子仓库git地址 相对路径:子仓库.git相对于当前的路径,
#如我的是git submodule add http://192.168.1.000:8081/zhangsan/test_git.git src/perception/test_git
git commit -m "commit msg"
git push
此时再刷新gitlab网站,能看到子仓库已经被添加进去了
2、在主仓库里的子仓库进行修改并提交
在子仓库做一些修改,然后提交到子仓库,并在主仓库进行更新,子仓库有自己的工作区和.git目录,首先需要提交、推送子模块的更改:
cd path/to/submodule # 此处cd到子仓库目录下
git add .
git commit -m "msg"
git push
然后主仓库来跟踪更新:
cd /main_project #我的是test_git_master
git add path/to/submodule #比如git add src/perception/test_git
git commit -m "msg"
git push
此时刷新子仓库与主仓库gitlab网址,能发现它俩都被更新;
3、主仓库更新其他地方修改的子仓库
也就是子仓库在其他地方被修改并push,我们的主仓库以及其中的子仓库还没反应过来;
git submodule update --init #初始化版本
git submodule update --remote #更新到最新版本
4、clone已经添加子仓库的主仓库
和常规clone一样把主仓库clone下来,然后发现子仓库是空的,在主仓库目录执行:
git submodule init
git sumodule update --remote
这样子仓库代码就下载好了。