git-submodule(1)
================

NAME
----
git-submodule - Initialize, update or inspect submodules


SYNOPSIS
--------
[verse]
'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>]
	      [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]
'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...]
'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] deinit [-f|--force] (--all|[--] <path>...)
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
	      [-f|--force] [--rebase|--merge] [--reference <repository>]
	      [--depth <depth>] [--recursive] [--] [<path>...]
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
	      [commit] [--] [<path>...]
'git submodule' [--quiet] foreach [--recursive] <command>
'git submodule' [--quiet] sync [--recursive] [--] [<path>...]


DESCRIPTION
-----------
Inspects, updates and manages submodules.

A submodule allows you to keep another Git repository in a subdirectory
of your repository. The other repository has its own history, which does not
interfere with the history of the current repository. This can be used to
have external dependencies such as third party libraries for example.

When cloning or pulling a repository containing submodules however,
these will not be checked out by default; the 'init' and 'update'
subcommands will maintain submodules checked out and at
appropriate revision in your working tree.

Submodules are composed from a so-called `gitlink` tree entry
in the main repository that refers to a particular commit object
within the inner repository that is completely separate.
A record in the `.gitmodules` (see linkgit:gitmodules[5]) file at the
root of the source tree assigns a logical name to the submodule and
describes the default URL the submodule shall be cloned from.
The logical name can be used for overriding this URL within your
local repository configuration (see 'submodule init').

Submodules are not to be confused with remotes, which are other
repositories of the same project; submodules are meant for
different projects you would like to make part of your source tree,
while the history of the two projects still stays completely
independent and you cannot modify the contents of the submodule
from within the main project.
If you want to merge the project histories and want to treat the
aggregated whole as a single project from then on, you may want to
add a remote for the other project and use the 'subtree' merge strategy,
instead of treating the other project as a submodule. Directories
that come from both projects can be cloned and checked out as a whole
if you choose to go that route.

COMMANDS
--------
add::
	Add the given repository as a submodule at the given path
	to the changeset to be committed next to the current
	project: the current project is termed the "superproject".
+
This requires at least one argument: <repository>. The optional
argument <path> is the relative location for the cloned submodule
to exist in the superproject. If <path> is not given, the
"humanish" part of the source repository is used ("repo" for
"/path/to/repo.git" and "foo" for "host.xz:foo/.git").
The <path> is also used as the submodule's logical name in its
configuration entries unless `--name` is used to specify a logical name.
+
<repository> is the URL of the new submodule's origin repository.
This may be either an absolute URL, or (if it begins with ./
or ../), the location relative to the superproject's origin
repository (Please note that to specify a repository 'foo.git'
which is located right next to a superproject 'bar.git', you'll
have to use '../foo.git' instead of './foo.git' - as one might expect
when following the rules for relative URLs - because the evaluation
of relative URLs in Git is identical to that of relative directories).
If the superproject doesn't have an origin configured
the superproject is its own authoritative upstream and the current
working directory is used instead.
+
<path> is the relative location for the cloned submodule to
exist in the superproject. If <path> does not exist, then the
submodule is created by cloning from the named URL. If <path> does
exist and is already a valid Git repository, then this is added
to the changeset without cloning. This second form is provided
to ease creating a new submodule from scratch, and presumes
the user will later push the submodule to the given URL.
+
In either case, the given URL is recorded into .gitmodules for
use by subsequent users cloning the superproject. If the URL is
given relative to the superproject's repository, the presumption
is the superproject and submodule repositories will be kept
together in the same relative location, and only the
superproject's URL needs to be provided: git-submodule will correctly
locate the submodule using the relative URL in .gitmodules.

status::
	Show the status of the submodules. This will print the SHA-1 of the
	currently checked out commit for each submodule, along with the
	submodule path and the output of 'git describe' for the
	SHA-1. Each SHA-1 will be prefixed with `-` if the submodule is not
	initialized, `+` if the currently checked out submodule commit
	does not match the SHA-1 found in the index of the containing
	repository and `U` if the submodule has merge conflicts.
