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