0


TortoiseGit 入门指南17:使用子模块

子模块简介

子模块(

submodule

)是一种将一个 Git 仓库作为另一个 Git 仓库的子目录进行管理的方法。它允许你将一个 Git 仓库嵌套到另一个仓库中,并保持提交的独立。

这对于管理依赖关系和共享代码非常有用。比如我有一个模块库

common

,里面有一些所有项目都可能会用到的模块,这些模块与硬件无关,但可能会修改和升级新功能。如果我在每个项目复制一份

common

文件,那么一段时间之后,各个项目的

common

文件夹内的文件会出现不一致。这个时候可以在项目中使用子模块。首先将

common

模块作为一个独立仓库,然后在实际项目仓库中引用

common

仓库。

子模块有以下几个用处:

  • 管理依赖关系:如果一个项目依赖于另一个项目的代码,可以将依赖的项目作为子模块引入到主项目中。这样,主项目可以轻松地跟踪依赖项目的更新,并确保使用的是正确版本的依赖代码。
  • 代码共享:子模块允许你将一个仓库的代码共享给多个项目。这对于复用代码和组件非常有用,可以避免重复的代码拷贝和维护工作。
  • 保持提交的独立:子模块保持了提交的独立性,即主项目和子模块的提交是分开进行的。这样可以确保子模块的开发和更新不会干扰到主项目的代码库。

使用 TortoiseGit 管理子模块

如果你想在自己的代码仓库中嵌入其它仓库,这称为引入子模块(Submodule)。使用右键菜单

TortoiseGit - Submodules Add

选项,弹出添加子模块对话框,可以将一个外部仓库嵌入到源代码树的专用子目录中。

在这里插入图片描述

  • Repository:外部仓库的路径,也可以为 URL
  • Path:保存外部仓库的路径,建议使用相对路径(相对仓库根目录,比如使用路径 .\common 会在仓库根目录下创建 common 文件夹)。
  • Branch:勾选后可以将外部仓储嵌入到指定分支,否则默认嵌入到当前分支。

点击 OK 按钮,TortoiseGit 会自动增加子模块并进行子模块克隆。

在这里插入图片描述
然后

common

文件夹内就包含有最新的文件了。

虽然

common

文件夹是工作目录中的一个子文件夹,但是 Git 还是会将它视作一个子模块,当你不在那个目录中时,Git 并不会跟踪它的内容,而是将它看作子模块仓库中的某个具体的提交。

如果一个仓库包含子模块,右键菜单会多出两个菜单项

Submodule Update

Submodule Sync

在这里插入图片描述

  • Submodule Update:初始化子模块、更新已注册的子模块,如下图所示:在这里插入图片描述 其中:1. Initialize submodules(--init):初始化子模块的本地配置文件。2. Recursive:当有嵌套的子模块时,递归更新这些子模块。3. Remote tracking branch:从远端仓库更新子模块,本地子模块更新到与远端仓库一致。
  • Submodule Sync:当子模块的URL在上游改变时,使用这个菜单更新本地存储库。

当子模块更改后,在使用子模块的项目中,在主目录、在非子模块文件夹右击鼠标,

pull

操作并不能将子模块修改的内容同步到项目中。在子模块文件夹右击鼠标,

pull 

操作可以将子模块修改的内容同步到项目中。在父目录右击鼠标,

pull

操作并不能将子模块修改的内容同步到项目中。

使用

Git Submodule Update...

并且勾选

Initialize submodules(--init)

Recursive

Remote tracking branch

时,可以将子模块修改的内容同步到项目。注意,如果不勾选

Remote tracking branch

选项,则不会与远端仓库同步,这样本地的信息可能是落后的。

子模块的使用模型

只使用子模块并不时地获取更新,而并不在你的检出中进行任何更改。此时只有更新子模块一种操作。

  • 方法1:右击子模块文件夹,选择Git Pull...,拉取最新的内容。然后提交一次,将子模块锁定为最新版本,并记录子模块更新。
  • 方法2:右击任意文件夹,选择Git Submodule Update...,将拉取内容并锁定为最新版本,然后提交一次,记录子模块更新。

导出的工程里面有子模块

通过

右键菜单 - Export...

导出程序。即使导出的程序里面有

.gitmodules

文件,也不能通过

Git Submodule Update...

菜单更新子模块,需要右键菜单

TortoiseGit - Submodules Add

选项,来新增子模块。


读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉

标签: TortoiseGit git

本文转载自: https://blog.csdn.net/zhzht19861011/article/details/131945875
版权归原作者 研究是为了理解 所有, 如有侵权,请联系我们删除。

“TortoiseGit 入门指南17:使用子模块”的评论:

还没有评论