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 选项,来新增子模块。

相关推荐
即使再小的船也能远航2 小时前
【Git】实用Git操作指南:从入门到高效协作
git
<但凡.12 小时前
Git 完全手册:从入门到团队协作实战(4)
git·bash
SugarPPig13 小时前
Git 创建一个完全没有提交历史的 master 分支
git
lb29171 天前
git的使用,推送仓库github
git·github
躲在云朵里`1 天前
Git的使用
大数据·git·elasticsearch
悟能不能悟2 天前
在 IntelliJ IDEA 中打开这个用于设置 Git 用户名(Name)和邮箱(Email)的特定弹窗
java·git·intellij-idea
威威猫的栗子3 天前
Git 使用全指南:从配置到免密登录
大数据·git·vscode
Casia_Dominic3 天前
【tmux无法使用鼠标滚轮滚动页面的问题】解决方案
linux·git·github·tmux
Justice link3 天前
Nginx和Apache的区别
git
物联网软硬件开发-轨物科技3 天前
【轨物方案】分布式光伏电站运维升级智能化系列:老电站的数智化重生
运维·人工智能·分布式·git