摘要:

  • git submodule就是git主仓库在本仓库的配置中记录着子模块仓库对应的名字,路径,远端url,然后创建一个特殊文件去记录子模块仓库目前的commit-id,每次更新子模块就是通过远端路径和commit-id来进行更新

参考文章

Git Submodule使用完整教程 - 咖啡兔 - HenryYan

Git 子模块的原理

.git/config.gitmodules中记录的子模块仓库的远端地址和路径,然后使用一个特殊的模式为160000的文件来记录子模块仓库当前的commit id

Git 子模块的添加

1
git submodule add origin:/submd/repos/lib2.git libs/lib2 # 添加远端origin上的仓库lib2到当前仓库的libs/lib2位置

Git 子模块的初始化及更新

git submodule init会初始化当前仓库中存在的子模块(根据.gitmodules文件去查找子模块)。

git submodule update就是更新当前仓库存在子模块,拉取最新代码。

git submodule update是根据父仓库中记录的子模块仓库的commit-id去更新子模块仓库,如果子模块仓库commit了但是父仓库并没有add,那么git submodule update会还原子模块仓库的提交。

git submodule foreach <command> 进入到每个子模块,然后执行<command>命令

Git 子模块的移除

执行以下命令删除 Git 子模块,相关内容请参考Stack Overflow

1
2
git rm the_submodule
rm -rf .git/modules/the_submodule