簡體中文 ▾ 主題 ▾ 最新版本 ▾ gitmodules 上次更新於 2.42.0

名稱

gitmodules - 定義子模組屬性

概要

$GIT_WORK_TREE/.gitmodules

描述

位於 Git 工作樹頂級目錄中的 .gitmodules 檔案是一個文字檔案,其語法符合 git-config[1] 的要求。

該檔案包含每個子模組的一個子節,子節的值是子模組的名稱。除非使用 git submodule add 命令的 --name 選項進行了自定義,否則該名稱將設定為新增子模組的路徑。每個子模組節還包含以下必需鍵:

submodule.<name>.path

定義子模組預期檢出位置的路徑,該路徑相對於 Git 工作樹的頂級目錄。路徑名不得以 / 結尾。所有子模組路徑在 .gitmodules 檔案中必須是唯一的。

submodule.<name>.url

定義可用於克隆子模組倉庫的 URL。這可以是準備傳遞給 git-clone[1] 的絕對 URL,或者(如果以 ./../ 開頭)相對於超專案(superproject)源倉庫的位置。

此外,還有一些可選鍵:

submodule.<name>.update

定義指定子模組的預設更新過程,即超專案(superproject)中的 git submodule update 命令如何更新子模組。這僅由 git submodule init 用於初始化同名配置變數。允許的值為 checkoutrebasemergenone,但不允許 !command(出於安全原因)。有關詳細資訊,請參閱 git-submodule[1]update 命令的說明。

submodule.<name>.branch

用於跟蹤上游子模組更新的遠端分支名稱。如果未指定此選項,則預設為遠端 HEAD。特殊值 . 用於指示子模組中的分支名稱應與當前倉庫中的當前分支名稱相同。有關詳細資訊,請參閱 git-submodule[1]--remote 的文件。

submodule.<name>.fetchRecurseSubmodules

此選項可用於控制此子模組的遞迴獲取。如果此選項也存在於超專案(superproject)的 .git/config 中子模組的條目中,則該設定將覆蓋 .gitmodules 中找到的設定。這兩個設定都可以透過在命令列中使用 git fetchgit pull--[no-]recurse-submodules 選項來覆蓋。

submodule.<name>.ignore

定義在何種情況下 git status 和 diff 系列命令會將子模組顯示為已修改。支援以下值:

all

子模組永遠不會被視為已修改(但當它被暫存時,仍然會顯示在 status 和 commit 的輸出中)。

dirty

子模組工作樹的所有更改都將被忽略,只考慮子模組的 HEAD 與其在超專案(superproject)中記錄的狀態之間的已提交差異。

untracked

只忽略子模組中未跟蹤的檔案。已提交的差異和對已跟蹤檔案的修改將顯示出來。

none

不忽略對子模組的任何修改,所有已提交的差異以及對已跟蹤和未跟蹤檔案的修改都將顯示。這是預設選項。

如果此選項也存在於超專案(superproject)的 .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