+
If `--recursive` is specified, this command will recurse into nested
submodules, and show their status as well.
+
If you are only interested in changes of the currently initialized
submodules with respect to the commit recorded in the index or the HEAD,
linkgit:git-status[1] and linkgit:git-diff[1] will provide that information
too (and can also report changes to a submodule's work tree).

init::
	Initialize the submodules recorded in the index (which were
	added and committed elsewhere) by copying submodule
	names and urls from .gitmodules to .git/config.
	Optional <path> arguments limit which submodules will be initialized.
	It will also copy the value of `submodule.$name.update` into
	.git/config.
	The key used in .git/config is `submodule.$name.url`.
	This command does not alter existing information in .git/config.
	You can then customize the submodule clone URLs in .git/config
	for your local setup and proceed to `git submodule update`;
	you can also just use `git submodule update --init` without
	the explicit 'init' step if you do not intend to customize
	any submodule locations.

deinit::
	Unregister the given submodules, i.e. remove the whole
	`submodule.$name` section from .git/config together with their work
	tree. Further calls to `git submodule update`, `git submodule foreach`
	and `git submodule sync` will skip any unregistered submodules until
	they are initialized again, so use this command if you don't want to
	have a local checkout of the submodule in your working tree anymore. If
	you really want to remove a submodule from the repository and commit
	that use linkgit:git-rm[1] instead.
+
When the command is run without pathspec, it errors out,
instead of deinit-ing everything, to prevent mistakes.
+
If `--force` is specified, the submodule's working tree will
be removed even if it contains local modifications.

update::
+
--
Update the registered submodules to match what the superproject
expects by cloning missing submodules and updating the working tree of
the submodules. The "updating" can be done in several ways depending
on command line options and the value of `submodule.<name>.update`
configuration variable. Supported update procedures are:

	checkout;; the commit recorded in the superproject will be
	    checked out in the submodule on a detached HEAD. This is
	    done when `--checkout` option is given, or no option is
	    given, and `submodule.<name>.update` is unset, or if it is
	    set to 'checkout'.
+
If `--force` is specified, the submodule will be checked out (using
`git checkout --force` if appropriate), even if the commit specified
in the index of the containing repository already matches the commit
checked out in the submodule.

	rebase;; the current branch of the submodule will be rebased
	    onto the commit recorded in the superproject. This is done
	    when `--rebase` option is given, or no option is given, and
	    `submodule.<name>.update` is set to 'rebase'.

	merge;; the commit recorded in the superproject will be merged
	    into the current branch in the submodule. This is done
	    when `--merge` option is given, or no option is given, and
	    `submodule.<name>.update` is set to 'merge'.

	custom command;; arbitrary shell command that takes a single
	    argument (the sha1 of the commit recorded in the
	    superproject) is executed. This is done when no option is
	    given, and `submodule.<name>.update` has the form of
	    '!command'.

When no option is given and `submodule.<name>.update` is set to 'none',
the submodule is not updated.

If the submodule is not yet initialized, and you just want to use the
setting as stored in .gitmodules, you can automatically initialize the
submodule with the `--init` option.

If `--recursive` is specified, this command will recurse into the
registered submodules, and update any nested submodules within.
--
summary::
	Show commit summary between the given commit (defaults to HEAD) and
	working tree/index. For a submodule in question, a series of commits
	in the submodule between the given super project commit and the
	index or working tree (switched by `--cached`) are shown. If the option
	`--files` is given, show the series of commits in the submodule between
	the index of the super project and the working tree of the submodule
	(this option doesn't allow to use the `--cached` option or to provide an
	explicit commit).
+
Using the `--submodule=log` option with linkgit:git-diff[1] will provide that
information too.

foreach::
	Evaluates an arbitrary shell command in each checked out submodule.
	The command has access to the variables $name, $path, $sha1 and
	$toplevel:
	$name is the name of the relevant submodule section in .gitmodules,
	$path is the name of the submodule directory relative to the
	superproject, $sha1 is the commit as recorded in the superproject,
	and $toplevel is the absolute path to the top-level of the superproject.
	Any submodules defined in the superproject but not checked out are
	ignored by this command. Unless given `--quiet`, foreach prints the name
	of each submodule before evaluating the command.
	If `--recursive` is given, submodules are traversed recursively (i.e.
	the given shell command is evaluated in nested submodules as well).
	A non-zero return from the command in any submodule causes
	the processing to terminate. This can be overridden by adding '|| :'
	to the end of the command.
+
As an example, +git submodule foreach \'echo $path {backtick}git
rev-parse HEAD{backtick}'+ will show the path and currently checked out
commit for each submodule.

sync::
	Synchronizes submodules' remote URL configuration setting
	to the value specified in .gitmodules. It will only affect those
	submodules which already have a URL entry in .git/config (that is the
	case when they are initialized or freshly added). This is useful when
	submodule URLs change upstream and you need to update your local
	repositories accordingly.
+
"git submodule sync" synchronizes all submodules while
"git submodule sync \-- A" synchronizes submodule "A" only.
+
If `--recursive` is specified, this command will recurse into the
registered submodules, and sync any nested submodules within.

OPTIONS
-------
-q::
--quiet::
	Only print error messages.

--all::
	This option is only valid for the deinit command. Unregister all
	submodules in the working tree.

-b::
--branch::
	Branch of repository to add as submodule.
	The name of the branch is recorded as `submodule.<name>.branch` in
	`.gitmodules` for `update --remote`.

-f::
--force::
	This option is only valid for add, deinit and update commands.
	When running add, allow adding an otherwise ignored submodule path.
	When running deinit the submodule working trees will be removed even
	if they contain local changes.
	When running update (only effective with the checkout procedure),
	throw away local changes in submodules when switching to a
	different commit; and always run a checkout operation in the
	submodule, even if the commit listed in the index of the
	containing repository matches the commit checked out in the
	submodule.

--cached::
	This option is only valid for status and summary commands.  These
	commands typically use the commit found in the submodule HEAD, but
	with this option, the commit stored in the index is used instead.

--files::
	This option is only valid for the summary command. This command
	compares the commit in the index with that in the submodule HEAD
	when this option is used.

-n::
--summary-limit::
	This option is only valid for the summary command.
	Limit the summary size (number of commits shown in total).
	Giving 0 will disable the summary; a negative number means unlimited
	(the default). This limit only applies to modified submodules. The
	size is always limited to 1 for added/deleted/typechanged submodules.

--remote::
	This option is only valid for the update command.  Instead of using
	the superproject's recorded SHA-1 to update the submodule, use the
	status of the submodule's remote-tracking branch.  The remote used
	is branch's remote (`branch.<name>.remote`), defaulting to `origin`.
	The remote branch used defaults to `master`, but the branch name may
	be overridden by setting the `submodule.<name>.branch` option in
	either `.gitmodules` or `.git/config` (with `.git/config` taking
	precedence).
+
This works for any of the supported update procedures (`--checkout`,
`--rebase`, etc.).  The only change is the source of the target SHA-1.
For example, `submodule update --remote --merge` will merge upstream
submodule changes into the submodules, while `submodule update
--merge` will merge superproject gitlink changes into the submodules.
+
In order to ensure a current tracking branch state, `update --remote`
fetches the submodule's remote repository before calculating the
SHA-1.  If you don't want to fetch, you should use `submodule update
--remote --no-fetch`.
+
Use this option to integrate changes from the upstream subproject with
your submodule's current HEAD.  Alternatively, you can run `git pull`
from the submodule, which is equivalent except for the remote branch
name: `update --remote` uses the default upstream repository and
`submodule.<name>.branch`, while `git pull` uses the submodule's
`branch.<name>.merge`.  Prefer `submodule.<name>.branch` if you want
to distribute the default upstream branch with the superproject and
`branch.<name>.merge` if you want a more native feel while working in
the submodule itself.

-N::
--no-fetch::
	This option is only valid for the update command.
	Don't fetch new objects from the remote site.

--checkout::
	This option is only valid for the update command.
	Checkout the commit recorded in the superproject on a detached HEAD
	in the submodule. This is the default behavior, the main use of
	this option is to override `submodule.$name.update` when set to
	a value other than `checkout`.
	If the key `submodule.$name.update` is either not explicitly set or
	set to `checkout`, this option is implicit.

--merge::
	This option is only valid for the update command.
	Merge the commit recorded in the superproject into the current branch
	of the submodule. If this option is given, the submodule's HEAD will
	not be detached. If a merge failure prevents this process, you will
	have to resolve the resulting conflicts within the submodule with the
	usual conflict resolution tools.
	If the key `submodule.$name.update` is set to `merge`, this option is
	implicit.

--rebase::
	This option is only valid for the update command.
	Rebase the current branch onto the commit recorded in the
	superproject. If this option is given, the submodule's HEAD will not
	be detached. If a merge failure prevents this process, you will have
	to resolve these failures with linkgit:git-rebase[1].
	If the key `submodule.$name.update` is set to `rebase`, this option is
	implicit.

--init::
	This option is only valid for the update command.
	Initialize all submodules for which "git submodule init" has not been
	called so far before updating.

--name::
	This option is only valid for the add command. It sets the submodule's
	name to the given string instead of defaulting to its path. The name
	must be valid as a directory name and may not end with a '/'.

--reference <repository>::
	This option is only valid for add and update commands.  These
	commands sometimes need to clone a remote repository. In this case,
	this option will be passed to the linkgit:git-clone[1] command.
+
*NOTE*: Do *not* use this option unless you have read the note
for linkgit:git-clone[1]'s `--reference` and `--shared` options carefully.

--recursive::
	This option is only valid for foreach, update, status and sync commands.
	Traverse submodules recursively. The operation is performed not
	only in the submodules of the current repo, but also
	in any nested submodules inside those submodules (and so on).

--depth::
	This option is valid for add and update commands. Create a 'shallow'
	clone with a history truncated to the specified number of revisions.
	See linkgit:git-clone[1]


<path>...::
	Paths to submodule(s). When specified this will restrict the command
	to only operate on the submodules found at the specified paths.
	(This argument is required with add).

FILES
-----
When initializing submodules, a .gitmodules file in the top-level directory
of the containing repository is used to find the url of each submodule.
This file should be formatted in the same way as `$GIT_DIR/config`. The key
to each submodule url is "submodule.$name.url".  See linkgit:gitmodules[5]
for details.

GIT
---
Part of the linkgit:git[1] suite
