添加子模块的步骤
其中我们将概述用于将子模块添加到主机存储库的主要命令。
创建一个空的存储库
让我们从创建一个空的存储库开始。
下面的命令创建一个空的存储库,然后探索子模块。
mkdir git-submodule-demo cd git-submodule-demo/ git init
Initialized empty Git repository in /Users/example/git-submodule-demo/.git/
将子模块添加到空存储库
我们应该运行 git submodule add 命令以将子模块添加到新生成的存储库:
git submodule add https://bitbucket.org/jaredw/awesomelibrary Cloning into '/Users/atlassian/git-submodule-demo/awesomelibrary'... remote: Counting objects: 8, done. remote: Compressing objects: 100% (6/6), done. remote: Total 8 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (8/8), done.
git submodule add 命令能够采用指向存储库的 URL 参数。
所以,现在,作为一个子模块,我们有 awesomelibrary。
它会立即被 Git 克隆。
查看存储库的状态
要查看存储库的状态,我们应该运行 git status 命令:
git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitmodules new file: awesomelibrary
它将显示存储库中的两个新文件:awesomelibrary 和 .gitmodules。
.gitmodules 的内容将演示新子模块的映射:
[submodule "awesomelibrary"] path = awesomelibrary url = https://bitbucket.org/jaredw/awesomelibrary
提交对存储库的更改
最后,我们可以通过以下方式运行 git add 和 git commit 命令将更改提交到主机存储库:
git add .gitmodules awesomelibrary/ git commit -m "added submodule" [master (root-commit) d5002d0] added submodule 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 awesomelibrary
在 Git 中工作时,经常需要使用子模块。
它们允许通过单个存储库跟踪多个存储库中的更改。
子模块被视为主机存储库内的记录。
它指向另一个外部存储库中的特定提交。
什么是git子模块
很多时候,代码存储库依赖于来自其他存储库的外部代码。
我们可以直接将外部代码复制粘贴到主存储库中,也可以使用语言的包管理系统的方法。
但是这两种方法的缺点是不能跟踪对外部存储库的更改。
Git 允许将其他称为子模块的 git 存储库包含到单个存储库中。
子模块允许通过一个存储库跟踪多个存储库中的更改。
子模块是父存储库中包含在父存储库工作目录中特定路径中的存储库。
它们可以位于工作目录中的任何位置,并通过位于父存储库根目录的 .gitmodules 文件进行配置。
.gitmodules 文件包含有关子模块项目的 URL 和本地目录之间映射的元数据。
子模块支持添加、同步、更新和克隆子模块。
子模块只跟踪特定的提交,而不是 git 引用和分支。