blob: d9bec8b1875502b22934877311d3124a3e5a22df [file] [log] [blame]
Lars Hjemli891dbc62007-06-12 09:05:21 +02001gitmodules(5)
2=============
3
4NAME
5----
Nguyễn Thái Ngọc Duy1b81d8c2018-05-20 20:40:02 +02006gitmodules - Defining submodule properties
Lars Hjemli891dbc62007-06-12 09:05:21 +02007
8SYNOPSIS
9--------
Philippe Blain1f4e9312021-01-03 17:42:15 +000010$GIT_WORK_TREE/.gitmodules
Lars Hjemli891dbc62007-06-12 09:05:21 +020011
12
13DESCRIPTION
14-----------
15
Thomas Ackermann2de9b712013-01-21 20:17:53 +010016The `.gitmodules` file, located in the top-level directory of a Git
Lars Hjemli891dbc62007-06-12 09:05:21 +020017working tree, is a text file with a syntax matching the requirements
Dan McGee5162e692007-12-29 00:20:38 -060018of linkgit:git-config[1].
Lars Hjemli891dbc62007-06-12 09:05:21 +020019
20The file contains one subsection per submodule, and the subsection value
Jens Lehmann73b08982012-09-30 01:05:58 +020021is the name of the submodule. The name is set to the path where the
Matthieu Moybcf96262016-06-28 13:40:11 +020022submodule has been added unless it was customized with the `--name`
Jens Lehmann73b08982012-09-30 01:05:58 +020023option of 'git submodule add'. Each submodule section also contains the
Lars Hjemli891dbc62007-06-12 09:05:21 +020024following required keys:
25
26submodule.<name>.path::
Thomas Ackermann2de9b712013-01-21 20:17:53 +010027 Defines the path, relative to the top-level directory of the Git
Lars Hjemli891dbc62007-06-12 09:05:21 +020028 working tree, where the submodule is expected to be checked out.
29 The path name must not end with a `/`. All submodule paths must
Philippe Blain1f4e9312021-01-03 17:42:15 +000030 be unique within the `.gitmodules` file.
Lars Hjemli891dbc62007-06-12 09:05:21 +020031
32submodule.<name>.url::
Jim Meyeringa7793a72012-03-28 10:41:54 +020033 Defines a URL from which the submodule repository can be cloned.
Jonathan Nieder47dc5d52010-07-15 02:41:55 -050034 This may be either an absolute URL ready to be passed to
Philippe Blain1f4e9312021-01-03 17:42:15 +000035 linkgit:git-clone[1] or (if it begins with `./` or `../`) a location
Jonathan Nieder47dc5d52010-07-15 02:41:55 -050036 relative to the superproject's origin repository.
Lars Hjemli891dbc62007-06-12 09:05:21 +020037
W. Trevor King43fda942014-01-03 10:31:22 -080038In addition, there are a number of optional keys:
39
Johan Herland32948422009-06-03 08:27:06 +020040submodule.<name>.update::
Michal Sojka5c31acf2015-03-02 23:57:58 +010041 Defines the default update procedure for the named submodule,
Philippe Blain1f4e9312021-01-03 17:42:15 +000042 i.e. how the submodule is updated by the `git submodule update`
Michal Sojka5c31acf2015-03-02 23:57:58 +010043 command in the superproject. This is only used by `git
44 submodule init` to initialize the configuration variable of
45 the same name. Allowed values here are 'checkout', 'rebase',
Petar Vutov7cebc5b2023-07-25 23:22:18 +020046 'merge' or 'none', but not '!command' (for security reasons).
47 See the description of the 'update' command in
48 linkgit:git-submodule[1] for more details.
Peter Huttererca2cedb2009-04-24 09:06:38 +100049
W. Trevor King06b1abb2012-12-19 11:03:32 -050050submodule.<name>.branch::
51 A remote branch name for tracking updates in the upstream submodule.
Philippe Blain1f4e9312021-01-03 17:42:15 +000052 If the option is not specified, it defaults to the remote `HEAD`.
Johannes Schindelinf0a96e82020-06-24 14:46:30 +000053 A special value of `.` is used to indicate that the name of the branch
54 in the submodule should be the same name as the current branch in the
Brandon Williams15ef7802016-10-19 13:42:54 -070055 current repository. See the `--remote` documentation in
56 linkgit:git-submodule[1] for details.
W. Trevor King06b1abb2012-12-19 11:03:32 -050057
Jens Lehmannc1a3c362010-11-11 00:55:41 +010058submodule.<name>.fetchRecurseSubmodules::
Jens Lehmannbf42b382011-03-06 23:12:19 +010059 This option can be used to control recursive fetching of this
Philippe Blain1f4e9312021-01-03 17:42:15 +000060 submodule. If this option is also present in the submodule's entry in
61 `.git/config` of the superproject, the setting there will override the
62 one found in `.gitmodules`.
Ralf Wildenhues469bfc92011-01-03 20:03:34 +010063 Both settings can be overridden on the command line by using the
Philippe Blain1f4e9312021-01-03 17:42:15 +000064 `--[no-]recurse-submodules` option to `git fetch` and `git pull`.
Jens Lehmannc1a3c362010-11-11 00:55:41 +010065
Jens Lehmann302ad7a2010-08-06 00:40:48 +020066submodule.<name>.ignore::
Philippe Blain1f4e9312021-01-03 17:42:15 +000067 Defines under what circumstances `git status` and the diff family show
Sebastian Schuberth61e28242017-04-19 09:15:15 +000068 a submodule as modified. The following values are supported:
Andreas Heidukad471942018-10-22 22:45:43 +020069+
70--
Sebastian Schuberth61e28242017-04-19 09:15:15 +000071 all;; The submodule will never be considered modified (but will
72 nonetheless show up in the output of status and commit when it has
73 been staged).
74
75 dirty;; All changes to the submodule's work tree will be ignored, only
Philippe Blain1f4e9312021-01-03 17:42:15 +000076 committed differences between the `HEAD` of the submodule and its
Sebastian Schuberth61e28242017-04-19 09:15:15 +000077 recorded state in the superproject are taken into account.
78
79 untracked;; Only untracked files in submodules will be ignored.
80 Committed differences and modifications to tracked files will show
81 up.
82
Elijah Newren031fd4b2019-11-05 17:07:20 +000083 none;; No modifications to submodules are ignored, all of committed
Sebastian Schuberth61e28242017-04-19 09:15:15 +000084 differences, and modifications to tracked and untracked files are
85 shown. This is the default option.
86
Philippe Blain1f4e9312021-01-03 17:42:15 +000087If this option is also present in the submodule's entry in `.git/config`
Andreas Heidukad471942018-10-22 22:45:43 +020088of the superproject, the setting there will override the one found in
Philippe Blain1f4e9312021-01-03 17:42:15 +000089`.gitmodules`.
Andreas Heidukad471942018-10-22 22:45:43 +020090
91Both settings can be overridden on the command line by using the
Philippe Blain1f4e9312021-01-03 17:42:15 +000092`--ignore-submodules` option. The `git submodule` commands are not
Andreas Heidukad471942018-10-22 22:45:43 +020093affected by this setting.
94--
Jens Lehmann302ad7a2010-08-06 00:40:48 +020095
Stefan Bellerf6fb30a2016-08-02 16:51:36 -070096submodule.<name>.shallow::
97 When set to true, a clone of this submodule will be performed as a
Sebastian Schuberth8d3047c2017-04-19 07:56:33 +000098 shallow clone (with a history depth of 1) unless the user explicitly
99 asks for a non-shallow clone.
Stefan Bellerf6fb30a2016-08-02 16:51:36 -0700100
Jeff King8ff06de2021-05-03 16:43:28 -0400101NOTES
102-----
103
104Git does not allow the `.gitmodules` file within a working tree to be a
105symbolic link, and will refuse to check out such a tree entry. This
106keeps behavior consistent when the file is accessed from the index or a
107tree versus from the filesystem, and helps Git reliably enforce security
108checks of the file contents.
Lars Hjemli891dbc62007-06-12 09:05:21 +0200109
110EXAMPLES
111--------
112
Philippe Blain1f4e9312021-01-03 17:42:15 +0000113Consider the following `.gitmodules` file:
Lars Hjemli891dbc62007-06-12 09:05:21 +0200114
Martin Ågren1925fe02019-09-07 16:12:49 +0200115----
116[submodule "libfoo"]
117 path = include/foo
118 url = git://foo.com/git/lib.git
Lars Hjemli891dbc62007-06-12 09:05:21 +0200119
Martin Ågren1925fe02019-09-07 16:12:49 +0200120[submodule "libbar"]
121 path = include/bar
122 url = git://bar.com/git/lib.git
123----
Lars Hjemli891dbc62007-06-12 09:05:21 +0200124
125This defines two submodules, `libfoo` and `libbar`. These are expected to
Corentin BOMPARD68ed71b2019-03-06 14:04:46 +0100126be checked out in the paths `include/foo` and `include/bar`, and for both
Jim Meyeringa7793a72012-03-28 10:41:54 +0200127submodules a URL is specified which can be used for cloning the submodules.
Lars Hjemli891dbc62007-06-12 09:05:21 +0200128
129SEE ALSO
130--------
Philippe Blaincc2bd5c2019-12-11 04:15:56 +0000131linkgit:git-submodule[1], linkgit:gitsubmodules[7], linkgit:git-config[1]
Lars Hjemli891dbc62007-06-12 09:05:21 +0200132
Lars Hjemli891dbc62007-06-12 09:05:21 +0200133GIT
134---
Christian Couder9e1f0a82008-06-06 09:07:32 +0200135Part of the linkgit:git[1] suite