<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.10" />
<title>gitsubmodules(7)</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="manpage">
<div id="header">
<h1>
gitsubmodules(7) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>gitsubmodules -
   mounting one repository inside another
</p>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="literalblock">
<div class="content">
<pre><code>.gitmodules, $GIT_DIR/config</code></pre>
</div></div>
<div class="listingblock">
<div class="content">
<pre><code>git submodule
git &lt;command&gt; --recurse-submodules</code></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>A submodule is a repository embedded inside another repository.
The submodule has its own history; the repository it is embedded
in is called a superproject.</p></div>
<div class="paragraph"><p>On the filesystem, a submodule usually (but not always - see FORMS below)
consists of (i) a Git directory located under the <code>$GIT_DIR/modules/</code>
directory of its superproject, (ii) a working directory inside the
superproject&#8217;s working directory, and a <code>.git</code> file at the root of
the submodule&#8217;s working directory pointing to (i).</p></div>
<div class="paragraph"><p>Assuming the submodule has a Git directory at <code>$GIT_DIR/modules/foo/</code>
and a working directory at <code>path/to/bar/</code>, the superproject tracks the
submodule via a <code>gitlink</code> entry in the tree at <code>path/to/bar</code> and an entry
in its <code>.gitmodules</code> file (see <a href="gitmodules.html">gitmodules(5)</a>) of the form
<code>submodule.foo.path = path/to/bar</code>.</p></div>
<div class="paragraph"><p>The <code>gitlink</code> entry contains the object name of the commit that the
superproject expects the submodule&#8217;s working directory to be at.</p></div>
<div class="paragraph"><p>The section <code>submodule.foo.*</code> in the <code>.gitmodules</code> file gives additional
hints to Git&#8217;s porcelain layer. For example, the <code>submodule.foo.url</code>
setting specifies where to obtain the submodule.</p></div>
<div class="paragraph"><p>Submodules can be used for at least two different use cases:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
Using another project while maintaining independent history.
  Submodules allow you to contain the working tree of another project
  within your own working tree while keeping the history of both
  projects separate. Also, since submodules are fixed to an arbitrary
  version, the other project can be independently developed without
  affecting the superproject, allowing the superproject project to
  fix itself to new versions only when desired.
</p>
</li>
<li>
<p>
Splitting a (logically single) project into multiple
   repositories and tying them back together. This can be used to
   overcome current limitations of Git&#8217;s implementation to have
   finer grained access:
</p>
<div class="ulist"><ul>
<li>
<p>
Size of the Git repository:
      In its current form Git scales up poorly for large repositories containing
      content that is not compressed by delta computation between trees.
      For example, you can use submodules to hold large binary assets
      and these repositories can be shallowly cloned such that you do not
      have a large history locally.
</p>
</li>
<li>
<p>
Transfer size:
      In its current form Git requires the whole working tree present. It
      does not allow partial trees to be transferred in fetch or clone.
      If the project you work on consists of multiple repositories tied
      together as submodules in a superproject, you can avoid fetching the
      working trees of the repositories you are not interested in.
</p>
</li>
<li>
<p>
Access control:
      By restricting user access to submodules, this can be used to implement
      read/write policies for different users.
</p>
</li>
</ul></div>
</li>
</ol></div>
</div>
</div>
<div class="sect1">
<h2 id="_the_configuration_of_submodules">The configuration of submodules</h2>
<div class="sectionbody">
<div class="paragraph"><p>Submodule operations can be configured using the following mechanisms
(from highest to lowest precedence):</p></div>
<div class="ulist"><ul>
<li>
<p>
The command line for those commands that support taking submodules
   as part of their pathspecs. Most commands have a boolean flag
   <code>--recurse-submodules</code> which specify whether to recurse into submodules.
   Examples are <code>grep</code> and <code>checkout</code>.
   Some commands take enums, such as <code>fetch</code> and <code>push</code>, where you can
   specify how submodules are affected.
</p>
</li>
<li>
<p>
The configuration inside the submodule. This includes <code>$GIT_DIR/config</code>
   in the submodule, but also settings in the tree such as a <code>.gitattributes</code>
   or <code>.gitignore</code> files that specify behavior of commands inside the
   submodule.
