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

如果你想在自己的代码仓库中嵌入其它仓库,这称为引入子模块 (Submodule)。使用右键菜单TortoiseGit - Submodules Add 选项,弹出添加子模块对话框,可以将一个外部仓库嵌入到源代码树的专用子目录中。

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

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

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

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

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

  • Submodule Update:初始化子模块、更新已注册的子模块
  • Initialize submodules(--init):初始化子模块的本地配置文件。

  • Recursive:当有嵌套的子模块时,递归更新这些子模块。

  • Remote tracking branch:从远端仓库更新子模块,本地子模块更新到与远端仓库一致。

  • Submodule Sync:当子模块的URL在上游改变时,使用这个菜单更新本地存储库。

当子模块更改后,在使用子模块的项目中,在主目录、在非子模块文件夹右击鼠标,pull 操作并不能将子模块修改的内容同步到项目中。在子模块文件夹右击鼠标,pull 操作可以将子模块修改的内容同步到项目中。在父目录右击鼠标,pull 操作并不能将子模块修改的内容同步到项目中。

使用 Git Submodule Update... 并且勾选 Initialize submodules(--init)RecursiveRemote tracking branch 时,可以将子模块修改的内容同步到项目。注意,如果不勾选 Remote tracking branch 选项,则不会与远端仓库同步,这样本地的信息可能是落后的,可能会把通过在子模块目录上右击鼠标,pull 操作获取的更新恢复成原来的旧版本。

子模块的使用模型

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

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

导出的工程里面有子模块

一个工程里面有子模块。

通过 右键菜单 - Export... 导出程序。

即使导出的程序里面有 .gitmodules 文件,也不能通过 Git Submodule Update... 菜单更新子模块。

需要右键菜单 TortoiseGit - Submodules Add 选项,来新增子模块。

相关推荐
高山莫衣4 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
码农藏经阁4 小时前
工作中常用的Git操作命令(一)
git
kobe_OKOK_5 小时前
【团队开发】git 操作流程
git·elasticsearch·团队开发
码农垦荒笔记5 小时前
Git 安装闭坑指南(仅 Windows 环境)
windows·git
CC码码15 小时前
管理你的多个 Git 密钥(多平台多账号)
git·gitlab·github
CC码码15 小时前
管理你的多个 Git 密钥(单平台多账号)
git·gitlab·github
大卫小东(Sheldon)15 小时前
GIM 1.5发布了! 支持Windows系统了
git·ai·rust
flying jiang15 小时前
将大仓库拆分为多个小仓库
git
李boyang10 天前
Git(四):远程操作
git
荻野泽溪10 天前
Git新建分支并同步到远程
git