Git
英语 ▾ 主题 ▾ 最新版本 ▾ gitmodules 最后更新于 2.42.0

名称

gitmodules - 定义子模块属性

概要

$GIT_WORK_TREE/.gitmodules

描述

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

该文件每个子模块包含一个子节,子节值是子模块的名称。该名称设置为添加子模块的路径,除非使用 git submodule add--name 选项进行了自定义。每个子模块部分还包含以下必需键

submodule.<name>.path

定义相对于 Git 工作树顶层目录的路径,期望在该路径中检出子模块。路径名称不能以 / 结尾。所有子模块路径在 .gitmodules 文件中必须是唯一的。

submodule.<name>.url

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

此外,还有许多可选键

submodule.<name>.update

定义命名子模块的默认更新过程,即超级项目中 git submodule update 命令如何更新子模块。这仅供 git submodule init 用于初始化同名配置变量。这里允许的值是 checkoutrebasemergenone,但不允许 !command(出于安全原因)。有关更多详细信息,请参阅 git-submodule[1]update 命令的描述。

submodule.<name>.branch

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

submodule.<name>.fetchRecurseSubmodules

此选项可用于控制递归获取此子模块。如果此选项也存在于超级项目 .git/config 中的子模块条目中,则那里的设置将覆盖 .gitmodules 中找到的设置。两种设置都可以在命令行中通过使用 --[no-]recurse-submodules 选项来覆盖 git fetchgit pull

submodule.<name>.ignore

定义在什么情况下 git status 和差异系列将子模块显示为已修改。支持以下值

all

子模块将永远不会被视为已修改(但当它被暂存时,它仍然会在 status 和 commit 的输出中显示出来)。

dirty

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

untracked

只忽略子模块中的未跟踪文件。已提交的差异和对跟踪文件的修改将显示出来。

none

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

如果此选项也存在于超级项目 .git/config 中的子模块条目中,则那里的设置将覆盖 .gitmodules 中找到的设置。

两种设置都可以在命令行中通过使用 --ignore-submodules 选项来覆盖。git submodule 命令不受此设置的影响。

submodule.<name>.shallow

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

注意

Git 不允许工作树中的 .gitmodules 文件是符号链接,并将拒绝检出这样的树条目。这使行为在从索引或树访问文件时与从文件系统访问文件时保持一致,并帮助 Git 可靠地执行文件的安全检查。

示例

考虑以下 .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。

GIT

git[1] 套件的一部分

scroll-to-top