</p>
<div class="paragraph"><p>For example an effect from the submodule&#8217;s <code>.gitignore</code> file
would be observed when you run <code>git status --ignore-submodules=none</code> in
the superproject. This collects information from the submodule&#8217;s working
directory by running <code>status</code> in the submodule while paying attention
to the <code>.gitignore</code> file of the submodule.</p></div>
<div class="paragraph"><p>The submodule&#8217;s <code>$GIT_DIR/config</code> file would come into play when running
<code>git push --recurse-submodules=check</code> in the superproject, as this would
check if the submodule has any changes not published to any remote. The
remotes are configured in the submodule as usual in the <code>$GIT_DIR/config</code>
file.</p></div>
</li>
<li>
<p>
The configuration file <code>$GIT_DIR/config</code> in the superproject.
   Git only recurses into active submodules (see "ACTIVE SUBMODULES"
   section below).
</p>
<div class="paragraph"><p>If the submodule is not yet initialized, then the configuration
inside the submodule does not exist yet, so where to
obtain the submodule from is configured here for example.</p></div>
</li>
<li>
<p>
The <code>.gitmodules</code> file inside the superproject. A project usually
   uses this file to suggest defaults for the upstream collection
   of repositories for the mapping that is required between a
   submodule&#8217;s name and its path.
</p>
<div class="paragraph"><p>This file mainly serves as the mapping between the name and path of submodules
in the superproject, such that the submodule&#8217;s Git directory can be
located.</p></div>
<div class="paragraph"><p>If the submodule has never been initialized, this is the only place
where submodule configuration is found. It serves as the last fallback
to specify where to obtain the submodule from.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_forms">FORMS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Submodules can take the following forms:</p></div>
<div class="ulist"><ul>
<li>
<p>
The basic form described in DESCRIPTION with a Git directory,
a working directory, a <code>gitlink</code>, and a <code>.gitmodules</code> entry.
</p>
</li>
<li>
<p>
"Old-form" submodule: A working directory with an embedded
<code>.git</code> directory, and the tracking <code>gitlink</code> and <code>.gitmodules</code> entry in
the superproject. This is typically found in repositories generated
using older versions of Git.
</p>
<div class="paragraph"><p>It is possible to construct these old form repositories manually.</p></div>
<div class="paragraph"><p>When deinitialized or deleted (see below), the submodule&#8217;s Git
directory is automatically moved to <code>$GIT_DIR/modules/&lt;name&gt;/</code>
of the superproject.</p></div>
</li>
<li>
<p>
Deinitialized submodule: A <code>gitlink</code>, and a <code>.gitmodules</code> entry,
but no submodule working directory. The submodule&#8217;s Git directory
may be there as after deinitializing the Git directory is kept around.
The directory which is supposed to be the working directory is empty instead.
</p>
<div class="paragraph"><p>A submodule can be deinitialized by running <code>git submodule deinit</code>.
Besides emptying the working directory, this command only modifies
the superproject&#8217;s <code>$GIT_DIR/config</code> file, so the superproject&#8217;s history
is not affected. This can be undone using <code>git submodule init</code>.</p></div>
</li>
<li>
<p>
Deleted submodule: A submodule can be deleted by running
<code>git rm &lt;submodule path&gt; &amp;&amp; git commit</code>. This can be undone
using <code>git revert</code>.
</p>
<div class="paragraph"><p>The deletion removes the superproject&#8217;s tracking data, which are
both the <code>gitlink</code> entry and the section in the <code>.gitmodules</code> file.
The submodule&#8217;s working directory is removed from the file
system, but the Git directory is kept around as it to make it
possible to checkout past commits without requiring fetching
from another repository.</p></div>
<div class="paragraph"><p>To completely remove a submodule, manually delete
<code>$GIT_DIR/modules/&lt;name&gt;/</code>.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_active_submodules">ACTIVE SUBMODULES</h2>
<div class="sectionbody">
<div class="paragraph"><p>A submodule is considered active,</p></div>
<div class="olist loweralpha"><ol class="loweralpha">
<li>
<p>
if <code>submodule.&lt;name&gt;.active</code> is set to <code>true</code>
</p>
<div class="paragraph"><p>or</p></div>
</li>
<li>
<p>
if the submodule&#8217;s path matches the pathspec in <code>submodule.active</code>
</p>
<div class="paragraph"><p>or</p></div>
</li>
<li>
<p>
if <code>submodule.&lt;name&gt;.url</code> is set.
</p>
</li>
</ol></div>
<div class="paragraph"><p>and these are evaluated in this order.</p></div>
<div class="paragraph"><p>For example:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>[submodule "foo"]
  active = false
  url = https://example.org/foo
