⑴ 如何将Git子模块更新为最新的原始提交
Git 1.8.2提供了一个新的选项--remote,可以完全实现这种行为。运行
git submole update --remote --merge
将从每个子模块的上游获取最新更改版,并权将其合并,并检查子模块的最新版本。正如文件所说:
- 远程
该选项仅对更新命令有效。使用子模块的远程跟踪分支的状态,而不是使用超级项目的记录的SHA-1来更新子模块。
这相当于git pull在每个子模块中运行,这通常正是你想要的。
⑵ Git 中submole的使用
面对复杂项目,通常将代码根据功能拆解为子模块,主项目依赖子模块但不关心其内部流程。两种常见方式管理子模块:一种是将子模块文件夹加入到 .gitignore,但需使用者额外准备子模块版本;另一种是使用 Git 的 submole 功能,通过它建立主项目与子模块之间的依赖关系,记录子模块路径、远程仓库地址、版本号。
实现 submole 功能时,先确保主项目与子模块项目分别具备各自的远程仓库地址。以下步骤演示如何在主项目中添加并管理子模块。
在主项目中使用 `git submole add` 命令引入子模块。进入主项目目录后,执行以下命令,子模块路径、远程仓库地址与版本号将被记录。
命令执行后,主项目仓库中将新增 `.gitmoles` 文件,记录子模块信息。同时,在主项目目录下多出子模块文件夹。若已有 `.gitmoles` 文件,内容会相应更新。此外,在主项目的 `.git/config` 文件中和 `.git/moles` 目录下也会有对应信息的增加。
执行 `git commit -m "add submole xxx"` 提交,主项目中将显示子模块文件夹,并带上子模块的版本号。
创建子模块过程中,子模块代码已自动克隆到指定路径。若后续使用者仅克隆主项目,子模块代码不会自动拉取。可使用 `git clone --recurse-submoles` 克隆主项目,确保子模块代码同步。
使用 `git submole update` 后,主项目目录下的子模块文件夹将包含最新子模块代码。或在主项目目录中执行 `git submole update --remote`,以确保子模块与远程仓库同步。
子模块代码需定期更新。通过 `git submole update --remote` 命令,子模块将根据远程仓库版本进行更新。
删除 submole 时,应使用官方推荐的命令 `git submole deinit`。若子模块工作区有本地修改,使用 `--force` 参数可移除这些修改。
Git submole 功能为管理复杂项目中的子模块提供了便利。通过 submole 功能,主项目与子模块之间建立了依赖关系,记录子模块信息,实现独立版本控制。遵循正确流程操作 submole,能有效管理项目结构与版本。