<?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>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>stateless-connect</em>
</dt>
<dd>
<p>
        Experimental; for internal use only.
        Can attempt to connect to a remote server for communication
        using git&#8217;s wire-protocol version 2.  See the documentation
        for the stateless-connect command for more information.
</p>
<div class="paragraph"><p>Supported commands: <em>stateless-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>stateless-connect</em>
</dt>
<dd>
<p>
        Experimental; for internal use only.
        Can attempt to connect to a remote server for communication
        using git&#8217;s wire-protocol version 2.  See the documentation
        for the stateless-connect command for more information.
</p>
<div class="paragraph"><p>Supported commands: <em>stateless-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>
<dt class="hdlist1">
<em>stateless-connect</em> &lt;service&gt;
</dt>
<dd>
<p>
        Experimental; for internal use only.
        Connects to the given remote service for communication using
        git&#8217;s wire-protocol version 2.  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 the service starts.  Messages
        (both request and response) must consist of zero or more
        PKT-LINEs, terminating in a flush packet. The client must not
        expect the server to store any state in between request-response
        pairs.  After the connection ends, the remote helper exits.
</p>
<div class="paragraph"><p>Supported if the helper has the "stateless-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 push option
        must not contain LF or NUL characters, the string is not encoded.
</p>
</dd>
<dt class="hdlist1">
<em>option from-promisor</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Indicate that these objects are being fetched from a promisor.
</p>
</dd>
<dt class="hdlist1">
<em>option no-dependents</em> {<em>true</em>|<em>false</em>}
</dt>
<dd>
<p>
        Indicate that only the objects wanted need to be fetched, not
        their dependents.
</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
 2018-05-08 00:51:20 PDT
</div>
</div>
</body>
</html>
