Code

Merge branch 'maint'
[git.git] / Documentation / git-submodule.txt
index 0ec85742ddc1c360d066659fb562898a259e48f7..b72964947afcc39af3b97c5b9eeb1969b44e0d05 100644 (file)
@@ -15,7 +15,8 @@ SYNOPSIS
 'git submodule' [--quiet] init [--] [<path>...]
 'git submodule' [--quiet] update [--init] [-N|--no-fetch] [--rebase]
              [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
 'git submodule' [--quiet] init [--] [<path>...]
 'git submodule' [--quiet] update [--init] [-N|--no-fetch] [--rebase]
              [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
-'git submodule' [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
+'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
+             [commit] [--] [<path>...]
 'git submodule' [--quiet] foreach [--recursive] <command>
 'git submodule' [--quiet] sync [--] [<path>...]
 
 'git submodule' [--quiet] foreach [--recursive] <command>
 'git submodule' [--quiet] sync [--] [<path>...]
 
@@ -78,7 +79,12 @@ to exist in the superproject. If <path> is not given, the
 <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> 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. If the superproject doesn't have an origin configured
+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.
 +
 the superproject is its own authoritative upstream and the current
 working directory is used instead.
 +
@@ -108,12 +114,19 @@ status::
        repository and `U` if the submodule has merge conflicts.
        This command is the default command for 'git submodule'.
 +
        repository and `U` if the submodule has merge conflicts.
        This command is the default command for 'git submodule'.
 +
-If '--recursive' is specified, this command will recurse into nested
+If `--recursive` is specified, this command will recurse into nested
 submodules, and show their status as well.
 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, i.e. register each submodule name
        and url found in .gitmodules into .git/config.
 
 init::
        Initialize the submodules, i.e. register each submodule name
        and url found in .gitmodules into .git/config.
+       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
        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
@@ -125,26 +138,33 @@ init::
 update::
        Update the registered submodules, i.e. clone missing submodules and
        checkout the commit specified in the index of the containing repository.
 update::
        Update the registered submodules, i.e. clone missing submodules and
        checkout the commit specified in the index of the containing repository.
-       This will make the submodules HEAD be detached unless '--rebase' or
-       '--merge' is specified or the key `submodule.$name.update` is set to
-       `rebase` or `merge`.
+       This will make the submodules HEAD be detached unless `--rebase` or
+       `--merge` is specified or the key `submodule.$name.update` is set to
+       `rebase`, `merge` or `none`.
 +
 If the submodule is not yet initialized, and you just want to use the
 setting as stored in .gitmodules, you can automatically initialize the
 +
 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.
+submodule with the `--init` option.
 +
 +
-If '--recursive' is specified, this command will recurse into the
+If `--recursive` is specified, this command will recurse into the
 registered submodules, and update any nested submodules within.
 registered submodules, and update any nested submodules within.
++
+If the configuration key `submodule.$name.update` is set to `none` the
+submodule with name `$name` will not be updated by default. This can be
+overriden by adding `--checkout` to the command.
 
 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
 
 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
+       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
        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
+       (this option doesn't allow to use the `--cached` option or to provide an
        explicit commit).
        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.
 
 foreach::
        Evaluates an arbitrary shell command in each checked out submodule.
@@ -155,9 +175,9 @@ foreach::
        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
        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
+       ignored by this command. Unless given `--quiet`, foreach prints the name
        of each submodule before evaluating the command.
        of each submodule before evaluating the command.
-       If --recursive is given, submodules are traversed recursively (i.e.
+       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 '|| :'
        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 '|| :'
@@ -237,13 +257,18 @@ OPTIONS
        If the key `submodule.$name.update` is set to `rebase`, this option is
        implicit.
 
        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.
+
 --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
 --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.
+for linkgit:git-clone[1]'s `--reference` and `--shared` options carefully.
 
 --recursive::
        This option is only valid for foreach, update and status commands.
 
 --recursive::
        This option is only valid for foreach, update and status commands.