1git-submodule(1) 2================ 3 4NAME 5---- 6git-submodule - Initialize, update or inspect submodules 7 8 9SYNOPSIS 10-------- 11[verse] 12'git submodule' [--quiet] [--cached] 13'git submodule' [--quiet] add [<options>] [--] <repository> [<path>] 14'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...] 15'git submodule' [--quiet] init [--] [<path>...] 16'git submodule' [--quiet] deinit [-f|--force] (--all|[--] <path>...) 17'git submodule' [--quiet] update [<options>] [--] [<path>...] 18'git submodule' [--quiet] summary [<options>] [--] [<path>...] 19'git submodule' [--quiet] foreach [--recursive] <command> 20'git submodule' [--quiet] sync [--recursive] [--] [<path>...] 21'git submodule' [--quiet] absorbgitdirs [--] [<path>...] 22 23 24DESCRIPTION 25----------- 26Inspects, updates and manages submodules. 27 28For more information about submodules, see linkgit:gitsubmodules[7]. 29 30COMMANDS 31-------- 32With no arguments, shows the status of existing submodules. Several 33subcommands are available to perform operations on the submodules. 34 35add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]:: 36 Add the given repository as a submodule at the given path 37 to the changeset to be committed next to the current 38 project: the current project is termed the "superproject". 39+ 40<repository> is the URL of the new submodule's origin repository. 41This may be either an absolute URL, or (if it begins with ./ 42or ../), the location relative to the superproject's default remote 43repository (Please note that to specify a repository 'foo.git' 44which is located right next to a superproject 'bar.git', you'll 45have to use `../foo.git` instead of `./foo.git` - as one might expect 46when following the rules for relative URLs - because the evaluation 47of relative URLs in Git is identical to that of relative directories). 48+ 49The default remote is the remote of the remote-tracking branch 50of the current branch. If no such remote-tracking branch exists or 51the HEAD is detached, "origin" is assumed to be the default remote. 52If the superproject doesn't have a default remote configured 53the superproject is its own authoritative upstream and the current 54working directory is used instead. 55+ 56The optional argument <path> is the relative location for the cloned 57submodule to exist in the superproject. If <path> is not given, the 58canonical part of the source repository is used ("repo" for 59"/path/to/repo.git" and "foo" for "host.xz:foo/.git"). If <path> 60exists and is already a valid Git repository, then it is staged 61for commit without cloning. The <path> is also used as the submodule's 62logical name in its configuration entries unless `--name` is used 63to specify a logical name. 64+ 65The given URL is recorded into `.gitmodules` for use by subsequent users 66cloning the superproject. If the URL is given relative to the 67superproject's repository, the presumption is the superproject and 68submodule repositories will be kept together in the same relative 69location, and only the superproject's URL needs to be provided. 70git-submodule will correctly locate the submodule using the relative 71URL in `.gitmodules`. 72 73status [--cached] [--recursive] [--] [<path>...]:: 74 Show the status of the submodules. This will print the SHA-1 of the 75 currently checked out commit for each submodule, along with the 76 submodule path and the output of 'git describe' for the 77 SHA-1. Each SHA-1 will possibly be prefixed with `-` if the submodule is 78 not initialized, `+` if the currently checked out submodule commit 79 does not match the SHA-1 found in the index of the containing 80 repository and `U` if the submodule has merge conflicts. 81+ 82If `--recursive` is specified, this command will recurse into nested 83submodules, and show their status as well. 84+ 85If you are only interested in changes of the currently initialized 86submodules with respect to the commit recorded in the index or the HEAD, 87linkgit:git-status[1] and linkgit:git-diff[1] will provide that information 88too (and can also report changes to a submodule's work tree). 89 90init [--] [<path>...]:: 91 Initialize the submodules recorded in the index (which were 92 added and committed elsewhere) by setting `submodule.$name.url` 93 in .git/config. It uses the same setting from `.gitmodules` as 94 a template. If the URL is relative, it will be resolved using 95 the default remote. If there is no default remote, the current 96 repository will be assumed to be upstream. 97+ 98Optional <path> arguments limit which submodules will be initialized. 99If no path is specified and submodule.active has been configured, submodules 100configured to be active will be initialized, otherwise all submodules are 101initialized. 102+ 103When present, it will also copy the value of `submodule.$name.update`. 104This command does not alter existing information in .git/config. 105You can then customize the submodule clone URLs in .git/config 106for your local setup and proceed to `git submodule update`; 107you can also just use `git submodule update --init` without 108the explicit 'init' step if you do not intend to customize 109any submodule locations. 110+ 111See the add subcommand for the definition of default remote. 112 113deinit [-f|--force] (--all|[--] <path>...):: 114 Unregister the given submodules, i.e. remove the whole 115 `submodule.$name` section from .git/config together with their work 116 tree. Further calls to `git submodule update`, `git submodule foreach` 117 and `git submodule sync` will skip any unregistered submodules until 118 they are initialized again, so use this command if you don't want to 119 have a local checkout of the submodule in your working tree anymore. 120+ 121When the command is run without pathspec, it errors out, 122instead of deinit-ing everything, to prevent mistakes. 123+ 124If `--force` is specified, the submodule's working tree will 125be removed even if it contains local modifications. 126+ 127If you really want to remove a submodule from the repository and commit 128that use linkgit:git-rm[1] instead. See linkgit:gitsubmodules[7] for removal 129options. 130 131update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>] [--depth <depth>] [--recursive] [--jobs <n>] [--] [<path>...]:: 132+ 133-- 134Update the registered submodules to match what the superproject 135expects by cloning missing submodules and updating the working tree of 136the submodules. The "updating" can be done in several ways depending 137on command line options and the value of `submodule.<name>.update` 138configuration variable. The command line option takes precedence over 139the configuration variable. If neither is given, a 'checkout' is performed. 140The 'update' procedures supported both from the command line as well as 141through the `submodule.<name>.update` configuration are: 142 143 checkout;; the commit recorded in the superproject will be 144 checked out in the submodule on a detached HEAD. 145+ 146If `--force` is specified, the submodule will be checked out (using 147`git checkout --force`), even if the commit specified 148in the index of the containing repository already matches the commit 149checked out in the submodule. 150 151 rebase;; the current branch of the submodule will be rebased 152 onto the commit recorded in the superproject. 153 154 merge;; the commit recorded in the superproject will be merged 155 into the current branch in the submodule. 156 157The following 'update' procedures are only available via the 158`submodule.<name>.update` configuration variable: 159 160 custom command;; arbitrary shell command that takes a single 161 argument (the sha1 of the commit recorded in the 162 superproject) is executed. When `submodule.<name>.update` 163 is set to '!command', the remainder after the exclamation mark 164 is the custom command. 165 166 none;; the submodule is not updated. 167 168If the submodule is not yet initialized, and you just want to use the 169setting as stored in `.gitmodules`, you can automatically initialize the 170submodule with the `--init` option. 171 172If `--recursive` is specified, this command will recurse into the 173registered submodules, and update any nested submodules within. 174-- 175summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...]:: 176 Show commit summary between the given commit (defaults to HEAD) and 177 working tree/index. For a submodule in question, a series of commits 178 in the submodule between the given super project commit and the 179 index or working tree (switched by `--cached`) are shown. If the option 180 `--files` is given, show the series of commits in the submodule between 181 the index of the super project and the working tree of the submodule 182 (this option doesn't allow to use the `--cached` option or to provide an 183 explicit commit). 184+ 185Using the `--submodule=log` option with linkgit:git-diff[1] will provide that 186information too. 187 188foreach [--recursive] <command>:: 189 Evaluates an arbitrary shell command in each checked out submodule. 190 The command has access to the variables $name, $sm_path, $displaypath, 191 $sha1 and $toplevel: 192 $name is the name of the relevant submodule section in `.gitmodules`, 193 $sm_path is the path of the submodule as recorded in the immediate 194 superproject, $displaypath contains the relative path from the 195 current working directory to the submodules root directory, 196 $sha1 is the commit as recorded in the immediate 197 superproject, and $toplevel is the absolute path to the top-level 198 of the immediate superproject. 199 Note that to avoid conflicts with '$PATH' on Windows, the '$path' 200 variable is now a deprecated synonym of '$sm_path' variable. 201 Any submodules defined in the superproject but not checked out are 202 ignored by this command. Unless given `--quiet`, foreach prints the name 203 of each submodule before evaluating the command. 204 If `--recursive` is given, submodules are traversed recursively (i.e. 205 the given shell command is evaluated in nested submodules as well). 206 A non-zero return from the command in any submodule causes 207 the processing to terminate. This can be overridden by adding '|| :' 208 to the end of the command. 209+ 210As an example, the command below will show the path and currently 211checked out commit for each submodule: 212+ 213-------------- 214git submodule foreach 'echo $path `git rev-parse HEAD`' 215-------------- 216 217sync [--recursive] [--] [<path>...]:: 218 Synchronizes submodules' remote URL configuration setting 219 to the value specified in `.gitmodules`. It will only affect those 220 submodules which already have a URL entry in .git/config (that is the 221 case when they are initialized or freshly added). This is useful when 222 submodule URLs change upstream and you need to update your local 223 repositories accordingly. 224+ 225`git submodule sync` synchronizes all submodules while 226`git submodule sync -- A` synchronizes submodule "A" only. 227+ 228If `--recursive` is specified, this command will recurse into the 229registered submodules, and sync any nested submodules within. 230 231absorbgitdirs:: 232 If a git directory of a submodule is inside the submodule, 233 move the git directory of the submodule into its superprojects 234 `$GIT_DIR/modules` path and then connect the git directory and 235 its working directory by setting the `core.worktree` and adding 236 a .git file pointing to the git directory embedded in the 237 superprojects git directory. 238+ 239A repository that was cloned independently and later added as a submodule or 240old setups have the submodules git directory inside the submodule instead of 241embedded into the superprojects git directory. 242+ 243This command is recursive by default. 244 245OPTIONS 246------- 247-q:: 248--quiet:: 249 Only print error messages. 250 251--progress:: 252 This option is only valid for add and update commands. 253 Progress status is reported on the standard error stream 254 by default when it is attached to a terminal, unless -q 255 is specified. This flag forces progress status even if the 256 standard error stream is not directed to a terminal. 257 258--all:: 259 This option is only valid for the deinit command. Unregister all 260 submodules in the working tree. 261 262-b:: 263--branch:: 264 Branch of repository to add as submodule. 265 The name of the branch is recorded as `submodule.<name>.branch` in 266 `.gitmodules` for `update --remote`. A special value of `.` is used to 267 indicate that the name of the branch in the submodule should be the 268 same name as the current branch in the current repository. 269 270-f:: 271--force:: 272 This option is only valid for add, deinit and update commands. 273 When running add, allow adding an otherwise ignored submodule path. 274 When running deinit the submodule working trees will be removed even 275 if they contain local changes. 276 When running update (only effective with the checkout procedure), 277 throw away local changes in submodules when switching to a 278 different commit; and always run a checkout operation in the 279 submodule, even if the commit listed in the index of the 280 containing repository matches the commit checked out in the 281 submodule. 282 283--cached:: 284 This option is only valid for status and summary commands. These 285 commands typically use the commit found in the submodule HEAD, but 286 with this option, the commit stored in the index is used instead. 287 288--files:: 289 This option is only valid for the summary command. This command 290 compares the commit in the index with that in the submodule HEAD 291 when this option is used. 292 293-n:: 294--summary-limit:: 295 This option is only valid for the summary command. 296 Limit the summary size (number of commits shown in total). 297 Giving 0 will disable the summary; a negative number means unlimited 298 (the default). This limit only applies to modified submodules. The 299 size is always limited to 1 for added/deleted/typechanged submodules. 300 301--remote:: 302 This option is only valid for the update command. Instead of using 303 the superproject's recorded SHA-1 to update the submodule, use the 304 status of the submodule's remote-tracking branch. The remote used 305 is branch's remote (`branch.<name>.remote`), defaulting to `origin`. 306 The remote branch used defaults to `master`, but the branch name may 307 be overridden by setting the `submodule.<name>.branch` option in 308 either `.gitmodules` or `.git/config` (with `.git/config` taking 309 precedence). 310+ 311This works for any of the supported update procedures (`--checkout`, 312`--rebase`, etc.). The only change is the source of the target SHA-1. 313For example, `submodule update --remote --merge` will merge upstream 314submodule changes into the submodules, while `submodule update 315--merge` will merge superproject gitlink changes into the submodules. 316+ 317In order to ensure a current tracking branch state, `update --remote` 318fetches the submodule's remote repository before calculating the 319SHA-1. If you don't want to fetch, you should use `submodule update 320--remote --no-fetch`. 321+ 322Use this option to integrate changes from the upstream subproject with 323your submodule's current HEAD. Alternatively, you can run `git pull` 324from the submodule, which is equivalent except for the remote branch 325name: `update --remote` uses the default upstream repository and 326`submodule.<name>.branch`, while `git pull` uses the submodule's 327`branch.<name>.merge`. Prefer `submodule.<name>.branch` if you want 328to distribute the default upstream branch with the superproject and 329`branch.<name>.merge` if you want a more native feel while working in 330the submodule itself. 331 332-N:: 333--no-fetch:: 334 This option is only valid for the update command. 335 Don't fetch new objects from the remote site. 336 337--checkout:: 338 This option is only valid for the update command. 339 Checkout the commit recorded in the superproject on a detached HEAD 340 in the submodule. This is the default behavior, the main use of 341 this option is to override `submodule.$name.update` when set to 342 a value other than `checkout`. 343 If the key `submodule.$name.update` is either not explicitly set or 344 set to `checkout`, this option is implicit. 345 346--merge:: 347 This option is only valid for the update command. 348 Merge the commit recorded in the superproject into the current branch 349 of the submodule. If this option is given, the submodule's HEAD will 350 not be detached. If a merge failure prevents this process, you will 351 have to resolve the resulting conflicts within the submodule with the 352 usual conflict resolution tools. 353 If the key `submodule.$name.update` is set to `merge`, this option is 354 implicit. 355 356--rebase:: 357 This option is only valid for the update command. 358 Rebase the current branch onto the commit recorded in the 359 superproject. If this option is given, the submodule's HEAD will not 360 be detached. If a merge failure prevents this process, you will have 361 to resolve these failures with linkgit:git-rebase[1]. 362 If the key `submodule.$name.update` is set to `rebase`, this option is 363 implicit. 364 365--init:: 366 This option is only valid for the update command. 367 Initialize all submodules for which "git submodule init" has not been 368 called so far before updating. 369 370--name:: 371 This option is only valid for the add command. It sets the submodule's 372 name to the given string instead of defaulting to its path. The name 373 must be valid as a directory name and may not end with a '/'. 374 375--reference <repository>:: 376 This option is only valid for add and update commands. These 377 commands sometimes need to clone a remote repository. In this case, 378 this option will be passed to the linkgit:git-clone[1] command. 379+ 380*NOTE*: Do *not* use this option unless you have read the note 381for linkgit:git-clone[1]'s `--reference`, `--shared`, and `--dissociate` 382options carefully. 383 384--dissociate:: 385 This option is only valid for add and update commands. These 386 commands sometimes need to clone a remote repository. In this case, 387 this option will be passed to the linkgit:git-clone[1] command. 388+ 389*NOTE*: see the NOTE for the `--reference` option. 390 391--recursive:: 392 This option is only valid for foreach, update, status and sync commands. 393 Traverse submodules recursively. The operation is performed not 394 only in the submodules of the current repo, but also 395 in any nested submodules inside those submodules (and so on). 396 397--depth:: 398 This option is valid for add and update commands. Create a 'shallow' 399 clone with a history truncated to the specified number of revisions. 400 See linkgit:git-clone[1] 401 402--[no-]recommend-shallow:: 403 This option is only valid for the update command. 404 The initial clone of a submodule will use the recommended 405 `submodule.<name>.shallow` as provided by the `.gitmodules` file 406 by default. To ignore the suggestions use `--no-recommend-shallow`. 407 408-j <n>:: 409--jobs <n>:: 410 This option is only valid for the update command. 411 Clone new submodules in parallel with as many jobs. 412 Defaults to the `submodule.fetchJobs` option. 413 414<path>...:: 415 Paths to submodule(s). When specified this will restrict the command 416 to only operate on the submodules found at the specified paths. 417 (This argument is required with add). 418 419FILES 420----- 421When initializing submodules, a `.gitmodules` file in the top-level directory 422of the containing repository is used to find the url of each submodule. 423This file should be formatted in the same way as `$GIT_DIR/config`. The key 424to each submodule url is "submodule.$name.url". See linkgit:gitmodules[5] 425for details. 426 427SEE ALSO 428-------- 429linkgit:gitsubmodules[7], linkgit:gitmodules[5]. 430 431GIT 432--- 433Part of the linkgit:git[1] suite