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] |
Jens Lehmann | d27b876 | 2010-07-17 17:11:43 +0200 | [diff] [blame] | 12 | 'git submodule' [--quiet] add [-b branch] [-f|--force] |
Jens Lehmann | 1414e57 | 2009-09-22 17:10:12 +0200 | [diff] [blame] | 13 | [--reference <repository>] [--] <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>...] |
Junio C Hamano | 7d40f89 | 2009-06-13 12:49:50 -0700 | [diff] [blame] | 16 | 'git submodule' [--quiet] update [--init] [-N|--no-fetch] [--rebase] |
Johan Herland | b13fd5c | 2009-08-19 03:45:23 +0200 | [diff] [blame] | 17 | [--reference <repository>] [--merge] [--recursive] [--] [<path>...] |
Jens Lehmann | 1c244f6 | 2009-08-13 21:32:50 +0200 | [diff] [blame] | 18 | 'git submodule' [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...] |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 19 | 'git submodule' [--quiet] foreach [--recursive] <command> |
David Aguilar | 2327f61 | 2008-08-24 12:43:37 -0700 | [diff] [blame] | 20 | 'git submodule' [--quiet] sync [--] [<path>...] |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 21 | |
| 22 | |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 23 | DESCRIPTION |
| 24 | ----------- |
Petr Baudis | c47f102 | 2008-07-18 15:40:41 +0200 | [diff] [blame] | 25 | Submodules allow foreign repositories to be embedded within |
| 26 | a dedicated subdirectory of the source tree, always pointed |
| 27 | at a particular commit. |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 28 | |
Petr Baudis | c47f102 | 2008-07-18 15:40:41 +0200 | [diff] [blame] | 29 | They are not to be confused with remotes, which are meant mainly |
| 30 | for branches of the same project; submodules are meant for |
| 31 | different projects you would like to make part of your source tree, |
| 32 | while the history of the two projects still stays completely |
| 33 | independent and you cannot modify the contents of the submodule |
| 34 | from within the main project. |
| 35 | If you want to merge the project histories and want to treat the |
| 36 | aggregated whole as a single project from then on, you may want to |
| 37 | add a remote for the other project and use the 'subtree' merge strategy, |
| 38 | instead of treating the other project as a submodule. Directories |
| 39 | that come from both projects can be cloned and checked out as a whole |
| 40 | if you choose to go that route. |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 41 | |
Petr Baudis | c47f102 | 2008-07-18 15:40:41 +0200 | [diff] [blame] | 42 | Submodules are composed from a so-called `gitlink` tree entry |
| 43 | in the main repository that refers to a particular commit object |
| 44 | within the inner repository that is completely separate. |
| 45 | A record in the `.gitmodules` file at the root of the source |
| 46 | tree assigns a logical name to the submodule and describes |
| 47 | the default URL the submodule shall be cloned from. |
| 48 | The logical name can be used for overriding this URL within your |
| 49 | local repository configuration (see 'submodule init'). |
| 50 | |
| 51 | This command will manage the tree entries and contents of the |
| 52 | gitmodules file for you, as well as inspect the status of your |
| 53 | submodules and update them. |
| 54 | When adding a new submodule to the tree, the 'add' subcommand |
| 55 | is to be used. However, when pulling a tree containing submodules, |
| 56 | these will not be checked out by default; |
| 57 | the 'init' and 'update' subcommands will maintain submodules |
| 58 | checked out and at appropriate revision in your working tree. |
| 59 | You can briefly inspect the up-to-date status of your submodules |
| 60 | using the 'status' subcommand and get a detailed overview of the |
| 61 | difference between the index and checkouts using the 'summary' |
| 62 | subcommand. |
Petr Baudis | e38953a | 2008-07-16 20:44:12 +0200 | [diff] [blame] | 63 | |
| 64 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 65 | COMMANDS |
| 66 | -------- |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 67 | add:: |
| 68 | Add the given repository as a submodule at the given path |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 69 | to the changeset to be committed next to the current |
Cesar Eduardo Barros | 77ef80a | 2008-07-26 01:17:42 -0300 | [diff] [blame] | 70 | project: the current project is termed the "superproject". |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 71 | + |
Jens Lehmann | 1414e57 | 2009-09-22 17:10:12 +0200 | [diff] [blame] | 72 | This requires at least one argument: <repository>. The optional |
| 73 | argument <path> is the relative location for the cloned submodule |
| 74 | to exist in the superproject. If <path> is not given, the |
| 75 | "humanish" part of the source repository is used ("repo" for |
| 76 | "/path/to/repo.git" and "foo" for "host.xz:foo/.git"). |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 77 | + |
| 78 | <repository> is the URL of the new submodule's origin repository. |
| 79 | This may be either an absolute URL, or (if it begins with ./ |
| 80 | or ../), the location relative to the superproject's origin |
| 81 | repository. |
| 82 | + |
| 83 | <path> is the relative location for the cloned submodule to |
| 84 | exist in the superproject. If <path> does not exist, then the |
| 85 | submodule is created by cloning from the named URL. If <path> does |
| 86 | exist and is already a valid git repository, then this is added |
| 87 | to the changeset without cloning. This second form is provided |
| 88 | to ease creating a new submodule from scratch, and presumes |
| 89 | the user will later push the submodule to the given URL. |
| 90 | + |
| 91 | In either case, the given URL is recorded into .gitmodules for |
| 92 | use by subsequent users cloning the superproject. If the URL is |
| 93 | given relative to the superproject's repository, the presumption |
| 94 | is the superproject and submodule repositories will be kept |
| 95 | together in the same relative location, and only the |
Markus Heidelberg | 04c8ce9 | 2008-12-19 13:14:18 +0100 | [diff] [blame] | 96 | superproject's URL needs to be provided: git-submodule will correctly |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 97 | locate the submodule using the relative URL in .gitmodules. |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 98 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 99 | status:: |
| 100 | Show the status of the submodules. This will print the SHA-1 of the |
| 101 | currently checked out commit for each submodule, along with the |
Thomas Rast | 0b444cd | 2010-01-10 00:33:00 +0100 | [diff] [blame] | 102 | submodule path and the output of 'git describe' for the |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 103 | SHA-1. Each SHA-1 will be prefixed with `-` if the submodule is not |
Nicolas Morey-Chaisemartin | 313ee0d | 2011-03-30 07:20:02 +0200 | [diff] [blame] | 104 | initialized, `+` if the currently checked out submodule commit |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 105 | 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] | 106 | repository and `U` if the submodule has merge conflicts. |
| 107 | This command is the default command for 'git submodule'. |
Johan Herland | 64b19ff | 2009-08-19 03:45:24 +0200 | [diff] [blame] | 108 | + |
| 109 | If '--recursive' is specified, this command will recurse into nested |
| 110 | submodules, and show their status as well. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 111 | |
| 112 | init:: |
Petr Baudis | c47f102 | 2008-07-18 15:40:41 +0200 | [diff] [blame] | 113 | Initialize the submodules, i.e. register each submodule name |
| 114 | and url found in .gitmodules into .git/config. |
| 115 | The key used in .git/config is `submodule.$name.url`. |
| 116 | This command does not alter existing information in .git/config. |
| 117 | You can then customize the submodule clone URLs in .git/config |
Thomas Rast | ca76828 | 2010-01-07 17:49:12 +0100 | [diff] [blame] | 118 | for your local setup and proceed to `git submodule update`; |
| 119 | you can also just use `git submodule update --init` without |
Petr Baudis | c47f102 | 2008-07-18 15:40:41 +0200 | [diff] [blame] | 120 | the explicit 'init' step if you do not intend to customize |
| 121 | any submodule locations. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 122 | |
| 123 | update:: |
Lars Hjemli | 211b7f1 | 2007-06-06 11:13:02 +0200 | [diff] [blame] | 124 | Update the registered submodules, i.e. clone missing submodules and |
| 125 | checkout the commit specified in the index of the containing repository. |
Johan Herland | 42b4917 | 2009-06-03 00:59:12 +0200 | [diff] [blame] | 126 | This will make the submodules HEAD be detached unless '--rebase' or |
| 127 | '--merge' is specified or the key `submodule.$name.update` is set to |
| 128 | `rebase` or `merge`. |
Johannes Schindelin | be4d2c8 | 2008-05-16 11:23:03 +0100 | [diff] [blame] | 129 | + |
| 130 | If the submodule is not yet initialized, and you just want to use the |
| 131 | setting as stored in .gitmodules, you can automatically initialize the |
| 132 | submodule with the --init option. |
Johan Herland | b13fd5c | 2009-08-19 03:45:23 +0200 | [diff] [blame] | 133 | + |
| 134 | If '--recursive' is specified, this command will recurse into the |
| 135 | registered submodules, and update any nested submodules within. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 136 | |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 137 | summary:: |
| 138 | Show commit summary between the given commit (defaults to HEAD) and |
| 139 | working tree/index. For a submodule in question, a series of commits |
| 140 | in the submodule between the given super project commit and the |
Jens Lehmann | 1c244f6 | 2009-08-13 21:32:50 +0200 | [diff] [blame] | 141 | index or working tree (switched by --cached) are shown. If the option |
| 142 | --files is given, show the series of commits in the submodule between |
Lars Hjemli | ef92e1a | 2009-08-15 10:40:42 +0200 | [diff] [blame] | 143 | the index of the super project and the working tree of the submodule |
Jens Lehmann | 1c244f6 | 2009-08-13 21:32:50 +0200 | [diff] [blame] | 144 | (this option doesn't allow to use the --cached option or to provide an |
| 145 | explicit commit). |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 146 | |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 147 | foreach:: |
| 148 | Evaluates an arbitrary shell command in each checked out submodule. |
Ævar Arnfjörð Bjarmason | f030c96 | 2010-05-21 16:10:10 +0000 | [diff] [blame] | 149 | The command has access to the variables $name, $path, $sha1 and |
| 150 | $toplevel: |
Johan Herland | 1e7f2aa | 2009-08-16 03:10:08 +0200 | [diff] [blame] | 151 | $name is the name of the relevant submodule section in .gitmodules, |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 152 | $path is the name of the submodule directory relative to the |
Ævar Arnfjörð Bjarmason | f030c96 | 2010-05-21 16:10:10 +0000 | [diff] [blame] | 153 | superproject, $sha1 is the commit as recorded in the superproject, |
| 154 | and $toplevel is the absolute path to the top-level of the superproject. |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 155 | Any submodules defined in the superproject but not checked out are |
| 156 | ignored by this command. Unless given --quiet, foreach prints the name |
| 157 | of each submodule before evaluating the command. |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 158 | If --recursive is given, submodules are traversed recursively (i.e. |
| 159 | the given shell command is evaluated in nested submodules as well). |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 160 | A non-zero return from the command in any submodule causes |
| 161 | the processing to terminate. This can be overridden by adding '|| :' |
| 162 | to the end of the command. |
| 163 | + |
Miklos Vajna | 1c3acfc | 2009-06-28 14:55:45 +0200 | [diff] [blame] | 164 | As an example, +git submodule foreach \'echo $path {backtick}git |
| 165 | rev-parse HEAD{backtick}'+ will show the path and currently checked out |
| 166 | commit for each submodule. |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 167 | |
David Aguilar | 2327f61 | 2008-08-24 12:43:37 -0700 | [diff] [blame] | 168 | sync:: |
| 169 | Synchronizes submodules' remote URL configuration setting |
| 170 | to the value specified in .gitmodules. This is useful when |
| 171 | submodule URLs change upstream and you need to update your local |
| 172 | repositories accordingly. |
| 173 | + |
| 174 | "git submodule sync" synchronizes all submodules while |
| 175 | "git submodule sync -- A" synchronizes submodule "A" only. |
Mark Levedahl | 19a31f9 | 2008-08-10 19:10:04 -0400 | [diff] [blame] | 176 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 177 | OPTIONS |
| 178 | ------- |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 179 | -q:: |
| 180 | --quiet:: |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 181 | Only print error messages. |
| 182 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 183 | -b:: |
| 184 | --branch:: |
Sven Verdoolaege | ecda072 | 2007-06-24 23:06:07 +0200 | [diff] [blame] | 185 | Branch of repository to add as submodule. |
| 186 | |
Jens Lehmann | d27b876 | 2010-07-17 17:11:43 +0200 | [diff] [blame] | 187 | -f:: |
| 188 | --force:: |
Nicolas Morey-Chaisemartin | 9db31bd | 2011-04-01 11:42:03 +0200 | [diff] [blame] | 189 | This option is only valid for add and update commands. |
| 190 | When running add, allow adding an otherwise ignored submodule path. |
| 191 | When running update, throw away local changes in submodules when |
| 192 | switching to a different commit. |
Jens Lehmann | d27b876 | 2010-07-17 17:11:43 +0200 | [diff] [blame] | 193 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 194 | --cached:: |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 195 | This option is only valid for status and summary commands. These |
| 196 | commands typically use the commit found in the submodule HEAD, but |
| 197 | with this option, the commit stored in the index is used instead. |
| 198 | |
Jens Lehmann | 1c244f6 | 2009-08-13 21:32:50 +0200 | [diff] [blame] | 199 | --files:: |
| 200 | This option is only valid for the summary command. This command |
| 201 | compares the commit in the index with that in the submodule HEAD |
| 202 | when this option is used. |
| 203 | |
Stephan Beyer | 3240240 | 2008-06-08 03:36:09 +0200 | [diff] [blame] | 204 | -n:: |
| 205 | --summary-limit:: |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 206 | This option is only valid for the summary command. |
| 207 | Limit the summary size (number of commits shown in total). |
Junio C Hamano | 51836e9 | 2008-04-12 18:34:39 -0700 | [diff] [blame] | 208 | Giving 0 will disable the summary; a negative number means unlimited |
Ping Yin | 925e7f6 | 2008-03-11 21:52:18 +0800 | [diff] [blame] | 209 | (the default). This limit only applies to modified submodules. The |
| 210 | size is always limited to 1 for added/deleted/typechanged submodules. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 211 | |
Fabian Franz | 31ca3ac | 2009-02-05 20:18:32 -0200 | [diff] [blame] | 212 | -N:: |
| 213 | --no-fetch:: |
| 214 | This option is only valid for the update command. |
| 215 | Don't fetch new objects from the remote site. |
| 216 | |
Johan Herland | 42b4917 | 2009-06-03 00:59:12 +0200 | [diff] [blame] | 217 | --merge:: |
| 218 | This option is only valid for the update command. |
| 219 | Merge the commit recorded in the superproject into the current branch |
| 220 | of the submodule. If this option is given, the submodule's HEAD will |
| 221 | not be detached. If a merge failure prevents this process, you will |
| 222 | have to resolve the resulting conflicts within the submodule with the |
| 223 | usual conflict resolution tools. |
| 224 | If the key `submodule.$name.update` is set to `merge`, this option is |
| 225 | implicit. |
| 226 | |
Peter Hutterer | ca2cedb | 2009-04-24 09:06:38 +1000 | [diff] [blame] | 227 | --rebase:: |
| 228 | This option is only valid for the update command. |
| 229 | Rebase the current branch onto the commit recorded in the |
| 230 | superproject. If this option is given, the submodule's HEAD will not |
Ralf Wildenhues | 6a5d0b0 | 2010-01-31 14:24:39 +0100 | [diff] [blame] | 231 | be detached. If a merge failure prevents this process, you will have |
Peter Hutterer | ca2cedb | 2009-04-24 09:06:38 +1000 | [diff] [blame] | 232 | to resolve these failures with linkgit:git-rebase[1]. |
Johan Herland | 3294842 | 2009-06-03 08:27:06 +0200 | [diff] [blame] | 233 | 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] | 234 | implicit. |
| 235 | |
Michael S. Tsirkin | d92a395 | 2009-05-04 22:30:01 +0300 | [diff] [blame] | 236 | --reference <repository>:: |
| 237 | This option is only valid for add and update commands. These |
| 238 | commands sometimes need to clone a remote repository. In this case, |
| 239 | this option will be passed to the linkgit:git-clone[1] command. |
| 240 | + |
| 241 | *NOTE*: Do *not* use this option unless you have read the note |
| 242 | for linkgit:git-clone[1]'s --reference and --shared options carefully. |
| 243 | |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 244 | --recursive:: |
Johan Herland | 64b19ff | 2009-08-19 03:45:24 +0200 | [diff] [blame] | 245 | This option is only valid for foreach, update and status commands. |
Johan Herland | 15fc56a | 2009-08-19 03:45:22 +0200 | [diff] [blame] | 246 | Traverse submodules recursively. The operation is performed not |
| 247 | only in the submodules of the current repo, but also |
| 248 | in any nested submodules inside those submodules (and so on). |
| 249 | |
Abhijit Menon-Sen | f448e24 | 2008-07-30 15:03:43 +0530 | [diff] [blame] | 250 | <path>...:: |
| 251 | Paths to submodule(s). When specified this will restrict the command |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 252 | to only operate on the submodules found at the specified paths. |
Mark Levedahl | ec05df3 | 2008-07-09 21:05:40 -0400 | [diff] [blame] | 253 | (This argument is required with add). |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 254 | |
| 255 | FILES |
| 256 | ----- |
Lars Hjemli | 211b7f1 | 2007-06-06 11:13:02 +0200 | [diff] [blame] | 257 | When initializing submodules, a .gitmodules file in the top-level directory |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 258 | 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] | 259 | 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] | 260 | 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] | 261 | for details. |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 262 | |
Lars Hjemli | 70c7ac2 | 2007-05-26 15:56:40 +0200 | [diff] [blame] | 263 | GIT |
| 264 | --- |
Christian Couder | 9e1f0a8 | 2008-06-06 09:07:32 +0200 | [diff] [blame] | 265 | Part of the linkgit:git[1] suite |