<!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.9" />
<title>gitremote-helpers(1)</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>
gitremote-helpers(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>gitremote-helpers -
   Helper programs to interact with remote repositories
</p>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
<pre class="content"><em>git remote-&lt;transport&gt;</em> &lt;repository&gt; [&lt;URL&gt;]</pre>
<div class="attribution">
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>Remote helper programs are normally not used directly by end users,
but they are invoked by Git when it needs to interact with remote
repositories Git does not support natively.  A given helper will
implement a subset of the capabilities documented here. When Git
needs to interact with a repository using a remote helper, it spawns
the helper as an independent process, sends commands to the helper&#8217;s
standard input, and expects results from the helper&#8217;s standard
output. Because a remote helper runs as an independent process from
Git, there is no need to re-link Git to add a new helper, nor any
need to link the helper with the implementation of Git.</p></div>
<div class="paragraph"><p>Every helper must support the "capabilities" command, which Git
uses to determine what other commands the helper will accept.  Those
other commands can be used to discover and update remote refs,
transport objects between the object database and the remote repository,
and update the local object store.</p></div>
<div class="paragraph"><p>Git comes with a "curl" family of remote helpers, that handle various
transport protocols, such as <em>git-remote-http</em>, <em>git-remote-https</em>,
<em>git-remote-ftp</em> and <em>git-remote-ftps</em>. They implement the capabilities
<em>fetch</em>, <em>option</em>, and <em>push</em>.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_invocation">INVOCATION</h2>
<div class="sectionbody">
<div class="paragraph"><p>Remote helper programs are invoked with one or (optionally) two
arguments. The first argument specifies a remote repository as in Git;
it is either the name of a configured remote or a URL. The second
argument specifies a URL; it is usually of the form
<em>&lt;transport&gt;://&lt;address&gt;</em>, but any arbitrary string is possible.
The <code>GIT_DIR</code> environment variable is set up for the remote helper
and can be used to determine where to store additional data or from
which directory to invoke auxiliary Git commands.</p></div>
<div class="paragraph"><p>When Git encounters a URL of the form <em>&lt;transport&gt;://&lt;address&gt;</em>, where
<em>&lt;transport&gt;</em> is a protocol that it cannot handle natively, it
automatically invokes <em>git remote-&lt;transport&gt;</em> with the full URL as
the second argument. If such a URL is encountered directly on the
command line, the first argument is the same as the second, and if it
is encountered in a configured remote, the first argument is the name
of that remote.</p></div>
<div class="paragraph"><p>A URL of the form <em>&lt;transport&gt;::&lt;address&gt;</em> explicitly instructs Git to
invoke <em>git remote-&lt;transport&gt;</em> with <em>&lt;address&gt;</em> as the second
argument. If such a URL is encountered directly on the command line,
the first argument is <em>&lt;address&gt;</em>, and if it is encountered in a
configured remote, the first argument is the name of that remote.</p></div>
<div class="paragraph"><p>Additionally, when a configured remote has <code>remote.&lt;name&gt;.vcs</code> set to
<em>&lt;transport&gt;</em>, Git explicitly invokes <em>git remote-&lt;transport&gt;</em> with
<em>&lt;name&gt;</em> as the first argument. If set, the second argument is
<code>remote.&lt;name&gt;.url</code>; otherwise, the second argument is omitted.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_input_format">INPUT FORMAT</h2>
<div class="sectionbody">
<div class="paragraph"><p>Git sends the remote helper a list of commands on standard input, one
per line.  The first command is always the <em>capabilities</em> command, in
response to which the remote helper must print a list of the
capabilities it supports (see below) followed by a blank line.  The
response to the capabilities command determines what commands Git uses
in the remainder of the command stream.</p></div>
<div class="paragraph"><p>The command stream is terminated by a blank line.  In some cases
(indicated in the documentation of the relevant commands), this blank
line is followed by a payload in some other protocol (e.g., the pack
protocol), while in others it indicates the end of input.</p></div>
<div class="sect2">
<h3 id="_capabilities">Capabilities</h3>
<div class="paragraph"><p>Each remote helper is expected to support only a subset of commands.
The operations a helper supports are declared to Git in the response
to the <code>capabilities</code> command (see COMMANDS, below).</p></div>
<div class="paragraph"><p>In the following, we list all defined capabilities and for
each we list which commands a helper with that capability
must provide.</p></div>
<div class="sect3">
<h4 id="_capabilities_for_pushing">Capabilities for Pushing</h4>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>connect</em>
</dt>
<dd>
<p>
        Can attempt to connect to <em>git receive-pack</em> (for pushing),
        <em>git upload-pack</em>, etc for communication using
        git&#8217;s native packfile protocol. This
        requires a bidirectional, full-duplex connection.
</p>
<div class="paragraph"><p>Supported commands: <em>connect</em>.</p></div>
</dd>
<dt class="hdlist1">
<em>push</em>
</dt>
<dd>
<p>
        Can discover remote refs and push local commits and the
        history leading up to them to new or existing remote refs.
</p>
<div class="paragraph"><p>Supported commands: <em>list for-push</em>, <em>push</em>.</p></div>
</dd>
<dt class="hdlist1">
<em>export</em>
</dt>
<dd>
<p>
        Can discover remote refs and push specified objects from a
        fast-import stream to remote refs.
</p>
<div class="paragraph"><p>Supported commands: <em>list for-push</em>, <em>export</em>.</p></div>
</dd>
</dl></div>
<div class="paragraph"><p>If a helper advertises <em>connect</em>, Git will use it if possible and
fall back to another capability if the helper requests so when
connecting (see the <em>connect</em> command under COMMANDS).
When choosing between <em>push</em> and <em>export</em>, Git prefers <em>push</em>.
Other frontends may have some other order of preference.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>no-private-update</em>
</dt>
<dd>
<p>
        When using the <em>refspec</em> capability, git normally updates the
        private ref on successful push. This update is disabled when
        the remote-helper declares the capability <em>no-private-update</em>.
</p>
</dd>
</dl></div>
</div>
<div class="sect3">
<h4 id="_capabilities_for_fetching">Capabilities for Fetching</h4>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>connect</em>
</dt>
<dd>
<p>
        Can try to connect to <em>git upload-pack</em> (for fetching),
        <em>git receive-pack</em>, etc for communication using the
        Git&#8217;s native packfile protocol. This
        requires a bidirectional, full-duplex connection.
</p>
<div class="paragraph"><p>Supported commands: <em>connect</em>.</p></div>
</dd>
<dt class="hdlist1">
<em>fetch</em>
</dt>
<dd>
<p>
        Can discover remote refs and transfer objects reachable from
        them to the local object store.
</p>
<div class="paragraph"><p>Supported commands: <em>list</em>, <em>fetch</em>.</p></div>
</dd>
<dt class="hdlist1">
<em>import</em>
</dt>
<dd>
<p>
        Can discover remote refs and output objects reachable from
        them as a stream in fast-import format.
</p>
<div class="paragraph"><p>Supported commands: <em>list</em>, <em>import</em>.</p></div>
</dd>
<dt class="hdlist1">
<em>check-connectivity</em>
</dt>
<dd>
<p>
        Can guarantee that when a clone is requested, the received
        pack is self contained and is connected.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>If a helper advertises <em>connect</em>, Git will use it if possible and
fall back to another capability if the helper requests so when
connecting (see the <em>connect</em> command under COMMANDS).
When choosing between <em>fetch</em> and <em>import</em>, Git prefers <em>fetch</em>.
Other frontends may have some other order of preference.</p></div>
</div>
<div class="sect3">
<h4 id="_miscellaneous_capabilities">Miscellaneous capabilities</h4>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>option</em>
</dt>
<dd>
<p>
        For specifying settings like <code>verbosity</code> (how much output to
        write to stderr) and <code>depth</code> (how much history is wanted in the
        case of a shallow clone) that affect how other commands are
        carried out.
</p>
</dd>
<dt class="hdlist1">
<em>refspec</em> &lt;refspec&gt;
</dt>
<dd>
<p>
        For remote helpers that implement <em>import</em> or <em>export</em>, this capability
        allows the refs to be constrained to a private namespace, instead of
        writing to refs/heads or refs/remotes directly.
        It is recommended that all importers providing the <em>import</em>
        capability use this. It&#8217;s mandatory for <em>export</em>.
</p>
<div class="paragraph"><p>A helper advertising the capability
<code>refspec refs/heads/*:refs/svn/origin/branches/*</code>
is saying that, when it is asked to <code>import refs/heads/topic</code>, the
stream it outputs will update the <code>refs/svn/origin/branches/topic</code>
ref.</p></div>
<div class="paragraph"><p>This capability can be advertised multiple times.  The first
applicable refspec takes precedence.  The left-hand of refspecs
advertised with this capability must cover all refs reported by
the list command.  If no <em>refspec</em> capability is advertised,
there is an implied <code>refspec *:*</code>.</p></div>
<div class="paragraph"><p>When writing remote-helpers for decentralized version control
systems, it is advised to keep a local copy of the repository to
interact with, and to let the private namespace refs point to this
local repository, while the refs/remotes namespace is used to track
the remote repository.</p></div>
</dd>
<dt class="hdlist1">
<em>bidi-import</em>
</dt>
<dd>
<p>
        This modifies the <em>import</em> capability.
        The fast-import commands <em>cat-blob</em> and <em>ls</em> can be used by remote-helpers
        to retrieve information about blobs and trees that already exist in
        fast-import&#8217;s memory. This requires a channel from fast-import to the
        remote-helper.
        If it is advertised in addition to "import", Git establishes a pipe from
        fast-import to the remote-helper&#8217;s stdin.
        It follows that Git and fast-import are both connected to the
        remote-helper&#8217;s stdin. Because Git can send multiple commands to
        the remote-helper it is required that helpers that use <em>bidi-import</em>
        buffer all <em>import</em> commands of a batch before sending data to fast-import.
        This is to prevent mixing commands and fast-import responses on the
        helper&#8217;s stdin.
</p>
</dd>
<dt class="hdlist1">
<em>export-marks</em> &lt;file&gt;
</dt>
<dd>
<p>
        This modifies the <em>export</em> capability, instructing Git to dump the
        internal marks table to &lt;file&gt; when complete. For details,
        read up on <code>--export-marks=&lt;file&gt;</code> in <a href="git-fast-export.html">git-fast-export(1)</a>.
</p>
</dd>
<dt class="hdlist1">
<em>import-marks</em> &lt;file&gt;
</dt>
<dd>
<p>
        This modifies the <em>export</em> capability, instructing Git to load the
        marks specified in &lt;file&gt; before processing any input. For details,
        read up on <code>--import-marks=&lt;file&gt;</code> in <a href="git-fast-export.html">git-fast-export(1)</a>.
</p>
</dd>
<dt class="hdlist1">
<em>signed-tags</em>
</dt>
<dd>
<p>
        This modifies the <em>export</em> capability, instructing Git to pass
        <code>--signed-tags=verbatim</code> to <a href="git-fast-export.html">git-fast-export(1)</a>.  In the
        absence of this capability, Git will use <code>--signed-tags=warn-strip</code>.
</p>
</dd>
</dl></div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_commands">COMMANDS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Commands are given by the caller on the helper&#8217;s standard input, one per line.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>capabilities</em>
</dt>
<dd>
<p>
        Lists the capabilities of the helper, one per line, ending
        with a blank line. Each capability may be preceded with <em>*</em>,
        which marks them mandatory for Git versions using the remote
        helper to understand. Any unknown mandatory capability is a
        fatal error.
</p>
<div class="paragraph"><p>Support for this command is mandatory.</p></div>
</dd>
<dt class="hdlist1">
<em>list</em>
</dt>
<dd>
<p>
        Lists the refs, one per line, in the format "&lt;value&gt; &lt;name&gt;
        [&lt;attr&gt; &#8230;]". The value may be a hex sha1 hash, "@&lt;dest&gt;" for
        a symref, or "?" to indicate that the helper could not get the
        value of the ref. A space-separated list of attributes follows
        the name; unrecognized attributes are ignored. The list ends
        with a blank line.
</p>
<div class="paragraph"><p>See REF LIST ATTRIBUTES for a list of currently defined attributes.</p></div>
<div class="paragraph"><p>Supported if the helper has the "fetch" or "import" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>list for-push</em>
</dt>
<dd>
<p>
        Similar to <em>list</em>, except that it is used if and only if
        the caller wants to the resulting ref list to prepare
        push commands.
        A helper supporting both push and fetch can use this
        to distinguish for which operation the output of <em>list</em>
        is going to be used, possibly reducing the amount
        of work that needs to be performed.
</p>
<div class="paragraph"><p>Supported if the helper has the "push" or "export" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>option</em> &lt;name&gt; &lt;value&gt;
</dt>
<dd>
<p>
        Sets the transport helper option &lt;name&gt; to &lt;value&gt;.  Outputs a
        single line containing one of <em>ok</em> (option successfully set),
        <em>unsupported</em> (option not recognized) or <em>error &lt;msg&gt;</em>
        (option &lt;name&gt; is supported but &lt;value&gt; is not valid
        for it).  Options should be set before other commands,
        and may influence the behavior of those commands.
</p>
<div class="paragraph"><p>See OPTIONS for a list of currently defined options.</p></div>
<div class="paragraph"><p>Supported if the helper has the "option" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>fetch</em> &lt;sha1&gt; &lt;name&gt;
</dt>
<dd>
<p>
        Fetches the given object, writing the necessary objects
        to the database.  Fetch commands are sent in a batch, one
        per line, terminated with a blank line.
        Outputs a single blank line when all fetch commands in the
        same batch are complete. Only objects which were reported
        in the output of <em>list</em> with a sha1 may be fetched this way.
</p>
<div class="paragraph"><p>Optionally may output a <em>lock &lt;file&gt;</em> line indicating a file under
GIT_DIR/objects/pack which is keeping a pack until refs can be
suitably updated.</p></div>
<div class="paragraph"><p>If option <em>check-connectivity</em> is requested, the helper must output
<em>connectivity-ok</em> if the clone is self-contained and connected.</p></div>
<div class="paragraph"><p>Supported if the helper has the "fetch" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>push</em> +&lt;src&gt;:&lt;dst&gt;
</dt>
<dd>
<p>
        Pushes the given local &lt;src&gt; commit or branch to the
        remote branch described by &lt;dst&gt;.  A batch sequence of
        one or more <em>push</em> commands is terminated with a blank line
        (if there is only one reference to push, a single <em>push</em> command
        is followed by a blank line). For example, the following would
        be two batches of <em>push</em>, the first asking the remote-helper
        to push the local ref <em>master</em> to the remote ref <em>master</em> and
        the local <code>HEAD</code> to the remote <em>branch</em>, and the second
        asking to push ref <em>foo</em> to ref <em>bar</em> (forced update requested
        by the <em>+</em>).
</p>
<div class="listingblock">
<div class="content">
<pre><code>push refs/heads/master:refs/heads/master
push HEAD:refs/heads/branch
\n
push +refs/heads/foo:refs/heads/bar
\n</code></pre>
</div></div>
<div class="paragraph"><p>Zero or more protocol options may be entered after the last <em>push</em>
command, before the batch&#8217;s terminating blank line.</p></div>
<div class="paragraph"><p>When the push is complete, outputs one or more <em>ok &lt;dst&gt;</em> or
<em>error &lt;dst&gt; &lt;why&gt;?</em> lines to indicate success or failure of
each pushed ref.  The status report output is terminated by
a blank line.  The option field &lt;why&gt; may be quoted in a C
style string if it contains an LF.</p></div>
<div class="paragraph"><p>Supported if the helper has the "push" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>import</em> &lt;name&gt;
</dt>
<dd>
<p>
        Produces a fast-import stream which imports the current value
        of the named ref. It may additionally import other refs as
        needed to construct the history efficiently. The script writes
        to a helper-specific private namespace. The value of the named
        ref should be written to a location in this namespace derived
        by applying the refspecs from the "refspec" capability to the
        name of the ref.
</p>
<div class="paragraph"><p>Especially useful for interoperability with a foreign versioning
system.</p></div>
<div class="paragraph"><p>Just like <em>push</em>, a batch sequence of one or more <em>import</em> is
terminated with a blank line. For each batch of <em>import</em>, the remote
helper should produce a fast-import stream terminated by a <em>done</em>
command.</p></div>
<div class="paragraph"><p>Note that if the <em>bidi-import</em> capability is used the complete batch
sequence has to be buffered before starting to send data to fast-import
to prevent mixing of commands and fast-import responses on the helper&#8217;s
stdin.</p></div>
<div class="paragraph"><p>Supported if the helper has the "import" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>export</em>
</dt>
<dd>
<p>
        Instructs the remote helper that any subsequent input is
        part of a fast-import stream (generated by <em>git fast-export</em>)
        containing objects which should be pushed to the remote.
</p>
<div class="paragraph"><p>Especially useful for interoperability with a foreign versioning
system.</p></div>
<div class="paragraph"><p>The <em>export-marks</em> and <em>import-marks</em> capabilities, if specified,
affect this command in so far as they are passed on to <em>git
fast-export</em>, which then will load/store a table of marks for
local objects. This can be used to implement for incremental
operations.</p></div>
<div class="paragraph"><p>Supported if the helper has the "export" capability.</p></div>
</dd>
<dt class="hdlist1">
<em>connect</em> &lt;service&gt;
</dt>
<dd>
<p>
        Connects to given service. Standard input and standard output
        of helper are connected to specified service (git prefix is
        included in service name so e.g. fetching uses <em>git-upload-pack</em>
        as service) on remote side. Valid replies to this command are
        empty line (connection established), <em>fallback</em> (no smart
        transport support, fall back to dumb transports) and just
        exiting with error message printed (can&#8217;t connect, don&#8217;t
        bother trying to fall back). After line feed terminating the
        positive (empty) response, the output of service starts. After
        the connection ends, the remote helper exits.
</p>
<div class="paragraph"><p>Supported if the helper has the "connect" capability.</p></div>
</dd>
</dl></div>
<div class="paragraph"><p>If a fatal error occurs, the program writes the error message to
stderr and exits. The caller should expect that a suitable error
message has been printed if the child closes the connection without
completing a valid response for the current command.</p></div>
<div class="paragraph"><p>Additional commands may be supported, as may be determined from
capabilities reported by the helper.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_ref_list_attributes">REF LIST ATTRIBUTES</h2>
<div class="sectionbody">
<div class="paragraph"><p>The <em>list</em> command produces a list of refs in which each ref
may be followed by a list of attributes. The following ref list
attributes are defined.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>unchanged</em>
</dt>
<dd>
<p>
        This ref is unchanged since the last import or fetch, although
        the helper cannot necessarily determine what value that produced.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="paragraph"><p>The following options are defined and (under suitable circumstances)
set by Git if the remote helper has the <em>option</em> capability.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>option verbosity</em> &lt;n&gt;
</dt>
<dd>
<p>
        Changes the verbosity of messages displayed by the helper.
        A value of 0 for &lt;n&gt; means that processes operate
        quietly, and the helper produces only error output.
        1 is the default level of verbosity, and higher values
        of &lt;n&gt; correspond to the number of -v flags passed on the
        command line.
</p>
</dd>
<dt class="hdlist1">
<em>option progress</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Enables (or disables) progress messages displayed by the
        transport helper during a command.
</p>
</dd>
<dt class="hdlist1">
<em>option depth</em> &lt;depth&gt;
</dt>
<dd>
<p>
        Deepens the history of a shallow repository.
</p>
</dd>
<dt class="hdlist1">
'option deepen-since &lt;timestamp&gt;
</dt>
<dd>
<p>
        Deepens the history of a shallow repository based on time.
</p>
</dd>
<dt class="hdlist1">
'option deepen-not &lt;ref&gt;
</dt>
<dd>
<p>
        Deepens the history of a shallow repository excluding ref.
        Multiple options add up.
</p>
</dd>
<dt class="hdlist1">
<em>option deepen-relative {'true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Deepens the history of a shallow repository relative to
        current boundary. Only valid when used with "option depth".
</p>
</dd>
<dt class="hdlist1">
<em>option followtags</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        If enabled the helper should automatically fetch annotated
        tag objects if the object the tag points at was transferred
        during the fetch command.  If the tag is not fetched by
        the helper a second fetch command will usually be sent to
        ask for the tag specifically.  Some helpers may be able to
        use this option to avoid a second network connection.
</p>
</dd>
</dl></div>
<div class="paragraph"><p><em>option dry-run</em> {<em>true</em>|<em>false</em>}:
        If true, pretend the operation completed successfully,
        but don&#8217;t actually change any repository data.  For most
        helpers this only applies to the <em>push</em>, if supported.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>option servpath &lt;c-style-quoted-path&gt;</em>
</dt>
<dd>
<p>
        Sets service path (--upload-pack, --receive-pack etc.) for
        next connect. Remote helper may support this option, but
        must not rely on this option being set before
        connect request occurs.
</p>
</dd>
<dt class="hdlist1">
<em>option check-connectivity</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Request the helper to check connectivity of a clone.
</p>
</dd>
<dt class="hdlist1">
<em>option force</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Request the helper to perform a force update.  Defaults to
        <em>false</em>.
</p>
</dd>
<dt class="hdlist1">
<em>option cloning</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Notify the helper this is a clone request (i.e. the current
        repository is guaranteed empty).
</p>
</dd>
<dt class="hdlist1">
<em>option update-shallow</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Allow to extend .git/shallow if the new refs require it.
</p>
</dd>
<dt class="hdlist1">
<em>option pushcert</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        GPG sign pushes.
</p>
</dd>
<dt class="hdlist1">
'option push-option &lt;string&gt;
</dt>
<dd>
<p>
        Transmit &lt;string&gt; as a push option. As the a push option
        must not contain LF or NUL characters, the string is not encoded.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="git-remote.html">git-remote(1)</a></p></div>
<div class="paragraph"><p><a href="git-remote-ext.html">git-remote-ext(1)</a></p></div>
<div class="paragraph"><p><a href="git-remote-fd.html">git-remote-fd(1)</a></p></div>
<div class="paragraph"><p><a href="git-remote-testgit.html">git-remote-testgit(1)</a></p></div>
<div class="paragraph"><p><a href="git-fast-import.html">git-fast-import(1)</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 2017-02-15 15:17:51 PST
</div>
</div>
</body>
</html>
