Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 1 | gitmodules(5) |
| 2 | ============= |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Nguyễn Thái Ngọc Duy | 1b81d8c | 2018-05-20 20:40:02 +0200 | [diff] [blame] | 6 | gitmodules - Defining submodule properties |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 7 | |
| 8 | SYNOPSIS |
| 9 | -------- |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 10 | $GIT_WORK_TREE/.gitmodules |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 11 | |
| 12 | |
| 13 | DESCRIPTION |
| 14 | ----------- |
| 15 | |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 16 | The `.gitmodules` file, located in the top-level directory of a Git |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 17 | working tree, is a text file with a syntax matching the requirements |
Dan McGee | 5162e69 | 2007-12-29 00:20:38 -0600 | [diff] [blame] | 18 | of linkgit:git-config[1]. |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 19 | |
| 20 | The file contains one subsection per submodule, and the subsection value |
Jens Lehmann | 73b0898 | 2012-09-30 01:05:58 +0200 | [diff] [blame] | 21 | is the name of the submodule. The name is set to the path where the |
Matthieu Moy | bcf9626 | 2016-06-28 13:40:11 +0200 | [diff] [blame] | 22 | submodule has been added unless it was customized with the `--name` |
Jens Lehmann | 73b0898 | 2012-09-30 01:05:58 +0200 | [diff] [blame] | 23 | option of 'git submodule add'. Each submodule section also contains the |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 24 | following required keys: |
| 25 | |
| 26 | submodule.<name>.path:: |
Thomas Ackermann | 2de9b71 | 2013-01-21 20:17:53 +0100 | [diff] [blame] | 27 | Defines the path, relative to the top-level directory of the Git |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 28 | 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 Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 30 | be unique within the `.gitmodules` file. |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 31 | |
| 32 | submodule.<name>.url:: |
Jim Meyering | a7793a7 | 2012-03-28 10:41:54 +0200 | [diff] [blame] | 33 | Defines a URL from which the submodule repository can be cloned. |
Jonathan Nieder | 47dc5d5 | 2010-07-15 02:41:55 -0500 | [diff] [blame] | 34 | This may be either an absolute URL ready to be passed to |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 35 | linkgit:git-clone[1] or (if it begins with `./` or `../`) a location |
Jonathan Nieder | 47dc5d5 | 2010-07-15 02:41:55 -0500 | [diff] [blame] | 36 | relative to the superproject's origin repository. |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 37 | |
W. Trevor King | 43fda94 | 2014-01-03 10:31:22 -0800 | [diff] [blame] | 38 | In addition, there are a number of optional keys: |
| 39 | |
Johan Herland | 3294842 | 2009-06-03 08:27:06 +0200 | [diff] [blame] | 40 | submodule.<name>.update:: |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 41 | Defines the default update procedure for the named submodule, |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 42 | i.e. how the submodule is updated by the `git submodule update` |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 43 | 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 Vutov | 7cebc5b | 2023-07-25 23:22:18 +0200 | [diff] [blame] | 46 | '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 Hutterer | ca2cedb | 2009-04-24 09:06:38 +1000 | [diff] [blame] | 49 | |
W. Trevor King | 06b1abb | 2012-12-19 11:03:32 -0500 | [diff] [blame] | 50 | submodule.<name>.branch:: |
| 51 | A remote branch name for tracking updates in the upstream submodule. |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 52 | If the option is not specified, it defaults to the remote `HEAD`. |
Johannes Schindelin | f0a96e8 | 2020-06-24 14:46:30 +0000 | [diff] [blame] | 53 | 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 Williams | 15ef780 | 2016-10-19 13:42:54 -0700 | [diff] [blame] | 55 | current repository. See the `--remote` documentation in |
| 56 | linkgit:git-submodule[1] for details. |
W. Trevor King | 06b1abb | 2012-12-19 11:03:32 -0500 | [diff] [blame] | 57 | |
Jens Lehmann | c1a3c36 | 2010-11-11 00:55:41 +0100 | [diff] [blame] | 58 | submodule.<name>.fetchRecurseSubmodules:: |
Jens Lehmann | bf42b38 | 2011-03-06 23:12:19 +0100 | [diff] [blame] | 59 | This option can be used to control recursive fetching of this |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 60 | 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 Wildenhues | 469bfc9 | 2011-01-03 20:03:34 +0100 | [diff] [blame] | 63 | Both settings can be overridden on the command line by using the |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 64 | `--[no-]recurse-submodules` option to `git fetch` and `git pull`. |
Jens Lehmann | c1a3c36 | 2010-11-11 00:55:41 +0100 | [diff] [blame] | 65 | |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 66 | submodule.<name>.ignore:: |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 67 | Defines under what circumstances `git status` and the diff family show |
Sebastian Schuberth | 61e2824 | 2017-04-19 09:15:15 +0000 | [diff] [blame] | 68 | a submodule as modified. The following values are supported: |
Andreas Heiduk | ad47194 | 2018-10-22 22:45:43 +0200 | [diff] [blame] | 69 | + |
| 70 | -- |
Sebastian Schuberth | 61e2824 | 2017-04-19 09:15:15 +0000 | [diff] [blame] | 71 | 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 Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 76 | committed differences between the `HEAD` of the submodule and its |
Sebastian Schuberth | 61e2824 | 2017-04-19 09:15:15 +0000 | [diff] [blame] | 77 | 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 Newren | 031fd4b | 2019-11-05 17:07:20 +0000 | [diff] [blame] | 83 | none;; No modifications to submodules are ignored, all of committed |
Sebastian Schuberth | 61e2824 | 2017-04-19 09:15:15 +0000 | [diff] [blame] | 84 | differences, and modifications to tracked and untracked files are |
| 85 | shown. This is the default option. |
| 86 | |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 87 | If this option is also present in the submodule's entry in `.git/config` |
Andreas Heiduk | ad47194 | 2018-10-22 22:45:43 +0200 | [diff] [blame] | 88 | of the superproject, the setting there will override the one found in |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 89 | `.gitmodules`. |
Andreas Heiduk | ad47194 | 2018-10-22 22:45:43 +0200 | [diff] [blame] | 90 | |
| 91 | Both settings can be overridden on the command line by using the |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 92 | `--ignore-submodules` option. The `git submodule` commands are not |
Andreas Heiduk | ad47194 | 2018-10-22 22:45:43 +0200 | [diff] [blame] | 93 | affected by this setting. |
| 94 | -- |
Jens Lehmann | 302ad7a | 2010-08-06 00:40:48 +0200 | [diff] [blame] | 95 | |
Stefan Beller | f6fb30a | 2016-08-02 16:51:36 -0700 | [diff] [blame] | 96 | submodule.<name>.shallow:: |
| 97 | When set to true, a clone of this submodule will be performed as a |
Sebastian Schuberth | 8d3047c | 2017-04-19 07:56:33 +0000 | [diff] [blame] | 98 | shallow clone (with a history depth of 1) unless the user explicitly |
| 99 | asks for a non-shallow clone. |
Stefan Beller | f6fb30a | 2016-08-02 16:51:36 -0700 | [diff] [blame] | 100 | |
Jeff King | 8ff06de | 2021-05-03 16:43:28 -0400 | [diff] [blame] | 101 | NOTES |
| 102 | ----- |
| 103 | |
| 104 | Git does not allow the `.gitmodules` file within a working tree to be a |
| 105 | symbolic link, and will refuse to check out such a tree entry. This |
| 106 | keeps behavior consistent when the file is accessed from the index or a |
| 107 | tree versus from the filesystem, and helps Git reliably enforce security |
| 108 | checks of the file contents. |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 109 | |
| 110 | EXAMPLES |
| 111 | -------- |
| 112 | |
Philippe Blain | 1f4e931 | 2021-01-03 17:42:15 +0000 | [diff] [blame] | 113 | Consider the following `.gitmodules` file: |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 114 | |
Martin Ågren | 1925fe0 | 2019-09-07 16:12:49 +0200 | [diff] [blame] | 115 | ---- |
| 116 | [submodule "libfoo"] |
| 117 | path = include/foo |
| 118 | url = git://foo.com/git/lib.git |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 119 | |
Martin Ågren | 1925fe0 | 2019-09-07 16:12:49 +0200 | [diff] [blame] | 120 | [submodule "libbar"] |
| 121 | path = include/bar |
| 122 | url = git://bar.com/git/lib.git |
| 123 | ---- |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 124 | |
| 125 | This defines two submodules, `libfoo` and `libbar`. These are expected to |
Corentin BOMPARD | 68ed71b | 2019-03-06 14:04:46 +0100 | [diff] [blame] | 126 | be checked out in the paths `include/foo` and `include/bar`, and for both |
Jim Meyering | a7793a7 | 2012-03-28 10:41:54 +0200 | [diff] [blame] | 127 | submodules a URL is specified which can be used for cloning the submodules. |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 128 | |
| 129 | SEE ALSO |
| 130 | -------- |
Philippe Blain | cc2bd5c | 2019-12-11 04:15:56 +0000 | [diff] [blame] | 131 | linkgit:git-submodule[1], linkgit:gitsubmodules[7], linkgit:git-config[1] |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 132 | |
Lars Hjemli | 891dbc6 | 2007-06-12 09:05:21 +0200 | [diff] [blame] | 133 | GIT |
| 134 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 135 | Part of the linkgit:git[1] suite |