非常教程

Git参考手册

指南 | Guides

gitmodules

名称

gitmodules - 定义子模块属性

概要

$GIT_WORK_DIR/.gitmodules

描述

.gitmodules文件位于 Git 工作树的顶层目录中,是一个文本文件,其语法与 git-config [1] 的要求相匹配。

文件包含每个子模块的一个子部分,并且子部分值是子模块的名称。名称被设置为子模块已被添加的路径,除非它是用--name选项自定义的git submodule add。每个子模块部分还包含以下必需的键:

submodule.<name>.path

定义相对于 Git 工作树的顶级目录的路径,其中子模块预计将签出。路径名称不能以/。所有子模块路径在 .gitmodules 文件中必须是唯一的。

submodule.<name>.url

定义可从中克隆子模块存储库的URL。这可能是一个准备好传递给 git-clone [1] 或者(如果它以./或../开头)相对于超级项目的源存储库的位置的绝对 URL。

另外,还有一些可选的键:

submodule.<name>.update

定义指定子模块的默认更新过程,即通过超级项目中的 “git submodule update” 命令更新子模块的方式。这仅用于git submodule init初始化相同名称的配置变量。这里允许的值是checkoutrebasemergenone。有关update它们的含义,请参阅 git-submodule [1] 中的命令说明。请注意,!command出于安全原因,表单在此处被故意忽略。

submodule.<name>.branch

用于跟踪上游子模块中更新的远程分支名称。如果该选项未指定,则默认为master。特殊值.用于指示子模块中分支的名称应与当前存储库中当前分支的名称相同。有关--remote详细信息,请参阅 git-submodule [1] 中的文档。

submodule.<name>.fetchRecurseSubmodules

选项可用于控制此子模块的递归提取。如果此选项也存在于超级项目的 .git / config 子模块条目中,那么该设置将覆盖. gitmodules 中的设置。通过在 “git fetch” 和 “git pull” 中使用 “--no-recurse-submodules” 选项,可以在命令行上覆盖这两个设置。

submodule.<name>.ignore

定义在什么情况下,“git status” 和 diff 系列显示已修改的子模块。支持以下值:

all

子模块永远不会被视为已修改(但仍会显示在状态的输出中,并在已上载时进行提交)。

dirty

对子模块工作树的所有更改都将被忽略,只会考虑子模块的 HEAD 与其在超级项目中记录的状态之间的差异。

untracked

子模块中只有未跟踪的文件将被忽略。承诺的差异和修改被跟踪的文件将显示出来。

none

没有对子模块的修改被忽略,所有提交的差异以及对跟踪和未跟踪文件的修改都会显示出来。这是默认选项。

If this option is also present in the submodules entry in .git/config
of the superproject, the setting there will override the one found in
.gitmodules.
Both settings can be overridden on the command line by using the
"--ignore-submodule" option. The 'git submodule' commands are not
affected by this setting.

submodule.<name>.shallow

设置为 true 时,此子模块的克隆将作为浅层克隆(历史深度为1)执行,除非用户明确要求使用非浅层克隆。

例子

考虑下面的 .gitmodules 文件:

[submodule "libfoo"]
        path = include/foo
        url = git://foo.com/git/lib.git
[submodule "libbar"]
        path = include/bar
        url = git://bar.com/git/lib.git

这定义了两个子模块,libfoolibbar。这些预计的路径要被检出的include/fooinclude/bar,并为两个子模块被指定一个URL可以用于克隆子模块。