gitmodules(5)
=============

NAME
----
gitmodules - defining submodule properties

SYNOPSIS
--------
$GIT_WORK_DIR/.gitmodules


DESCRIPTION
-----------

The `.gitmodules` file, located in the top-level directory of a git
working tree, is a text file with a syntax matching the requirements
of linkgit:git-config[1].

The file contains one subsection per submodule, and the subsection value
is the name of the submodule. Each submodule section also contains the
following required keys:

submodule.<name>.path::
	Defines the path, relative to the top-level directory of the git
	working tree, where the submodule is expected to be checked out.
	The path name must not end with a `/`. All submodule paths must
	be unique within the .gitmodules file.

submodule.<name>.url::
	Defines an url from where the submodule repository can be cloned.
	This may be either an absolute URL ready to be passed to
	linkgit:git-clone[1] or (if it begins with ./ or ../) a location
	relative to the superproject's origin repository.

submodule.<name>.update::
	Defines what to do when the submodule is updated by the superproject.
	If 'checkout' (the default), the new commit specified in the
	superproject will be checked out in the submodule on a detached HEAD.
	If 'rebase', the current branch of the submodule will be rebased onto
	the commit specified in the superproject. If 'merge', the commit
	specified in the superproject will be merged into the current branch
	in the submodule.
	This config option is overridden if 'git submodule update' is given
	the '--merge' or '--rebase' options.

submodule.<name>.ignore::
	Defines under what circumstances "git status" and the diff family show
	a submodule as modified. When set to "all", it will never be considered
	modified, "dirty" will ignore all changes to the submodules work tree and
	takes only differences between the HEAD of the submodule and the commit
	recorded in the superproject into account. "untracked" will additionally
	let submodules with modified tracked files in their work tree show up.
	Using "none" (the default when this option is not set) also shows
	submodules that have untracked files in their work tree as changed.
	If this option is also present in the submodules entry in .git/config of
	the superproject, the setting there will override the one found in
	.gitmodules.
	Both settings can be overridden on the command line by using the
	"--ignore-submodule" option.


EXAMPLES
--------

Consider the following .gitmodules file:

	[submodule "libfoo"]
		path = include/foo
		url = git://foo.com/git/lib.git

	[submodule "libbar"]
		path = include/bar
		url = git://bar.com/git/lib.git


This defines two submodules, `libfoo` and `libbar`. These are expected to
be checked out in the paths 'include/foo' and 'include/bar', and for both
submodules an url is specified which can be used for cloning the submodules.

SEE ALSO
--------
linkgit:git-submodule[1] linkgit:git-config[1]

DOCUMENTATION
-------------
Documentation by Lars Hjemli <hjemli@gmail.com>

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