Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 1 | git-submodule(1) |
| 2 | ================ |
| 3 | |
| 4 | NAME |
| 5 | ---- |
| 6 | git-submodule - Initialize, update or inspect submodules |
| 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Matt Kraai | b249364 | 2007-07-06 17:56:31 -0700 | [diff] [blame] | 11 | [verse] |
Denton Liu | 68cabbf | 2019-02-15 01:26:41 -0800 | [diff] [blame] | 12 | 'git submodule' [--quiet] [--cached] |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 13 | 'git submodule' [--quiet] add [<options>] [--] <repository> [<path>] |
Johan Herland | 64b19ff | 2009-08-19 03:45:24 +0200 | [diff] [blame] | 14 | 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...] |
Jonathan Nieder | b1889c3 | 2008-06-30 01:09:04 -0500 | [diff] [blame] | 15 | 'git submodule' [--quiet] init [--] [<path>...] |
Stefan Beller | f6a5279 | 2016-05-05 12:52:32 -0700 | [diff] [blame] | 16 | 'git submodule' [--quiet] deinit [-f|--force] (--all|[--] <path>...) |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 17 | 'git submodule' [--quiet] update [<options>] [--] [<path>...] |
Denton Liu | b57e811 | 2019-02-08 03:21:34 -0800 | [diff] [blame] | 18 | 'git submodule' [--quiet] set-branch [<options>] [--] <path> |
Denton Liu | 26b0610 | 2019-10-29 10:01:52 -0700 | [diff] [blame] | 19 | 'git submodule' [--quiet] set-url [--] <path> <newurl> |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 20 | 'git submodule' [--quiet] summary [<options>] [--] [<path>...] |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 21 | 'git submodule' [--quiet] foreach [--recursive] <command> |
Matthew Chen | 9393ae7 | 2014-06-13 13:40:50 -0400 | [diff] [blame] | 22 | 'git submodule' [--quiet] sync [--recursive] [--] [<path>...] |
Stefan Beller | f6f8586 | 2016-12-12 11:04:35 -0800 | [diff] [blame] | 23 | 'git submodule' [--quiet] absorbgitdirs [--] [<path>...] |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 24 | |
| 25 | |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 26 | DESCRIPTION |
| 27 | ----------- |
Stefan Beller | ec48a76 | 2015-05-27 12:48:01 -0700 | [diff] [blame] | 28 | Inspects, updates and manages submodules. |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 29 | |
Stefan Beller | d480345 | 2017-06-22 14:01:49 -0700 | [diff] [blame] | 30 | For more information about submodules, see linkgit:gitsubmodules[7]. |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 31 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 32 | COMMANDS |
| 33 | -------- |
Denton Liu | 68cabbf | 2019-02-15 01:26:41 -0800 | [diff] [blame] | 34 | With no arguments, shows the status of existing submodules. Several |
| 35 | subcommands are available to perform operations on the submodules. |
| 36 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 37 | add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]:: |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 38 | Add the given repository as a submodule at the given path |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 39 | to the changeset to be committed next to the current |
Cesar Eduardo Barros | 77ef80a | 2008-07-26 01:17:42 -0300 | [diff] [blame] | 40 | project: the current project is termed the "superproject". |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 41 | + |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 42 | <repository> is the URL of the new submodule's origin repository. |
| 43 | This may be either an absolute URL, or (if it begins with ./ |
Stefan Beller | d1b3b81 | 2017-02-24 17:31:47 -0800 | [diff] [blame] | 44 | or ../), the location relative to the superproject's default remote |
Jens Lehmann | 9e6ed47 | 2012-01-01 16:13:16 +0100 | [diff] [blame] | 45 | repository (Please note that to specify a repository 'foo.git' |
| 46 | which is located right next to a superproject 'bar.git', you'll |
Corentin BOMPARD | 68ed71b | 2019-03-06 14:04:46 +0100 | [diff] [blame] | 47 | have to use `../foo.git` instead of `./foo.git` - as one might expect |
Jens Lehmann | 9e6ed47 | 2012-01-01 16:13:16 +0100 | [diff] [blame] | 48 | when following the rules for relative URLs - because the evaluation |
| 49 | of relative URLs in Git is identical to that of relative directories). |
Stefan Beller | d1b3b81 | 2017-02-24 17:31:47 -0800 | [diff] [blame] | 50 | + |
Robert P. J. Day | 30aa96c | 2018-06-07 07:53:36 -0400 | [diff] [blame] | 51 | The default remote is the remote of the remote-tracking branch |
| 52 | of the current branch. If no such remote-tracking branch exists or |
Stefan Beller | d1b3b81 | 2017-02-24 17:31:47 -0800 | [diff] [blame] | 53 | the HEAD is detached, "origin" is assumed to be the default remote. |
| 54 | If the superproject doesn't have a default remote configured |
Jens Lehmann | 4d68932 | 2011-06-06 21:58:04 +0200 | [diff] [blame] | 55 | the superproject is its own authoritative upstream and the current |
| 56 | working directory is used instead. |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 57 | + |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 58 | The optional argument <path> is the relative location for the cloned |
| 59 | submodule to exist in the superproject. If <path> is not given, the |
| 60 | canonical part of the source repository is used ("repo" for |
| 61 | "/path/to/repo.git" and "foo" for "host.xz:foo/.git"). If <path> |
| 62 | exists and is already a valid Git repository, then it is staged |
| 63 | for commit without cloning. The <path> is also used as the submodule's |
| 64 | logical name in its configuration entries unless `--name` is used |
| 65 | to specify a logical name. |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 66 | + |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 67 | The given URL is recorded into `.gitmodules` for use by subsequent users |
| 68 | cloning the superproject. If the URL is given relative to the |
| 69 | superproject's repository, the presumption is the superproject and |
| 70 | submodule repositories will be kept together in the same relative |
| 71 | location, and only the superproject's URL needs to be provided. |
| 72 | git-submodule will correctly locate the submodule using the relative |
| 73 | URL in `.gitmodules`. |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 74 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 75 | status [--cached] [--recursive] [--] [<path>...]:: |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 76 | Show the status of the submodules. This will print the SHA-1 of the |
| 77 | currently checked out commit for each submodule, along with the |
Thomas Rast | 0b444cd | 2010-01-10 00:33:00 +0100 | [diff] [blame] | 78 | submodule path and the output of 'git describe' for the |
Kaartic Sivaraam | e1b3f3d | 2018-01-14 23:07:37 +0530 | [diff] [blame] | 79 | SHA-1. Each SHA-1 will possibly be prefixed with `-` if the submodule is |
| 80 | not initialized, `+` if the currently checked out submodule commit |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 81 | does not match the SHA-1 found in the index of the containing |
Nicolas Morey-Chaisemartin | 313ee0d | 2011-03-30 07:20:02 +0200 | [diff] [blame] | 82 | repository and `U` if the submodule has merge conflicts. |
Johan Herland | 64b19ff | 2009-08-19 03:45:24 +0200 | [diff] [blame] | 83 | + |
Manish Goregaokar | 8d483c8 | 2019-11-23 05:54:28 +0000 | [diff] [blame] | 84 | If `--cached` is specified, this command will instead print the SHA-1 |
| 85 | recorded in the superproject for each submodule. |
| 86 | + |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 87 | If `--recursive` is specified, this command will recurse into nested |
Johan Herland | 64b19ff | 2009-08-19 03:45:24 +0200 | [diff] [blame] | 88 | submodules, and show their status as well. |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 89 | + |
| 90 | If you are only interested in changes of the currently initialized |
| 91 | submodules with respect to the commit recorded in the index or the HEAD, |
| 92 | linkgit:git-status[1] and linkgit:git-diff[1] will provide that information |
| 93 | too (and can also report changes to a submodule's work tree). |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 94 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 95 | init [--] [<path>...]:: |
Dale R. Worley | 3244eb9 | 2013-05-15 18:28:39 -0400 | [diff] [blame] | 96 | Initialize the submodules recorded in the index (which were |
Stefan Beller | d1b3b81 | 2017-02-24 17:31:47 -0800 | [diff] [blame] | 97 | added and committed elsewhere) by setting `submodule.$name.url` |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 98 | in .git/config. It uses the same setting from `.gitmodules` as |
Stefan Beller | d1b3b81 | 2017-02-24 17:31:47 -0800 | [diff] [blame] | 99 | a template. If the URL is relative, it will be resolved using |
| 100 | the default remote. If there is no default remote, the current |
| 101 | repository will be assumed to be upstream. |
| 102 | + |
| 103 | Optional <path> arguments limit which submodules will be initialized. |
Brandon Williams | 3e7eaed | 2017-03-17 15:38:02 -0700 | [diff] [blame] | 104 | If no path is specified and submodule.active has been configured, submodules |
| 105 | configured to be active will be initialized, otherwise all submodules are |
| 106 | initialized. |
Stefan Beller | d1b3b81 | 2017-02-24 17:31:47 -0800 | [diff] [blame] | 107 | + |
| 108 | When present, it will also copy the value of `submodule.$name.update`. |
| 109 | This command does not alter existing information in .git/config. |
| 110 | You can then customize the submodule clone URLs in .git/config |
| 111 | for your local setup and proceed to `git submodule update`; |
| 112 | you can also just use `git submodule update --init` without |
| 113 | the explicit 'init' step if you do not intend to customize |
| 114 | any submodule locations. |
| 115 | + |
Ville Skyttä | 6412757 | 2017-06-25 13:20:41 +0300 | [diff] [blame] | 116 | See the add subcommand for the definition of default remote. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 117 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 118 | deinit [-f|--force] (--all|[--] <path>...):: |
Jens Lehmann | cf41982 | 2013-03-04 22:20:24 +0100 | [diff] [blame] | 119 | Unregister the given submodules, i.e. remove the whole |
| 120 | `submodule.$name` section from .git/config together with their work |
| 121 | tree. Further calls to `git submodule update`, `git submodule foreach` |
| 122 | and `git submodule sync` will skip any unregistered submodules until |
| 123 | they are initialized again, so use this command if you don't want to |
Stefan Beller | d480345 | 2017-06-22 14:01:49 -0700 | [diff] [blame] | 124 | have a local checkout of the submodule in your working tree anymore. |
Jens Lehmann | cf41982 | 2013-03-04 22:20:24 +0100 | [diff] [blame] | 125 | + |
Stefan Beller | f6a5279 | 2016-05-05 12:52:32 -0700 | [diff] [blame] | 126 | When the command is run without pathspec, it errors out, |
| 127 | instead of deinit-ing everything, to prevent mistakes. |
| 128 | + |
| 129 | If `--force` is specified, the submodule's working tree will |
| 130 | be removed even if it contains local modifications. |
Stefan Beller | d480345 | 2017-06-22 14:01:49 -0700 | [diff] [blame] | 131 | + |
| 132 | If you really want to remove a submodule from the repository and commit |
| 133 | that use linkgit:git-rm[1] instead. See linkgit:gitsubmodules[7] for removal |
| 134 | options. |
Jens Lehmann | cf41982 | 2013-03-04 22:20:24 +0100 | [diff] [blame] | 135 | |
Josh Steadmon | f05da2b | 2022-02-04 21:00:49 -0800 | [diff] [blame] | 136 | update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>] [--depth <depth>] [--recursive] [--jobs <n>] [--[no-]single-branch] [--filter <filter spec>] [--] [<path>...]:: |
Johannes Schindelin | be4d2c8 | 2008-05-16 11:23:03 +0100 | [diff] [blame] | 137 | + |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 138 | -- |
| 139 | Update the registered submodules to match what the superproject |
Philippe Blain | f0e58b3 | 2019-11-23 21:01:35 -0500 | [diff] [blame] | 140 | expects by cloning missing submodules, fetching missing commits |
| 141 | in submodules and updating the working tree of |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 142 | the submodules. The "updating" can be done in several ways depending |
| 143 | on command line options and the value of `submodule.<name>.update` |
Stefan Beller | fc01a5d | 2016-12-27 15:43:09 -0800 | [diff] [blame] | 144 | configuration variable. The command line option takes precedence over |
Kaartic Sivaraam | e1b3f3d | 2018-01-14 23:07:37 +0530 | [diff] [blame] | 145 | the configuration variable. If neither is given, a 'checkout' is performed. |
| 146 | The 'update' procedures supported both from the command line as well as |
| 147 | through the `submodule.<name>.update` configuration are: |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 148 | |
| 149 | checkout;; the commit recorded in the superproject will be |
Stefan Beller | fc01a5d | 2016-12-27 15:43:09 -0800 | [diff] [blame] | 150 | checked out in the submodule on a detached HEAD. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 151 | + |
| 152 | If `--force` is specified, the submodule will be checked out (using |
Kaartic Sivaraam | e1b3f3d | 2018-01-14 23:07:37 +0530 | [diff] [blame] | 153 | `git checkout --force`), even if the commit specified |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 154 | in the index of the containing repository already matches the commit |
| 155 | checked out in the submodule. |
| 156 | |
| 157 | rebase;; the current branch of the submodule will be rebased |
Stefan Beller | fc01a5d | 2016-12-27 15:43:09 -0800 | [diff] [blame] | 158 | onto the commit recorded in the superproject. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 159 | |
| 160 | merge;; the commit recorded in the superproject will be merged |
Stefan Beller | fc01a5d | 2016-12-27 15:43:09 -0800 | [diff] [blame] | 161 | into the current branch in the submodule. |
| 162 | |
Kaartic Sivaraam | e1b3f3d | 2018-01-14 23:07:37 +0530 | [diff] [blame] | 163 | The following 'update' procedures are only available via the |
| 164 | `submodule.<name>.update` configuration variable: |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 165 | |
| 166 | custom command;; arbitrary shell command that takes a single |
| 167 | argument (the sha1 of the commit recorded in the |
Stefan Beller | fc01a5d | 2016-12-27 15:43:09 -0800 | [diff] [blame] | 168 | superproject) is executed. When `submodule.<name>.update` |
| 169 | is set to '!command', the remainder after the exclamation mark |
| 170 | is the custom command. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 171 | |
Stefan Beller | fc01a5d | 2016-12-27 15:43:09 -0800 | [diff] [blame] | 172 | none;; the submodule is not updated. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 173 | |
Johannes Schindelin | be4d2c8 | 2008-05-16 11:23:03 +0100 | [diff] [blame] | 174 | If the submodule is not yet initialized, and you just want to use the |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 175 | setting as stored in `.gitmodules`, you can automatically initialize the |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 176 | submodule with the `--init` option. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 177 | |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 178 | If `--recursive` is specified, this command will recurse into the |
Johan Herland | b13fd5c | 2009-08-19 03:45:23 +0200 | [diff] [blame] | 179 | registered submodules, and update any nested submodules within. |
Josh Steadmon | f05da2b | 2022-02-04 21:00:49 -0800 | [diff] [blame] | 180 | |
| 181 | If `--filter <filter spec>` is specified, the given partial clone filter will be |
| 182 | applied to the submodule. See linkgit:git-rev-list[1] for details on filter |
| 183 | specifications. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 184 | -- |
Denton Liu | 40e747e | 2019-09-16 11:19:17 -0700 | [diff] [blame] | 185 | set-branch (-b|--branch) <branch> [--] <path>:: |
| 186 | set-branch (-d|--default) [--] <path>:: |
Denton Liu | b57e811 | 2019-02-08 03:21:34 -0800 | [diff] [blame] | 187 | Sets the default remote tracking branch for the submodule. The |
| 188 | `--branch` option allows the remote branch to be specified. The |
| 189 | `--default` option removes the submodule.<name>.branch configuration |
Johannes Schindelin | f0a96e8 | 2020-06-24 14:46:30 +0000 | [diff] [blame] | 190 | key, which causes the tracking branch to default to the remote 'HEAD'. |
Denton Liu | b57e811 | 2019-02-08 03:21:34 -0800 | [diff] [blame] | 191 | |
Denton Liu | 26b0610 | 2019-10-29 10:01:52 -0700 | [diff] [blame] | 192 | set-url [--] <path> <newurl>:: |
| 193 | Sets the URL of the specified submodule to <newurl>. Then, it will |
| 194 | automatically synchronize the submodule's new remote URL |
| 195 | configuration. |
| 196 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 197 | summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...]:: |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 198 | Show commit summary between the given commit (defaults to HEAD) and |
| 199 | working tree/index. For a submodule in question, a series of commits |
| 200 | in the submodule between the given super project commit and the |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 201 | index or working tree (switched by `--cached`) are shown. If the option |
| 202 | `--files` is given, show the series of commits in the submodule between |
Lars Hjemli | ef92e1a | 2009-08-15 10:40:42 +0200 | [diff] [blame] | 203 | the index of the super project and the working tree of the submodule |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 204 | (this option doesn't allow to use the `--cached` option or to provide an |
Jens Lehmann | 1c244f6 | 2009-08-13 21:32:50 +0200 | [diff] [blame] | 205 | explicit commit). |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 206 | + |
| 207 | Using the `--submodule=log` option with linkgit:git-diff[1] will provide that |
| 208 | information too. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 209 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 210 | foreach [--recursive] <command>:: |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 211 | Evaluates an arbitrary shell command in each checked out submodule. |
Prathamesh Chavan | b6f7ac8 | 2018-05-08 17:29:51 -0700 | [diff] [blame] | 212 | The command has access to the variables $name, $sm_path, $displaypath, |
| 213 | $sha1 and $toplevel: |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 214 | $name is the name of the relevant submodule section in `.gitmodules`, |
Prathamesh Chavan | f0fd0dc | 2018-05-08 17:29:50 -0700 | [diff] [blame] | 215 | $sm_path is the path of the submodule as recorded in the immediate |
Prathamesh Chavan | b6f7ac8 | 2018-05-08 17:29:51 -0700 | [diff] [blame] | 216 | superproject, $displaypath contains the relative path from the |
| 217 | current working directory to the submodules root directory, |
| 218 | $sha1 is the commit as recorded in the immediate |
Prathamesh Chavan | f0fd0dc | 2018-05-08 17:29:50 -0700 | [diff] [blame] | 219 | superproject, and $toplevel is the absolute path to the top-level |
| 220 | of the immediate superproject. |
| 221 | Note that to avoid conflicts with '$PATH' on Windows, the '$path' |
| 222 | variable is now a deprecated synonym of '$sm_path' variable. |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 223 | Any submodules defined in the superproject but not checked out are |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 224 | ignored by this command. Unless given `--quiet`, foreach prints the name |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 225 | of each submodule before evaluating the command. |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 226 | If `--recursive` is given, submodules are traversed recursively (i.e. |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 227 | the given shell command is evaluated in nested submodules as well). |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 228 | A non-zero return from the command in any submodule causes |
| 229 | the processing to terminate. This can be overridden by adding '|| :' |
| 230 | to the end of the command. |
| 231 | + |
Jeff King | e91461b | 2017-02-13 16:05:49 -0500 | [diff] [blame] | 232 | As an example, the command below will show the path and currently |
| 233 | checked out commit for each submodule: |
| 234 | + |
| 235 | -------------- |
Kyle Meyer | 04e5b3f | 2020-01-31 12:08:43 -0500 | [diff] [blame] | 236 | git submodule foreach 'echo $sm_path `git rev-parse HEAD`' |
Jeff King | e91461b | 2017-02-13 16:05:49 -0500 | [diff] [blame] | 237 | -------------- |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 238 | |
Stefan Beller | eb2f2f5 | 2016-12-27 15:43:08 -0800 | [diff] [blame] | 239 | sync [--recursive] [--] [<path>...]:: |
David Aguilar | 2327f61 | 2008-08-24 12:43:37 -0700 | [diff] [blame] | 240 | Synchronizes submodules' remote URL configuration setting |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 241 | to the value specified in `.gitmodules`. It will only affect those |
Jim Meyering | a7793a7 | 2012-03-28 10:41:54 +0200 | [diff] [blame] | 242 | submodules which already have a URL entry in .git/config (that is the |
Junio C Hamano | ccee608 | 2011-06-25 22:41:25 +0200 | [diff] [blame] | 243 | case when they are initialized or freshly added). This is useful when |
David Aguilar | 2327f61 | 2008-08-24 12:43:37 -0700 | [diff] [blame] | 244 | submodule URLs change upstream and you need to update your local |
| 245 | repositories accordingly. |
| 246 | + |
Martin Ågren | 4c57a4f | 2018-04-17 21:15:29 +0200 | [diff] [blame] | 247 | `git submodule sync` synchronizes all submodules while |
| 248 | `git submodule sync -- A` synchronizes submodule "A" only. |
Stefan Beller | e7220c4 | 2015-12-03 12:41:02 -0800 | [diff] [blame] | 249 | + |
| 250 | If `--recursive` is specified, this command will recurse into the |
| 251 | registered submodules, and sync any nested submodules within. |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 252 | |
Stefan Beller | f6f8586 | 2016-12-12 11:04:35 -0800 | [diff] [blame] | 253 | absorbgitdirs:: |
| 254 | If a git directory of a submodule is inside the submodule, |
Thomas Menzel | 5814d44 | 2020-01-06 14:50:13 +0000 | [diff] [blame] | 255 | move the git directory of the submodule into its superproject's |
Stefan Beller | f6f8586 | 2016-12-12 11:04:35 -0800 | [diff] [blame] | 256 | `$GIT_DIR/modules` path and then connect the git directory and |
| 257 | its working directory by setting the `core.worktree` and adding |
| 258 | a .git file pointing to the git directory embedded in the |
| 259 | superprojects git directory. |
| 260 | + |
| 261 | A repository that was cloned independently and later added as a submodule or |
| 262 | old setups have the submodules git directory inside the submodule instead of |
| 263 | embedded into the superprojects git directory. |
| 264 | + |
| 265 | This command is recursive by default. |
| 266 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 267 | OPTIONS |
| 268 | ------- |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 269 | -q:: |
| 270 | --quiet:: |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 271 | Only print error messages. |
| 272 | |
Casey Fitzpatrick | 6d33e1c | 2018-05-03 06:53:45 -0400 | [diff] [blame] | 273 | --progress:: |
| 274 | This option is only valid for add and update commands. |
| 275 | Progress status is reported on the standard error stream |
| 276 | by default when it is attached to a terminal, unless -q |
| 277 | is specified. This flag forces progress status even if the |
| 278 | standard error stream is not directed to a terminal. |
| 279 | |
Stefan Beller | f6a5279 | 2016-05-05 12:52:32 -0700 | [diff] [blame] | 280 | --all:: |
| 281 | This option is only valid for the deinit command. Unregister all |
| 282 | submodules in the working tree. |
| 283 | |
Denton Liu | 7a4bb55 | 2019-02-07 02:18:55 -0800 | [diff] [blame] | 284 | -b <branch>:: |
| 285 | --branch <branch>:: |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 286 | Branch of repository to add as submodule. |
W. Trevor King | 15d6493 | 2014-03-27 14:06:20 -0700 | [diff] [blame] | 287 | The name of the branch is recorded as `submodule.<name>.branch` in |
Brandon Williams | 15ef780 | 2016-10-19 13:42:54 -0700 | [diff] [blame] | 288 | `.gitmodules` for `update --remote`. A special value of `.` is used to |
| 289 | indicate that the name of the branch in the submodule should be the |
Denton Liu | 7a4bb55 | 2019-02-07 02:18:55 -0800 | [diff] [blame] | 290 | same name as the current branch in the current repository. If the |
Johannes Schindelin | f0a96e8 | 2020-06-24 14:46:30 +0000 | [diff] [blame] | 291 | option is not specified, it defaults to the remote 'HEAD'. |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 292 | |
Jens Lehmann | d27b876 | 2010-07-17 17:11:43 +0200 | [diff] [blame] | 293 | -f:: |
| 294 | --force:: |
Jens Lehmann | cf41982 | 2013-03-04 22:20:24 +0100 | [diff] [blame] | 295 | This option is only valid for add, deinit and update commands. |
Nicolas Morey-Chaisemartin | 9db31bd | 2011-04-01 11:42:03 +0200 | [diff] [blame] | 296 | When running add, allow adding an otherwise ignored submodule path. |
Stefan Beller | f6a5279 | 2016-05-05 12:52:32 -0700 | [diff] [blame] | 297 | When running deinit the submodule working trees will be removed even |
| 298 | if they contain local changes. |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 299 | When running update (only effective with the checkout procedure), |
| 300 | throw away local changes in submodules when switching to a |
| 301 | different commit; and always run a checkout operation in the |
| 302 | submodule, even if the commit listed in the index of the |
| 303 | containing repository matches the commit checked out in the |
| 304 | submodule. |
Jens Lehmann | d27b876 | 2010-07-17 17:11:43 +0200 | [diff] [blame] | 305 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 306 | --cached:: |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 307 | This option is only valid for status and summary commands. These |
| 308 | commands typically use the commit found in the submodule HEAD, but |
| 309 | with this option, the commit stored in the index is used instead. |
| 310 | |
Jens Lehmann | 1c244f6 | 2009-08-13 21:32:50 +0200 | [diff] [blame] | 311 | --files:: |
| 312 | This option is only valid for the summary command. This command |
| 313 | compares the commit in the index with that in the submodule HEAD |
| 314 | when this option is used. |
| 315 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 316 | -n:: |
| 317 | --summary-limit:: |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 318 | This option is only valid for the summary command. |
| 319 | Limit the summary size (number of commits shown in total). |
Junio C Hamano | 51836e9 | 2008-04-12 18:34:39 -0700 | [diff] [blame] | 320 | Giving 0 will disable the summary; a negative number means unlimited |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 321 | (the default). This limit only applies to modified submodules. The |
| 322 | size is always limited to 1 for added/deleted/typechanged submodules. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 323 | |
W. Trevor King | 06b1abb | 2012-12-19 11:03:32 -0500 | [diff] [blame] | 324 | --remote:: |
| 325 | This option is only valid for the update command. Instead of using |
| 326 | the superproject's recorded SHA-1 to update the submodule, use the |
Michael Schubert | d6ac1d2 | 2013-07-03 11:12:34 +0200 | [diff] [blame] | 327 | status of the submodule's remote-tracking branch. The remote used |
W. Trevor King | 06b1abb | 2012-12-19 11:03:32 -0500 | [diff] [blame] | 328 | is branch's remote (`branch.<name>.remote`), defaulting to `origin`. |
Johannes Schindelin | f0a96e8 | 2020-06-24 14:46:30 +0000 | [diff] [blame] | 329 | The remote branch used defaults to the remote `HEAD`, but the branch |
| 330 | name may be overridden by setting the `submodule.<name>.branch` |
| 331 | option in either `.gitmodules` or `.git/config` (with `.git/config` |
| 332 | taking precedence). |
W. Trevor King | 06b1abb | 2012-12-19 11:03:32 -0500 | [diff] [blame] | 333 | + |
| 334 | This works for any of the supported update procedures (`--checkout`, |
| 335 | `--rebase`, etc.). The only change is the source of the target SHA-1. |
| 336 | For example, `submodule update --remote --merge` will merge upstream |
| 337 | submodule changes into the submodules, while `submodule update |
| 338 | --merge` will merge superproject gitlink changes into the submodules. |
| 339 | + |
| 340 | In order to ensure a current tracking branch state, `update --remote` |
| 341 | fetches the submodule's remote repository before calculating the |
| 342 | SHA-1. If you don't want to fetch, you should use `submodule update |
| 343 | --remote --no-fetch`. |
W. Trevor King | 9937e65 | 2014-01-26 12:45:16 -0800 | [diff] [blame] | 344 | + |
| 345 | Use this option to integrate changes from the upstream subproject with |
| 346 | your submodule's current HEAD. Alternatively, you can run `git pull` |
| 347 | from the submodule, which is equivalent except for the remote branch |
| 348 | name: `update --remote` uses the default upstream repository and |
| 349 | `submodule.<name>.branch`, while `git pull` uses the submodule's |
| 350 | `branch.<name>.merge`. Prefer `submodule.<name>.branch` if you want |
| 351 | to distribute the default upstream branch with the superproject and |
| 352 | `branch.<name>.merge` if you want a more native feel while working in |
| 353 | the submodule itself. |
W. Trevor King | 06b1abb | 2012-12-19 11:03:32 -0500 | [diff] [blame] | 354 | |
Fabian Franz | 31ca3ac | 2009-02-05 20:18:32 -0200 | [diff] [blame] | 355 | -N:: |
| 356 | --no-fetch:: |
| 357 | This option is only valid for the update command. |
| 358 | Don't fetch new objects from the remote site. |
| 359 | |
Jens Lehmann | 893a976 | 2014-02-28 22:41:11 +0000 | [diff] [blame] | 360 | --checkout:: |
| 361 | This option is only valid for the update command. |
| 362 | Checkout the commit recorded in the superproject on a detached HEAD |
| 363 | in the submodule. This is the default behavior, the main use of |
| 364 | this option is to override `submodule.$name.update` when set to |
Michal Sojka | 5c31acf | 2015-03-02 23:57:58 +0100 | [diff] [blame] | 365 | a value other than `checkout`. |
Jens Lehmann | 893a976 | 2014-02-28 22:41:11 +0000 | [diff] [blame] | 366 | If the key `submodule.$name.update` is either not explicitly set or |
| 367 | set to `checkout`, this option is implicit. |
| 368 | |
Johan Herland | 42b4917 | 2009-06-03 00:59:12 +0200 | [diff] [blame] | 369 | --merge:: |
| 370 | This option is only valid for the update command. |
| 371 | Merge the commit recorded in the superproject into the current branch |
| 372 | of the submodule. If this option is given, the submodule's HEAD will |
| 373 | not be detached. If a merge failure prevents this process, you will |
| 374 | have to resolve the resulting conflicts within the submodule with the |
| 375 | usual conflict resolution tools. |
| 376 | If the key `submodule.$name.update` is set to `merge`, this option is |
| 377 | implicit. |
| 378 | |
Peter Hutterer | ca2cedb | 2009-04-24 09:06:38 +1000 | [diff] [blame] | 379 | --rebase:: |
| 380 | This option is only valid for the update command. |
| 381 | Rebase the current branch onto the commit recorded in the |
| 382 | superproject. If this option is given, the submodule's HEAD will not |
Ralf Wildenhues | 6a5d0b0 | 2010-01-31 14:24:39 +0100 | [diff] [blame] | 383 | be detached. If a merge failure prevents this process, you will have |
Peter Hutterer | ca2cedb | 2009-04-24 09:06:38 +1000 | [diff] [blame] | 384 | to resolve these failures with linkgit:git-rebase[1]. |
Johan Herland | 3294842 | 2009-06-03 08:27:06 +0200 | [diff] [blame] | 385 | If the key `submodule.$name.update` is set to `rebase`, this option is |
Peter Hutterer | ca2cedb | 2009-04-24 09:06:38 +1000 | [diff] [blame] | 386 | implicit. |
| 387 | |
Jens Lehmann | 402e8a6 | 2011-08-01 22:49:21 +0200 | [diff] [blame] | 388 | --init:: |
| 389 | This option is only valid for the update command. |
| 390 | Initialize all submodules for which "git submodule init" has not been |
| 391 | called so far before updating. |
| 392 | |
Jens Lehmann | 73b0898 | 2012-09-30 01:05:58 +0200 | [diff] [blame] | 393 | --name:: |
| 394 | This option is only valid for the add command. It sets the submodule's |
| 395 | name to the given string instead of defaulting to its path. The name |
| 396 | must be valid as a directory name and may not end with a '/'. |
| 397 | |
Michael S. Tsirkin | d92a395 | 2009-05-04 22:30:01 +0300 | [diff] [blame] | 398 | --reference <repository>:: |
| 399 | This option is only valid for add and update commands. These |
| 400 | commands sometimes need to clone a remote repository. In this case, |
| 401 | this option will be passed to the linkgit:git-clone[1] command. |
| 402 | + |
| 403 | *NOTE*: Do *not* use this option unless you have read the note |
Casey Fitzpatrick | a0ef293 | 2018-05-03 06:53:46 -0400 | [diff] [blame] | 404 | for linkgit:git-clone[1]'s `--reference`, `--shared`, and `--dissociate` |
| 405 | options carefully. |
| 406 | |
| 407 | --dissociate:: |
| 408 | This option is only valid for add and update commands. These |
| 409 | commands sometimes need to clone a remote repository. In this case, |
| 410 | this option will be passed to the linkgit:git-clone[1] command. |
| 411 | + |
| 412 | *NOTE*: see the NOTE for the `--reference` option. |
Michael S. Tsirkin | d92a395 | 2009-05-04 22:30:01 +0300 | [diff] [blame] | 413 | |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 414 | --recursive:: |
Stefan Beller | e7220c4 | 2015-12-03 12:41:02 -0800 | [diff] [blame] | 415 | This option is only valid for foreach, update, status and sync commands. |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 416 | Traverse submodules recursively. The operation is performed not |
| 417 | only in the submodules of the current repo, but also |
| 418 | in any nested submodules inside those submodules (and so on). |
| 419 | |
Fredrik Gustafsson | 275cd18 | 2013-07-02 23:42:56 +0200 | [diff] [blame] | 420 | --depth:: |
| 421 | This option is valid for add and update commands. Create a 'shallow' |
| 422 | clone with a history truncated to the specified number of revisions. |
| 423 | See linkgit:git-clone[1] |
| 424 | |
Stefan Beller | abed000 | 2016-05-26 14:59:43 -0700 | [diff] [blame] | 425 | --[no-]recommend-shallow:: |
| 426 | This option is only valid for the update command. |
| 427 | The initial clone of a submodule will use the recommended |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 428 | `submodule.<name>.shallow` as provided by the `.gitmodules` file |
Stefan Beller | abed000 | 2016-05-26 14:59:43 -0700 | [diff] [blame] | 429 | by default. To ignore the suggestions use `--no-recommend-shallow`. |
| 430 | |
Stefan Beller | 2335b87 | 2016-02-29 18:07:19 -0800 | [diff] [blame] | 431 | -j <n>:: |
| 432 | --jobs <n>:: |
| 433 | This option is only valid for the update command. |
| 434 | Clone new submodules in parallel with as many jobs. |
| 435 | Defaults to the `submodule.fetchJobs` option. |
Fredrik Gustafsson | 275cd18 | 2013-07-02 23:42:56 +0200 | [diff] [blame] | 436 | |
Emily Shaffer | 132f600 | 2020-02-20 19:10:27 -0800 | [diff] [blame] | 437 | --[no-]single-branch:: |
| 438 | This option is only valid for the update command. |
| 439 | Clone only one branch during update: HEAD or one specified by --branch. |
| 440 | |
Abhijit Menon-Sen | f448e24 | 2008-07-30 15:03:43 +0530 | [diff] [blame] | 441 | <path>...:: |
| 442 | Paths to submodule(s). When specified this will restrict the command |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 443 | to only operate on the submodules found at the specified paths. |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 444 | (This argument is required with add). |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 445 | |
| 446 | FILES |
| 447 | ----- |
Kaartic Sivaraam | beebc6d | 2017-06-22 02:51:42 +0000 | [diff] [blame] | 448 | When initializing submodules, a `.gitmodules` file in the top-level directory |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 449 | of the containing repository is used to find the url of each submodule. |
Junio C Hamano | c458570 | 2007-12-27 23:29:53 -0800 | [diff] [blame] | 450 | This file should be formatted in the same way as `$GIT_DIR/config`. The key |
Dan McGee | 5162e69 | 2007-12-29 00:20:38 -0600 | [diff] [blame] | 451 | to each submodule url is "submodule.$name.url". See linkgit:gitmodules[5] |
Junio C Hamano | 6fbe42c | 2007-12-16 22:03:21 -0800 | [diff] [blame] | 452 | for details. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 453 | |
Stefan Beller | d480345 | 2017-06-22 14:01:49 -0700 | [diff] [blame] | 454 | SEE ALSO |
| 455 | -------- |
| 456 | linkgit:gitsubmodules[7], linkgit:gitmodules[5]. |
| 457 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 458 | GIT |
| 459 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 460 | Part of the linkgit:git[1] suite |