[submodule "bar"]
  active = true
  url = https://example.org/bar
[submodule "baz"]
  url = https://example.org/baz</code></pre>
</div></div>
<div class="paragraph"><p>In the above config only the submodule <em>bar</em> and <em>baz</em> are active,
<em>bar</em> due to (a) and <em>baz</em> due to (c). <em>foo</em> is inactive because
(a) takes precedence over (c)</p></div>
<div class="paragraph"><p>Note that (c) is a historical artefact and will be ignored if the
(a) and (b) specify that the submodule is not active. In other words,
if we have a <code>submodule.&lt;name&gt;.active</code> set to <code>false</code> or if the
submodule&#8217;s path is excluded in the pathspec in <code>submodule.active</code>, the
url doesn&#8217;t matter whether it is present or not. This is illustrated in
the example that follows.</p></div>
<div class="literalblock">
<div class="content">
<pre><code>[submodule "foo"]
  active = true
  url = https://example.org/foo
[submodule "bar"]
  url = https://example.org/bar
[submodule "baz"]
  url = https://example.org/baz
[submodule "bob"]
  ignore = true
[submodule]
  active = b*
  active = :(exclude) baz</code></pre>
</div></div>
<div class="paragraph"><p>In here all submodules except <em>baz</em> (foo, bar, bob) are active.
<em>foo</em> due to its own active flag and all the others due to the
submodule active pathspec, which specifies that any submodule
starting with <em>b</em> except <em>baz</em> are also active, regardless of the
presence of the .url field.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_workflow_for_a_third_party_library">Workflow for a third party library</h2>
<div class="sectionbody">
<div class="literalblock">
<div class="content">
<pre><code># add a submodule
git submodule add &lt;url&gt; &lt;path&gt;</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># occasionally update the submodule to a new version:
git -C &lt;path&gt; checkout &lt;new version&gt;
git add &lt;path&gt;
git commit -m "update submodule to new version"</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># See the list of submodules in a superproject
git submodule status</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># See FORMS on removing submodules</code></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_workflow_for_an_artificially_split_repo">Workflow for an artificially split repo</h2>
<div class="sectionbody">
<div class="literalblock">
<div class="content">
<pre><code># Enable recursion for relevant commands, such that
# regular commands recurse into submodules by default
git config --global submodule.recurse true</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># Unlike the other commands below clone still needs
# its own recurse flag:
git clone --recurse &lt;URL&gt; &lt;directory&gt;
cd &lt;directory&gt;</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># Get to know the code:
git grep foo
git ls-files</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># Get new code
git fetch
git pull --rebase</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code># change worktree
git checkout
git reset</code></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_implementation_details">Implementation details</h2>
<div class="sectionbody">
<div class="paragraph"><p>When cloning or pulling a repository containing submodules the submodules
will not be checked out by default; You can instruct <em>clone</em> to recurse
into submodules. The <em>init</em> and <em>update</em> subcommands of <em>git submodule</em>
will maintain submodules checked out and at an appropriate revision in
your working tree. Alternatively you can set <em>submodule.recurse</em> to have
<em>checkout</em> recursing into submodules.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="git-submodule.html">git-submodule(1)</a>, <a href="gitmodules.html">gitmodules(5)</a>.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_git">GIT</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated
 2018-10-30 00:33:48 PDT
</div>
</div>
</body>
</html>
