1 Git Protocol Capabilities
 
   2 =========================
 
   4 Servers SHOULD support all capabilities defined in this document.
 
   6 On the very first line of the initial server response of either
 
   7 receive-pack and upload-pack the first reference is followed by
 
   8 a NUL byte and then a list of space delimited server capabilities.
 
   9 These allow the server to declare what it can and cannot support
 
  12 Client will then send a space separated list of capabilities it wants
 
  13 to be in effect. The client MUST NOT ask for capabilities the server
 
  14 did not say it supports.
 
  16 Server MUST diagnose and abort if capabilities it does not understand
 
  17 was sent.  Server MUST NOT ignore capabilities that client requested
 
  18 and server advertised.  As a consequence of these rules, server MUST
 
  19 NOT advertise capabilities it does not understand.
 
  21 The 'report-status', 'delete-refs', 'quiet', and 'push-cert' capabilities
 
  22 are sent and recognized by the receive-pack (push to server) process.
 
  24 The 'ofs-delta' and 'side-band-64k' capabilities are sent and recognized
 
  25 by both upload-pack and receive-pack protocols.  The 'agent' capability
 
  26 may optionally be sent in both protocols.
 
  28 All other capabilities are only recognized by the upload-pack (fetch
 
  34 The 'multi_ack' capability allows the server to return "ACK obj-id
 
  35 continue" as soon as it finds a commit that it can use as a common
 
  36 base, between the client's wants and the client's have set.
 
  38 By sending this early, the server can potentially head off the client
 
  39 from walking any further down that particular branch of the client's
 
  40 repository history.  The client may still need to walk down other
 
  41 branches, sending have lines for those, until the server has a
 
  42 complete cut across the DAG, or the client has said "done".
 
  44 Without multi_ack, a client sends have lines in --date-order until
 
  45 the server has found a common base.  That means the client will send
 
  46 have lines that are already known by the server to be common, because
 
  47 they overlap in time with another branch that the server hasn't found
 
  50 For example suppose the client has commits in caps that the server
 
  51 doesn't and the server has commits in lower case that the client
 
  52 doesn't, as in the following diagram:
 
  54        +---- u ---------------------- x
 
  57     a -- b -- c -- d -- E -- F
 
  61 If the client wants x,y and starts out by saying have F,S, the server
 
  62 doesn't know what F,S is.  Eventually the client says "have d" and
 
  63 the server sends "ACK d continue" to let the client know to stop
 
  64 walking down that line (so don't send c-b-a), but it's not done yet,
 
  65 it needs a base for x. The client keeps going with S-R-Q, until a
 
  66 gets reached, at which point the server has a clear base and it all
 
  69 Without multi_ack the client would have sent that c-b-a chain anyway,
 
  70 interleaved with S-R-Q.
 
  74 This is an extension of multi_ack that permits client to better
 
  75 understand the server's in-memory state. See pack-protocol.txt,
 
  76 section "Packfile Negotiation" for more information.
 
  80 This capability should only be used with the smart HTTP protocol. If
 
  81 multi_ack_detailed and no-done are both present, then the sender is
 
  82 free to immediately send a pack following its first "ACK obj-id ready"
 
  85 Without no-done in the smart HTTP protocol, the server session would
 
  86 end and the client has to make another trip to send "done" before
 
  87 the server can send the pack. no-done removes the last round and
 
  88 thus slightly reduces latency.
 
  93 A thin pack is one with deltas which reference base objects not
 
  94 contained within the pack (but are known to exist at the receiving
 
  95 end). This can reduce the network traffic significantly, but it
 
  96 requires the receiving end to know how to "thicken" these packs by
 
  97 adding the missing bases to the pack.
 
  99 The upload-pack server advertises 'thin-pack' when it can generate
 
 100 and send a thin pack. A client requests the 'thin-pack' capability
 
 101 when it understands how to "thicken" it, notifying the server that
 
 102 it can receive such a pack. A client MUST NOT request the
 
 103 'thin-pack' capability if it cannot turn a thin pack into a
 
 106 Receive-pack, on the other hand, is assumed by default to be able to
 
 107 handle thin packs, but can ask the client not to use the feature by
 
 108 advertising the 'no-thin' capability. A client MUST NOT send a thin
 
 109 pack if the server advertises the 'no-thin' capability.
 
 111 The reasons for this asymmetry are historical. The receive-pack
 
 112 program did not exist until after the invention of thin packs, so
 
 113 historically the reference implementation of receive-pack always
 
 114 understood thin packs. Adding 'no-thin' later allowed receive-pack
 
 115 to disable the feature in a backwards-compatible manner.
 
 118 side-band, side-band-64k
 
 119 ------------------------
 
 121 This capability means that server can send, and client understand multiplexed
 
 122 progress reports and error info interleaved with the packfile itself.
 
 124 These two options are mutually exclusive. A modern client always
 
 125 favors 'side-band-64k'.
 
 127 Either mode indicates that the packfile data will be streamed broken
 
 128 up into packets of up to either 1000 bytes in the case of 'side_band',
 
 129 or 65520 bytes in the case of 'side_band_64k'. Each packet is made up
 
 130 of a leading 4-byte pkt-line length of how much data is in the packet,
 
 131 followed by a 1-byte stream code, followed by the actual data.
 
 133 The stream code can be one of:
 
 136  2 - progress messages
 
 137  3 - fatal error message just before stream aborts
 
 139 The "side-band-64k" capability came about as a way for newer clients
 
 140 that can handle much larger packets to request packets that are
 
 141 actually crammed nearly full, while maintaining backward compatibility
 
 142 for the older clients.
 
 144 Further, with side-band and its up to 1000-byte messages, it's actually
 
 145 999 bytes of payload and 1 byte for the stream code. With side-band-64k,
 
 146 same deal, you have up to 65519 bytes of data and 1 byte for the stream
 
 149 The client MUST send only maximum of one of "side-band" and "side-
 
 150 band-64k".  Server MUST diagnose it as an error if client requests
 
 156 Server can send, and client understand PACKv2 with delta referring to
 
 157 its base by position in pack rather than by an obj-id.  That is, they can
 
 158 send/read OBJ_OFS_DELTA (aka type 6) in a packfile.
 
 163 The server may optionally send a capability of the form `agent=X` to
 
 164 notify the client that the server is running version `X`. The client may
 
 165 optionally return its own agent string by responding with an `agent=Y`
 
 166 capability (but it MUST NOT do so if the server did not mention the
 
 167 agent capability). The `X` and `Y` strings may contain any printable
 
 168 ASCII characters except space (i.e., the byte range 32 < x < 127), and
 
 169 are typically of the form "package/version" (e.g., "git/1.8.3.1"). The
 
 170 agent strings are purely informative for statistics and debugging
 
 171 purposes, and MUST NOT be used to programatically assume the presence
 
 172 or absence of particular features.
 
 177 This capability adds "deepen", "shallow" and "unshallow" commands to
 
 178 the  fetch-pack/upload-pack protocol so clients can request shallow
 
 184 The client was started with "git clone -q" or something, and doesn't
 
 185 want that side band 2.  Basically the client just says "I do not
 
 186 wish to receive stream 2 on sideband, so do not send it to me, and if
 
 187 you did, I will drop it on the floor anyway".  However, the sideband
 
 188 channel 3 is still used for error responses.
 
 193 The 'include-tag' capability is about sending annotated tags if we are
 
 194 sending objects they point to.  If we pack an object to the client, and
 
 195 a tag object points exactly at that object, we pack the tag object too.
 
 196 In general this allows a client to get all new annotated tags when it
 
 197 fetches a branch, in a single network connection.
 
 199 Clients MAY always send include-tag, hardcoding it into a request when
 
 200 the server advertises this capability. The decision for a client to
 
 201 request include-tag only has to do with the client's desires for tag
 
 202 data, whether or not a server had advertised objects in the
 
 203 refs/tags/* namespace.
 
 205 Servers MUST pack the tags if their referrant is packed and the client
 
 206 has requested include-tags.
 
 208 Clients MUST be prepared for the case where a server has ignored
 
 209 include-tag and has not actually sent tags in the pack.  In such
 
 210 cases the client SHOULD issue a subsequent fetch to acquire the tags
 
 211 that include-tag would have otherwise given the client.
 
 213 The server SHOULD send include-tag, if it supports it, regardless
 
 214 of whether or not there are tags available.
 
 219 The receive-pack process can receive a 'report-status' capability,
 
 220 which tells it that the client wants a report of what happened after
 
 221 a packfile upload and reference update.  If the pushing client requests
 
 222 this capability, after unpacking and updating references the server
 
 223 will respond with whether the packfile unpacked successfully and if
 
 224 each reference was updated successfully.  If any of those were not
 
 225 successful, it will send back an error message.  See pack-protocol.txt
 
 226 for example messages.
 
 231 If the server sends back the 'delete-refs' capability, it means that
 
 232 it is capable of accepting a zero-id value as the target
 
 233 value of a reference update.  It is not sent back by the client, it
 
 234 simply informs the client that it can be sent zero-id values
 
 235 to delete references.
 
 240 If the receive-pack server advertises the 'quiet' capability, it is
 
 241 capable of silencing human-readable progress output which otherwise may
 
 242 be shown when processing the received pack. A send-pack client should
 
 243 respond with the 'quiet' capability to suppress server-side progress
 
 244 reporting if the local progress reporting is also being suppressed
 
 245 (e.g., via `push -q`, or if stderr does not go to a tty).
 
 247 allow-tip-sha1-in-want
 
 248 ----------------------
 
 250 If the upload-pack server advertises this capability, fetch-pack may
 
 251 send "want" lines with SHA-1s that exist at the server but are not
 
 252 advertised by upload-pack.
 
 257 The receive-pack server that advertises this capability is willing
 
 258 to accept a signed push certificate, and asks the <nonce> to be
 
 259 included in the push certificate.  A send-pack client MUST NOT
 
 260 send a push-cert packet unless the receive-pack server advertises