文章目录
前言
一个中大型项目往往会依赖几个模块,git
提供了子库的概念。可以将这些子模块存放在不同的仓库中,通过submodule
或subtree
实现仓库的嵌套。本讲为Git
应用详解的倒数第二讲,胜利离我们不远了!
一、submodule
submodule
:子模块的意思,表示将一个版本库作为子库引入到另一个版本库中:
1.引入子库
需要使用如下命令:
git submodule add 子库地址 保存目录
比如:
git submodule add git@github.com:AhuntSun/git_child.git mymodule
执行上述命令会将地址对应的远程仓库作为子库,保存到当前版本库的mymodule
目录下:
随后查看当前版本库的状态:
可以发现新增了两个文件。查看其中的.gitmodules
文件:
可以看到当前文件的路径和子模块的url
,随后将这两个新增文件添加、提交并推送。在当前仓库git_parent
对应的远程仓库中多出了两个文件:
其中mymodule
文件夹上的3bd7f76
对应的是子仓库git_child
中的最新提交:
点击mymodule
文件夹,会自动跳转到子仓库中:
通过上述分析,可以得出结论:两个仓库已经关联起来了,并且仓库git_child
为仓库git_parent
的子仓库;
2.同步子库变化
当被依赖的子版本库发生变化时:在子版本库git_child
中新增文件world.txt
并提交到远程仓库:
这个时候依赖它的父版本库git_parent
要如何感知这一变化呢?
方法一
这个时候git_parent
只需要进入存放子库git_child
的目录mymodule
,执行git pull
就能将子版本库git_child
的更新拉取到本地:
方法二
当父版本库git_parent
依赖的多个子版本库都发生变化时,可以采用如下方法遍历更新所有子库:首先回到版本库主目录,执行以下指令:
git submodule foreach git pull
该命令会遍历当前版本库所依赖的所有子版本库,并将它们的更新拉取到父版本库git_parent
:
拉取完成后,查看状态,发现mymodule
目录下文件发生了变化,所以需要执行一次添加、提交、推送操作:
</